背景
985畢業(yè)至今剛好一年+四個(gè)月誉券,我曾做過兩三個(gè)月的測試感覺不是很合適指厌,后面選擇從事Java后端開發(fā)刊愚,大學(xué)學(xué)習(xí)過一段時(shí)間踊跟,還挺香。兩個(gè)月前秋招還在熱火朝天中鸥诽,內(nèi)心賊想去大廠試波水商玫。于是乎,字節(jié)打電話叫我面試去牡借。不過真真的是傻眼了拳昌,果然一句話說的真對(duì):面試造火箭,工作擰螺絲D屏炬藤!整個(gè)一面下來表示懷疑人生...沒想過一面就能問這么多,瘋狂轟炸碴里,連環(huán)50問沈矿,不得停歇。感覺我這輩子都不會(huì)忘記這次面試經(jīng)歷了咬腋,這里給大家分享一下騰訊試水的細(xì)節(jié)羹膳,我想,恐怕你也會(huì)表示同感根竿。
我的面試過程(歷經(jīng)70mins)
個(gè)人履歷簡述
2. 項(xiàng)目簡述
主要突出重難點(diǎn)陵像,我bb了一堆業(yè)務(wù)邏輯結(jié)果人家都不感興趣
3. SpringAOP實(shí)現(xiàn)
JDK動(dòng)態(tài)代理:實(shí)現(xiàn)Invocationhandler接口就珠,本質(zhì)上是new一個(gè)繼承了所有類上Interface的Proxy對(duì)象,然后通過method.invoke進(jìn)行調(diào)用 CGLib動(dòng)態(tài)代理:在內(nèi)存中動(dòng)態(tài)生成子類對(duì)原對(duì)象進(jìn)行代理醒颖,無法代理final類以及方法 共同限制:無法代理到當(dāng)前class當(dāng)中this引用的嵌套方法
4. AOP用的哪種妻怎?
默認(rèn)用的JDK動(dòng)態(tài)代理
5. JDK動(dòng)態(tài)代理以及CGLib動(dòng)態(tài)代理性能比較
JDK走的反射,會(huì)多一些反射調(diào)用的開銷(方法權(quán)限驗(yàn)證泞歉、調(diào)用開銷等)
CGLib需要?jiǎng)?chuàng)建新對(duì)象蹂季,在創(chuàng)建新對(duì)象上,即初始化時(shí)會(huì)多一些開銷
6. Java的線程池用過嗎疏日,具體參數(shù)講一下
Java的線程池是一個(gè)三級(jí)存儲(chǔ)結(jié)構(gòu)偿洁,線程先放入核心線程池,滿了之后放到緩存隊(duì)列當(dāng)中沟优,最后如果緩存隊(duì)列也滿了則擴(kuò)容新線程涕滋,所以參數(shù)有: 核心線程數(shù)量 緩存隊(duì)列類型 最大線程數(shù)量 線程活躍時(shí)間 線程工廠方法(寫日志、重命名線程等)
7. 線程池的Execute和Submit區(qū)別
Execute執(zhí)行runnable挠阁,Submit可以執(zhí)行Future宾肺,我們一般用countDownLatch+Future來獲取所有的線程結(jié)果
8. 繼續(xù)問,還有別的區(qū)別嗎侵俗?
不知道了锨用,后續(xù)查了發(fā)現(xiàn)區(qū)別如下 Execute會(huì)在運(yùn)行期直接拋出異常,Submit之后在調(diào)用Future.get的時(shí)候才會(huì)拋出異常
9. 線程池如何保證當(dāng)前線程獲取池內(nèi)的worker的時(shí)候不產(chǎn)生爭用
volatile的state標(biāo)志這個(gè)worker有沒有被使用
10. volatile的特性
通過禁止指令重排序來保證內(nèi)存可見性隘谣,實(shí)際使用內(nèi)存屏障實(shí)現(xiàn)的
11. 內(nèi)存屏障分幾種增拥?
當(dāng)時(shí)記不得了,回頭查了一下如下: LoadLoad屏障:對(duì)于這樣的語句Load1; LoadLoad; Load2寻歧,在Load2及后續(xù)讀取操作要讀取的數(shù)據(jù)被訪問前掌栅,保證Load1要讀取的數(shù)據(jù)被讀取完畢。 StoreStore屏障:對(duì)于這樣的語句Store1; StoreStore; Store2码泛,在Store2及后續(xù)寫入操作執(zhí)行前猾封,保證Store1的寫入操作對(duì)其它處理器可見。 LoadStore屏障:對(duì)于這樣的語句Load1; LoadStore; Store2噪珊,在Store2及后續(xù)寫入操作被刷出前晌缘,保證Load1要讀取的數(shù)據(jù)被讀取完畢。 StoreLoad屏障:對(duì)于這樣的語句Store1; StoreLoad; Load2痢站,在Load2及后續(xù)所有讀取操作執(zhí)行前磷箕,保證Store1的寫入對(duì)所有處理器可見。它的開銷是四種屏障中最大的瑟押。在大多數(shù)處理器的實(shí)現(xiàn)中搀捷,這個(gè)屏障是個(gè)萬能屏障,兼具其它三種內(nèi)存屏障的功能。
12. 除了在volatile當(dāng)中使用了內(nèi)存屏障嫩舟,JAVA還有哪里使用了內(nèi)存屏障
這個(gè)真不知道氢烘,知道的小伙伴請(qǐng)?jiān)谠u(píng)論區(qū)指點(diǎn)一二
13. 你之前講到了CountDownLatch,你知道它的內(nèi)部實(shí)現(xiàn)嗎
知道家厌,用的AQS播玖,在state=0的時(shí)候才允許所有等待的線程全部通過
14. 簡單講一下AQS
AQS核心設(shè)計(jì): 一個(gè)volatile int state的狀態(tài)值,使用volatile保證線程可見性饭于,使用int來提供可重入的多資源能力 雙向隊(duì)列蜀踏,首節(jié)點(diǎn)為執(zhí)行節(jié)點(diǎn),可以根據(jù)執(zhí)行節(jié)點(diǎn)的Node信息判斷是ShareLock還是ExclusiveLock掰吕,會(huì)關(guān)聯(lián)一個(gè)執(zhí)行線程果覆,來提供可重入的判斷 加鎖的時(shí)候若是公平鎖則嘗試CAS載入隊(duì)列,若是非公平鎖則直接入隊(duì)列 解鎖的時(shí)候直接喚醒后繼的第一個(gè)wait節(jié)點(diǎn)
15. 加鎖之后AQS是如何響應(yīng)中斷的殖熟?
太細(xì)節(jié)了真不會(huì)局待,之前復(fù)習(xí)源碼沒看這么深(結(jié)束之后補(bǔ)漏洞)
16. OK問點(diǎn)別的,AQS存在什么實(shí)現(xiàn)呢菱属?
用過的ReentranceLock钳榨、CountDownLatch
17. 講講實(shí)現(xiàn)
ReentranceLock通過判斷線程是否相同進(jìn)行沖入 CountDownLatch在state為0的時(shí)候才讓所有的await通過
18. 聽說過ReadWriteLock嗎,你之前提到AQS當(dāng)中只有一個(gè)State那你如何用一個(gè)State去支撐讀寫兩種狀態(tài)
一個(gè)state是Int纽门,可以分高位給Read薛耻,低位給Write,就當(dāng)個(gè)String用了
19. Int幾個(gè)字節(jié)
我居然回答了32個(gè)赏陵,應(yīng)該是32位饼齿,8位一個(gè)byte,共計(jì)四個(gè)byte
20. 你們用過緩存嗎
沒有瘟滨,但是用redis做了分布式鎖
21. 你說說下分布式鎖怎么做的候醒?
分布式鎖也是一個(gè)鎖,需要滿足幾個(gè)特性杂瘸,1 可重入 2 可以識(shí)別加鎖的身份防止ABA問題 3 考慮是否需要續(xù)約 key是所需要加上的鎖的業(yè)務(wù)資源唯一編碼,value是當(dāng)前線程的uuid伙菊,uuid存在threadLocal內(nèi) 加鎖的時(shí)候用的jedis败玉,先設(shè)一個(gè)過期時(shí)間,然后用ex镜硕,若不存在key則添加新key运翼,若已經(jīng)存在則直接失敗 解鎖用的阿里云企業(yè)版的CAD(compareAndDelete),原子比較并解鎖兴枯,本質(zhì)是通過lua腳本進(jìn)行的類似事務(wù)操作
22. 除了redis還有什么可以做分布式鎖血淌?
Mysql、zookeeper等
23. 如果讓你用Mysql做分布式鎖你怎么做
新建一張表,主鍵為需要鎖的鎖key悠夯,col1為線程uuid癌淮,col2為ttl時(shí)間 加鎖的時(shí)候在一個(gè)事務(wù)中選取當(dāng)前key的record,若存在則判斷ttl沦补,若不存在則直接可以插入 解鎖的時(shí)候直接把record刪除即可 起一個(gè)定時(shí)任務(wù)來遍歷表乳蓄,清楚過期鍵防止無限膨脹
24. zookeeper了解嗎
一點(diǎn)點(diǎn),攝入不深
25. 那我們繼續(xù)聊聊Redis吧夕膀,Redis有什么數(shù)據(jù)結(jié)構(gòu)虚倒?
List,Hash产舞,Set魂奥,Zset,List
26. Zset怎么實(shí)現(xiàn)的易猫?
跳表+map實(shí)現(xiàn)
27. 什么是跳表捧弃?
常規(guī)鏈表只有一個(gè)next節(jié)點(diǎn),跳表持有多個(gè)指向其他鏈表的指針擦囊,可以跨越式的進(jìn)行查找违霞,時(shí)間復(fù)雜度是logn
28. 如果我要找一個(gè)score為A的節(jié)點(diǎn)應(yīng)該如何去找?
首先在map中找到對(duì)應(yīng)的node排名瞬场,然后根據(jù)排名在skiplist中進(jìn)行查找
29. zrange是如何實(shí)現(xiàn)的买鸽?
這個(gè)沒想到不應(yīng)該,查了一下如下: ZRANGE key start stop [WITHSCORES]贯被,zrange 就是返回有序集 key 中眼五,指定區(qū)間內(nèi)的成員,而跳表中的元素最下面的一層是有序的(上面的幾層就是跳表的索引)彤灶,按照分?jǐn)?shù)排序看幼,我們只要找出 start 代表的元素,然后向前或者向后遍歷 M 次拉出所有數(shù)據(jù)即可幌陕,而找出 start 代表的元素诵姜,其實(shí)就是在跳表中找一個(gè)元素的時(shí)間復(fù)雜度。跳表中每個(gè)節(jié)點(diǎn)每一層都會(huì)保存到下一個(gè)節(jié)點(diǎn)的跨度搏熄,在尋找過程中可以根據(jù)跨度和來求當(dāng)前的排名棚唆,所以查找過程是 O(log(N) 過程,加上遍歷 M 個(gè)元素心例,就是 O(log(N)+M)宵凌,所以 redis 的 zrange 不會(huì)像 mysql 的 offset 有比較嚴(yán)重的性能問題。
30. Redis持久化
RDB:快照存儲(chǔ)止后,可以選擇是否阻塞瞎惫,使用場景在數(shù)據(jù)庫上下線、主備復(fù)制等情況中 AOF:類似于binlog,每個(gè)里面都是一個(gè)寫事件瓜喇,是優(yōu)先讀取的策略挺益,支持多策略寫入(強(qiáng)同步、按時(shí)間刷盤欠橘、交由操作系統(tǒng)決定刷盤等)矩肩,AOF為了防止文件膨脹也支持重寫
31. AOF重寫的時(shí)候會(huì)不會(huì)block主線程?
不會(huì)肃续,沒有這個(gè)必要黍檩,起一個(gè)子線程重寫完畢之后把手頭的buffer在刷進(jìn)去就行了
32. 在載入的時(shí)候是怎么做的
本地起一個(gè)client直接讀取AOF重放其中的命令
33. Redis有哪些多機(jī)部署方案?
經(jīng)典的主備同步始锚,通過RDB初始化備庫然后進(jìn)行命令傳播 Sentinel刽酱,實(shí)際上是一種容災(zāi)機(jī)制 cluster,集群部署瞧捌,使用多機(jī)占用slot的方式進(jìn)行集群服務(wù)提供
34. 在主備環(huán)境下棵里,如果一個(gè)備庫中途斷鏈了,重新上線的時(shí)候怎么執(zhí)行同步姐呐?
主備各自維護(hù)一個(gè)寫入的Offset殿怜,對(duì)比差異之后在buffer中讀出丟失的命令并進(jìn)行同步
35. 如果備庫的offset過于落后已經(jīng)不在buffer當(dāng)中了呢?
直接RDB重新同步 使用AOF來查找對(duì)應(yīng)offset的語句(這個(gè)是我猜的)
36. cluster如何做的故障轉(zhuǎn)移曙砂?
不知道头谜,估計(jì)也是檢測到客觀下線然后paxos選主
37. Mysql了解嗎,里面有哪些鎖鸠澈?
類型分類:共享鎖(S)柱告,獨(dú)占鎖(X),意向鎖(與表鎖互斥) 粒度分類:行鎖笑陈、表鎖
38. 行鎖怎么實(shí)現(xiàn)的际度?
不知道,這個(gè)時(shí)候已經(jīng)有點(diǎn)崩潰了涵妥,怎么這么多不知道nnd
39. 講一下事務(wù)隔離級(jí)別吧
RU乖菱、RC、RR妹笆、Serializable
40. 你們用的是哪個(gè)隔離級(jí)別
mysql默認(rèn)的是RR块请,我們改成RC了
41. 在默認(rèn)隔離級(jí)別下會(huì)產(chǎn)生幻讀問題嗎?
會(huì)拳缠,這是幻讀是RR的經(jīng)典問題之一
42. 描述一下幻讀
在T1里Select * From table where id = 1;若不存在該記錄則insert id = 1的記錄進(jìn)去,但是在select完畢之后T2事務(wù)插入了id=1的record贸弥,此時(shí)后續(xù)insert執(zhí)行失敗窟坐,本質(zhì)上來講是當(dāng)前的快照都不支持后續(xù)dml語句的執(zhí)行
43. MVCC機(jī)制了解嗎?
了解,由undolog支撐的數(shù)據(jù)隔離機(jī)制哲鸳,主要是為了提供更高的并發(fā)度
44. 講一下原理
每一行record都存在兩個(gè)隱藏行臣疑,一個(gè)是當(dāng)前的事務(wù)id,一個(gè)是指向undolog的指針 mvcc機(jī)制運(yùn)行 在rr和rc兩個(gè)隔離級(jí)別下 在每次生成ReadView的時(shí)候徙菠,會(huì)將當(dāng)前的活躍事務(wù)ID維護(hù)在列表當(dāng)中讯沈,如果訪問的Record的ID比最小活躍事務(wù)的ID還要小說明之前已經(jīng)提交了,可以直接讀取婿奔,如果與最大事務(wù)ID還要大就證明該事務(wù)在這個(gè)快照時(shí)沒提交缺狠,需要根據(jù)undolog去找對(duì)應(yīng)的歷史版本,如果在最大和最小之間萍摊,那么若其為活躍事務(wù)則找歷史版本挤茄,若不是則直接讀取 在RC級(jí)別下,每次Select都生成新的ReadView冰木,所以能看到不同事物間的提交 在RR級(jí)別下穷劈,只在第一次Select的時(shí)候生成ReadView,所以會(huì)產(chǎn)生幻讀踊沸,因?yàn)榭煺兆x和真實(shí)讀的結(jié)果不一致
45. 慢sql怎么處理歇终?
撈慢sql日志先分析寫的索引是不是有問題或者offset太大了,然后看expain
46. 你關(guān)注explain的那些col逼龟?
key:真實(shí)用到的索引 possible_key:可能用的索引 rows:掃描行數(shù)评凝,越大越拉垮 filter:過濾數(shù)據(jù)比例,這個(gè)col可以驗(yàn)證索引有效性 extra:包含是否使用索引审轮、sort是否時(shí)filesort等
47. https了解嗎肥哎?
client發(fā)一個(gè)隨機(jī)數(shù)給server server發(fā)證書+隨機(jī)數(shù)回來 client拆證書找第三方驗(yàn)證證書有效性,取出公鑰 client拿公鑰加密第三個(gè)隨機(jī)數(shù)發(fā)server server私鑰解密
48. 線上機(jī)器cpu100%你怎么處理疾渣?
容器化時(shí)代篡诽,一定要top看下是不是st過高,存在超賣的可能性 如果不是的話top看下哪個(gè)進(jìn)程有問題榴捡,然后看這個(gè)進(jìn)程哪個(gè)線程吃了cpu jstack直接把線程dump出來然后找對(duì)應(yīng)有問題的線程再分析 也有可能是內(nèi)存泄漏導(dǎo)致的頻繁GC問題杈女,可以拉GClog然后在jmap把heap dump出來看下
49. 你們線上JVM一般調(diào)整什么參數(shù)?
XMX&XMS固定防止內(nèi)存抖動(dòng) 堆空間調(diào)整:年輕代Age調(diào)整吊圾、年輕代eden:s0:s1比例調(diào)整 收集器調(diào)整:大促前把CMS的預(yù)清理次數(shù)調(diào)低一些达椰,CMS的清理閾值調(diào)高一些
50. 反問
什么團(tuán)隊(duì)? 做什么業(yè)務(wù)的项乒?
自我反思
雖說這次是抱著試水的心態(tài)去的啰劲,但是這一連50問著實(shí)是有點(diǎn)傻眼了,而且也發(fā)現(xiàn)了自己的很多漏洞檀何,如下:
我的簡歷過長蝇裤,難以被面試官抓住重點(diǎn)
項(xiàng)目使用技術(shù)棧沒有體現(xiàn)出來
涉及相關(guān)項(xiàng)目重難點(diǎn)表述不是很清楚廷支,分布式鎖、多租戶的分庫分表以及中間件隔離方案栓辜、性能問題排查等
各類技術(shù)棧停其實(shí)都還留在使用層恋拍,沒有深入去挖掘
語速太快了,70分鐘的面試大大小小回答了50個(gè)問題藕甩,我感覺放慢點(diǎn)夠我回答兩輪了
最后總結(jié)個(gè)人所得(供大家參考學(xué)習(xí))
這次一面結(jié)束之后我反思很久施敢,發(fā)現(xiàn)自己真的是有很多不足和漏洞,所以最近一直在規(guī)劃自己的學(xué)習(xí)路線去不足狭莱,不論你是復(fù)習(xí)備戰(zhàn)面試還是自己學(xué)習(xí)僵娃,我相信我所說的多少還是有點(diǎn)用處的---復(fù)習(xí)+學(xué)習(xí)寶典全
1.1 首先,第一個(gè)應(yīng)該去梳理整個(gè)體系的知識(shí)大綱
整個(gè)體系的知識(shí)大綱5個(gè)專題:并發(fā)編程實(shí)戰(zhàn)贩毕、性能調(diào)優(yōu)實(shí)戰(zhàn)悯许、Spring全家桶、緩存數(shù)據(jù)庫辉阶、分布式&微服務(wù)等先壕,這邊全以xmind繪畫,截圖展示谆甜,原件可提供 點(diǎn)擊傳送門即可@拧!
我從基礎(chǔ)-中級(jí)-高級(jí)開始一步一步逐步深入规辱,這些面試問題一樣都有分類整理(附答案解析)
全部的答案不好上傳谆棺,題目有點(diǎn)多,完整版私信小編【666】即可:贝改淑!
比如基礎(chǔ)部分(列舉部分提取):
什么是 Java 程序的主類浴讯?應(yīng)用程序和小程序的主類有何不同朵夏?
構(gòu)造器 Constructor 是否可被 override?
String StringBuffer 和 StringBuilder 的區(qū)別是什么榆纽?String 為什么是不可變的仰猖?
對(duì)象的相等與指向他們的引用相等,兩者有什么不同奈籽?
重載和重寫的區(qū)別饥侵?
在一個(gè)靜態(tài)方法內(nèi)調(diào)用一個(gè)非靜態(tài)成員為什么是非法的?
簡述線程衣屏,程序躏升、進(jìn)程的基本概念。以及他們之間關(guān)系是什么
什么是方法的返回值?返回值在類的方法里的作用是什么?
一個(gè)類的構(gòu)造方法的作用是什么 若一個(gè)類沒有聲明構(gòu)造方法,該程序能正確執(zhí)行嗎 ?為什么?
Java 面向?qū)ο缶幊倘筇匦? 封裝 繼承 多態(tài)
Java 序列化中如果有些字段不想進(jìn)行序列化 怎么辦狼忱?
在調(diào)用子類構(gòu)造方法之前會(huì)先調(diào)用父類沒有參數(shù)的構(gòu)造方法煮甥,其目的是?
線程有哪些基本狀態(tài)?
創(chuàng)建一個(gè)對(duì)象用什么運(yùn)算符?對(duì)象實(shí)體與對(duì)象引用有何不同?
成員變量與局部變量的區(qū)別有哪些盗温?
比如中級(jí)部分(列舉部分提扰涸蕖):
Spring的AOP和IOC是什么成肘?使用場景有哪些?Spring事務(wù)斧蜕,事務(wù)的屬性双霍,數(shù)據(jù)庫隔離級(jí)別
Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有哪些批销?
SpringCould組件有哪些洒闸,它們的作用是什么?微服務(wù)的CAP是什么均芽?BASE是什么丘逸?
HashMap底層實(shí)現(xiàn)原理,紅黑樹掀宋,B+樹深纲,B樹的結(jié)構(gòu)原理,CAS(比較與交換)實(shí)現(xiàn)原理
Redis支持的數(shù)據(jù)類型以及使用場景劲妙,持久化湃鹊,哨兵機(jī)制,緩存擊穿镣奋,緩存穿透
線程是什么币呵,有幾種實(shí)現(xiàn)方式,它們之間的區(qū)別是什么侨颈,線程池實(shí)現(xiàn)原理余赢,JUC并發(fā)包
安全性問題(數(shù)據(jù)篡改(拿到別人的URL,篡改數(shù)據(jù)(金額)發(fā)送給系統(tǒng)))
索引使用的限制條件,sql優(yōu)化有哪些,數(shù)據(jù)同步問題(緩存哈垢,數(shù)據(jù)庫數(shù)據(jù)同步)
分布式事務(wù)
堆溢出妻柒,棧溢出的出現(xiàn)場景以及解決方案
悲觀鎖,樂觀鎖温赔,讀寫鎖蛤奢,行鎖,表鎖陶贼,自旋鎖啤贩,死鎖,分布式鎖拜秧,線程同步鎖痹屹,公平鎖,非公平鎖分別是什么枉氮?
初始化Bean對(duì)象有幾個(gè)步驟志衍,它的生命周期
JVM內(nèi)存模型暖庄,算法,垃圾回收器楼肪,調(diào)優(yōu)培廓,類加載機(jī)制(雙親委派),創(chuàng)建一個(gè)對(duì)象,這個(gè)對(duì)象在內(nèi)存中是怎么分配的春叫?
Dubbo的運(yùn)行原理肩钠,與SpringCould相比它為什么效率要高一些,Zookeeper底層原理
說出幾種MQ之間的區(qū)別暂殖,以及為什么使用這種MQ价匠,消息重復(fù)發(fā)送(冪等性),消息發(fā)送失敗呛每,消息掉包踩窖,長時(shí)間收不到消息章鲤,發(fā)送的消息太大造成接收不成功
比如高級(jí)部分(消息隊(duì)列+Redis緩存+分庫分表+讀寫分離+分布式系統(tǒng)+高可用+微服務(wù)架構(gòu))(列舉部分提鹊赘纭)
為什么使用消息隊(duì)列?消息隊(duì)列有什么優(yōu)點(diǎn)和缺點(diǎn)逮壁?Kafka颓遏、ActiveMQ徐矩、RabbitMQ、RocketMQ 都有什么優(yōu)點(diǎn)和缺點(diǎn)叁幢?
如何保證消息不被重復(fù)消費(fèi)滤灯?或者說,如何保證消息消費(fèi)的冪等性曼玩?
如何解決消息隊(duì)列的延時(shí)以及過期失效問題鳞骤?消息隊(duì)列滿了以后該怎么處理?有幾百萬消息持續(xù)積壓幾小時(shí)黍判,說說怎么解決豫尽?
redis 集群模式的工作原理能說一下么?在集群模式下顷帖,redis 的 key 是如何尋址的美旧?分布式尋址都有哪些算法?了解一致性 hash 算法嗎贬墩?
了解什么是 redis 的雪崩榴嗅、穿透和擊穿?redis 崩潰之后會(huì)怎么樣陶舞?系統(tǒng)該如何應(yīng)對(duì)這種情況嗽测?如何處理 redis 的穿透?
為什么要分庫分表(設(shè)計(jì)高并發(fā)系統(tǒng)的時(shí)候肿孵,數(shù)據(jù)庫層面該如何設(shè)計(jì))唠粥?用過哪些分庫分表中間件疏魏?不同的分庫分表中間件都有什么優(yōu)點(diǎn)和缺點(diǎn)?你們具體是如何對(duì)數(shù)據(jù)庫如何進(jìn)行垂直拆分或水平拆分的晤愧?
有沒有做 MySQL 讀寫分離大莫?如何實(shí)現(xiàn) MySQL 的讀寫分離?MySQL 主從復(fù)制原理的是啥养涮?如何解決MySQL 主從同步的延時(shí)問題葵硕?
說一下的 dubbo 的工作原理?注冊中心掛了可以繼續(xù)通信嗎贯吓?說說一次 rpc 請(qǐng)求的流程?
如何基于 dubbo 進(jìn)行服務(wù)治理蜀变、服務(wù)降級(jí)悄谐、失敗重試以及超時(shí)重試?
集群部署時(shí)的分布式 session 如何實(shí)現(xiàn)库北?
服務(wù)注冊和發(fā)現(xiàn)是什么意思爬舰?Spring Cloud 如何實(shí)現(xiàn)?
一般實(shí)現(xiàn)分布式鎖都有哪些方式寒瓦?使用 redis 如何設(shè)計(jì)分
布式鎖情屹?使用 zk 來設(shè)計(jì)分布式鎖可以嗎?這兩種分布式鎖的實(shí)現(xiàn)方式哪種效率比較高杂腰?
dubbo 的 spi 思想是什么垃你?
如何設(shè)計(jì)可以動(dòng)態(tài)擴(kuò)容縮容的分庫分表方案?