吊打面试官之ConcurrentHashMap和Hashtable

Posted 码农沉思录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吊打面试官之ConcurrentHashMap和Hashtable相关的知识,希望对你有一定的参考价值。

优质文章,及时送达

前言

作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(请允许我使用一下夸张的修辞手法)。

于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer!

所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。

回手掏

上次面试呀,我发现面试官对我的几个回答还是不够满意,觉得还是有点疑问,我就挑几个回答一下。

16是2的幂,8也是,32也是,为啥偏偏选了16?

我觉得就是一个经验值,定义16没有很特别的原因,只要是2次幂,其实用 8 和 32 都差不多。

用16只是因为作者认为16这个初始容量是能符合常用而已。

Hashmap中的链表大小超过八个时会自动转化为红黑树,当删除小于六时重新变为链表,为啥呢?

根据泊松分布,在负载因子默认为0.75的时候,单个hash槽内元素个数为8的概率小于百万分之一,所以将7作为一个分水岭,等于7的时候不转换,大于等于8的时候才进行转换,小于等于6的时候就化为链表。

正文

一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。

就在我口水要都要流出来的时候,小姐姐的话语打断了我的YY。

喂小鬼,你养我啊!

呸呸呸,说错了,上次的HashMap回答得不错,最后因为天色太晚了面试草草收场,这次可得好好安排你。

诶,面试官上次是在抱歉,因为公司双十二要值班,实在是没办法,不过这次不会了,我推掉了所有的事情准备全身心投入到今天的面试中,甚至推掉了隔壁王大爷的约会邀约。

这样最好,上次我们最后聊到HashMap在多线程环境下存在线程安全问题,那你一般都是怎么处理这种情况的?

美丽迷人的面试官您好,一般在多线程的场景,我都会使用好几种不同的方式去代替:

  • 使用Collections.synchronizedMap(Map)创建线程安全的map集合;

  • Hashtable

  • ConcurrentHashMap

不过出于线程并发度的原因,我都会舍弃前两者使用最后的ConcurrentHashMap,他的性能和效率明显高于前两者。

哦,Collections.synchronizedMap是怎么实现线程安全的你有了解过么?

吊打面试官之ConcurrentHashMap和Hashtable

卧*!不按照套路出牌呀,正常不都是问HashMap和ConcurrentHashMap么,这次怎么问了这个鬼东西,还好我饱读诗书,经常看敖丙的《吊打面试官》系列,不然真的完了。

小姐姐您这个问题真好,别的面试官都没问过,说真的您水平肯定是顶级技术专家吧。

别贫嘴,快回答我的问题!抿嘴一笑

以上是关于吊打面试官之ConcurrentHashMap和Hashtable的主要内容,如果未能解决你的问题,请参考以下文章

吊打面试官之源码中用了哪些设计模式?

大厂面试系列吊打面试官之Redis高频面试题(最新版)

吊打面试官之一文吃透JS事件循环EventLoop

《吊打面试官》系列-ConcurrentHashMap & Hashtable(文末送书)

深入解析 ConcurrentHashMap 实现内幕,吊打面试官,没问题

按在地上摩擦面试官之mysql事务(精讲)