Java后端程序员面经(1-1. Java基础之集合篇)

来源:互联网 发布:sql server2008教程 编辑:程序博客网 时间:2024/06/15 21:33

说明

本文主要基于面试中碰到的问题进行总结分析,可能不全。

Map相关

基础点

1. HashMap数据结构,即table+单链表(jdk8后,在节点超过TREEIFY_THRESHOLD时,会将单链表转换为红黑树)2. HashMap不是线程安全的,一般是指多个线程同时resize过程中,会导致死循环,详见:http://www.importnew.com/22011.html。

进阶点

1. 线程安全地使用Map有哪些方式,即ConcurrentHashMap[我了解到的较好的方式]、Map m = Collections.synchronizedMap(new HashMap())[对每个操作都synchronized (mutex)]、Hashtable[这个我自己基本没有使用过]。2. 对比Hashtable和HashMap    2-1. Hashtable的方法是synchronized的,HashMap的方法不是,单线程环境前者比后者慢。    2-2. Hashtable中,key和value都不允许出现null值。在HashMap中可以。    2-3. 哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。    2-4. 初始大小和扩容的方式不同。HashTable中hash数组默认大小是11,增加的方式是 *2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。    2-5. HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。详见:http://www.importnew.com/7010.html

加分点

1. 线程安全地使用Map的各种方式如何实现线程安全的    1-1. ConcurrentHashMap,分段锁,通过对table段采用不同的锁,减小锁粒度,提高并发量    1-2. Collections.synchronizedMap,对HashMap的所有操作加锁    1-3. Hashtable,内部方法都是synchronized的2. 详细了解以上各个类的内部实现    2-1. HashMap的get,put方法实现代码,构造方法有哪些,常用参数的默认值    2-2. ConcurrentHashMap的上述方法及参数设置源码

Set相关

面试基本没有被问到,暂时不写

List相关

面试基本没有被问到,暂时不写

原创粉丝点击