关注
说说我自己对这些八股的理解,有问题可以一起讨论
:
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
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的求职总结 #
19889次浏览 385人参与
# 我的工作日记 #
95214次浏览 1253人参与
# 毕业季,给职场新人一些建议 #
16971次浏览 309人参与
# 辞职之后最想做的一件事 #
9349次浏览 149人参与
# 我的实习日记 #
2427911次浏览 25339人参与
# 晒一晒你收到的礼盒 #
61039次浏览 368人参与
# 你想吐槽公司的哪些规定 #
16332次浏览 65人参与
# Offer比较,求稳定还是求发展 #
48397次浏览 235人参与
# 选offer应该考虑哪些因素 #
14967次浏览 251人参与
# 第一份工作应该只看薪资吗 #
138014次浏览 1454人参与
# 你怀疑过自己的专业选择吗? #
17072次浏览 201人参与
# 薪资一样,你会选择去大厂还是小公司 #
15552次浏览 99人参与
# 牛客十周岁生日快乐 #
129133次浏览 1515人参与
# 秋招想进国企该如何准备 #
57309次浏览 372人参与
# 为了秋招你都做了哪些准备? #
10337次浏览 156人参与
# 在国企工作的人,躺平了吗? #
327110次浏览 3840人参与
# 你想留在一线还是回老家? #
37177次浏览 445人参与
# 你小时候最想从事什么职业 #
90880次浏览 1699人参与
# 工作后会跟朋友渐行渐远吗 #
21136次浏览 167人参与
# 你们公司哪个部门最累? #
15332次浏览 130人参与