hashmap的实现原理可以分成两个版本,比如 1.7 怎么怎么样,1.8 怎么怎么样,这么说:hashmap 在 jdk1.8 以前底层数据结构采用数组+链表的方式,之后需要介绍插入的逻辑:在插入元素时,首先会计算key 的 hashcode 并且通过 hashcode&n-1 来计算出 key 在数组中的位置,如果当前数组位置为空,则直接进行赋值,如果当前位置有数据存储了,那就看当前的 key 与我要传入的 key 是否相同,如果相同则进行值覆盖,如果不相同,则表示当前出现了哈希冲突,那么就看当前节点是否有链表,如果有链表则遍历链表查看是否有相同的 key,如果有则进行值覆盖,如果没有就采用头插法的方式将数据写入到链表中。而在 jdk1.8 之后,hashmap 低层数据结构变成了数组+链表+红黑树的方式,在链表个数超过 8 个时就会发生树化。然后介绍一下 1.8 与 1.7 的区别,1.8采用尾插法解决多线程并发 put 时可能导致的环状结构,1.8 的扩容机制是先插入后进行判断数组是否需要进行扩容。这个问题说完了。面试官看你这么吊可能会继续深入问你:为什么 hashmap 的容量必须为 2 的 n 次方?为什么 hashmap 是非线程安全的?为什么 hashmap链表转红黑树的个数为 8 个不为其他个数?怎么解决 hashmap 的线程安全问题?
5 1

相关推荐

面试体验是很棒的,面试官都非常准时,面试过程中也会去引导,会沿着你的回答继续去问自我介绍项目介绍项目中提到的线程池干什么用的?还有什么创建线程池的方法?线程池的核心参数。拒绝策略?线程池收到任务后执行流程?如果请求量比较大怎么调参数?项目中 ConcurrentHashMap 干什么用的?为什么要用他别的不行吗?如果不用他你会怎么实现?介绍项目中对接ai生成可视化图表。项目中用 ThreadLocal 做什么的?知道 ThreadLocal的内存泄露问题吗?为什么要把key设置为弱引用? ThreadLocal底层是怎么实现的?为什么要用Redis作缓存?Redis为什么快?Redis雪崩和击穿问题。Redis大key问题。如果让你来设计你会用什么思路解决?除了缓存Redis还能干什么?用过Redis当消息队列吗?为什么不如MQ?刚刚提到Redis持久化机制,介绍一下。聊了聊笔试的第三题派对男女匹配问题说一下常见的排序算法,手撕归并介绍jvm垃圾回收算法。怎么判断对象是否是垃圾?假如你项目上线后突然有个功能出现故障了,要怎么办?之后就聊了聊学校学习的一些事,如果要学习新知识会怎么学?看视频还是看文章?怎么做技术选型的?问了下个人优点,有没有考研打算,为什么不考研?之前参加过多少面试?准备面试多久了?平时会去背八股吗?那如果遇到八股没背到的东西怎么回答呢?
查看16道真题和解析
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务