HashMap源码:
Jdk1.7和jdk1.8区别
Map get() 和 put()原理
热点问题:
为什么HashMap要树化?

​ 本质上是因为安全问题.因为,在元素的存放过程中,如果一个对象哈希冲突,都被放到一个桶里,则会形成一个链表,而链表的查询是线性的会严重影响存取的性能.而现实情况中,构造哈希冲突的数据并不是非常复杂的事情,恶意代码就会利用这些数据与服务器大量交互,导致服务器端cpu大量占用,这就构成了哈希碰撞拒绝服务攻击.

ps:用哈希碰撞发起拒绝服务攻击(DOS,Denial-Of-Service attack),常见的场景是攻击者可以事先构造大量相同哈希值的数据,然后以JSON数据的形式发送给服务器,服务器端在将其构建成为Java对象过程中,通常以Hashtable或HashMap等形式存储,哈希碰撞将导致哈希表发生严重退化,算法复杂度可能上升一个数据级,进而耗费大量CPU资源。

HashMap,HashTable,TreeMap,LinkedHashMap的区别
HashMap在1.7和1.8之间的变化

当两个对象的hashCode相同时会发生什么?

你知道hash的实现吗?为什么要这样实现?

拉链法导致的链表过深问题为什么不用二叉树代替,而选择红黑树?为什么不一直使用红黑树?
HashMap和CuncurrentHashMap的区别?
ConcurrentHashMap简单介绍一下?
ConcurrentHashMap的key,value是否可以为null,为什么?
参考文档

发表回复