ITPub博客

首页 > 数据库 > 数据库开发技术 > 简单而深刻丨HashMap面试题详细解析,速来查看!

简单而深刻丨HashMap面试题详细解析,速来查看!

原创 数据库开发技术 作者:Finally_m 时间:2022-07-29 08:03:00 0 删除 编辑
点击上方蓝字关注我们

一、面试官套路

我们在面试时,大多数面试官往往会从一个比较简单的问题开始问求职者,通过逐层深入,一点点来了解求职者的技术水平达到了一个什么样的程度。下面波哥就以HashMap的知识点面试为例进行分析。

二、面试问题分析

2.1 请问你熟悉HashMap吗?

对于这个问题,求职者只能回答熟悉,这是面试官对HashMap考察的开始。

首先这是一个比较简单的问题,属于Java基础中集合的知识点,面试官主要想了解求职者对HashMap的使用程度。

如果求职者回答不熟悉,就会大幅度的降低自己的面试成绩,因为HashMap是开发过程中很常用的集合之一,如果求职者对开发过程中常用的集合不熟悉,面试官会怀疑的你工作经历造假,极有可能面试不通过。

因此,求职者只能回答熟悉,而且要在此对HashMap的基本特性进行必要的介绍。

2.2 请你说说HashMap是如何存储数据的?

这个问题是对上一个问题的深入,面试官想了解求职者是否阅读过HashMap的源码。求职者需要说出HashMap是使用数组+链表+红黑树进行数据存储的,存储的时候通过计算key的hash值,使用hash散列算法与数组的长度进行运算,计算出数据存储的具体位置,然后将数据存入到该位置。

如果求职者对该问题回答不出来,那么说明求职者的技术水平仅停留着使用层面。

2.3 HashMap是如何解决hash碰撞的?

这个问题依然是对上一个问题的深入,如果上一个问题没有回答出来,这个问题可能就不会出现了,面试官想通过该问题了解求职者对源码解读的深入程度。求职者应该先解释什么是hash碰撞,然后再说明HashMap怎么解决hash碰撞的。

所谓hash碰撞,指的是不同的key通过hash散列算法与数组的长度计算出来的存储位置相同。说得直白一点,就是两个key在同一个存储位置上碰头了。发生hash碰撞,说明数组的同一个位置上存储了多个元素。

HashMap采用链表来解决碰撞问题,将后面存入的数据挂在前一个存储数据的下面。如果该问题回答出来,则说明求职者对源码有一定程度的理解。

2.4 刚刚你回答的时候说到了红黑树,HashMap在什么时候会使用红黑树?

这个问题依然是对上一个问题的深入,面试官想知道求职者是否精读过HashMap源码。求职者需要说出链表存在的问题,然后再说出优化方案。

链表存在的问题:遍历链表需要从一端到另一端,如果链表过长,则会导致遍历效率降低,所以从HashMap中取值的效率也会降低。HashMap在存储数据的时候对链表的长度进行了校验,如果链表长度大于8,那么会将链表转换为红黑树。我们知道红黑树是一种二叉树,能够提高查询的速度。

同样,HashMap在移除数据的时候,也会对红黑树中的数据个数进行校验,当树中存储的数据个数减少到6时,又会重新将红黑树转换为链表。

2.5 发生hash碰撞的时候数据存储在同一个位置,那么取值的时候如何取?

面试官通过这个问题,想了解求职者对于取值部分的源码是否进行过解读。求职者需要说出,先通过hash散列算法与数组的长度计算出数据存储的位置,然后对该位置的链表或者红黑色进行遍历比较,比较的时候使用的是equals方法,只要比较结果为真,那么就是需要获取的数据。

以上就是波哥对HashMap相关面试题的一个解读过程,现在你知道该怎么去回答这个面试题了吗?欢迎在评论区给波哥留言说出你的疑惑哦。

本月福利,关注公众号回复【福利】抢书咯!

今日份干货,学会的同学回复“666”!

精选第一名,可以领取办公鼠标垫一个哦!

点击【阅读原文】,零基础免费学Java!

原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243878