`
文章列表

java并发编程

一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 public class Test { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); ...

上传文件校验

    博客分类:
  • java
为了防止一些用户将一些病毒文件上传到服务器,我们一般需要对上传的文件做合法性校验, 当时有时候简单的后缀和contentType校验任然还有风险,下面我们一起来讨论一下上传的文件需要做哪些合法性校验。   1、文件后缀校验 这层校验应该说是最基本的校验了,我们不能允许用户上传一些exe、jsp、php、asp、html等可执行的文件。   2、contentType校验 contentType是内容类型,它会告诉浏览器用什么形式、什么编码来读取这个文件。因此文件后缀和contentType有一个对应关系,上传文件的后缀和contentType应该是对应的,如果不对应则上传信息已被 ...
1、jps jps -v //查询java进程pid   2、jstat jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。 jstat -class pid:显示加载class的数量,及所占空间等信息。 jstat -compiler pid:显示VM实时编译的数量等信息。 jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 ...
 logbak 配置 <logger name="com.mybatis" level="DEBUG" />     <logger name="org.apache.ibatis" level="DEBUG" />     <logger name="java.sql.Connection" level="DEBUG" />    
访问者模式   1、定义 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。   2、结构图      抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。 访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。 抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。 元素类:实现抽 ...
模板方法模式   1、定义 定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤   2、结构图     AbstractSort是一个抽象类,将sort方法抽象,showSortResult实现。 ConcreteSort是对AbstractSort的实现,并实现sort方法 3、代码 (1)AbstractSort类   public abstract class AbstractSort { public abstract void sort(int[] nums); public ...
状态模式   1、定义 许一个对象的内部状态改变时改变它的行为。   2、结构图   Light :环境,也称为上下文,用来定义客户感兴趣的接口,同时维护一个具体处理当前状态的实例对象。 LightState:状态接口,用来封装与上下文的一个特定状态所对应的行为。 On/OffState:具体实现状态的处理类,每个实现一个跟上下文相关联的状态的具体处理。   3、代码 (1)light类 public class Light { public Light(LightState state) { super(); this.state = ...
备忘录模式   1、定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。   2、结构图   Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。 Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象 ...
迭代器模式   1、定义 提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。   2、结构图   抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。 具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。 抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法is ...
解释器模式   1、定义 给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。   2、结构图   抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。具体解释任务由它的各个实现类来完成,具体的解释器分别由终结符解释器TerminalExpression和非终结符解释器NonterminalExpression完成。 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算 ...
中介者模式   1、定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。   2、结构图    抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由 ...
命令模式   1、定义 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作    2、结构图     ●  客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。   ●  命令(Command)角色:声明了一个给所有具体命令类的抽象接口。   ●  具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。   ●  请求者(Invoker)角色:负责调用命 ...
责任量模式   1、定义 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。   2、结构图   3、代码 (1)过滤器接口filter public interface Filter { public void doFilter(FilterChain chain); }   (2)日志过滤器LogFilter   pu ...
抽象工厂模式   1、定义 多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。   2、结构图 产品类接口:ProductA、ProductB定义两个产品接口 产品实现:ProductA1、ProductA2、ProductB1、ProductB2 抽象工厂接口:AbstractFactory 工厂实现:ConcreteFactory1,ConcreteFactory2 3、代码 (1)产品A接口 public interface ProductA { }   (2)产品B接口 ...
建造者模式   1、定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。   2、结构部    产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。 建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务 ...
Global site tag (gtag.js) - Google Analytics