求职宝典

面试技巧和原理,面试技巧和原理怎么写

大家好,今天小编关注到一个比较有意思的话题,就是关于面试技巧和原理的问题,于是小编就整理了1个相关介绍面试技巧和原理的解答,让我们一起看看吧。

  1. java面试都问知不知道hashmap的原理,那我就想问,知道原理有什么用?

java面试都问知不知道hashmap的原理,那我就想问,知道原理有什么用?

Java中的HashMap可以说是平时开发中最常用的数据结构之一了,经常使用的***类还有ArrayList、HashSet,基本上用好HashMap、ArrayList、HashSet这三大***类,大多数的业务场景就满足了,掌握这三大***类也是作为一名J***a程序员的基础能力

平时开发大多数的业务场景都是CRUD,且数据量都很小,所以基本上不会有什么问题。那么还需要知道其底层实现原理吗?还需要知道这些***类的数据结构吗?

面试技巧和原理,面试技巧和原理怎么写
图片来源网络,侵删)

当然需要,这很重要!这里就拿HashMap来具体说一说了解它的设计思想多么的重要!

HashMap的底层数据结构简单来说就是数组+链表+红黑树这个大家都知道,面试也是高频面试题,用一张图来形容就是:

那这个时候你就得知道数组的好处了,基于下标的随机访问和赋值数组元素的时间复杂度都是O(1),这就能保证HashMap数据没有哈希冲突的时候它的set/put方法都是O(1)的,这也是HashMap要追求的极致目标(尽管会有哈希冲突)。这就是HashMap查询性能快、插入数据快的主要原因,是一个空间换时间的思想。

面试技巧和原理,面试技巧和原理怎么写
(图片来源网络,侵删)

但前提是我们得知道我们要把一个数据插入到数组的哪个下标,因此就***用了哈希的思想。一个对象一定有一个唯一的hash值,但是两个对象也有可能有相同的hash值,这叫“哈希冲突”。所以为了更好的利用数组,哈希值计算要尽可能的避免冲突,也就是追求“低碰撞率”。

这也涉及到另外一个问题,比较一个对象的时候为什么要重写它的hashcode()方法和equals()方法。

那业内除了J***a自带的Hashcode()方法还有哪些hash算法你了解吗?比如MurmurHash算法。他们都在哪些开源软件应用到?各种哈希算法的性能比较又如何?我们平时开发能不能借鉴这种思想?

面试技巧和原理,面试技巧和原理怎么写
(图片来源网络,侵删)

视频加载中...

阿里京东、蚂蚁等大厂面试真题解析

先说HashMap的Put⽅法的⼤体流程

1. 根据Key通过哈希算法与与运算得出数组下标

2. 如果数组下标位置元素为空,则将key和value封装为Entry对象(JDK1.7中是Entry对象,JDK1.8中是Node对象)并放⼊该位置

3. 如果数组下标位置元素不为空,则要分情况讨论

a. 如果是JDK1.7,则先判断是否需要扩容,如果要扩容就进⾏扩容,如果不⽤扩容就⽣成Entry对象,并使⽤头插法添加到当前位置的链表中

b. 如果是JDK1.8,则会先判断当前位置上的Node的类型,看是红⿊树Node,还是链表Node

  • i. 如果是红⿊树Node,则将key和value封装为⼀个红⿊树节点并添加到红⿊树中去,在这个过程中会判断红⿊树中是否存在当前key,如果存在则更新value
  • ii. 如果此位置上的Node对象是链表节点,则将key和value封装为⼀个链表Node并通过尾插法插⼊到链表的最后位置去,因为是尾插法,所以需要遍历链表,在遍历链表的过程中会判断是否存在当前key,如果存在则更新value,当遍历完链表后,将新链表Node插⼊到链表中,插⼊到链表后,会看当前链表的节点个数,如果⼤于等于8,那么则会将该链表转成红⿊树
  • iii. 将key和value封装为Node插⼊到链表或红⿊树中后,再判断是否需要进⾏扩容,如果需要就扩容,如果不需要就结束PUT⽅法

到此,以上就是小编对于面试技巧和原理的问题就介绍到这了,希望介绍关于面试技巧和原理的1点解答对大家有用。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。 转载请注明出处:http://www.dkcfns.com/post/104032.html

分享:
扫描分享到社交APP