面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?
哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!
文章目录
- 一、前言
- 二、面试
- 三、读写、双写不一致问题
- 四、Zookeeper共享锁的实现原理
- 五、总结
一、前言
今天清明假期,赶上北京玉渊潭公园樱花盛开,女朋友非要拉着我去看樱花,我头一天晚上干文章到三点半,我很想睡觉,但是没办法,军令难违呀。
来到这里犹如来到了花的海洋,让我浑身的艺术细菌开始躁动,我忍不住吟诗一首“樱花落尽子规啼、闻道龙标过五溪,我寄愁心与明月、随君直到夜郎西”,啊,美丽的樱花啊。
这时旁边的公园管理员满是疑惑的看着我,问我小伙子你的诗背错了吧,不应该是杨花落尽子规啼吗?
我只能尴尬的笑笑说,今天应景,我就自己改改词。。。
就在我尽情展示我浑身的艺术细菌的时候,突然手机响了,我一看是一个北京号码,手机尾号6543,我接通了电话
我:哈喽啊
对方:喂,是小奇吗?
我:正是在下,请问阁下是?
对方:我是某某某公司的,我在某某招聘网站上看到了你的简历,请问你还在找工作吗?
我:没错,我还在找。
对方:那你现在方便进行面试吗?
这个时候我看向了我家领导,我家领导满脸嫌弃的说,让你陪我出来逛公园,不是刮风就是下雨,面吧。
二、面试
我:面试官您好,我现在方便面试。
面试官:好,我看你简历上写的是精通zookeeper是吧。
我:不敢当,都是同行们抬爱,实在惭愧(其实心里已经膨胀起来了)。
三、读写、双写不一致问题
面试官:好,那你说一下并发情况下读写、双写不一致问题是怎么回事呢?
我:读写不一致问题是在并发情况下,多个线程对同一个数据同时进行读取和写入操作,最后导致读写不一致。
比如这里我线程A查询缓存为空,那么就要查询数据库,查询数据库name为张三,然后我就要去更缓存name为张三。
但是这个时候线程B在线程A查询数据库之后,更新缓存之前修改了数据库的数据name为李四,但是缓存name还是张三,这里就出现数据库与缓存不一致的情况了。
面试官:嗯,那双写不一致是什么情况呢?
双写不一致就是两个线程都是写的操作,结果还是造成了数据库和缓存不一致的问题。
例如线程B在线程A写入数据后、更新缓存前,进行了数据的修改,但是最终修改缓存的还是线程A,所以这时数据库和缓存不一致。
面试官:嗯,那怎么解决呢?
我:使用共享锁解决。
四、Zookeeper共享锁的实现原理
面试官:嗯,zookeeper怎么实现共享锁呢,它的实现原理是什么?
我:这个讲起来有点复杂,要不我先陪我女朋友逛公园,我们晚上回去再聊吧。
面试官:别呀,你现在已经勾起我的兴趣了,我们一下子聊完吧,我们就一面
我:好吧,zookeeper共享锁的实现原理就是如果挨着的线程都是读请求,那么他们共享同一把锁。
这里我们可以看到线程1、2、3是三个连续的读请求的操作,那么他们共享同一把锁A,也就是这个三个线程可以并发的去读取数据。
然后我们看到线程4是写请求,那么他只能等前面的所有线程执行完了才能执行自己的写操作。
这里线程5也是写请求,那么他只能等他前面的所有线程执行完了才能执行自己的写操作。
然后线程6、7、8都是读线程,那么他们获取的是同一把锁,在线程5执行完毕后,线程6、7、8可以一起执行读取操作。
这里的监听我们之前说了是为了解决羊群问题的。
面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问我的吗
我:额。。。咱们公司加班挺严重的吧。
面试官:何以见得呢?你都没来过公司你怎么知道的?
我:因为现在是假期你还在约面试,可想而知公司的加班文化挺浓厚的吧。
面试官:嗯~,我们公司其实不提倡加班,但是员工都很爱加班
我:额。。。那我还是考虑两天吧,我感觉我可能有点不合群。。。
面试官:那你要是不过来可以帮忙推荐一些其他同学吗
我:那你先好好学学zookeeper的原理吧,不然我推荐一些小奇趣味编程系列的忠实读者的话你肯定招架不住啊。
面试官:那我也赶紧看看小奇趣味编程系列,到时候就见招拆招
我:额。。。那样的话两个人都是登峰造极的状态,谁也虐不了谁属实有点尴尬。。。
五、总结
这里关于zookeeper还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】的好文章,获取我为大家准备的资料。
面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?相关推荐
- 面试官: Redis 与 MySQL 双写一致性如何保证?
前言 四月份的时候,有位好朋友去美团面试.他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题. ...
- 面试官问:在读多写少的情况下,如何优化 MySQL 的数据查询方案
作者 | 面试官问 责编 | 张文 来源 | 面试官问(ID:interviewer_asked) 面试官问:假设你负责的某业务在双十一期间要搞运营活动,公司投入了大量的营销费用进行推广,此举 ...
- 面试官:SSR解决了什么问题?有做过SSR吗?你是怎么做的?
一.是什么 Server-Side Rendering 我们称其为SSR,意为服务端渲染 指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页 ...
- 华为java一个月写多少行代码_[财经]阿里员工吐槽华为:面试官1万行代码都没写过? - 南方财富网...
5月7日,有疑似阿里员工在社交网络上爆料称,打算跳槽华为,但是去面试后,真的是太失望,因为面试官真的是太水了. 从这位网友晒出的帖子看,一名阿里的员工面试华为云后端开发的岗位,但过程并不顺利,因为面试 ...
- 关于抢红包的_面试官让我5分钟内写一个抢红包程序,我和他说了半小时原理!...
更多原创文章在微信公众号「后端技术学堂」转载请先与我联系,点文末链接「了解更多」 今年春节响应国家号召在家宅着抵抗疫情,拜年也改用微信红包,春节发了很多也抢了很多微信红包,也算支持了公司业务,微信支付 ...
- 面试官:为什么 wait() 方法需要写在循环里?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源:8rr.co/6cj5 问:为什么是 while 而不是 i ...
- “约见”面试官系列之常见面试题第四十四篇之webpack打包原理解析?(建议收藏)
webpack打包是如何运行的 也可以称为,webpack是如何实现模块化的 CommonJS是同步加载模块,一般用于node.因为node应用程序运行在服务器上,程序通过文件系统可以直接读取到各个模 ...
- 面试官:你给我手写个RPC框架看看
本文主要论述的是"RPC 实现原理",那么首先明确一个问题什么是 RPC 呢?RPC 是 Remote Procedure Call 的缩写,即,远程过程调用.RPC 是一个计算机 ...
- 面试官:怎么解决MySQL中的死锁问题?
咱们使用 MySQL 大概率上都会遇到死锁问题,这实在是个令人非常头痛的问题.本文将会对死锁进行相应介绍,对常见的死锁案例进行相关分析与探讨,以及如何去尽可能避免死锁给出一些建议. 话不多说,开整! ...
最新文章
- 谷歌浏览器linux版_Chrome apps 要被谷歌干掉了
- 写CSDN插入图片一直无法显示?
- pytorch 1.7.x训练保存的模型在1.4低版本无法加载
- 201203阶段二FFMPEG图片解码及线程
- Tornado報錯AttributeError: Unrecognized option 'port'
- 单调栈 leetcode整理(一)
- SaltStack 第二板块安装说明 [2]
- Window服务器可安装的live messager最新版本-20090826
- 职场没有岁月静好,只有不进则退
- mysql 删除表时外键约束_MySQL删除表的时候忽略外键约束的简单实现
- STL中的关联式容器——set(集合)
- 存储设备在linux名称,Linux下的存储设备的管理
- win10开启文件共享服务器,墨涩网 - Windows10开启局域网文件共享功能——墨涩网...
- DS1302时钟模块介绍及与USRAT HMI通信
- 中兴网络设备交换机路由器查看所有端口光功率命令
- 傅里叶变换(时域频域)
- java编写投票功能需求分析
- 【程序员如何买基金 三】场内场外交易的区别
- LQR:Linear Quadratic Regulator 线性二次型调节器
- alios things开发板_AliOS Things这个操作系统怎么样?