B站学习日记-互联网大厂面试常问的Hashmap和ConcurrentHashmap源码如何应对?

⇡Unsafe,使用CAS

⇡获取Unsafe 对象



⇡什么类型,就用什么方法

⇡ConcurrentHashMap结构

⇡initialCapacity,loadFactor,concurrentLevel
- initialCapacity 所有的hashentry的数组
- concurrentLevel segment的个数
⇡sshift和ssize的计算,关键是求最小的大于等于concurrentLevel的2的幂次数,sshift表示的是幂,ssize代表的是结果。

⇡首先计算 hashcode属于哪个segment,通过高n位去hash,n的计算取决于concurrentLevel

⇡求最小的大于等于concurrentLevel的2的幂次数 算法

⇡ 计算每个segment中hashentry的数量,最小必须为2
⇡ 只初始化第一个segment,后面复制这个就行

⇡put的代码,多次判断是否为null,while+cas的组合

⇡高位加低位hash,组成分段锁