互聯網Java 工程師進階知識完全掃盲
本計畫大部分內容來自中華石杉,版權歸作者所有,內容涵蓋高並發、分散式、高可用、微服務、大量資料處理等領域知識。我們對這部分知識做了一個系統性的整理,方便讀者學習查閱。
我們也在全力更新演算法專案!如果你在準備筆面試演算法,或是想進一步提升coding 能力,歡迎Star 關注doocs/leetcode
在學習本計畫之前,先來看看Discussions 討論區的技術面試官是怎麼說的吧。本計畫歡迎各位開發者朋友到Discussions 討論區分享自己的一些想法和實務經驗。也不妨Star 關注doocs/advanced-java,隨時追蹤專案最新動態。
高並發架構
訊息佇列
- 為什麼使用訊息隊列?訊息隊列有什麼優點和缺點? 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 的持久化有哪幾種方式?不同的持久化機制都有什麼優缺點?持久化機制具體底層是如何達成的?
- Redis 集群模式的工作原理能說一下麼?在叢集模式下,Redis 的key 是如何尋址的?分散式尋址都有哪些演算法?了解一致性hash 演算法嗎?如何動態增加和刪除一個節點?
- 了解什麼是Redis 的雪崩、穿透和擊穿? Redis 崩潰之後會怎麼樣?系統該如何應對這種情況?如何處理Redis 的穿透?
- 如何保證快取與資料庫的雙寫一致性?
- Redis 的並發競爭問題是什麼?如何解決這個問題?了解Redis 事務的CAS 方案嗎?
- 生產環境中的Redis 是怎麼部署的?
- 有了解Redis rehash 的過程嗎?
分庫分錶
- 為什麼要分庫分錶(設計高並發系統的時候,資料庫層面該如何設計)?用過哪些分庫分錶中間件?不同的分庫分錶中間件都有什麼優點和缺點?你們具體是如何對資料庫如何進行垂直拆分或水平拆分的?
- 現在有一個未分庫分錶的系統,未來要分庫分錶,如何設計才可以讓系統從未分庫分錶動態切換到分庫分錶上?
- 如何設計可以動態擴容縮容的分庫分錶方案?
- 分庫分錶之後,id 主鍵如何處理?
讀寫分離
- 如何實作MySQL 的讀寫分離? MySQL 主從複製原理是啥?如何解決MySQL 主從同步的延遲問題?
高並發系統
分散式系統
面試連環砲
系統拆分
- 為什麼要進行系統拆分?如何進行系統拆分?拆分後不用Dubbo 可以嗎?
分散式服務框架
- 說一下Dubbo 的工作原理?註冊中心掛了可以繼續通信嗎?
- Dubbo 支援哪些序列化協定?說一下Hessian 的資料結構? PB 知道嗎?為什麼PB 的效率是最高的?
- Dubbo 負載平衡策略和叢集容錯策略都有哪些?動態代理策略呢?
- Dubbo 的spi 想法是什麼?
- 如何基於Dubbo 進行服務治理、服務降級、失敗重試以及逾時重試?
- 分散式服務介面的冪等性如何設計(例如不能重複扣款)?
- 分散式服務介面請求的順序性如何保證?
- 如何自己設計一個類似Dubbo 的RPC 框架?
- CAP 定理的P 是什麼?
分散式鎖
- Zookeeper 都有哪些應用場景?
- 使用Redis 如何設計分散式鎖?使用Zookeeper 來設計分散式鎖定可以嗎?以上兩種分散式鎖的實現方式哪一種效率比較高?
分散式事務
- 分散式事務了解嗎?你們如何解決分散式事務問題的? TCC 若出現網路連不通怎麼辦? XA 的一致性如何保證?
分散式會話
高可用架構
- Hystrix 介紹
- 電商網站詳情頁系統架構
- Hystrix 執行緒池技術實作資源隔離
- Hystrix 信號量機制實現資源隔離
- Hystrix 隔離策略細微控制
- 深入Hystrix 執行時內部原理
- 基於request cache 請求快取技術優化批量商品資料查詢接口
- 基於本地快取的fallback 降級機制
- 深入Hystrix 斷路器執行原理
- 深入Hystrix 執行緒池隔離與介面限流
- 基於timeout 機制為服務介面呼叫逾時提供安全保護
高可用系統
限流
熔斷
- 如何進行熔斷?
- 熔斷框架都有哪些?具體實現原理知道嗎?
- 熔斷框架如何做技術選型?選用Sentinel 還是Hystrix?
降級
微服務架構
- 微服務架構整個章節內容屬額外新增,後續抽空更新,也歡迎讀者參與補充完善
- 關於微服務架構的描述
- 從單體式架構遷移到微服務架構
- 微服務的事件驅動資料管理
- 選擇微服務部署策略
- 微服務架構的優勢與不足
Spring Cloud 微服務架構
- 什麼是微服務?微服務之間是如何獨立通訊的?
- Spring Cloud 和Dubbo 有哪些不同?
- Spring Boot 和Spring Cloud,談談你對它們的理解?
- 什麼是服務熔斷?什麼是服務降級?
- 微服務的優缺點分別是什麼?說一下你在專案開發中碰到的坑洞?
- 你所知道的微服務技術棧都有哪些?
- 微服務治理策略
- Eureka 和Zookeeper 都可以提供服務註冊與發現的功能,它們有什麼不同?
- 談談服務發現元件Eureka 的主要呼叫過程?
- .....
海量資料處理
- 如何從大量的URL 找出相同的URL?
- 如何從大量數據中找出高頻詞?
- 如何找出某一天造訪百度網站最多的IP?
- 如何在大量的數據中找出不重複的整數?
- 如何在大量的數據中判斷一個數字是否存在?
- 如何查詢最熱門的查詢串?
- 如何統計不同電話號碼的數量?
- 如何從5 億個數中找出中位數?
- 如何依照query 的頻度排序?
- 如何找出排名前500 的數?
- 講講大數據中TopK 問題的常用套路?
Stars 趨勢
註:此趨勢圖由actions-starcharts 自動定時刷新,作者@MaoLongLong
Doocs 社區優質項目
Doocs 技術社區,致力於打造一個內容完整、持續成長的網路開發者學習生態圈!以下是Doocs 旗下的一些優秀項目,歡迎各位開發者朋友持續保持關注。
# | 專案 | 描述 | 熱度 |
---|
1 | advanced-java | 互聯網Java 工程師進階知識完全掃盲:涵蓋高並發、分散式、高可用、微服務、大量資料處理等領域知識。 |
|
2 | leetcode | 多種程式語言實現LeetCode、《劍指Offer(第2 版)》、《程式設計師面試金典(第6 版)》題解。 |
|
3 | source-code-hunter | 網路常用元件框架原始碼分析。 |
|
4 | jvm | Java 虛擬機器底層原理知識總結。 |
|
5 | coding-interview | 代碼面試題集,包括《劍指Offer》、《程式設計之美》等。 |
|
6 | md | 一款高度簡潔的微信Markdown 編輯器。 |
|
7 | technical-books | 值得一看的技術書籍列表。 |
|
貢獻者
感謝以下所有朋友對Doocs 技術社群所做的貢獻,參與專案維護請戳這兒。
公眾號
Doocs 技術社群旗下唯一公眾號「 Doocs 」,歡迎掃碼關注,專注分享科技領域相關知識及業界最新資訊。當然,也可以加我個人微信(備註:GitHub),拉你進技術交流群組。
請關注「 Doocs 」公眾號,回覆PDF ,即可取得本項目離線PDF 文件(283 頁精華),學習更方便!