首页
学习
活动
专区
圈层
工具
发布

多个变量更新怎么保证原子性?CAS的ABA问题怎么解决?

小陈:老王啊,我有个疑问啊,java不是提供了AtomicInteger、AtomicBoolean这些原子类了吗?为什么还需要有AtomicReference这东西啊?...老王:JUC虽然提供了AtomicInteger、AtomicBoolean这些基本类型的原子类,但是啊有些场景并不是仅仅修改一个变量那么简单,有可能某个需要修改几个变量,但是需要这个操作具有原子性,比如说我给你举例的这个例子...老王:让我们继续,来看看AtomicReference底层有什么东西?...老王:是的,确实是需要多一个版本号维度去判断,那你知道Atomic原子类里面哪个类能解决这个问题吗? 小陈:啊,这个......我就不知道啊,还是老王你来讲讲吧。 老王:哈哈,好。...8.volatile为啥不能保证原子性? 9.synchronized是个啥东西?应该怎么使用? 10.synchronized底层之monitor、对象头、Mark Word?

25720

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

但这些优势是有前提的。 Redis的性能高,吗? Redis的性能非常高。...比如Sidekiq就是使用Redis作为异步job队列的存储。然而,这样靠谱吗? 靠谱不靠谱,得看你怎么定义“队列”的要求: 队列可不可能丢东西?比如,如果队列短时间挂掉。...此时,producer是必须停止服务,还是继续服务但不再插入队列(这样就会丢东西),或者说producer有某种机制可以在本地先暂时堆积一下,直到队列恢复工作?...还是说,只要从队列里取出来就可以了,万一没处理也没所谓? 是否有事件重放的需要?比如上线了一个版本的consumer然后发现有bug,处理错了3个小时的数据。...用户是不是有一句MMP不知道当讲不当讲。 也许,你会说,"我的场景不需要这么严格的一致性,数据丢了没所谓,也不需要事件重放,数据处理错了就错了"。这个Redis的确可以办到,而且可以做得很好。

