面试官: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还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
如果觉得我的文章还不错的话就点个赞吧
面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?的更多相关文章
- 面试官:“看你简历上写熟悉 Handler 机制,那聊聊 IdleHandler 吧?”
一. 序 Handler 机制算是 Android 基本功,面试常客.但现在面试,多数已经不会直接让你讲讲 Handler 的机制,Looper 是如何循环的,MessageQueue 是如何管理 M ...
- 面试官:看你简历说写精通ThreadLocal,这几道题你都会吗?
问题 和Synchronized的区别 存储在jvm的哪个区域 真的只是当前线程可见吗 会导致内存泄漏么 为什么用Entry数组而不是Entry对象 你学习的开源框架哪些用到了ThreadLocal ...
- 面试官:ZAB协议是什么?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 这天是越来越热了,但是还是有很多 ...
- Java面试官最常问的volatile关键字
在Java相关的职位面试中,很多Java面试官都喜欢考察应聘者对Java并发的了解程度,以volatile关键字为切入点,往往会问到底,Java内存模型(JMM)和Java并发编程的一些特点都会被牵扯 ...
- 面试官:我们来聊一聊Redis吧,你了解多少就答多少
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,建议收藏关注 一.前言 作为一名Java程 ...
- 面试系列-面试官:你能给我解释一下javascript中的this吗?
一.前言 关于javascript中的this对象,可能已经被大家说烂了. 即使是这样,我依然决定将这篇文章给水出来.毕竟全国在新型肺炎的影响下,公司没法正常复工. 除了刷刷手机,还是要适当的学习一下 ...
- 面试官:Zookeeper是什么,它有什么特性与使用场景?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 作为一名Java程序员,Zook ...
- 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一.缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Redis ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
随机推荐
- svn服务支持网页显示并增加在线预览功能,支持视频在线播放
1.svn服务器支持网页显示 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便.不过,它本身并没有提供在线修改密码的功能.由于在实际使用过程中, ...
- LintCode 练习题
/** * 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输 ...
- python学习之matplotlib实战
import numpy as np def main(): # print("hello") # line import matplotlib.pyplot as plt x = ...
- WPF 文本描边+外发光效果实现
解决思路: (1)描边效果可以将文本字符串用GDI+生成Bitmap,然后转成BitmapImage,再用WPF的Image控件显示. (2)外发光效果用WPF自带的Effect实现 代码: 1 us ...
- 关于深搜dps
哈哈,我又来了! 但是!今天我又带来了让人开心到窒息的 ----深搜dps 其实关于深搜,概念没啥可讲的,总结一句话概括就是:一直往下搜,直到满足条件的,再回来,沿着下一条路搜,直到把路全走完为止.. ...
- nexus3上传第三方jar包
1.新建第三方仓库,名字叫3rd_part 2.添加到maven-public组中 3.修改maven的setting.xml 4.执行命令 mvn deploy:deploy-file -Dgrou ...
- ArcGIS拓扑小技巧:两个面矢量合并但不叠加
已知数据:底图图斑A,更新图斑B 使用软件:ArcMap 要求:将B于A合并为一个图斑.A与B不能重叠,重叠处以A为基准切割B图斑. 下面开始操作: 1. 将数据集中的图斑A.B添加到数据框内 打 ...
- Arcgis Server发布的带有透明度的地图服务,调用时不显示透明度问题
问题: 在发布道路地图时候设置地图透明度为50% 使用arcgis API for js 中 ArcGISDynamicMapServiceLayer 调用该地图时,发现透明效果不实现 如下图: 解决 ...
- java中对集合操作的易错点01
今天用for循环遍历集合,对集合中满足条件的元素进行remove操作报错:ConcurrentModificationException 所以,在遍历集合进行增.删操作时,要使用迭代器的方式 publ ...
- HT4936S锂电池充放电芯片,充电宝芯片
应用电路 引脚定义 参考 http://www.hotchip.com.cn/products/