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,组成分段锁