1. 很多人说 `HashMap` 的实现是“数组+链表/红黑树”。当一个新元素放进来的时候,它具体是怎么决定自己落在数组的哪个位置?又是在什么时候,链表会“升级”成红黑树?2. 如果 `HashMap` 在多线程下使用,可能会出什么问题? `ConcurrentHashMap` 是如何解决这些问题的?它的实现比 `Hashtable` 好在哪里?3. 很多并发工具的底层都用到了CAS(Compare-And-Swap)操作。你能用大白话解释一下CAS是怎么工作的吗?它为什么被称为“乐观锁”?4. 假设有一个单例模式的实现,用了“双重检查锁定”。为什么给实例变量加上 `volatile` 关键...