范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

阿里HashMap面试夺命连环21问

  1、HashMap 的数据结构?
  A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node[] table;` 
复制代码2、HashMap 的工作原理?   HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。   存储对象时,将 K/V 键值传给 put() 方法:   ①、调用 hash(K) 方法计算 K 的 hash 值,然后结合数组长度,计算得数组下标;   ②、调整数组大小(当容器中的元素个数大于 capacity * loadfactor 时,容器会进行扩容resize 为 2n);   ③、i.如果 K 的 hash 值在 HashMap 中不存在,则执行插入,若存在,则发生碰撞;   ii.如果 K 的 hash 值在 HashMap 中存在,且它们两者 equals 返回 true,则更新键值对;   iii. 如果 K 的 hash 值在 HashMap 中存在,且它们两者 equals 返回 false,则插入链表的尾部(尾插法)或者红黑树中(树的添加方式)。   (JDK 1.7 之前使用头插法、JDK 1.8 使用尾插法)(注意:当碰撞导致链表大于 TREEIFY_THRESHOLD = 8 时,就把链表转换成红黑树)   获取对象时,将 K 传给 get() 方法:①、调用 hash(K) 方法(计算 K 的 hash 值)从而获取该键值所在链表的数组下标;②、顺序遍历链表,equals()方法查找相同 Node 链表中 K 值对应的 V 值。   hashCode 是定位的,存储位置;equals是定性的,比较两者是否相等。3、当两个对象的 hashCode 相同会发生什么?   因为 hashCode 相同,不一定就是相等的(equals方法比较),所以两个对象所在数组的下标相同,"碰撞"就此发生。又因为 HashMap 使用链表存储对象,这个 Node 会存储到链表中。4、你知道 hash 的实现吗?为什么要这样实现?   JDK 1.8 中,是通过 hashCode() 的高 16 位异或低 16 位实现的:(h = k.hashCode()) ^ (h >>> 16),主要是从速度,功效和质量来考虑的,减少系统的开销,也不会造成因为高位没有参与下标的计算,从而引起的碰撞。5、为什么要用异或运算符?   保证了对象的 hashCode 的 32 位值只要有一位发生改变,整个 hash() 返回值就会改变。尽可能的减少碰撞。6、HashMap 的 table 的容量如何确定?loadFactor 是什么?该容量如何变化?这种变化会带来什么问题?   ①、table 数组大小是由 capacity 这个参数确定的,默认是16,也可以构造时传入,最大限制是1<<30;   ②、loadFactor 是装载因子,主要目的是用来确认table 数组是否需要动态扩展,默认值是0.75,比如table 数组大小为 16,装载因子为 0.75 时,threshold 就是12,当 table 的实际大小超过 12 时,table就需要动态扩容;   ③、扩容时,调用 resize() 方法,将 table 长度变为原来的两倍(注意是 table 长度,而不是 threshold)   ④、如果数据很大的情况下,扩展时将会带来性能的损失,在性能要求很高的地方,这种损失很可能很致命。7、HashMap中put方法的过程?   答:"调用哈希函数获取Key对应的hash值,再计算其数组下标;   如果没有出现哈希冲突,则直接放入数组;如果出现哈希冲突,则以链表的方式放在链表后面;   如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表   如果结点的key已经存在,则替换其value即可;   如果集合中的键值对大于12,调用resize方法进行数组扩容。"8、数组扩容的过程?   创建一个新的数组,其容量为旧数组的两倍,并重新计算旧数组中结点的存储位置。结点在新数组中的位置只有两种,原下标位置或原下标+旧数组的大小。9、拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?   之所以选择红黑树是为了解决二叉查找树的缺陷,二叉查找树在特殊情况下会变成一条线性结构(这就跟原来使用链表结构一样了,造成很深的问题),遍历查找会非常慢。推荐:面试问红黑树,我脸都绿了。   而红黑树在插入新数据后可能需要通过左旋,右旋、变色这些操作来保持平衡,引入红黑树就是为了查找数据快,解决链表查询深度的问题,我们知道红黑树属于平衡二叉树,但是为了保持"平衡"是需要付出代价的,但是该代价所损耗的资源要比遍历线性链表要少,所以当长度大于8的时候,会使用红黑树,如果链表长度很短的话,根本不需要引入红黑树,引入反而会慢。10、说说你对红黑树的见解?每个节点非红即黑根节点总是黑色的如果节点是红色的,则它的子节点必须是黑色的(反之不一定)每个叶子节点都是黑色的空节点(NIL节点)从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)11、jdk8中对HashMap做了哪些改变?   在java 1.8中,如果链表的长度超过了8,那么链表将转换为红黑树。(桶的数量必须大于64,小于64的时候只会扩容)   发生hash碰撞时,java 1.7 会在链表的头部插入,而java 1.8会在链表的尾部插入   在java 1.8中,Entry被Node替代(换了一个马甲。12、HashMap,LinkedHashMap,TreeMap 有什么区别?   LinkedHashMap 保存了记录的插入顺序,在用 Iterator 遍历时,先取到的记录肯定是先插入的;遍历比 HashMap 慢;   TreeMap 实现 SortMap 接口,能够把它保存的记录根据键排序(默认按键值升序排序,也可以指定排序的比较器)13、HashMap & TreeMap & LinkedHashMap 使用场景?   一般情况下,使用最多的是 HashMap。   HashMap:在 Map 中插入、删除和定位元素时;   TreeMap:在需要按自然顺序或自定义顺序遍历键的情况下;   LinkedHashMap:在需要输出的顺序和输入的顺序相同的情况下。*14、HashMap 和 HashTable 有什么区别?   ①、HashMap 是线程不安全的,HashTable 是线程安全的;   ②、由于线程安全,所以 HashTable 的效率比不上 HashMap;   ③、HashMap最多只允许一条记录的键为null,允许多条记录的值为null,而 HashTable不允许;   ④、HashMap 默认初始化数组的大小为16,HashTable 为 11,前者扩容时,扩大两倍,后者扩大两倍+1;   ⑤、HashMap 需要重新计算 hash 值,而 HashTable 直接使用对象的 hashCode15、Java 中的另一个线程安全的与 HashMap 极其类似的类是什么?同样是线程安全,它与 HashTable 在线程同步上有什么不同?   ConcurrentHashMap 类(是 Java并发包 java.util.concurrent 中提供的一个线程安全且高效的 HashMap 实现)。   HashTable 是使用 synchronize 关键字加锁的原理(就是对对象加锁);   而针对 ConcurrentHashMap,在 JDK 1.7 中采用 分段锁的方式;JDK 1.8 中直接采用了CAS(无锁算法)+ synchronized。16、HashMap & ConcurrentHashMap 的区别?   除了加锁,原理上无太大区别。另外,HashMap 的键值对允许有null,但是ConCurrentHashMap 都不允许。17、为什么 ConcurrentHashMap 比 HashTable 效率要高?   HashTable 使用一把锁(锁住整个链表结构)处理并发问题,多个线程竞争一把锁,容易阻塞;   ConcurrentHashMapJDK 1.7 中使用分段锁(ReentrantLock + Segment + HashEntry),相当于把一个 HashMap 分成多个段,每段分配一把锁,这样支持多线程访问。锁粒度:基于 Segment,包含多个 HashEntry。JDK 1.8 中使用 CAS + synchronized + Node + 红黑树。锁粒度:Node(首结点)(实现 Map.Entry)。锁粒度降低了。18、针对 ConcurrentHashMap 锁机制具体分析(JDK 1.7 VS JDK 1.8)   JDK 1.7 中,采用分段锁的机制,实现并发的更新操作,底层采用数组+链表的存储结构,包括两个核心静态内部类 Segment 和 HashEntry。   ①、Segment 继承 ReentrantLock(重入锁) 用来充当锁的角色,每个 Segment 对象守护每个散列映射表的若干个桶;   ②、HashEntry 用来封装映射表的键-值对;   ③、每个桶是由若干个 HashEntry 对象链接起来的链表   JDK 1.8 中,采用Node + CAS + Synchronized来保证并发安全。取消类 Segment,直接用 table 数组存储键值对;当 HashEntry 对象组成的链表长度超过 TREEIFY_THRESHOLD 时,链表转换为红黑树,提升性能。底层变更为数组 + 链表 + 红黑树。19、ConcurrentHashMap 在 JDK 1.8 中,为什么要使用内置锁 synchronized 来代替重入锁 ReentrantLock?   ①、粒度降低了;   ②、JVM 开发团队没有放弃 synchronized,而且基于 JVM 的 synchronized 优化空间更大,更加自然。   ③、在大量的数据操作下,对于 JVM 的内存压力,基于 API 的 ReentrantLock 会开销更多的内存。20、ConcurrentHashMap 简单介绍?   ①、重要的常量:   private transient volatile int sizeCtl;   当为负数时,-1 表示正在初始化,-N 表示 N - 1 个线程正在进行扩容;   当为 0 时,表示 table 还没有初始化;   当为其他正数时,表示初始化或者下一次进行扩容的大小。   ②、数据结构:   Node 是存储结构的基本单元,继承 HashMap 中的 Entry,用于存储数据;   TreeNode 继承 Node,但是数据结构换成了二叉树结构,是红黑树的存储结构,用于红黑树中存储数据;   TreeBin 是封装 TreeNode 的容器,提供转换红黑树的一些条件和锁的控制。   ③、存储对象时(put() 方法):   如果没有初始化,就调用 initTable() 方法来进行初始化;   如果没有 hash 冲突就直接 CAS 无锁插入;   如果需要扩容,就先进行扩容;   如果存在 hash 冲突,就加锁来保证线程安全,两种情况:一种是链表形式就直接遍历到尾端插入,一种是红黑树就按照红黑树结构插入;   如果该链表的数量大于阀值 8,就要先转换成红黑树的结构,break 再一次进入循环   如果添加成功就调用 addCount() 方法统计 size,并且检查是否需要扩容。   ④、扩容方法 transfer():默认容量为 16,扩容时,容量变为原来的两倍。   helpTransfer():调用多个工作线程一起帮助进行扩容,这样的效率就会更高。   ⑤、获取对象时(get()方法):   计算 hash 值,定位到该 table 索引位置,如果是首结点符合就返回;   如果遇到扩容时,会调用标记正在扩容结点 ForwardingNode.find()方法,查找该结点,匹配就返回;   以上都不符合的话,就往下遍历结点,匹配就返回,否则最后就返回 null。21、ConcurrentHashMap 的并发度是什么?   程序运行时能够同时更新 ConccurentHashMap 且不产生锁竞争的最大线程数。默认为 16,且可以在构造函数中设置。   当用户设置并发度时,ConcurrentHashMap 会使用大于等于该值的最小2幂指数作为实际并发度(假如用户设置并发度为17,实际并发度则为32)   原文:cnblogs.com/Young111/p/11519952.html
丁俊晖再冲第15冠,2023年谁能圆梦?北京时间12月29日消息,随着马克塞尔比以96战胜卢卡布雷切尔,夺得2022年斯诺克英格兰公开赛冠军,本年度最后一项比赛结束。即将开始的2023年,中国一哥丁俊晖将再次向排名赛第1大心脏!欧文连续5场末节得分上双,蔡崇信赚翻10连胜剑指首冠篮网又赢球了,在击败老鹰之后,篮网已经豪取10连胜,是现阶段NBA联盟最长连胜纪录。这场比赛篮网赢得并不容易,他们一度处于落后,甚至最后时刻,还有可能被对手绝杀,好在穆雷的绝杀三分梅西的力量!阿根廷夺冠后,7人身价上涨,成为当红球星阿根廷夺得世界杯冠军,梅西当记首功7球3助攻,决赛梅开二度,5次单场MVP,无论是场上还是更衣室,梅西都起到定海神针的作用。梅西带领阿根廷夺冠,全队都是受益者。最近,权威的德转网站首钢比辽军更加难缠?汉密尔顿首战旧主杜锋手握致胜良策结束完与吉林队的比赛,广东队目前以15胜4负的成绩在积分榜排名第二,华南虎下一个对手就是积分榜排名第四的北京队。广东队方面,目前已经取得了一波10连胜,球队势头正猛,面对北京队,倘湖人完败热火,詹姆斯拼尽全力!威少三分离谱,巴特勒全面爆发北京时间12月29日,NBA常规赛继续进行,热火主场迎战湖人。此前热火战绩为17胜17负,排名东部第八,本赛季热火之所以一直在中游徘徊,主要是伤病影响,此外热火的防守依旧在线,但是冠捷科技减碳从显示器开始,积跬步至千里收件,拆包,使用。消费者似乎并不会关注产品是如何跨越千山万水运抵自己手中的,当然他们大概率也不会在意产品的包装印刷在近几年间发生了怎样的变化。而这些在冠捷科技看来,却都是无比重要且美国宇航局正借助AI开发可在月球使用的定位导航系统IT之家12月29日消息,宇航员在登陆月球之后应该如何进行定位导航?在地球人类还可以通过观察周围事物通过北斗GPS等卫星进行定位,但是在月球上就会出现巨大的挑战。科学家现在正创建一光激发二维材料中的非平衡态电声耦合进展随着超快技术的发展,超快激光脉冲激发条件下的凝聚态物质的响应,即非平衡态涌现出来的新物理现象,引起了人们的广泛注意。超快物质调控逐渐成为量子调控的新兴研究方向。通过非平衡态的电声耦行者谈股息估值法当前白菜价的建行股票你敢买吗?极度低估的农行股票你会买吗?高ROE的兴业银行股票投资价值有多大?宇宙第一大行的股票还能买吗?四大行中相对较低ROE的中国银行还有投资价值吗?中农工建全球最大规模,沙戈荒风光基地开建!库布其基地项目是在沙漠戈壁荒漠地区开发建设的全球最大规模风电光伏基地项目,也是我国首个开工建设的千万千瓦级新能源大基地项目。12月28日,由三峡集团牵头,联合内蒙古能源集团建设的库高知家庭的自闭症发病率较高?是真的吗?你有没有听过这样的说法,说高知家庭的孩子,自闭症的发生率会更高一些。其实呢,这种说法是错误的!这是最早的时候对自闭症认知的一个误区。曾经有过一项研究,对100个自闭症儿童家庭进行调
海南隐形富豪身家百亿,被称为瓶装水之父在饮用水行业,钟睒睒和他的农夫山泉想必是无人不知,无人不晓。他在短短的二十几年时间就将农夫山泉打造成了国内最著名的饮用水品牌,瓶装水龙头企业,市值达4437亿。而钟睒睒本人更是凭借暴跌55,海天味业首次负增长尽管海天味业三次澄清,但仍未打消市场疑虑。10月26日晚,国庆期间深陷添加剂双标风波的海天味业发布了2022年三季报,报告显示,第三季度营收55。62亿元,同比(较上年同期)下滑1美元贪得无厌遭反噬今年以来,美元借助货币霸权债务危机转嫁美联储激进加息与地缘危机等条件对非美货币火力全开,美元兑非美货币普遍极限升值,使欧英日等发达经济体遭受重创,新兴经济体也是风雨飘摇,美元不仅成张坤疯狂卖出作者老鱼财经当年靠重仓白酒股一战而名登上公募一哥宝座的张坤,开始减仓白酒股了(规避10红线),同时,大幅度抄底医疗股!医疗或许是一个重大信号。张坤打理的三只主要A股基金分别为易方达回到同煤时代了两年前,晋控集团成立,随后旗下六大公司相继挂牌,六大板块中,煤业集团俨然成老大煤业党委书记由集团党委书记董事长郭金刚兼任,煤业集团诸多副职进入晋控集团班子,或在集团任职。图片来自网中国西部数字经济峰会圆桌对话数字经济赋能实体经济高质量发展10月27日,由红星新闻红星资本局承办的2022红星新闻中国西部数字经济峰会在成都举行。峰会上,西南财经大学数字经济与交叉科学创新研究院副院长李庆电子科技大学计算机工程系主任孙明成中国服务器30年变迁国产品牌成功逆袭领跑市场当前,在科技强国的战略下,中国科技的创新力正不断提升,已经在越来越多的领域取得突破,作为IT基础设施基石的服务器产业就是其中的代表。30年时间,中国国产服务器品牌从跟随参与追赶一路夸父升空与羲和共同逐日,中国初步建立综合性太阳观测网去年发射的羲和号可以称为我国探日工程的探路者,而夸父一号则是观察太阳的多面手,它可以从紫外线可见光和X射线波段等对太阳进行观测。我国发射的两颗探日卫星各有侧重,将共同提升我国在世界中国移动收购腾讯的可能性有多大?前天,股市大跌,市场传言,中国移动要收购腾讯。随之,腾讯方面辟谣,消息不实。之所以出现这样的谣言,主要原因是一些人片面的认为会国进民退,还有一些人本来就在鼓噪云计算国有化,甚至连运四季皆是美景游玩之地,就在西安近郊,快看看是否你已光顾过1子午峪子午峪为秦岭72峪之一,别称子峪,或子午谷。峪道长约六百六十里,北口名子,地处西安南南口称午,在汉中府洋县东。南可抵达汉中,是西安城通往南方的交通要道。亦是道教的发源地。汉中国璀璨的客家祠堂文化四堡古镇亨公祠考略亨公祠堂位于今福建省龙岩市连城县四堡镇田茶村田丁上路22号,为四堡遗存的明代邹氏祠堂建筑之一。在明清时期,该村称为汀州府长汀县四保里(又称四堡或四宝)龙足乡,为客家龙足乡邹氏的集族让粉丝留恋不已的三星官翻机Note20U,现在还值得买吗三星Note20U作为一代机皇,即便到2022年,也依然有不少粉丝喜欢,并且决定入手,那今天就一起来看看Note20U究竟有怎样的魅力,能让粉丝至今对它念念不忘。首先是外观,第一眼3款好评度高达96的笔记本推荐!双11预算4K左右可以这样选今年双11活动已经开启,入手数码产品最佳时机来了。对于一般消费者来说,动辄大几千,甚至上万的游戏本实在不太划算,而且自身根本用不上那些硬件确实有点浪费,适合自己需求才是最好的。毕竟双十一投影哪款值得选?极米H5实际体验如何?值得买吗?欢迎来到科技杂志社,社长聊投影仪,今天为大家点一首好听的歌我用什么把你留住,下一期想听什么歌可以在评论区点歌哦!如果你最近想买旗舰机,并且还没有明确的目标,那建议你认真看一下今天的库克回应iPhone14Pro供不应求美东时间10月27日,苹果公司发布了2022财年第四财季及全年财报。苹果公司第四财季每股收益和营收均超出华尔街分析师此前预期,但iPhone和服务营收则未能达到预期,从而导致其盘后易开得C2ProMAX体验抑菌过滤,不插电无废水,厨房直饮净水器不知不觉中,自己一个人在北京已生活近十年。近几年家中父母以肉眼可见的速度衰老,年龄也已经步入法定养老年龄,奋斗大半生,逐步进入享受生活的阶段。眼下科技改变生活已经不仅仅是一句口号,你知道元宇宙是怎么发展的吗?经历了哪些事件?(国内篇)上期给大家介绍了海外元宇宙的发展历程,可以看出,基本上都是美国关注的比较多,今天给大家分享元宇宙在我们中国的发展历程。2020年中国腾讯参投Roblox1。5亿美元G轮融资,并独家性价比相当高的吉利雷神现在大家买车其实大部分都是用于家用,最重点注意的就是油耗方面的表现,再加上今年油价的增高,新能源车型越来越走进大家的生活里。虽然纯电汽车有着诸多优点,但同时也存在着自身的缺点,首当2023年包括比特币在内的DeFi将打破传统金融的窗纸2016年10月3日,VitalikButerin提出运行链上DEX的理念,催生了我们所说的去中心化金融,也就是DeFi。UniswapMakerProtocol和Compound极氪001真实能耗报告出炉,快来看看如今的油价可谓是居高不下,因此许多消费者将出行首选转向了新能源汽车,低廉的出行成本,智能化的座舱配备,电机带来的凌厉加速,都让消费者爱不释手。而在选择电车时,实实在在续航里程就变得4988降到3199元的鼎桥P50,性能如何?值得购买吗?鼎桥P50是今年五月发布的一款5G手机,那这款手机性能如何?现在值得购买吗?手机屏幕这款手机的屏幕是6。5英寸超大OLED直面屏,屏幕的分辨率是2700x1224像素,而屏幕刷新率情已入心,爱已入骨红尘无尽只为一丝情一念爱有多少的人在红尘中来回渡步?看尽花开花落望尽春风来去轮回着岁月生命只为曾经入心的情曾经入骨的爱在无尽的红尘中牵牵绊绊情入心,爱入骨因起缘生轮回着生生世世的不