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

Java经典面试题HashMap和HashTable分析

  前言:
  HashMap 应该算是 Java 后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的 Java 基础。比如HashMap和HashTable以及ConcurrentHashMap,这个就是hashmap面试的精髓,大家来一起看看是如何面试的吧! 开场
  面试官: 你先自我介绍一下吧!
  我: 我是  ,毕业于  **,目前在--公司做--系统开发。开发的项目有--布拉布拉......
  面试官: 看你简历上写熟悉 Java 集合,HashMap 用过的吧?
  我: 用过的。(还是熟悉的味道)
  面试官: 那你跟我讲讲 HashMap 的内部数据结构?
  我: 目前我用的是 JDK1.8 版本的,内部使用数组 + 链表红黑树;
  我: 方便我给您画个数据结构图吧:
  面试官: 那你清楚 HashMap 的数据插入原理吗?
  我: 呃......我觉得还是应该画个图比较清楚,如下:
  判断数组是否为空,为空进行初始化; 不为空,计算 k 的 hash 值,通过(n - 1) & hash计算应当存放在数组中的下标 index; 查看 table[index] 是否存在数据,没有数据就构造一个 Node 节点存放在 table[index] 中; 存在数据,说明发生了 hash 冲突(存在二个节点 key 的 hash 值一样), 继续判断 key 是否相等,相等,用新的 value 替换原数据(onlyIfAbsent 为 false); 如果不相等,判断当前节点类型是不是树型节点,如果是树型节点,创造树型节点插入红黑树中; 如果不是树型节点,创建普通 Node 加入链表中;判断链表长度是否大于 8, 大于的话链表转换为红黑树; 插入完成之后判断当前节点数是否大于阈值,如果大于开始扩容为原数组的二倍。 面试官: 刚才你提到 HashMap 的初始化,那 HashMap 怎么设定初始容量大小的吗?
  我: (就猜你会问这个) 一般如果new HashMap() 不传值,默认大小是 16,负载因子是 0.75, 如果自己传入初始大小 k,初始化大小为 大于 k 的 2 的整数次方,例如如果传 10,大小为 16。(补充说明:实现代码如下) static final int tableSizeFor(int cap) {   int n = cap - 1;   n |= n >>> 1;   n |= n >>> 2;   n |= n >>> 4;   n |= n >>> 8;   n |= n >>> 16;   return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; } 复制代码
  补充说明:下图是详细过程,算法就是让初始二进制右移 1,2,4,8,16 位,分别与自己异或,把高位第一个为 1 的数通过不断右移,把高位为1 的后面全变为 1,111111 + 1 = 1000000 = 2的6次方(符合大于 50 并且是 2 的整数次幂 )
  面试官: 你提到 hash 函数,你知道 HashMap 的哈希函数怎么设计的吗?
  我: (不是吧,非要问到我不会为止吗) hash 函数是先拿到通过 key 的 hashcode,是 32 位的 int 值,然后让 hashcode 的高 16 位和低 16 位进行异或操作。
  重点来了! 面试官:HashMap和HashTable的区别是什么? 我: HashMap不是线程安全的
  HashMap是map接口的子类,是将键映射到 值的 对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。 HashTable是线程安全。
  HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
  HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差。 那ConcurrentHashMap呢,它是干嘛的?
  虽然jdk提供了HashMap和HashTable但是如何同时满足线程安全和效率高呢,显然这两个都无法满足,所以就诞生了ConcurrentHashMap神器,让我们应用于高并发场景。
  该神器采用了分段锁策略,通过把整个Map分成N个Segment(类似HashTable),可以提供相同的线程安全,效率提升N倍,默认提升16倍。
  ConcurrentHashMap的优点就是HashMap和HashTable的缺点,当然该神器也是不支持键值为null的
  ConcurrentHashMap的出现也意味着HashTable的落幕,所以在以后的项目中,尽量少用HashTable。
  面试官:(内心os:小伙子可以的,对底层了解 的 很深啊,基础很好,剩下的不用问了)
  你的水平我这边基本了解了,我对你还是比较满意的,基础和原理还是很好的,我这边会跟上面进行反馈,会对你的简历进行评估筛选,通过了会进行二面的,你回去等通知吧。
  我:好的好的,谢谢面试官,我这边先回去了。内心OS:好险好险,一个hashmap差点被问倒,幸好面试前好好看了一下,不然今天就尴尬了,回家等通知!

