关于2022招聘季:面试官Zookeeper怎么解决读写双写并发不一致问题以及共享锁的实现原理

9次阅读

共计 1787 个字符,预计需要花费 5 分钟才能阅读完成。

哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新

一、前言

明天清明假期,赶上北京玉渊潭公园樱花盛开,女朋友非要拉着我去看樱花,我头一天早晨干文章到三点半,我很想睡觉,然而没方法,军令难违呀。





来到这里犹如来到了花的陆地,让我浑身的艺术细菌开始躁动,我忍不住吟诗一首“樱花落尽子规啼、闻道龙标过五溪,我寄愁心与明月、随君直到夜郎西”,啊,漂亮的樱花啊。

这时旁边的公园管理员满是纳闷的看着我,问我小伙子你的诗背错了吧,不应该是杨花落尽子规啼吗?

我只能难堪的笑笑说,明天应景,我就本人改改词。。。

就在我纵情展现我浑身的艺术细菌的时候,忽然手机响了,我一看是一个北京号码,手机尾号 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 还没有整顿结束,文章前面继续更新,倡议珍藏。

文章中波及到的命令大家肯定要像我一样每个都敲几遍,只有在敲的过程中能力发现自己对命令是否真正的把握了。

如果感觉我的文章还不错的话就点个赞吧

本文参加了 SegmentFault 思否征文「如何“反杀”面试官?」,欢送正在浏览的你也退出。

正文完
 0