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. hashMap是线程安全的吗? 不是啦
  10. 有哪些线程安全的Map他们是怎么实现线程安全的。 答:HashTable,CocurrentHashMap HashTable 是在真个数组上加 synchronized实现,CocurrentHashMap使用减小锁粒度的方式实现(1.8 采用了 CAS + synchronized 来保证并发安全性)
  11. CAS和synchronized有啥区别? 这个我会在锁的篇章为大家做具体分析。

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

经验分享 程序员 微信小程序 职场和发展