从HashMap面试聊聊互联网内卷

微信公众号:大黄奔跑
关注我,可了解更多有趣的面试相关问题。程序员

写在以前

毫无疑问,回想2020年有什么词出如今眼前最多的,无疑是"996"和"内卷",从马老师的福报论、到年末pdd刚毕业员工猝死,内卷今后从最初谈论于学者文章中出圈了,以后一发不可收拾,几乎能贯穿整个2020年全部的热点时间,大部分事情均可以套用一句:"卷就完事儿了"!
卷就完事儿
互联网是目前绝大部分舆论社交爆发点的火山口,近几年蓬勃发展的互联网,带来的丰富的社交方式,不管是文字交流形式的微博、知乎、微信以及视频形式的B站,造就了种种便利的同时,也沦为当前"内卷"话题的漩涡。面试

而做为互联网中从业人员,不管是找工做仍是工做中,到处透漏着卷。关于卷深层次含义及社会含义,大黄才疏学浅,这里就不班门弄斧了。算法

本文主要目的从互联网从业人员角度,从就业的过程当中,简单分析"内卷"的状况。数组

从HashMap面试聊开

曾几什么时候,关于HashMap面试通常都考察的比较简单,大概是你知道有这么回事儿就能够经过,通俗讲,可以回答出是什么面试就妥了。
快乐的打工微信

从几个常见的面试问题管窥不一样阶段的面试难度,面试是如何打工人内卷的修罗场。数据结构

HashMap底层数据结构是什么?性能

初级版本:你能回答出HashMap是数组+链表+红黑树实现的,大体就知足要求了。学习

若是可以给面试官绘制以下这张底层结构图,那么恭喜你,可能会给人留下能力很强的印象。测试

HashMap底层结构

中级版本,已经再也不是简单的是什么的问题了,而是开始追求是什么和为何了。优化

面试官:数组的初始长度是多少?
打工人:数组初始默认是16,负载因子为0.75,也就是说每次元素个数达到 容量*负载因子时则开始扩容。

面试官:为何须要采用链表呢?
打工人:当某个位置的key发生hash冲突时,则开始用链表来存储,也就是用数组+链表来存储元素。在每一个数组元素上都一个链表结构,当数据被Hash后,获得数组下标,把数据放在对应下标元素的链表上

面试官:那为何又须要用红黑树呢?
打工人:当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特色提升HashMap的性能,其中会用到红黑树的插入、删除、查找等算法。

按道理,可以回答到这里已经够能够了吧,可是忽然有一天,面试官发现好像全部人可以回答到这个程度,怎么办,这就没有办法挑选人了。人多了怎么办?那就加大力度咯。
终极变态

内卷版:当问题到了这个程度,有时候想一想也挺悲剧的,到了一种为了问问题而问问题阶段。

面试官:你刚才说数组初始默认是16,为何必须是16,而不是15或者其余的数呢?

这个问题你说他有价值吧,确定是有的,最初HashMap设计者确定是处于性能考虑选择16,可是总有一种偏离了面试的初衷。

打工人小卷:HashMap数组初始容量采用16,主要是为了在取模和扩容时作优化,同时为了减小冲突,HashMap定位哈希桶索引位置时,也加入了高位参与运算的过程。好比扩容时从新计算hash,只须要看看原来的hash值新增的那个bit是1仍是0就行了,是0的话索引没变,是1的话索引变成“原索引+oldCap
从新计算hash

面试官:小样,还难不倒你了。。链表太长(超过8),则将链表转化为红黑树。为啥不直接使用红黑树呢?

打工人小卷看着仗势,搬出来本身看源码的精神。

源码中明确写到:"由于树节点的大小是链表节点大小的两倍,因此只有在容器中包含足够的节点保证使用才用它”,显然尽管转为树使得查找的速度更快,可是在节点数比较小的时候,此时对于红黑树来讲内存上的劣势会超过查找等操做的优点,天然使用链表更加好。

可是当节点多的时候,红黑树查询一个元素时间复杂度为O(logN),而链表时间复杂度为O(N),总体看节点多时红黑树性能更高。

面试官:那为何是8的时候转,而不是9或者其余数值呢?

好家伙,这个我真的没有考虑过,可是您先别着急,万事不决,问JDKjdk源码中还真的有写。原文以下:
链表转红黑树阈值为何是8

简单一句话是:做者作了大量的测试发现,在随机哈希码下,哈希表中节点的频率遵循泊松分布(不清楚为什么物的自行百度哈),而根据统计,忽略方差,当长度为8的时候,再出现哈希冲突的几率已经很小了(千万分之一),再日后调整并无很大意义。

总结

一个HashMap的底层数据结构就能被挖出这么多"深层次"的东西,被挖掘出来的东西确定是好的,至少说明了学习严谨性。至于说这种面试有多大的价值,我这里不作过多评价,可是我本人持有保留意见。

如今不少人评价面试说的很好:八股文面试,万物皆可套路。原本一个问题能回答出是什么、有什么用、为何如此,我以为就能够达到经过的阶段。可是面对不断融入新人(固然我也是其中一员),招人需求端人数趋于稳定,供大于求,对于需求端如何挑选出更加"优秀"的人才是一个难题,对于供给端若是给别人呈现出更好的"妆态"又是一个难题。供需不平衡或者说生产力不解决,找工做内卷只会日益严重。

你看,我这篇文章也是一种内卷的表现。

番外

另外,关注大黄奔跑公众号,第一时间收获独家整理的面试实战记录及面试知识点总结。

我是大黄,一个只会写HelloWorld的程序员,我们下期见。

扫一扫

相关文章
相关标签/搜索