這是一篇我在知乎上面關於問題『你遇到過哪些質量很高的 Java 面試?』的回答,得到了部分網友的認同。面試
原文地址:redis
https://www.zhihu.com/question/60949531/answer/579261846數據庫
全文以下:緩存
面試,歷來都是一個隨機性很高的過程。但凡是質量高的面試,必然是面試官根據面試者的回答,按部就班,抽絲剝繭,橫向縱向分別展開的。cookie
那種,面試以前就訂好了準備問哪些問題的面試官,按照本身的問題清單,從頭問到尾,整個面試過程的質量不可能高。網絡
我以爲,質量高的面試,就是從一個點切入,而後逐漸考察面試者對於這個點相關的知識體系的瞭解。併發
舉幾個例子負載均衡
好比考察Java類加載相關問題:tcp
什麼是類加載?分佈式
雙親委派是什麼?
爲何要雙親委派?
如何破壞雙親委派?
爲何要破壞雙親委派?
修改類加載策略要複寫哪一個方法?
知道模塊化嗎?
知道Java9的模塊化技術嗎?
jigsaw,jboss modules和osgi的區別?
ClassNotFound怎麼回事?
如何解決ClassNotFound?
ClassNotFoundException和NoClassDefFoundErr區別?
好比考察計算機網絡相關問題,通常從tcp/ip入手:
OSI七層協議?
三次握手?四次關閉?
爲何要三次握手,兩次或者四次行不行?
Tcp和Udp區別?
粘包和拆包?
一次網絡請求全過程?
什麼是DNS?
負載均衡?
CDN?
頁面響應慢如何排查?
SESSION?
SESSION和cookie區別?
沒有cookie如何實現SESSION?
SESSION有沒有限制?有限制怎麼辦?
代理和反向代理?
--------------------------------------
除了以上的狀況外,還有一種聰明的面試官,從一個開放性的問題下手: 能簡單介紹下您如今所作項目和過程當中的技術難點或有遇到瓶頸嗎?
下面就是一個面試官和麪試者都比較優秀的狀況下,一場關於分佈式相關的高質量面試現場。
這種問題直接回答高併發分佈式場景的數據一致性問題。(參考:關於分佈式一致性的探究)
而後面試官問:如何解決的呢。
答:在併發方面考慮了樂觀鎖和分佈式鎖。在一致性方面不一樣場景使用了不一樣策略。
問:介紹下樂觀鎖
答:樂觀鎖巴拉巴拉(參考:深刻理解樂觀鎖與悲觀鎖)
問:分佈式鎖如何實現
答:基於數據庫,基於緩存,基於zk三種。而後再把三種方案的優缺點說清楚。(參考:分佈式鎖的多種實現方式~)
問:關於緩存和ZK瞭解多少
答:經常使用緩存,redis,memcached等。固然還能夠說memcached容易被總來作DDOS攻擊(參考:GitHub遭受的DDoS攻擊究竟是個什麼鬼?)。ZK就簡單介紹下原理,經常使用場景等。(參考:[高級]Zookeeper介紹(四)——Zookeeper中的基本概念)
問:數據一致性怎麼保證
答:先扯一段CAP和BASE(參考:分佈式的CAP理論 ),再說說2PC,3PC(參考:深刻理解分佈式系統的2PC和3PC)以及有啥缺點,過分目前經常使用的策略。好比最大努力通知,可靠消息最終一致性。TCC分佈式事務等。在說下業務場景都有哪幾個。 最終是如何選擇的。最後再說一句:固然,數據一致性的最後一道防線仍是人工介入。要作好數據對帳,實時數據檢驗以及報警。保證能夠及時發現線上問題。