摘自:http://blog.csdn.net/llmlx/archive/2008/04/11/2282978.aspx
事务隔离级别(transaction isolation
levels):隔离级别就是对对事务并发控制的等级。ANSI/
ISO SQL将其分为串行化(SERIALIZABLE)、可重复读(REPEATABLE
READ)、读已提交(READ COMMITED)、读未提交(READ
UNCOMMITED)四个等级。为了实现隔离级别通常数据库采用锁(Lock)。一般在编程的时候只需要设置隔离等级,至于具体采用什么锁则由数据库来设置。首先介绍四种等级,然后举例解释后面三个等级(可重复读、读已提交、读未提交)中会出现的并发问题。
串行化(SERIALIZABLE):所有事务都一个接一个地串行执行,这样可以避免幻读(p
摘自http://www.cnblogs.com/liuyhaiying/articles/945419.html
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer
类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的
String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String
,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC
就会开始工作,那速度是一定会相当慢的。
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer
对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer
,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了
StringBuffer 对象的拼接,所以这
设计模式是前人专家总结的方法,以结构化的方式提供专家意见。
设计模式已经成为了一种文化,全世界的程序员都明白,所以成为了一种交流工具。
构造型——Creational Patterns
讨论如何构造对象
1.简单工厂模式 Simple Factory
见SimpleFactory.jpg
设计思想在于子类产品具有统一的接口,所以由工厂生产出的产品的使用方式是一样的。
2.工厂方法 Factory Method
见FactoryMethod.jpg
设计思想在于对简单工厂模式进行深一层的抽象,由Man子类来创建Namer子类产品,将实例化延迟到Man子类(而不是由工厂指定在某个地方生产特定产品)。选择Man某子类则选择了所要实例化的Namer子类。
适用范围:
Manfactory工厂不知道要实例化哪个Namer子类,或者希望由它的子类来做。
3、抽象工厂 Abastract Factory
见AbstractFactory.jpg
设计思想在于指定一系列的接口,而不需要理会真正的实现类。例如WestAppearanceFactory内有两个建立特定子类的方法。之所以为抽象工厂,因为该工厂生产的是不止一类的产品,而是一系列产品。
适用范围:
一个系统不需要理会产品的生产
参考:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html
Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。
Ajax 尝试建立桌面应用程序的功能和交互性,与不断更新的 Web 应用程序之间的桥梁。
老技术,新技巧:
HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段
JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
DHTML 或 Dynamic HTML,用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记
HTML。
文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。
XMLHttpRequest 对象
这是一个 JavaScript 对象.
在一般的 Web 应用程序中,用户填写表单字段并单击 Submit
按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是 PHP 或 Java,也可能是 CGI
进程或者类似的东西),脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的 HTML,也可能
参考
http://coreoak.javaeye.com/blog/91594
对象创建->对象丢弃->对象回收
1)对象丢弃
JAVA中的回收机制包含的一种叫引用计数法,用来回收垃圾。当所有对该对象的引用不存在时,则将该对象置于待回收列表中,但并不立即销毁。
2)对象回收
因为对象回收需要较大的系统开销,JAVA中的回收机制包含其它其它算法用于判断何时及如何做回收。一般来说,当满足两个条件:有对象要回收并且系统需要回收,如JVM内容空间紧张时,立即回收。
根据上述,要影响回收的话,可以使用方法:1、把所有对该对象引用移走;2、调用System.gc(),一般来说JVM自己的回收器会在某些情况下自动扫描需要回收的对象,调用该方法可以让扫描提前,但不是立即。
回收时会调用对象的finalize方法,所以可以修改该方法来对控制对象的销毁。不过它与C++中的析构函数不同的地方在于析构函数是在对象离开作用域时调用的。
UML
聚集和组合的区别
1.组合是比聚集关联程度更加强的关系;
2.生命周期不同,组合中部件的生命周期取决于组合;
3.聚集中的部分脱离聚集也能存在,而组合中的部分不能脱离组合而存在;
例如聚集-班级和学生,组合-车和轮胎;聚集-电脑和硬盘,组合-衣服和袖子
反射机制:
用于获取运行时信息,对自身的JAVA程序进行检查并直接操作程序内部的属性。例如可以获取某个对象的属性,执行某个对象的方法,新建实例等。
而反射机制是如今许多流行框架的实现基础,包括Spring、Hibernate等。
不过,使用反射会比较消耗资源。
代理机制:
JAVA中的另一个重要机制,包括静态和动态两种。为了将业务逻辑和核心业务分离,代理位于调用者和核心业务之间,由代理去实现业务逻辑,当业务逻辑修改时,修改代理即可,不会影响到核心业务。
静态代理是实现清楚需代理的接口(函数),然后编写代理,相同的接口但在实现中完成业务逻辑。
动态代理是代理同一业务逻辑的接口,即给出需要代理的多个接口,由代理来完成相同的业务逻辑。既能动态的创建代理对象,又能动态的调用代理方法。
动态代理中一个重要API:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces, InvocationHandler h)
throws IllegalArgumentException
说明:
参数:loader-需代理对象的类加载器;interfaces-被代理对象的需代理接口;h-处理程序。
C++中具备两种虚拟函数:虚函数和纯虚函数。跟JAVA相比,虚函数相当于JAVA中的普通函数,而纯虚函数则为JAVA中的抽象函数。
C++的虚函数是在函数前加上virtual修饰符,主要用于多态(见最后的解释)。函数具有函数体,只是为了表明该函数调用是动态的,根据实例化对象而来(C++)。而JAVA中默认就是这种方式。
纯虚函数和抽象函数都没有函数体,纯虚函数是在虚函数声明上后面加上“=0”,如“virtual void
showmember()=0; ”,声明了纯虚函数的,此类不用使用任何修饰符即成为了抽象类。
参考:http://zhidao.baidu.com/question/5790744.html
覆盖:
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
重载:
在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派
详情参考 《Thinking in
JAVA》11章:I/O
1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object
states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没