天天看點

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

哈喽!大家好,我是小奇,一位不靠譜的程式員

小奇打算以輕松幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧

文章持續更新,可以微信搜尋【小奇JAVA面試】第一時間閱讀,回複【資料】更有我為大家準備的福利喲!

文章目錄

  • ​​一、前言​​
  • ​​二、面試​​
  • ​​三、讀寫、雙寫不一緻問題​​
  • ​​四、Zookeeper共享鎖的實作原理​​
  • ​​五、總結​​

一、前言

今天清明假期,趕上北京玉淵潭公園櫻花盛開,女朋友非要拉着我去看櫻花,我頭一天晚上幹文章到三點半,我很想睡覺,但是沒辦法,軍令難違呀。
面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?
面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?
面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?
面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?
面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

來到這裡猶如來到了花的海洋,讓我渾身的藝術細菌開始躁動,我忍不住吟詩一首“櫻花落盡子規啼、聞道龍标過五溪,我寄愁心與明月、随君直到夜郎西”,啊,美麗的櫻花啊。

這時旁邊的公園管理者滿是疑惑的看着我,問我小夥子你的詩背錯了吧,不應該是楊花落盡子規啼嗎?

我隻能尴尬的笑笑說,今天應景,我就自己改改詞。。。

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

就在我盡情展示我渾身的藝術細菌的時候,突然手機響了,我一看是一個北京号碼,手機尾号6543,我接通了電話

我:哈喽啊

對方:喂,是小奇嗎?

我:正是在下,請問閣下是?

對方:我是某某某公司的,我在某某招聘網站上看到了你的履歷,請問你還在找工作嗎?

我:沒錯,我還在找。

對方:那你現在友善進行面試嗎?

這個時候我看向了我家上司,我家上司滿臉嫌棄的說,讓你陪我出來逛公園,不是刮風就是下雨,面吧。

二、面試

我:面試官您好,我現在友善面試。

面試官:好,我看你履歷上寫的是精通zookeeper是吧。

我:不敢當,都是同行們擡愛,實在慚愧(其實心裡已經膨脹起來了)。

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

三、讀寫、雙寫不一緻問題

面試官:好,那你說一下并發情況下讀寫、雙寫不一緻問題是怎麼回事呢?

我:讀寫不一緻問題是在并發情況下,多個線程對同一個資料同時進行讀取和寫入操作,最後導緻讀寫不一緻。

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

比如這裡我線程A查詢緩存為空,那麼就要查詢資料庫,查詢資料庫name為張三,然後我就要去更緩存name為張三。

但是這個時候線程B線上程A查詢資料庫之後,更新緩存之前修改了資料庫的資料name為李四,但是緩存name還是張三,這裡就出現資料庫與緩存不一緻的情況了。

面試官:嗯,那雙寫不一緻是什麼情況呢?

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

雙寫不一緻就是兩個線程都是寫的操作,結果還是造成了資料庫和緩存不一緻的問題。

例如線程B線上程A寫入資料後、更新緩存前,進行了資料的修改,但是最終修改緩存的還是線程A,是以這時資料庫和緩存不一緻。

面試官:嗯,那怎麼解決呢?

我:使用共享鎖解決。

四、Zookeeper共享鎖的實作原理

面試官:嗯,zookeeper怎麼實作共享鎖呢,它的實作原理是什麼?

我:這個講起來有點複雜,要不我先陪我女朋友逛公園,我們晚上回去再聊吧。

面試官:别呀,你現在已經勾起我的興趣了,我們一下子聊完吧,我們就一面

我:好吧,zookeeper共享鎖的實作原理就是如果挨着的線程都是讀請求,那麼他們共享同一把鎖。

面試官:Zookeeper怎麼解決讀寫、雙寫并發不一緻問題,以及共享鎖的實作原理?

這裡我們可以看到線程1、2、3是三個連續的讀請求的操作,那麼他們共享同一把鎖A,也就是這個三個線程可以并發的去讀取資料。

然後我們看到線程4是寫請求,那麼他隻能等前面的所有線程執行完了才能執行自己的寫操作。

這裡線程5也是寫請求,那麼他隻能等他前面的所有線程執行完了才能執行自己的寫操作。

然後線程6、7、8都是讀線程,那麼他們擷取的是同一把鎖,線上程5執行完畢後,線程6、7、8可以一起執行讀取操作。

這裡的監聽我們之前說了是為了解決羊群問題的。

面試官:小夥子真厲害啊,我這邊沒有什麼要問的了,你還有什麼問題要問我的嗎

我:額。。。咱們公司加班挺嚴重的吧。

面試官:何以見得呢?你都沒來過公司你怎麼知道的?

我:因為現在是假期你還在約面試,可想而知公司的加班文化挺濃厚的吧。

面試官:嗯~,我們公司其實不提倡加班,但是員工都很愛加班

我:額。。。那我還是考慮兩天吧,我感覺我可能有點不合群。。。

面試官:那你要是不過來可以幫忙推薦一些其他同學嗎

我:那你先好好學學zookeeper的原理吧,不然我推薦一些小奇趣味程式設計系列的忠實讀者的話你肯定招架不住啊。

面試官:那我也趕緊看看小奇趣味程式設計系列,到時候就見招拆招

我:額。。。那樣的話兩個人都是登峰造極的狀态,誰也虐不了誰屬實有點尴尬。。。

五、總結

這裡關于zookeeper還沒有整理完畢,文章後面持續更新,建議收藏。

文章中涉及到的指令大家一定要像我一樣每個都敲幾遍,隻有在敲的過程中才能發現自己對指令是否真正的掌握了。

如果覺得我的文章還不錯的話就點個贊吧,另外可以微信搜尋【小奇JAVA面試】閱讀更多的好文章,擷取我為大家準備的資料。