這裡有一份面試題相關總結,涉及高併發、分散式、高可用相關知識點,在此分享給大家,希望大家能拿到一份理想的 Offer!
知識點會陸續更新在 GitHub 上,覺得還算湊和的話可以 star 關注一下噢~
高併發架構
訊息佇列
- 為什麼使用訊息佇列?訊息佇列有什麼優點和缺點?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什麼優點和缺點?
- 如何保證訊息佇列的高可用?
- 如何保證訊息不被重複消費?(如何保證訊息消費時的冪等性)
- 如何保證訊息的可靠性傳輸?(如何處理訊息丟失的問題)
- 如何保證訊息的順序性?
- 如何解決訊息佇列的延時以及過期失效問題?訊息佇列滿了以後該怎麼處理?有幾百萬訊息持續積壓幾小時,說說怎麼解決?
- 如果讓你寫一個訊息佇列,該如何進行架構設計啊?說一下你的思路。
搜尋引擎
- es 的分散式架構原理能說一下麼(es 是如何實現分散式的啊)?
- es 寫入資料的工作原理是什麼啊?es 查詢資料的工作原理是什麼啊?底層的 lucene 介紹一下唄?倒排索引瞭解嗎?
- es 在資料量很大的情況下(數十億級別)如何提高查詢效率啊?
- es 生產叢集的部署架構是什麼?每個索引的資料量大概有多少?每個索引大概有多少個分片?
快取
- 在專案中快取是如何使用的?快取如果使用不當會造成什麼後果?
- Redis 和 Memcached 有什麼區別?Redis 的執行緒模型是什麼?為什麼單執行緒的 Redis 比多執行緒的 Memcached 效率要高得多?
- Redis 都有哪些資料型別?分別在哪些場景下使用比較合適?
- Redis 的過期策略都有哪些?手寫一下 LRU 程式碼實現?
- 如何保證 Redis 高併發、高可用?Redis 的主從複製原理能介紹一下麼?Redis 的哨兵原理能介紹一下麼?
- Redis 的持久化有哪幾種方式?不同的持久化機制都有什麼優缺點?持久化機制具體底層是如何實現的?
- Redis 叢集模式的工作原理能說一下麼?在叢集模式下,Redis 的 key 是如何定址的?分散式定址都有哪些演算法?瞭解一致性 hash 演算法嗎?如何動態增加和刪除一個節點?
- 瞭解什麼是 Redis 的雪崩和穿透?Redis 崩潰之後會怎麼樣?系統該如何應對這種情況?如何處理 Redis 的穿透?
- 如何保證快取與資料庫的雙寫一致性?
- Redis 的併發競爭問題是什麼?如何解決這個問題?瞭解 Redis 事務的 CAS 方案嗎?
- 生產環境中的 Redis 是怎麼部署的?
分庫分表
- 為什麼要分庫分表(設計高併發系統的時候,資料庫層面該如何設計)?用過哪些分庫分表中介軟體?不同的分庫分表中介軟體都有什麼優點和缺點?你們具體是如何對資料庫如何進行垂直拆分或水平拆分的?
- 現在有一個未分庫分表的系統,未來要分庫分表,如何設計才可以讓系統從未分庫分表動態切換到分庫分表上?
- 如何設計可以動態擴容縮容的分庫分表方案?
- 分庫分表之後,id 主鍵如何處理?
讀寫分離
高併發系統
分散式系統
系統拆分
分散式服務框架
- 說一下 Dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?
- Dubbo 支援哪些序列化協議?說一下 Hessian 的資料結構?PB 知道嗎?為什麼 PB 的效率是最高的?
- Dubbo 負載均衡策略和叢集容錯策略都有哪些?動態代理策略呢?
- Dubbo 的 spi 思想是什麼?
- 如何基於 Dubbo 進行服務治理、服務降級、失敗重試以及超時重試?
- 分散式服務介面的冪等性如何設計(比如不能重複扣款)?
- 分散式服務介面請求的順序性如何保證?
- 如何自己設計一個類似 Dubbo 的 rpc 框架?
分散式鎖
分散式事務
分散式會話
高可用架構
高可用系統
- 如何設計一個高可用系統?
限流
- 如何限流?在工作中是怎麼做的?說一下具體的實現?
熔斷
- 如何進行熔斷?
- 熔斷框架都有哪些?具體實現原理知道嗎?
降級
- 如何進行降級?