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

说明

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

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相关

面试基本没有被问到,暂时不写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值