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 你的点赞和收藏都是我持续更新的动力

全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
12-02 21:34
中南大学 Java
我这边应该算是华为第一批开奖的了,还是要11月底才开,不过今年的流程整体比去年确实要开得早,这一点还是值得表扬的。然后华为也确实很有诚意,给我这样bg的硕鼠开了15a,并且base地还是在杭州,应该是buff拉满了,但凡其他公司开的没这个高,and对象没签上海,可能真选择成为华孝子了。虽然很有诱惑力,但是这个15a的offer里面确实还是有猫腻的:1. 薪资构成是这样的,15a = (基本工资+绩效工资)*12 + 10w年终,虽然绩效工资hr说100%能拿满,年终大部分都能拿满,绩效工资能拿满我可能还选择相信,但10w年终还能拿满,这我就存疑了。反正看了一圈别家的公司报价都是报一般情况下能拿多少年终,比如美团0-6个月,就报3.5个月,但是华似乎是喜欢往最高了报,所以估计10w年终拿满应该也是极少数人。2. 公积金只交5%,并且缴纳基数还只是按基本工资交的,这里看似每个月到手的钱变多了,但是总体算下来,可能一年比别家就少拿1-2w。3. 月末周六要加班,可以选择调休或双倍加班费,并且平常应该也会加班,感觉不大会像hr说的124能8.30下班,35能5.30下班的,云计算bu强度应该还算比较好的,估计一般情况下9-9-5吧,但是不知道并入ict后会如何。4. 还有相关的业务线,听说8,9月份云计算bu内部已经调整了一波,好像还要并入ict下面了,感觉未来的不确定性也比较大。5. 华为的认可度应该比不过传统的互联网大厂,技术的前瞻性应该也比不过(个人看法)。6. 培养和升职,感觉美团可能更有说法,毕竟见到过1年升L6的,甚至还有两年升L7的,对华为的了解相对较少,只知道华为可能相对稳定一些?毕竟4年一签?综上,还是决定放弃华,准备去团吧,自己选的路,希望不会后悔吧。
变形钢筋:这个薪资结构,年终奖是画大饼啊
OC/开奖
点赞 评论 收藏
分享
评论
5
14
分享

创作者周榜

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