三星屏幕霸主神话不再!全球AMOLED屏市场大洗牌国产厂商成功逆袭8月25日讯导语,一提及AMOLED屏幕,相信很多网友们首先想到的就是三星,确实根据全球最新的AMOLED屏幕市场份额数据来看,三星一直都凭借着80的市场份额,垄断着全球AMOLE开学买什么蓝牙耳机比较好?便宜耐用学生蓝牙耳机推荐相比有线耳机带来让人纠结的线束困扰,蓝牙耳机让聆听彻底变得无拘无束,深受广大年轻人尤其是学生党的喜欢。恰逢开学季即将到来,在这里就整理的一些适合学生党平价又好用的无线蓝牙耳机!1X开学季学生党选购推荐,平价好用的蓝牙耳机牌子学生党买什么蓝牙耳机好呢?市面上如此多的蓝牙耳机品牌究竟要怎么选择?当然是选性价比高而且便宜耐用的啦,今天就为同学们推荐几款平价好用质量又好的学生蓝牙耳机,可以参考下为开学做准备了以变应变!中兴通讯AAPC助力辽宁移动实现潮汐场景网络的提质增效在通信系统中,普遍将在特定时间内大量聚集,随后又大量迁移的人们形成的话务量集中流动现象称为潮汐效应。比如大型工厂高校等处,在上班(上课)时,人们在工作学习区域大量聚集,中午在餐馆食工业设备远程监控5G工业路由器计讯物联工业设备远程监控用5G工业路由器TG463,工业级32为处理器,全网通5G4G网络,支持边缘计算满足工业场景大型设备的大量接入与数据高速处理能力。丰富协议库对接主流PLC云灵活易用,快速清理手机垃圾文件使用安卓手机的用户都有一个感觉,就是手机在使用一段时间后,会出现缓慢甚至卡顿的情况。之所以出现这样的问题,主要原因就是手机里出现了大量的垃圾文件。虽然很多手机自带有垃圾文件清理的功华为云空间提醒空间不足,不想升级空间,怎么关闭提醒?没有一点点防备,手机云空间不足的提醒它又来了!作为手机控患者,看到提醒时的焦虑值堪比您的假期余额不足怎么关闭云空间的消息提醒?如何关闭云备份空间不足的弹窗提示?本期热心帮帮在线为您打造高质量外观和自拍体验,vivoS10Pro掌握了销量密码?伴随着手机硬件和功能的不断升级,现如今市面上的手机同质化愈发明显,相似的配置相近的外观成为市场主流。但在众多产品中能够真正满足年轻消费者个性化需求的产品却寥寥无几。目前看来,也就只产销创新高前7月新能源汽车产销量超去年全年来源人民日报安全又便利产销创新高前7月新能源汽车产销量超去年全年(新数据新看点)焊花飞溅马达运转浙江金华零跑汽车智能工厂焊装车间,80台机器人紧张有序地进行焊接作业。8月排产500比亚迪叉车坚守绿色新能源,坚持创新促发展马路上越来越多的新能源汽车路边林立而起的充电桩地图上新上线的新能源导航不难发现,新能源已悄然渗透人们的日常生活,碳中和时代背景下,科技制造生产等领域坚持绿色可持续发展是必然趋势。风石头自清洁扫拖机器人G10评测彻底解放双手的最后一步当智能手机把人们的日常变得一只手就能掌控之后,机智一点的公司就想到了除了手机之外该怎么用产品来满足人们的日常生活,例如打扫家务。这一点,石头科技公司做得很早。提起石头家的产品,印象
放弃祖传1200万像素?传iPhone14使用4800万像素,支持8K拍摄要说业内有什么手机公司最喜欢使用1200万像素的摄像头系统,那么肯定是非三星和苹果莫属了。三星之前一直采用1200万像素的主摄,这两年好歹用上了一亿像素,而苹果自iPhone6S发iPhone14再曝猛料,性能被阉割截止目前,我们已经看到了许多关于iPhone14各方面信息的爆料。透过其中一些主流的说法,我们可以了解到关于iPhone14的大致轮廓。比如将砍掉mini机型,Pro系列采用打孔屏华为将艺术装进宝盒,将鎏光收入囊中这次,华为做出了一件艺术品。手机,作为一个整合了先进工艺软件算法等多维技术点的科技产品,在大部分人认知中是冰冷线条和技术融合的产物,如何让手机硬朗的外表下赋予其艺术氛围和时尚气质?导致阿里云被处罚的log4j2是个什么?阿里云的员工发现了log4j组件的重要安全漏洞,只上报了Apache,没有告知GXB,受到了处罚。log4j2是从log4j一步步变过来的。它就是一个用Java编写的可靠快速和灵活多行内容超出显示的JS解决方案一个貌似很简单,但写起来也不简单的问题对于多行文字,超出显示。通过css可以实现,但受限于浏览器兼容问题,有时候还需要依赖js来实现。通过js实现,就需要考虑到文字大小,中英文数字为什么闲鱼app取消了网页版?问一个问题在2021年,如果你决定要做产品,你会选择做app还是做网站?注意这里的网站不止是门户,包括以网站形态提供功能服务的产品,比如数据分析平台工具网站还有视频播放等。关于这个新年前夕,东南亚运费暴涨10倍阿里国际站进行类目调整PART1今日头条01hr新年前夕需求旺中国东南亚运费暴涨10倍据香港南华早报网站报道随着需求增加中国运往东南亚的运费增长了10倍。在农历新年前夕的高峰季节从中国运往周边亚洲国家的阿里云被暂停工信部网络安全合作单位6个月,因未及时报告高危bug出品搜狐科技编辑尹莉娜12月22日消息,近日,阿里云公司发现阿帕奇(Apache)Log4j2组件严重安全漏洞隐患后,未及时向电信主管部门报告,未有效支撑工信部开展网络安全威胁和漏联想贱卖国有资产大质疑,为啥相关部门和联想集团都没有关切回应联想集团,最早起源于中科院直属下的一个计算机科研所,借着改革开放的东风,从一个刚开始只有几十个人的小研究所发展到现在的几万人的跨国集团企业,以前的的是中科院出资控股,到如今中科院没联想柳倪之争(二)倪被辞退后,联想还是使用汉卡技术赚取利润的,现在的规则下倪是应该有权获得报酬的,而且因工作关系是要得到补偿的。本人认为中科院联想公司没有理清这一点是当时特别条件下的蔬忽,国际上通行2022最令人期待的8大旗舰手机,为拼市场倾尽全力,堪称神仙打架距离新年还有半个月的时间,各大手机制造商动作频频,继今年推出了不少的新品手机之外,又纷纷为明年的旗舰手机发布做充足的准备。我们很高兴看到2022年在智能手机发布方面的表现。包括三星