ConcurrentHashMap面试

CAS 自旋操作

CAS是compare and swap的缩写,即我们所说的比较交换。cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据,性能较悲观锁有很大的提高。乐观锁适用于读多写少的情况下面。

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成B。CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。

CAS 存在的问题:

存在的问题: ABA 问题,一个线程将数值 a 改成 b,然后又改成了 a,CAS 是认为没有变化的,其实已经变化了,解决方案加一个版本号。每次操作的时候 version+1.

CPU 利用率增加,CAS 的无限循环判断过程中,如果线程一直没有获取到状态,CPU 资源一直被占用。

alt

alt

alt

ConcurrentHashMap

这个需要和 HashMap 进行比较。

对于 Node 数组,使用 volatile 关键字修饰,防止指令重排序发生。

alt

put 方法进入一个死循环,进行 CAS 操作

alt

alt

ConcurrentHashMap 的 get 方法是不加锁的,table 使用了 volatile 关键字修饰,保证了每次获取的值都是最新的。

alt

concurrenthashmap 是线程安全的容器,在并发情况下面是线程安全的。而 HashMap 是不安全的

允许null 值吗?

HashMap 是允许 null 值的。hashMap 允许一个 key 是 null 值,value 可以允许多个 null 值。

而 currentHashMap 是不允许 null 值的,因为 null 值有两种情况,一个是不存在,还有一个 value 就是 null,有些场景下面 value 就是 null,存在 key 的。那这样就会出现了歧义。

面试题

cuncurrentHashMap 的 get 方法是否需要加锁,为什么?

cuncurrentHashMap 和 HashMap 的区别是什么?

cuncurrentHashMap 在 jdk1.7 和 1.8 的结构分别是什么?做了什么修改

参考:https://blog.csdn.net/u011381576/article/details/79922538

#HashMap##ConcurrentHashMap面试#
牛牛的面试专栏 文章被收录于专栏

牛牛的面试专栏,希望自己在25年可以拿到一份大厂的SP Offer 你的点赞和收藏都是我持续更新的动力

全部评论

相关推荐

06-27 09:13
黑龙江大学 Java
面试体验是很棒的,面试官都非常准时,面试过程中也会去引导,会沿着你的回答继续去问自我介绍项目介绍项目中提到的线程池干什么用的?还有什么创建线程池的方法?线程池的核心参数。拒绝策略?线程池收到任务后执行流程?如果请求量比较大怎么调参数?项目中 ConcurrentHashMap 干什么用的?为什么要用他别的不行吗?如果不用他你会怎么实现?介绍项目中对接ai生成可视化图表。项目中用 ThreadLocal 做什么的?知道 ThreadLocal的内存泄露问题吗?为什么要把key设置为弱引用? ThreadLocal底层是怎么实现的?为什么要用Redis作缓存?Redis为什么快?Redis雪崩和击穿问题。Redis大key问题。如果让你来设计你会用什么思路解决?除了缓存Redis还能干什么?用过Redis当消息队列吗?为什么不如MQ?刚刚提到Redis持久化机制,介绍一下。聊了聊笔试的第三题派对男女匹配问题说一下常见的排序算法,手撕归并介绍jvm垃圾回收算法。怎么判断对象是否是垃圾?假如你项目上线后突然有个功能出现故障了,要怎么办?之后就聊了聊学校学习的一些事,如果要学习新知识会怎么学?看视频还是看文章?怎么做技术选型的?问了下个人优点,有没有考研打算,为什么不考研?之前参加过多少面试?准备面试多久了?平时会去背八股吗?那如果遇到八股没背到的东西怎么回答呢?
MOMOUX一面5人在聊 查看16道真题和解析
点赞 评论 收藏
分享
06-12 16:22
门头沟学院 Java
丰川打工祥:这家公司的业务是面试,编码机会比较少。面试通过是3300+500绩效。有住宿。工作是给他们的学员面试。
查看15道真题和解析 我的求职总结
点赞 评论 收藏
分享
评论
4
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务