关注
说说我自己对这些八股的理解,有问题可以一起讨论
:
1.CurrentHashMap,面试官应该是想让你回答 JDK1.7 和 JDK1.8 的实现区别,为什么 1.8 的更好?1.7 是分段锁,但是锁的粒度还是比较大。所以 1.8 做了改进,如果目标位置上的节点为 null,就先 CAS 把节点直接放进去,避免加锁。如果目标位置存在节点,就使用 synchronized 对“头节点”加锁,接下来读写链表或红黑树就可以保证线程安全了,因为只有一个线程能访问该链表或红黑树。总结就是 CAS + synchronized 更小的锁粒度 + 避免创建 Segment 节约内存
2.哈希冲突的解决方案。开放寻址法,在数组中找到下一个位置放入元素,常见的有线性探测、二次探测、双重哈希。在 ThreadLocal 中,就采用了线性探测法;拉链法,典型的就是 hashmap;扩容,hashmap 和 ThreadLocal 都有通过扩容的方式解决哈希冲突,会设置一个负载因子,比如 0.75,达到该值就扩容。一般就是「扩容+拉链法」解决,拉链法可以解决哈希冲突问题,但哈希冲突多了性能就差了,通过适当地扩容可以降低因哈希冲突过多导致的性能问题,但不限制地扩容又浪费内存。所以要在内存和性能之间做权衡
查看原帖
28 19
相关推荐
11-27 19:31
门头沟学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 什么是优秀的实习经历 #
8079次浏览 205人参与
# 担心入职之后被发现很菜怎么办 #
266104次浏览 1131人参与
# 被上班搭子“传染”了哪些习惯 #
5312次浏览 97人参与
# 投格力的你,拿到offer了吗? #
152256次浏览 813人参与
# 工作后,你落下了哪些病根 #
12981次浏览 182人参与
# 作业帮求职进展汇总 #
82675次浏览 543人参与
# 京东美团大战,你怎么看? #
157961次浏览 859人参与
# 实习简历求拷打 #
11028次浏览 143人参与
# 如果今天是你的last day,你会怎么度过? #
58893次浏览 324人参与
# 秋招被挂春招仍然能投的公司 #
6473次浏览 94人参与
# mt对你说过最有启发的一句话 #
34801次浏览 418人参与
# 为了找工作你花了哪些钱? #
74790次浏览 359人参与
# 机械人晒出你的简历 #
146416次浏览 874人参与
# 嵌入式岗知多少 #
62968次浏览 555人参与
# 摸鱼被leader发现了怎么办 #
100497次浏览 640人参与
# 考研失败就一定是坏事吗? #
200695次浏览 1369人参与
# 秋招特别不鸣谢 #
15371次浏览 175人参与
# 2023毕业生求职有问必答 #
218591次浏览 1662人参与
# 选实习,你更看重哪方面? #
13666次浏览 214人参与
# 牛客十周岁生日快乐 #
197805次浏览 1895人参与
快手成长空间 767人发布
查看9道真题和解析