知乎上看到一个问答,“你遇到过哪些质量很高的 Java 面试?” 本来想自己尝试回答一下,并对照作者回复的答案,以此来了解自己知识的欠缺之处,但发现写出来答案之后质量实在是不高,为避免误导读者,这里最后还是决定贴作者的答案。文章内容全部为转载知乎上允许转载的回答,但若有侵权依旧会立刻删除。
public class Singleton {
private Singleton() {
}
private volatile static Singleton instance;
public static Singleton getInstance() {
if (null == instance) {
synchronized (Singleton.class) {
if (null == instance) {
instance = new Singleton();
}
}
}
return instance;
}
}
注:这种方式是在获取实例时初始化,称为懒汉式。此处使用volatile关键字旨在禁止指令重排序优化,Java 5之前这种用法有缺陷。单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
top
找到占用cpu最高的进程 ID(关于top命令),再使用 top -Hp PID
找到占用CPU最高的线程id。最后我们可以使用jstack pid
打印出运行的栈信息具体查看代码做了什么。jstack
显示的可能有点儿多,可以写到文件里或者是结合grep
使用。