equals()和“==”操作用于对象的比较,检查俩对象的相等性,但是他们俩的主要区别在于前者是方法后者是操作符。

由于java不支持操作符重载(overloading),“==”的行为对于每个对象来说与equals()是完全相同的,但是equals()可以基于业务规则的不同而重写(overridden )。另一个需要注意的不同点是“==”习惯用于原生(primitive)类型之间的比较,而equals()仅用于对象之间的比较。

阅读更多

关于Java的类加载机制,一直都有看过很多知识,但没有系统的总结过。遇到一篇觉得总结的比较不错的博客,转载过来。
原文链接:深入分析Java ClassLoader原理

什么是ClassLoader?


大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以ClassLoader就是用来动态加载class文件到内存当中用的。

阅读更多

Java语言的一个关键的优势就是它的内存管理机制。你只管创建对象,Java的垃圾回收器帮你分配以及回收内存。然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的。文章内容来源于importnew。

阅读更多

Hibernate的Session类提供了将对象保存到数据库的方法,例如save,saverOrUpdate还有persist。可以根据自己的需要来选择使用save,saverOrUpdate或者persist。所以能过对着三个方法之间的区别有一定的了解对开发会有一定帮助,当然,这个问题在面试过程中也有可能会遇到。

save和saverOrUpdate的区别


最主要的区别是save()方法生成一个新的标识符(identifier),然后在数据库中插入一条记录,并且返回一个Serializable对象;而saverOrUpdate()是根据是否在数据中存在来选择插入(INSERT)或者是更新(UPDATE)。如果持久化的对象已经在数据库中,则执行UPDATE SQL。

saverOrUpdate()方法使用更灵活,但却涉及到一个额外的流程去查找该对象在数据库中是否存在。

save和persist的区别


  • 返回类型不同。两个方法都会将对象插入到数据,但save返回的是Serializable对象,而persist返回的是void。
  • ID赋值时机不同。二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
  • transaction外的行为不同。如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
  • 使用场景。persist方法适用于被扩展的Session上下文的长期运行的会话中,而save则不适用。(Because of its above behavior of persist method outside transaction boundary, its useful in long-running conversations with an extended Session context. On the other hand save method is not good in a long-running conversation with an extended Session context.)

业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的 “锁” ,即给我们选定的目标数据上锁,使其无法被其他程序修改。

Hibernate 支持两种锁机制:即通常所说的 “悲观锁( Pessimistic Locking )”和 “乐观锁( Optimistic Locking )” 。

阅读更多

Spring的简单理解


Spring技术可以说是java企业开发里最重要的技术,不过真的理解Spring的作用和意义还真是一件麻烦的事情。
Spring最根本的使命:简化Java开发。
为了降低Java开发的复杂性,Spring采取以下4种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程
  2. 通过依赖注入和面向接口实现松耦合
  3. 基于切面和惯例进行声明式编程
  4. 通过切面和模版减少样板示代码

很多人对Spring理解其实都是停留在使用阶段(例如:声明式事务很好用等等),当今的Spring技术生态环境里可谓是蔚为壮观,Spring已经包罗万象,它的内容之多完全不亚于它的本源Java语言了,而Spring这么大的框都是建立在IOC和AOP技术之上,只有深入理解了这两个技术我们才能明白为什么Spring这个框能装的下那么多东西了。在理解IOC和AOP之前,可以先看一下Spring给我们带来了哪些好处。

阅读更多