作者:肥朝
原文地址:https://www.jianshu.com/p/73224a6c07bb
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【肥朝】搞基嗨皮。
前言
上週寫完了服務暴露總結之後發現遺漏了一個很重要的點,在dubbo原始碼解析-zookeeper連線中我們對面試高頻題
dubbo中zookeeper做註冊中心,如果註冊中心叢集都掛掉,那釋出者和訂閱者還能通訊嗎?
進行瞭解析.知道dubbo
會對zookeeper的資訊進行一個本地的檔案快取.如果你只是簡單的回答出這個本地的檔案快取,可能面試官會點到為止,但是如果你按照我那樣從原始碼角度分析,甚至連快取到哪個磁碟檔案都一清二楚,那麼面試官必然會根據這個問題深入問下去.既然要深入問下去,那他會從哪個角度問呢?
比如公司新來了妹子,老司機們在下班的時候總會套路一下,問她們你男朋友怎麼不接你下班啊.這個時候妹子的回答往往也就兩個,一個是我沒有男朋友啊,另一個是他忙啊(這說明她有男朋友).從這裡例子就可以很容易看出,你的發言,對對方的回答我們是能一定程度預判的.再比如,我一直自稱肥朝,假如你發現我其實沒有你想的那麼肥,按照正常的思維你就會問我,既然你沒這麼肥為什麼要叫肥朝.這再次說明瞭,對方的提問,我們是可預判的.
同理可得,你回答了會快取本地檔案,並且連目錄都一清二楚,那他如果照著這個問題深入問下去,他可能會問什麼呢?可能會問,既然是快取,那麼自然會存在和實時資料不同步,那麼他是什麼時候去更新這個快取?鑒於你前面回答得這麼透徹,可能還會加上一句,他這個更新的過程是怎麼樣的?能畫圖給我講一下嗎?
當然看到這裡你可能會反駁,萬一他不按套路出牌,或者我回答了這個問題他又繼續深入問下去,那可咋整?其實坦白說,雖然我原始碼解析以面試題為切入,但是我在dubbo原始碼解析-zookeeper建立節點中也提到了,看原始碼並不是以面試為最終目的.因此,簡書上關註肥朝,每週一篇dubbo原始碼解析,互相交流進步,提升自己的層次,而不是在低層次努力,這才是應對”不按套路出牌”和”深入問下去”的不二法寶.
插播面試題
-
在dubbo中,什麼時候更新本地的zookeeper資訊快取檔案?訂閱zookeeper資訊的整體過程是怎麼樣的?
前戲鋪墊
用中文來劇透接下來原始碼的一些羞嗒嗒的劇情
只需將這幅圖記在心中,用小學六年苦練的看圖寫作文功力即可概括出面試題答案.
直入主題
這個方法是我們的老朋友了,我們在前面的zookeeper連線
和zookeeper建立節點
的時候都已經見過(圖中藍色標註的),這次我們還是講一行程式碼(紅色標註的)
這裡就開始發起訂閱請求和訂閱失敗重試,可以對照前期鋪墊
中的圖
這裡設定了監聽回呼的地址,即回呼給FailbackRegistry
中的notify
從這裡我們可以看到,建立的是持久節點
下麵開始對該節點設定監聽(其中涉及一下zkClient的api)
下麵要開始更新新的服務資訊,服務啟動和節點更新回呼(前面設定了回呼到這裡)都會呼叫到這裡
那麼下麵就要敲黑板劃重點了,由前期鋪墊我們就知道這裡要開始更新本地快取檔案的資訊
這裡採用了執行緒池來更新,dubbo裡面到處都是併發程式設計,所以面試喜歡問多執行緒這個真的不是在裝逼,執行緒的意識還是很重要的,同時如果關註肥朝每週一篇dubbo原始碼解析(真不是套路),面試問到專案哪裡用到了多執行緒例子再也不用擔心了,把dubbo裡面的例子套一下妥妥的.
dubbo在操作檔案的時候還會對檔案進行加鎖,看原始碼要特別留心這些異常資訊,方便出問題時快速定位(其實也是在粗暴式點題怎麼看原始碼)
更新完檔案後,對比新舊的資訊是否有變化,有則重新暴露服務
寫在最後
歡樂的時間總是短暫的,又到了說再見的時間,因為最近都是996,寫到這裡的時候已經是週日的凌晨兩點半.期待下週與你相遇.鑒於本人才疏學淺,不對的地方還望斧正,也歡迎關註我的簡書,名稱為肥朝