哎,老铁们,今儿咱们得聊聊那职场里的“隐形苦力”。
那些所谓的“优质员工”,说白了,就是一群背着山一样重担,还得在职场上狂奔的哥们儿姐们儿。
你们知道吗?这些大佬级别的员工,技术杠杠的,简直就是团队里的定海神针,但背后呢?
啧啧,那叫一个心酸!
想象一下,一个28岁的哥们儿,独生子,家里老婆全职带娃,房贷那数字直接戳心窝子——150万!
每个月睁眼闭眼都是钱,钱,钱!养老婆,养孩子,还得孝敬父母,这一身担子,比挑山工还累啊!
结果呢,他们成了领导眼中的“香饽饽”。
为啥?
因为好拿捏啊!
脏活累活,全往他们身上堆,还美其名曰“能者多劳”。
你说,这到底是夸呢,还是变相压榨?
更气人的是,有些领导啊,简直就是职场“吸血鬼”!
看到你不敢轻易辞职,就各种加码,工作压得你喘不过气来。
你稍微说个“不”字,人家立马给你脸色看,说你效率低,让你加班到深夜。
这哪里是工作,简直是拿命在拼啊!
更别说那些怀孕的女同事了,挺着个大肚子还得被领导呼来喝去,手机从早到晚响个不停,跟催命符似的。
哎,这世道,对咱们打工人真是太不友好了!
所以啊,老铁们,咱们得认清现实,这职场啊,就是个利益场,有时候你真的只是别人眼中的一颗棋子。
别总想着当什么“优质员工”,那背后付出的代价,可不是一般人能承受的。
咱们得学会保护自己,设立界限,别让那些无良领导把咱们当软柿子捏。
不过呢,咱也不能坐以待毙,对吧?来来来,几个小妙招送给你:
- 界限大师:搞清楚自己的“能力圈”,超出范围的,果断say no!别不好意思,你的时间也很宝贵。
- 沟通达人:跟领导唠唠嗑,说说你的不易,别让他们觉得你是铁打的。有时候,理解比啥都强。
- 自我疗愈:压力大?运动、冥想走一波,身体是革命的本钱,心态崩了就啥都没了。
虽然职场路漫漫,单咱得学会给自己加点糖。
别忘了,每个努力的你,都值得被温柔以待!
言归正传。今天要分享的面试题是:
HashMap是如何存储元素的?
jdk1.8中的hashMap存储结构图示:
jdk1.8中HashMap的put方法:
注意:链转化红黑树treeifyBin方法如下
进入treeifyBin方法的if条件中TREEIFY_THRESHOLD的值为8 ,TREEIFY_THRESHOLD-1=7且treeifyBin方法中MIN_TREEIFY_CAPACITY的值为64。故,链表的长度大于 8 且散列表容量大于 64**,是链表转化为红黑树的条件。
答:
简单地说,HashMap 的底层结构在 Java 7 中使用的是“数组 + 链表”,发生散列冲突的键值对会用头插法添加到单链表中;在 Java 8 中使用的是“数组 + 链表 + 红黑树”,发生散列冲突的键值对会用尾插法添加到单链表中,如果链表的长度大于 8 且散列表容量大于 64,会将链表树化为红黑树。
以JDK1.8为例。在JDK1.8中,HashMap进行put操作过程为:
- 如果散列表为空时,调用resize()初始化散列表。
- 计算关于key的hashcode值会计算key值的hash值,将(数组长度-1)和hash值进行&操作,得到数组的下标值。
- 如果该下标下内容为空,新建node节点,直接添加到散列表中即可。
如果下标内容不为空,分三种情况:
- 第一种,还没有链化。比较key的hash值和引用或是equals,如果相同,则覆盖value。
- 第二种,已经链化。遍历链表,判断节点的key值情况(同上),如果相同,则覆盖value;如果不同,则继续遍历链表,直到末尾,若链表的长度大于 8 且散列表容量大于 64,则将链表转红黑树,否则尾插法创建Node节点。(jdk1.7头插,1.8尾插)
- 第三种,链表已经转化成红黑树。搜索树中节点,判断节点的key值情况,如果相同 ,则替换value,如果不存在,则在树中插入新的TreeNode节点。
- 如果HashMap中存储的键值对数量超过了阈值,则调用resize()进行扩容。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。