Java互联网面试连环炮--集合

Java互联网面试连环炮--集合

概述

大家好,从本篇博客开始,我将和大家一起分析互联网常见的一些面试题,以及面试题背后的知识体系。为什么叫做面试连环炮呢,互联网公司的面试官一般会由表及里,根据面试者的回答,一环一环的问,直到面试者回答不上来,或者面试官觉得这块知识面试者已经掌握的比较好了,这种面试的形式被网上称之为连环炮。本篇先从Java基础中的集合开始。

Java集合连环炮

一般互联网面试的第一轮技术面试问到Java集合的概率基本是百分之百,下面我就模拟一个常见的Java集合面试连环炮:

  1. Java常见的集合有哪些?
    在这里插入图片描述
    这时候有经验的面试者会体系化的介绍Java集合,并且将自己掌握比较深的集合和一些能加分的集合提一下,这个时候千万不要提自己不清楚的集合,理论上你提到的都会被问到细节。模拟回答如下:
    a)Java中的集合主要有List ,Set,Map ;
    b)常用的List有ArrayList,LinkedList ;
    c)常用的Set有HashSet,TreeSet,LinkedHashSet;
    d)常用的Map有HashMap,HashTable,ConcurrentHashMap,LinkedHashMap。

  2. ArrayList和LinkedList底层是用什么数据结构实现的。
    答:ArrayList是使用数组实现的,LinkedList是使用链表实现的。

  3. 链表和数组有啥特点或者区别;
    答:a)数组是内存中的一块连续区域。链表是用节点对象实现,节点对象包含了前驱节点和后继节点以及节点包含的数据对 象。( E item; Node next;Node prev;)。链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。
    b) 链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难;数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。

  4. 链表都有几种结构;
    答:单向,双向和循环。回答这些问题的时候可以适当的在纸上画一下,这样效果更好。

  5. 这时候有些面试官可能会顺带问到你一些基础的算法,让你现场手写…比如出现比较多的二分查找,快速排序等这些知识我会再另外的篇做专门的介绍。

  6. Hashmap的底层数据结构是什么?
    答:数组加链表(红黑树)这个时候最好画图。

  7. HashMap主要有哪些方法?
    答:常用的有put,get等等的,

  8. 描述一下put的过程。
    答:
    1.对Key求Hash值,然后再计算下标
    2.如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)
    3.如果碰撞了,以链表的方式链接到后面
    4.如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于 6,就把红黑树转回链表
    5.如果节点已经存在就替换旧值
    6.如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)

  9. 为什么超过8才转换为红黑树呢,有没有考虑过。
    这个问题比较偏有的面试官压根问不到,即使问到了你答不上其实也还好,这时候你可以反问他一下。当然你真的好奇然后研究过原因能答出来,是一个加分点,会让面试官眼前一亮。
    答:我思考过,当数字是8的时候,红黑树的平均查找长度小于链表,(长度为8时,红黑树的平均查找长度为3,链表为4.),但是我也有点疑问,因为链表转换为红黑树本身也会影响性能。后来我看到了HashMap源码上方有一段注释。翻译过来大概的意思是:理想情况下使用Key的哈希码,容器中节点分布在hash桶中的频率遵循泊松分布,按照泊松分布的计算公式计算出的结果,链表中元素个数为8时的概率已经非常小大概是千万分之6,再多的就更少了,所以原作者在选择链表元素个数时选择了8,是根据概率统计而选择的。

  10. hashMap是线程安全的吗?
    不是啦

  11. 有哪些线程安全的Map他们是怎么实现线程安全的。
    答:HashTable,CocurrentHashMap
    HashTable 是在真个数组上加 synchronized实现,CocurrentHashMap使用减小锁粒度的方式实现(1.8 采用了 CAS + synchronized 来保证并发安全性)

  12. CAS和synchronized有啥区别?
    这个我会在锁的篇章为大家做具体分析。

上述是一个比较常规的关于Java集合面试的一个连环炮,先 感受一下,接下来我会详细分析一下各个集合的原理以及特点。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值