HashMap面试题解析
一、面试官套路
我们在面试时,大多数面试官往往会从一个比较简单的问题开始问求职者,通过逐层深入,一点点来了解求职者的技术水平达到了一个什么样的程度。下面就以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方法,只要比较结果为真,那么就是需要获取的数据。
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14