更新一下二面吧
本來上周五面完二面反問階段面試官說基礎(chǔ)不太扎實(shí),心態(tài)已經(jīng)崩了,今天又收到了3面通知。遂打算寫一寫二面面經(jīng)
自我介紹2min
項(xiàng)目相關(guān)
你的RPC調(diào)用的流程是什么樣子的?
消費(fèi)者-> 注冊中心 -> 更新本地緩存 -> 與提供者建立連接 -> 序列化請求(參數(shù),方法名等等) -> 服務(wù)端解析協(xié)議 -> 執(zhí)行本地方法 -> 序列化結(jié)果返回。
你說利用Vertx實(shí)現(xiàn)了異步的網(wǎng)絡(luò)通信來提升性能,怎么提升的?
答了是Vertx本身實(shí)現(xiàn)了異步網(wǎng)絡(luò)通信,簡要說了說異步和同步的性能區(qū)別。
你實(shí)現(xiàn)的多個(gè)序列化方式JDK,JSON,HESSION,Kyro有什么區(qū)別?
JDK原生性能差,JSON可讀性強(qiáng),性能不如二進(jìn)制協(xié)議,Hession二進(jìn)制,性能好,Kyro線程不安全,利用ThreadLocal來保存Kyro實(shí)例。復(fù)盤補(bǔ)充:跨平臺(tái),跨語言等可以擴(kuò)展。
假設(shè)服務(wù)提供者出現(xiàn)了宕機(jī),消費(fèi)端怎么處理?
服務(wù)提供者心跳機(jī)制來保證注冊中心實(shí)例的存活,消費(fèi)端通過watch機(jī)制來監(jiān)聽注冊中心的變化,監(jiān)聽到變化會(huì)更新本地緩存
假設(shè)此時(shí)發(fā)生暫時(shí)的網(wǎng)絡(luò)擁塞怎么處理?
消費(fèi)端有指數(shù)退避重試策略,一定程度上避免了網(wǎng)絡(luò)擁塞。
你的負(fù)載均衡是怎么做的?
輪詢,隨機(jī),一致性哈希
輪詢和隨機(jī)都可以一定程度上分散流量,那么一致性哈希相比于其他兩種的優(yōu)勢?
這個(gè)忘記了,沒答上來
復(fù)盤:外界對于服務(wù)宕機(jī)可以做到無感,不會(huì)造成大規(guī)模的緩存失效。并且相同的請求大概率會(huì)被hash到相同的資源上,保證了前后請求路由的一致(如果有這種需求的話)。
假設(shè)某一次你的消費(fèi)端調(diào)用時(shí)出現(xiàn)了服務(wù)端短暫宕機(jī)又上線,此時(shí)消費(fèi)端該怎么做?
重試策略 -> 重試失敗則拋出異常給自行消費(fèi)者處理。
八股相關(guān)(記不太清楚了)
多線程編程可以提高系統(tǒng)性能的原因是什么?
這個(gè)沒有聽懂面試官問的是什么,答了串行任務(wù)可以轉(zhuǎn)為并行任務(wù),提高了系統(tǒng)效率,面試官說他認(rèn)為這個(gè)是多線程的結(jié)果,而不是原因。遂跳過:有會(huì)的大佬可以評論區(qū)解答一下。
假設(shè)在你的RPC項(xiàng)目中,出現(xiàn)了大量的TIME_WAIT,可能的原因是什么?
答了消費(fèi)端最后一個(gè)ACK可能由于網(wǎng)絡(luò)丟失,這個(gè)復(fù)盤的時(shí)候感覺答的不太對。
實(shí)際上:
高并發(fā)短連接場景:服務(wù)器處理大量短時(shí)間的 HTTP 請求,每次請求結(jié)束后都會(huì)關(guān)閉連接,導(dǎo)致服務(wù)器端主動(dòng)關(guān)閉大量連接。
服務(wù)器主動(dòng)關(guān)閉連接:如果是服務(wù)器主動(dòng)關(guān)閉連接(而不是客戶端),那么 TIME_WAIT 會(huì)累積在服務(wù)器端。這在以下情況可能發(fā)生:服務(wù)端設(shè)置了 keep-alive 超時(shí)關(guān)閉服務(wù)端因?yàn)槟承┰蛑鲃?dòng)斷開了長連接負(fù)載均衡策略導(dǎo)致服務(wù)器頻繁關(guān)閉連接
連接池配置不當(dāng):如果應(yīng)用使用的連接池配置不合理,可能導(dǎo)致頻繁地建立和關(guān)閉連接。
沒有開啟 TCP 長連接:對于 HTTP 請求,沒有配置 Connection: keep-alive
或相關(guān)設(shè)置,導(dǎo)致每個(gè)請求都建立新連接。
網(wǎng)絡(luò)或應(yīng)用層面的問題:客戶端異常導(dǎo)致服務(wù)器必須主動(dòng)關(guān)閉連接。
上面回答來自AI
還有些不記得了。
SQL題:
select id from table 1000,10;
select id from table 100000000,10;
id 為主鍵索引,這兩句的查詢效率?
答: 深度分頁問題,可以采用分表措施,或者利用索引。
追問怎么利用索引?利用索引為什么可以提高查詢效率?
怎么利用索引沒答上來,后來發(fā)現(xiàn)可以加上where id > 的查詢條件, 為什么可以提高查詢效率? 經(jīng)典八股。
手撕:
旋轉(zhuǎn)數(shù)組的最小值
合并區(qū)間