`
文章列表
OpenSessionInViewFilter的作用是延时session的关闭,直到request结束,这样做的目地是防止hibenrate lasy load出现异常的情况。如果isSingleSession设置成true,表示一个request的生命周期内,都使用一个session。false表示调用多少dao层的方法就用多少个session,但是这些session会延时到一个request结束时才关闭。   同时会默认设置flush mode(如果没有设置flushMode)为never的方式,也就是不会更新状态到数据库。当事务配置为required或者new等事务环境中,有数据需 ...
DOM和SAX是应用中操纵XML文档的两种主要API,它们分别解释如下: DOM,即Document Object Model,中文叫文档对象模型。DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的、用于内存存储和操作层次化文档的模型。当按 照DOM模型解析XML文档时,就会在内存中构造一个对应的DOM树,它可以用于不同节点之间的遍历。然而,在遍历之前必须先完成DOM树的构造。因此, 在处理规模较大的XML文档时就很耗内存,占用资源较多。尤其是只需要操作文档中一小部分时效率很低。 SAX,即Simple API for XML的简称,中文叫XML简单应用程序接口。 ...
Tomcat中的类加载策略和JDK中的委托模型略有不同。Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的,ClassLoader结构如下:              Bootstrap                    |               System                   |             Common           /                \  Catalina          Shared                       /  ... ...    \ ...
StringBuffer可变String不可变的真正原因   String和StringBuffer都是final类,他们生成的对象在堆中都是不可变的,在他们内部都是靠属性char数组实现的, 那为什么StringBuffer可以在对象中追加字符串呢?呵呵,因为String中的char数组是finall的,也就是常量,是不可改变 的,而StringBuffer继承自抽象类AbstractStringBuilder,他的内部实现靠他的父类完 成,AbstractStringBuilder内的char数组是变量,可以用append追加 StringBuffer和StringBu ...
下面这道题,是考死锁的,比较简单,想两个问题: 1.什么时候会造成死锁 2.wait和notify释放了哪个锁,因为题目中有两个锁。   import java.util.LinkedList; public class DeadLockTest {     LinkedList list = new LinkedList();              public synchronized void push(Object x) {           System.out.println("push");         synchronized ( ...
1、jsp动作 7大动作jsp:include,jsp:userBean,jsp:plugin,jsp:getProperty,jsp:setProperty 2、<jsp:useBean>动作 (1)作用 在jsp页面上,以标签的方式实现bean的实例化 (2)格式 自关闭式:<jsp:useBean id="" class="" scope=""/> 成对出现:<jsp:useBean id=& ...
ActionSerlvet接收客户Http请求,使用ActionForm Bean自动填充客户送来的表单数据到ActionForm Bean对象中?根据配置信息(struts_config.xml)将请求分发给相应的Action对象?Action 对象调用execute()方法处理请求(根据JavaBean和ActionForm取得业务逻辑和表单数据),并反回ActionForward对象 给ActionSerlvet对象?根据ActionForward对象的信息(目标页面),ActionServlet再次将Http请求导航到目标页 面,并发送到客户端。
观察者模式又称发布订阅模式,它定义了对象之间一对多的关系,对象的状态发生变化时,所有依赖的对象都自动得到通知。 观察者模式,很好地解除了观察者和被观察患者之间的耦合。   Java有内置的观察者模式的实现: public interface Observer {   public void update(Obsevable observable, Object);   }   被观察者: public class Observable {     private boolean changed = false;     private Vector obs;     ...
JVM 中将对象的引用分为了四种类型,不同的对象引用类型会造成GC 采用不同的方法进行回收: 1.强引用 默认情况下,对象采用的均为强引用,例如: A a=null; public void execute(){ a=new A();, // 其他代码 } 只有当execute 所在的这个对象的实例没有其他对象引用,GC 时才会被回收。 2.软引用(Soft Reference) 软引用是Java 中提供的一种比较适合于缓存场景的应用,采用软引用修改之上的代码 如下: SoftReference aRef=null; A a=null; public ...
roundrobin  Each server is used in turns, according to their weights.                  This is the smoothest and fairest algorithm when the server's                  processing time remains equally distributed. This algorithm                  is dynamic, which means that server weights may be a ...
nginx的upstream目前支持的5种方式的分配 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3、ip_hash ...
在架构设计过程中,了解一些先辈们总结出来的常用的设计原则非常有用,在实践过程中,结合这些理论,相信架构水平会有质的提升,就像是一本武功秘籍,在学的过程中遵循它的rule,你的武功自然就上去了。我真的感觉这些 ...
定义一组算法,对每一种进行封装,让它们之间可以相互替换,可以独立于客户端程序而变化。
Facade模式   当软件系统需要跟子系统进行复杂的交互时,为了减少系统的交互从而简化系统之间交互的目地,可以用外观模式。   外观模式用到了一个常用的规则:最小知识原则也叫迪米特原则,如果你的应用有很多类,并且他们有复杂的依赖关系,那么你的应用将非常难于扩展和维护,其中一处改动能影响很多使用者。迪米特原则让我们减少系统之间的依赖,一处改动只会影响小范围的地方。   外观模式提供facade类,软件系统只和高层次的类打交道,避免与底层之间的直接接触,从而减少与底层类之间的依赖,从而减少了耦合。
适配器模式: 系统之间集成,常由于接口之间不兼容,很多能满足功能的软件模块,由于接口不同,而导致无法使用。在这种情况下可以使用适配器模式。   使用场合:当原来的类已经存在,但是不能一起工作,这个时候,适配器模式是个好的解决方案。 1.适配器模式的含义在于:把一个类的接口转化为另一个接口,使得原本不兼容而不能一起工作的类能够一起工作。   2.适配器类型 1)类适配器:通过继承关系,将原本不兼容的类一起工作。由于Java类只能单继承,因此只能针对一个类而言。       2)对象适配器:通过对象的组合关系,将原本不兼容的类一起工作。   http://www.c ...
Global site tag (gtag.js) - Google Analytics