private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>();
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);
-
乐观/悲观锁的使用场景
-
LockSupport和wait
- unpark会直接指定要解除阻塞的线程,而notify需要知道有一个确定的线程在wait,如果有多个线程在阻塞,则不能确定知道哪个会被解除阻塞。
- wait和notify有先后顺序,即必须先wait,再notify才能解除,而park和unpark则没有,可以先给权限,再阻塞,阻塞会直接返回。
- wait时线程如果被interrupt,会报错InterruptedException,而park时则会正常结束。
- wait/notify面向对象,而LockSupport面向线程
-
数据库设计三范式
- 1.第一范式(确保每列保持原子性即列不可分(地址/省份城市))
- 2.第二范式(确保表中的每列都和主键相关 属性都是该对象拥有的)
- 3.第三范式(确保每列都和主键列直接相关,而不是间接相关 减少数据冗余)
-
String为什么是被final修饰
-
栈帧内容
- 局部变量表
- 操作栈
- 动态连接
4.方法返回地址
-
GcRoot的种类
- 虚拟机栈
- 本地方法栈
3 方法区中的静态变量和常量引用的对象
4.程序计数器
-
CopyOnWriteArrayList