4.2K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    对线面试官 - 硬件级别之再谈Volatile关键字的可见性

    派大星:针对于Volatile关键字对原子性的保障在Java里是很有限的,我觉得几乎可以忽略不计。...面试官:可以从硬件级别的谈一下可见性问题吗?或者说硬件级别为什么会有可见性问题? 派大星:好的。...但是其它处理器还是从自己的高速缓存或者写缓冲器中读取的变量值,此时还是读取的旧值,非新值。 面试官:既然硬件级别是有可见性问题的,那么是如何解决的呢?...根据具体底层硬件的不同 ,MESI协议的实现也是有些区别的。 面试官:可以简单说说MESI的实现方式吗?...并且其实内存屏障的使用,在底层硬件级别的原理,其实就是在执行flush和refresh 面试官:那这次就先聊到这里吧,后续咱们可以再从硬件级别聊聊指令重排序的问题。 派大星:好的。 ----

    16910

    腾讯阿里携程 详细NLP算法实习 面经

    感觉工程能力还有待提高,很多东西还是停留在理论上。kmeans自己挖的坑,无语了。。。后面问了大佬,这个情景题可能是LDA之类的主题模型,或者是手动标记数据,再训练。或者是用迁移学习。...还有就是coding能力不够,工业界的一些东西还是缺乏 二面 腾讯平台面试(1h20min) 自我介绍,问项目。...attention知道吗,用过吗(BERT里用过,不是我写的)写一下公式(从attention说到self-attention) q、k、v是啥意思(解释了一下)qk可以用别的方法代替吗(可以,只要是计算距离的方法就行...不太了解,只知道协同过滤) 机器学习了解吗(了解),LR损失函数写一下(吧啦吧啦写了下,最后y写错了,应该放log外面) FM了解吗?...HR面 腾讯会议面试(18min) 自我介绍,实习时间,信息确认 挑一个项目说一下 项目中的收获是什么 说2个项目中的难点,怎么解决的 希望实习获得什么 别的公司进度 有重大疾病吗 如何和别的部门协调资源

    97421

    1.什么是CPU多级缓存模型?

    小陈:老王,最近学习并发不知如何入手,看的知识很零散;没多久又记不住了,你有啥好建议吗? 老王:来我这,我给你整理一下并发的知识和学习路线,能形成一个比较全面的知识图谱。...老王:我们先从CPU的多级缓存架构讲起,下面我画个图说一下CPU多级缓存架构: 计算机为什么要设计高速缓存架构? 小陈:CPU和主内存之间为啥要有个高速缓存,CPU直接读写内存不可以吗?...老王:嘿嘿,看来小陈你挺聪明的,这个问题确实是存在的,下面来给你分析下这个问题产生的原因: 如上图所示:在多线程并发操作的时候,由于CPU多级缓存的存在,有可能你修改了值,但是别的CPU的高速缓存还是旧值...8.volatile为啥不能保证原子性? 9.synchronized是个啥东西?应该怎么使用? 10.synchronized底层之monitor、对象头、Mark Word?...无锁、偏向锁、轻量级锁、自旋、重量级锁 13.synchronized怎么保证可见性、有序性、原子性? JAVA并发专题《结丹篇》 JDK底层Unsafe类是个啥东西?

    35730

    新鲜出炉:字节跳动面经总结

    简单说下项目 我项目比较挫,就介绍了下,然后项目就跳过了 2. redis的zset是如何实现的?为什么使用跳表不使用别的数据结构?...这里我简单说了下这三个有什么字段,以及优化的细节。至于为什么使用跳表,我直接回答了官方原文。话说回来感觉zset每个大厂都会考啊。...后面发现好像回答方向错了,所以还是简单提了下快照读,当前读,间隙锁,行锁之类的东西。这一题讲的有点久了,失误失误。...我题目都不太懂orz 5. system.gc()一定会触发gc吗?和full gc有什么关系? 不一定。该题回答的比较朴素。 哈哈。...说了下优化器的策略,面试官说不是想问这个,就问我explain,然后我就把explain的字段都说了一遍,面试官说还是理解错了。

    45520

    【设计模式】深入浅出单实例Singleton设计模式

    这还是有问题!为什么呢?...第二个条件是说,如果被同步的线程中,有一个线程创建了对象,那么别的线程就不用再创建了。 相当不错啊,干得非常漂亮!请大家为我们的1.3版起立鼓掌! 但是,如果你认为这个版本大攻告成,你就错了。...于是,这个可能会与我们想要的行为不一样,比如,我的类的构造函数中,有一些事可能需要依赖于别的类干的一些事(比如某个配置文件,或是某个被其它类创建的资源),我们希望他能在我第一次getInstance()...你能想一想还有什么情况会让这个我们上面的代码出问题吗? 01 Class Loader 不知道你对Java的Class Loader熟悉吗?“类装载器”?!C++可没有这个东西啊。...嗯,这种情况是有点极端,不过还是可能出现,比如EJB或RMI之流的东西。要在这种环境下避免多实例,看来只能通过良好的设计或非技术来解决了。

    79320

    DAY48:阅读 Atomic Functions

    , 给大家带来的震撼吗),以及, GPU上海量并行的应用, 以及, 到多卡系统, CPU-GPU交互的普及, 不使用原子操作将会越来越变得寸步难行。...大约在我刚刚尝试开始使用CUDA的时候, 我曾经面临过8800GTX(初代的1.0计算能力的卡, 不支持任何原子操作), 和当年的小珍珠GT240的艰难选择....但是还是不能满足我的要求,但是如果能同时算上CPU的计算性能, 则差不多正好,(CPU的核心们提供了好几十个百分点提升, 刚才的性能比较是单核的),然后客户继续说, 我尝试使用unified memory...来做这个, 但是我有两个问题无法解决 :(1)没法同时CPU上的原子操作和GPU上的原子操作协同起来(Pascal的系统级的原子操作支持). (2)Unified Memory不能同时使用, GPU在用...此外, 还需要补充的是:一些书或者网上有一些特别的技巧,例如可以通过atomicCAS, 来实现一些互斥锁之类的东西,请在使用前确保你已经充分了解了这些所谓的技巧, 我们不建议使用它们的.

    99110

    日常学习||批量更名软件简单学习

    假如你认为这个软件和别的批量更名软件差不多,那么,你错了…… 假如你认为这个软件只是批量更名用的,那么,你又错了…… 哈哈…… 你是收藏控、整理控吗?有没有大量的文件或文件夹需要处理、归类?...有没有使用别的批量更名软件解决不了的问题呢? 你是音乐爱好者吗?你有大量的MP3、APE、OGG、FLAC等的音乐文件并需要对音乐标签、封面图片或歌词进行批量处理吗? 你是摄影爱好者吗?...你有大量的照片文件并需要对Exif信息进行批量处理吗? 你办公使用微软Office文档、使用PDF文件吗?也许你会对这些文件的文件名批量更改或其特有属性的批量处理有需要呢?...看着这么多其实还是挺简单的。这里只简单介绍一下怎么使用更名,具体其他功能自己探索,或者去软件主人官网查看。如下路径: ? 下面我就来简单介绍一下怎么具体更名操作吧。 首先打开文件: ?...也类似第一个操作,可以选择在某个地方插入后自动编号,不做详细介绍,我要具体介绍的是使用表达式进行的更名,如下:先选中你需要的语句,再进行添加或者修改。 ?

    61040

    这12件事让我很讨厌Hadoop

    别的地方呢? 3. Oozie Debug 并不好玩,所以文档里有很多老式的例子。当你遇到错误,可能并不是你做错了什么。可能是配置打印错误或者格式验证错误,统称“协议错误”。...Hive 不会让我制作外部表格,但也不会删除它 如果你让 Hive 来管理表格,要是你终止对表格的使用的话,它会自动将它们全部删除。如果你有一个外部表格,它就不会将它删除。...你可以在 Hadoop 中启用HA,只要你不使用与之相关的东西。 9. 文档 抱怨都是陈词滥调了,但是还是检查一下。37行错了——更糟糕的是,网络上的所有文章都错了。...我确定它会变得更好,但是“手动安装之后”或者“我们已经创建了一个备份脚本”,这些不应该出现在我的邮件和文档中。 11. 知识库管理 说到Ambari,当知识正在升级的时候,你有完成过安装吗?...我有过,但是它表现的并不好。实际上,有时候它找到了最快的镜像。Ambari 并不关注它下载下来的东西是否兼容。

    92880

    三叶的小伙伴们の经历分享 : 千秋澪(千秋总)

    MySQL 怎么保证原子性呢? Redis 支持事务吗? 项目里面的 Matlab 怎么和 Spring 连通起来的? C++ 编写的代码有什么方案可以给 Java 用吗?...这个题虽然有子集了,但是不给数据范围我还是完全没想到要状压 dp。...❞ 2022-05-07: 字节一面 60min 面试官自我介绍完让我介绍 为什么没读研 有面一些别的公司吗 项目是课程设计吗 单点登录怎么实现的?...但是重载运算符写到结构体里了,改了半天写 lambda 不知道我写错了还是 c++11 不支持 delctype 那样的构造函数愣是没编译过。...介绍一下 ConcurrentHashMap 链表太长了为啥要转成红黑树,我能换别的树吗?(增删查效率稳定) MySQL 的索引有什么优缺点? 建索引对写性能有什么影响? 索引为什么要用 B+ 树?

    1.4K20

    就为了一个原子操作,其他CPU核心罢工了

    虎子叹了口气问道:“那你说说你有什么办法?” ? 我继续说道:“你看啊,像咱们在执行i++这种操作的时候就不应该被干扰” “不被干扰?”...这时,一旁的老K站了出来:“我倒是有个办法,可以找总线主任啊,他是负责协调各个车间使用系统总线访问内存的总指挥,让他在中间协调一下应该不难” 老K一语点醒梦中人,接着我们就去找了总线主任,后来我们商量出了一套解决方案...:我们定义了一个叫原子操作的东西,表示这是一个不可切分的动作,谁要执行原子操作,总线主任就在系统总线上加上一个LOCK#信号,其他车间的想去访问内存就得等着,直到原子操作指令执行完毕。...这一次,倒不是加法的问题,我们两车间还是因为各自缓存的原因,先后修改了变量的值,对方没有即时知道,误用了错误的值,以致酿成大错。 ?...“你来的正好,我正想去找你说这事呢” “哦,是吗,难不成你想到破解之道了?”

    44620

    小六六的阿里面试之旅

    但是他让我说底层原来的时候,我又好像说错了,我把他和voliate搞混了,我竟然说是因为有一个内存总线,真的是尴尬呀,能够说让其他的本地线程无效,在Cpu层面(这就是那种靠背的结果,哎),其实CAS的底层是一个...,然后用lua脚本做成一个原子性操作,来实现一个分布式锁,这个我以前自己做过demo,然后现在手写不出来,但是至少做过,印象还是深点。...完成不知道再问啥,然后mq就没问了,其实看着说的简单,但是实际聊的东西还是有点的,什么死信队列啥的都是有设计到的。...什么索引啥的,说到索引了,那你对b+数熟悉吗,我。。。。...这个它竟然没往死里问我了,哈哈(看来平时看点源码还是有点用的) 面试官 你现在有电脑吗,我们来做个机试吧, 我 然后我说我没带电脑,我想着就说算了把,谢谢您的好意,我反正也过不了,然后它就再三约我明天晚上来做

    35820

    TW洞见〡今日最佳答案:为什么互联网公司不开除测试?

    因为bug的产生可能是多个原因,有可能是功能性的,也有可能是对业务理解的偏差导致开始就做错了。 如果在产品做出来,发布给最终用户之后才发现。...2、对于bug的描述和修复,是有相应要求的 还是那句话,测试是一项工程。...别的不说,如果12306在发布后,你的身份证号、买票的银行卡号、密码会被随意泄露,你会用吗?你愿意用一下,冒这么大的风险去赚那100块钱吗?...这些东西都是测试过程中可以发现、避免和修复的。但直接放到最终用户使用的阶段再处理,市场那么多竞争对手,你的公司敢这么玩吗?你以为就你一家搞垄断业务啊?...啊,不对,好像说错了什么…… 澄清一下,我没有黑12306的意思。毕竟高峰期买票的人那么多,购票的流程又是那么复杂,网上也有不少帖子分析过,还是阿里的工程师写的。

    86550

    面经-北京小厂

    是你一个人做的还是这是一个学长的公司带我一块儿做的 然后没工资,我只是帮忙(笑着说嘿嘿)去学习在里面都做了什么比如下单,用rabbit搭建延迟消息这些搭建和设计,他们带我一起学习,有些东西是我去实现的...您是说是比较难的还是些小bug都可以,你感觉有代表性的,咱们可以聊一聊,就是下单的时候,不是要往task表插入记录嘛,然后需要通过token去实现放重提交对吧然后他是通过分布式锁来完成存在删除,保证它多线程下的原子性...,假如说,挥手 的时候,有个状态叫closewait,这是什么原因产生的emm忘记了呜你是springboot熟还是alibabacloud熟吗boot吧面试官:拦截器这里怎么做,平时用过没?...面向对象里面有重载,对一个方法重载怎么实现就是把形式参数改一下就是重载大概情况我们就了解这么多,对我们公司有想知道的吗公司的规模大概多大面试官:我们公司有差不多400号人我:属于小中厂是吗面试官:小厂是吗你在哪个地方吉林面试官...:我们的公司在北京,有什么影响吗我:大三也没啥课准备暑期之后,上课的话也可以找人代课吗,实习挺重要的面试官:所以可以在北京一直呆着是吗对

    33920

    4.什么是MESI缓存一致性协议?怎么解决并发的可见性问题?

    小陈:造成上面数据不一致的原因主要是因为,CPU0修改了数据之后,没有机制能够通知到CPU1,让CPU1它高速缓存上这个变量的数据失效掉,导致CPU1计算的时候还是使用旧的值。...CPU之间进行协调的原理 老王:牛啊,小陈;短短两天时间你理解到这个程度,这理解能力很不错了,颇有我当年的风范啊........所以啊 ,JAVA内存模型底层其实也还是通过MESI一致性来使得一个线程修改了数据,把别的线程的工作内存副本数据弄失效的。...8.volatile为啥不能保证原子性? 9.synchronized是个啥东西?应该怎么使用? 10.synchronized底层之monitor、对象头、Mark Word?...无锁、偏向锁、轻量级锁、自旋、重量级锁 13.synchronized怎么保证可见性、有序性、原子性? JAVA并发专题《结丹篇》 JDK底层Unsafe类是个啥东西?

    53830

    盘点Hadoop让人讨厌的12件事

    别的地方呢? 3. Oozie Debug 并不好玩,所以文档里有很多老式的例子。当你遇到错误,可能并不是你做错了什么。可能是配置打印错误或者格式验证错误,统称“协议错误”。...Hive 不会让我制作外部表格,但也不会删除它 如果你让 Hive 来管理表格,要是你终止对表格的使用的话,它会自动将它们全部删除。如果你有一个外部表格,它就不会将它删除。...你可以在 Hadoop 中启用HA,只要你不使用与之相关的东西。 9. 文档 抱怨都是陈词滥调了,但是还是检查一下。37行错了——更糟糕的是,网络上的所有文章都错了。...我确定它会变得更好,但是“手动安装之后”或者“我们已经创建了一个备份脚本”,这些不应该出现在我的邮件和文档中。 11. 知识库管理 说到Ambari,当知识正在升级的时候,你有完成过安装吗?...我有过,但是它表现的并不好。实际上,有时候它找到了最快的镜像。Ambari 并不关注它下载下来的东西是否兼容。

    90480

    字节腾讯三轮社招面经(附个人回答)

    技术面试20分钟,算法我做了10分多种orz。总计半个多小时。 1.简单说下项目 我项目比较挫,就介绍了下,然后项目就跳过了 2.redis的zset是如何实现的?为什么使用跳表不使用别的数据结构?...后面发现好像回答方向错了,所以还是简单提了下快照读,当前读,间隙锁,行锁之类的东西。这一题讲的有点久了,失误失误。...我题目都不太懂orz 5.system.gc()一定会触发gc吗?和full gc有什么关系? 不一定。该题回答的比较朴素。哈哈。...说了下优化器的策略,面试官说不是想问这个,就问我explain,然后我就把explain的字段都说了一遍,面试官说还是理解错了。...16.mysql的锁,锁的具体使用 主要就是行锁,表锁,页锁。然后问其他分类呢,我就说x锁,s锁,ix,is。然后又问我别的分类,我就说行锁,间隙锁,邻间锁。

    8.5K30

    为什么我学一门语言就已耗尽所有,而有些人还能同时学习多门语言?

    就好像你学数学,既可以写“加减乘除天元地元人元”也可以写“+-x÷xyz”一样——符号系统的确略有差异,甚至个别东西并不存在严格的对应关系;但一切归根结底都还是那么几个简单符号罢了。...我觉得这个框架我应该这么写、这么给人用,一看果然是,哪有什么“学习负担”——猜错了?猜错了说明基础知识掌握不过关,赶紧补课去。唰唰补足短板,以后就再也难不倒我了。...那能不轻松吗? 从“术”到“道” 这就是我说的“学什么一定要学根”,“学了根,枝枝梢梢会自己长出来”——千年古树规模很大?就一根树干。...举个例子 比如,这是Android的系统框图: 假如现在我所在公司造了台Android手机,做出来后不知为何,字体显示总是有问题。怎么处理呢?...我只要知道渔网有多少种、有没有人又发明新的捕鱼方法了,这就足够了。 遗憾的是,计算机发展太慢了。这么多年,也就PageRank、bigtable以及深度神经网络有点新意,其他的,不都是新瓶装旧酒吗。

    1.3K40

    AtomicXXX 用的好好的,阿里为什么推荐使用 LongAdder?面试必问!

    张三: volatile 是可以保证可见性,但不能保证原子性和线程安全 栈长: 3、除了加同步锁这种方案,还有别的方法吗?...你还知道别的么?最后一轮的答案就是今天的主题! 更好的选择:LongAdder 你还在用 AtomicInteger、AtomicLong 原子类进行并发累加操作吗?那你就 OUT 了!...除了 AtomicInteger、AtomicLong,其实在 JDK 8 中更建议使用 LongAdder 进行原子性操作,性能更好,如果你使用的还是 JDK 7-,那当我没说,即使如此,也不能找借口不知道...栈长再总结下: 累加方法加 synchronized/ Lock 同步锁; 使用 AtomicInteger/ AtomicLong 原子类; 使用 LongAdder 原子类(推荐使用); LongAdder...这个东西是 Java 8 搞出来的,用来代替 AtomicXXX,不管是否高并发场景,都完胜 AtomicXXX,它不仅可以改善性能,现在面试也问的越来越多了,大家还是有必要掌握。

    27210
    领券