一些有用的技术文章-3


Thinking in Java - 重载

先来看一段代码.

public class CollectionClassifier {
    public static String classify(Set<?> set) {
        return "set";
    }

    public static String classify(List<?> list) {
        return "list";
    }

    public static String classify(Collection<?> collection) {
        return "Unknown Collection";
    }

    public static void main(String[] args) {
        Collection<?>[] collections = {
                new HashSet<String>(),
                new ArrayList<String>(),
                new HashMap<String, String>().values()
        };
        for (Collection<?> c : collections) {
            System.out.println(classify(c));
        }
    }
}

Thinking in Java - 变量的初始化顺序

Java 变量初始化顺序

普通类

  1. 静态成员初始化(statis块可看作一特殊的静态成员)

  2. 普通成员变量

  3. 构造函数

对于静态成员和普通成员, 其初始化的顺序和其在类中定义的顺序有关.

继承类

  1. 父类静态成员及static块

  2. 子类静态成员及static块

  3. 父类普通成员

  4. 父类构造函数

  5. 子类普通成员

  6. 子类构造函数


一些有用的技术文章-2

  1. 分布式架构的消息传递 基于消息的分布式架构-消息队列

  2. 为什么要使用Google,来自一同学的Blog 你为什么一定要使用 Google ?

  3. Oracle sqlldr 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

  4. Java并发编程:volatile关键字解析 Java volatile

  5. 再次了解JDBC-从Class.forName 到 DataSource


ibatis insert

使用Ibatis时,常常会碰到这样一个场景:

Java程序中有一个对象data,现在需要把data插入数据库中,而这条数据有一个字段A是在数据库中生成(例如oracle中的sequence),并且insert数据之后,需要立即返回这个数据(带有A字段)。现在有2个解决方案:

  1. 首先在java代码中做一次db call,拿到A.nextval,再把这个值set到data中; 然后再做一次db call (把data插入到db). 我们目前的项目普遍采用这个做法,不得不吐槽一下,这是个相当糟糕的做法(插入1条数据,而做了2次db call).

  2. 利用Ibatis中的SelectKey.