栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【面试】ConcurrentHashMap原理剖析(待完善)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【面试】ConcurrentHashMap原理剖析(待完善)

文章目录
  • 一、源码
  • 二、面试
    • 0、考察范围
    • 1、ConcurrentHashMap 是如何实现的? 1.7、1.8 实现有何不同?为什么这么做?
    • 2、ConcurrentHashMap 的 Key 和 Value 都不能为 null,而 HashMap 却可以,设计的原因是什么?
      • 追问1:TreeMap、Hashtable 等 Map 的 Key 和 Value 是否支持 null 呢?
  • 三、参考

一、源码

……

二、面试 0、考察范围

这个问题可以考查三个点:你是否真的在一线写代码,因为只要是写代码就一定绕不开 。对这么常用的数据结构HashMap,你是只停留在会用 API 的层面,还是说

1、Java 的 HashMap 是如何实现的。按我的要求,候选人能够深入到内部算法实现,至少要把 HashMap 的内部数据结构实现和 get/put 算法给讲清楚。

2、能把装载因子(load factor)和再哈希(rehashing)給讲清楚。

3、延申:可以向 Java 集合框架方向延伸,也可以向 Java 多线程方向延伸,其中涉及的内容很多,例如 HashTable、ConcurrentHashMap,甚至 TreeMap、ConcurrentSkipList 和 ThreadLocal 等。HashMap 的基本原理并不难,但是延伸的内容如果没有实际动手实践过,你一般很难回答上来。

1、ConcurrentHashMap 是如何实现的? 1.7、1.8 实现有何不同?为什么这么做?

JDK1.8之后ConcurrentHashMap就放弃了分段锁策略,而是直接使用CAS+Synchronized方式保证性能,这里的锁是指锁table的首个Node节点。在添加数据的时候,如果Node数组没有值的情况,则会使用CAS添加数据,CAS成功则添加成功,失败则进入锁代码块执行插入链表或红黑树或转红黑树操作。


2、ConcurrentHashMap 的 Key 和 Value 都不能为 null,而 HashMap 却可以,设计的原因是什么?

如果 Value 为 null 会增加二义性,即多线程情况下 map.get(key) 返回 null,我们无法区分 Value 原本就是 null 还是 Key 没有映射,Key 也是类似的原因。
而用于单线程状态的hashmap却可以用containKey(key) 去判断到底是否包含了这个null。

追问1:TreeMap、Hashtable 等 Map 的 Key 和 Value 是否支持 null 呢?

Hashtable 也是线程安全的,所以 Key 和 Value 不可以是 null。TreeMap 是线程不安全的,但是因为需要排序,需要进行 key 的 compareTo 方法,所以 Key 不能是 null,而 Value 可以是 null。

三、参考
  • 源码
    1、JDK源码分析(12)之 ConcurrentHashMap 详解
    2、ConcurrentHashMap扩容实现机制
    3、ConcurrentHashMap详解
    4、ConcurrentHashMap的使用
    5、史上最详细的ConcurrentHashMap详解–源码分析

  • 面试
    1、面试:为了进阿里,死磕了ConcurrentHashMap源码和面试题(一)
    2、《我们一起进大厂》系列-ConcurrentHashMap & Hashtable
    3、并发容器–ConcurrentHashMap常见面试题
    4、【Java自顶向下】ConcurrentHashMap面试题(2021最新版)
    5、第10讲 | 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

  • 拓展
    1、18 | 被面试官问住了怎么办?
    2、05 | 考官面对面:我是如何面试程序员的?
    3、12 | 多线程之锁优化(上):深入了解Synchronized同步锁的优化方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292903.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号