这次疫情让几个关系很好的前同事都跳槽了,基本都面了大厂 阿里系、腾讯系、华为、平安等也都拿到了各自满意的offer,居安思危的我将他们经历的面试题收集整理然后根据自身情况解答复习。每周最少两大题(包含扩展问题)分享出来,大家一起学习。
CurrentHashMap、HashMap、HashTable的区别
大方向区别为:
HashMap 线程不安全的 ,HashTable 线程安全的任一时间只有一个线程能写Hashtable,CurrentHashMap线程安全的,引入分段锁。
HashMap 详解
HashMap 结构
- JDK1.8以前 数组+单向链表
- JDK1.8以后 数组+单向链表+红黑树
为什么要用红黑树
即使负载因子和Hash算法设计的再合理,也免不了会出现拉链过长的情况,一旦出现拉链过长,则会严重影响HashMap的性能。于是,在JDK1.8版本中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,长度小于6时红黑树转为链表。
课外习题:红黑树是啥?
红黑树是一个平衡二叉树
通过旋转和变色来保持平衡,拥有如下特性
- 每个节点要么是黑色,要么是红色。
- 根节点是黑色。
- 每个叶子节点(NIL)