這些年,分佈式框架越用越成熟,越用越廣泛。幾前年還只是架構師和高級開發的面試必考題,現在已經連應屆生都要面對了。
分佈式框架看似又多又複雜,但主要集中在協調類框架如 Zookeeper,分佈式緩存如 Redis,消息隊列如 Kafka,數據庫 MySQL 的分庫分表方案如 MyCat,全文檢索如 ElasticSearch,微服務如 Dubbo,方向代理如 Nginx。
每種技術都有多個框架供大家選擇,具體應用依賴業務場景,大廠們內部也有自己的實現,一般面試官要求同類型的框架深入瞭解一個即可,畢竟學會了一個,其他就很容易入手。
我這裏也就每種類型都列舉了一個,其中消息隊列選了兩個,因爲筆者所在的部門根據業務的不同經常用兩種隊列,所以筆者感覺有必要提到兩個。
注意:篇幅原因,下面從存儲、數據庫、中間件ZK、消息kafka、微服務dubbo、方向代理Nginx等方面介紹各個所需學習的知識點以及一些Java高級面試必備的題目、一些自己學習過程中的筆記以及收集的各大分佈式筆記PDF,很多隻是截圖介紹展示一下,不過都可提供原文件,有需求的朋友麻煩各位【點擊分佈式】下載原件!
01 分佈式存儲相關(Redis)
1.1 Redis應該學習的那些知識
- String 的內部結構及實現原理
- List 的內部結構及實現原理
- Map 的內部結構及實現原理
- Set 的內部結構及實現原理
- SortedSet 的內部結構及實現原理
- Redis 有 timeout 機制,請問到了過期時間,數據是否真的被刪除了?
- Redis 的持久化機制 Redis 是單進程單線程?性能爲什麼這麼快?
- Redis 的集羣
- Redis 的哨兵
- Redis 緩存與數據一致性的問題 緩存雪崩 緩存擊穿
- Redis 的內存回收策略
- 管道和 Lua 腳本
- 一致性哈希算法
- 手寫一個 LRU 算法
- Redis 版的分佈式鎖
1.2 根據以上知識整理Redis超高頻面試70問(六大模塊)
- Redis概念理解
- Redis數據結構與指令
- Redis高併發處理策略
- Redis集羣結構以及設計理念
- Redis緩存管理與持久化機制
- Redis應用場景設計
1.3 學習過程中記錄的一份Redis筆記
包括五個分類:基礎篇、數據結構篇、持久化篇、集羣篇、其他分類,這些是筆者自己對於Redis的學習而總結出的筆記
02 數據庫存儲相關(MySQL)
2.1 知識點
- MySQL 單表數據達到多少的時候會影響數據庫的查詢性能?爲什麼?
- MySQL 主從複製的原理是什麼?常見的形式有哪些?
- MySQL 分庫分表,解釋一下垂直和水平 2 種不同的拆分
- MySQL 垂直拆分會帶來哪些問題?
- 分佈式數據存儲中間件 MyCat 的核心流程是什麼?
- 概述一下 MyCat?
- 解釋一下全局表,ER 表,分片表
- MyCat在分庫分表之後,是怎麼支持連表查詢的?
- 庫表拆分時,拆分規則怎麼取捨?
- 全局 ID 方案有哪些?程序自定義全局 ID 方案有哪些?
- 一致性 Hash 的原理?設計的好處是什麼?
- 4 層負載和 7 層負載誰性能更高,爲什麼?
- 講一講 MySQL 的高可用方案?
2.2 關於分庫分表Java高級面試題
面試題+面試官心裏分析+題目剖析+答案詳解
03 分佈式中間件相關 Zookeeper
- Zookeeper 是什麼?
- 描述一下 ZAB 協議
- 四種類型的數據節點 Znode
- TCP 不是可靠連接嗎?爲什麼分佈式要考慮網絡信息丟失的問題?
- 介紹一下兩階段提交協議 2pc
- 介紹一下三階段提交協議 3pc
- Zookeeper 宕機如何處理?
- 描述一下 Zookeeper 中 session 管理的思想,畫圖描述一下
- Zookeeper Watcher 機制
- Zookeeper Server 的角色
- Zookeeper Server 的狀態
- Zookeeper 負載均衡和 Nginx 負載均衡區別
- Zookeeper 的序列化
- ZXID 是什麼?有什麼作用?
- 講解一下 Zookeeper 的持久化機制
- 投票信息的五元組
- Quorum 與腦裂
- 選舉的全過程
- 數據同步全過程
- 實現一個分佈式鎖
- 追問 1:Watch 監聽爲什麼是一次性的?
- 追問 2:Zookeeper 爲什麼不用數據庫做持久化?
- 追問 3:Zookeeper 的 session 爲什麼由 server 維護,client 不行嗎?
3.1 ZK面試:27連問
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統?
- ZAB 協議?
- 四種類型的數據節點 Znode
- Zookeeper Watcher 機制 -- 數據變更通知
- 客戶端註冊 Watcher 實現
- 服務端處理 Watcher 實現
- 客戶端回調 Watcher
- ACL 權限控制機制
- Chroot 特性
- 服務器角色
- 會話管理
- Zookeeper 下 Server 工作狀態
- 數據同步
- zookeeper 是如何保證事務的順序一致性的?
- 分佈式集羣中爲什麼會有 Master?
- zk 節點宕機如何處理?
- zookeeper 負載均衡和 nginx 負載均衡區別
- Zookeeper 有哪幾種幾種部署模式?
- 集羣最少要幾臺機器,集羣規則是怎樣的?
- 集羣支持動態添加機器嗎?
- Zookeeper 對節點的 watch監聽通知是永久的嗎?爲什麼不是永久的?
- Zookeeper 的 java 客戶端都有哪些?
- chubby 是什麼,和 zookeeper 比你怎麼看?
- 說幾個 zookeeper 常用的命令。
- ZAB 和 Paxos 算法的聯繫與區別?
- Zookeeper 的典型應用場景?
04 消息隊列
4.1 消息隊列知識點
- Kafka ISR 的設計思想
- Kafka 的速度爲什麼那麼快?
- Kafka 如何保證消息的順序消費?
- 活鎖的問題怎麼解決?
- Kafka 高效文件存儲設計特點
- 談一談 Kafka 的再均衡
- Kafka 的副本複製過程詳解
- Kafka 的存儲機制詳解
- Kafka 什麼情況下會丟失消息?
- Kafka 的分區數與多線程
- RabbitMQ 消息隊列的作用與使用場景
- RabbitMQ 怎麼自動刪除沒人消費的消息?
- RabbitMQ 無法被路由的消息,去了哪裏?
- RabbitMQ 消息在什麼時候會變成Dead Letter?
- RabbitMQ 如何保證消息的可靠性投遞?
- RabbitMQ 消息冪等性
- RabbitMQ 如何保證消息的順序性?
4.2 kafka面試(基礎+進階+高階共44問)
- 1.Kafka的用途有哪些?使用場景如何?
- 2.Kafka中的ISR、AR又代表什麼?ISR的伸縮又指什麼
- 3.Kafka中的HW、LEO、LSO、LW等分別代表什麼?
- 4.Kafka中是怎麼體現消息順序性的?
- 5.Kafka中的分區器、序列化器、攔截器是否瞭解?它們之間的處理順序是什麼?
- 6.Kafka生產者客戶端的整體結構是什麼樣子的?
- 7.Kafka生產者客戶端中使用了幾個線程來處理?分別是什麼?
- 8.Kafka的舊版Scala的消費者客戶端的設計有什麼缺陷?
- 9.“消費組中的消費者個數如果超過topic的分區,那麼就會有消費者消費不到數據”這句話是否正確?如果正確,那麼有沒有什麼hack的手段?
- 10.有哪些情形會造成重複消費?
- 11.那些情景下會造成消息漏消費?
- 12.KafkaConsumer是非線程安全的,那麼怎麼樣實現多線程消費?
- 13.簡述消費者與消費者之間的關係
- 14.當你使用kafka-topics.sh創建(刪除)了一個topic之後,Kafka背後會執行什麼邏輯?
- 15.topic的分區數可不可以增加?如果可以怎麼增加?如果不可以,那又是爲什麼?
- 16.topic的分區數可不可以減少?如果可以怎麼減少?如果不可以,那又是爲什麼?
- 17.創建topic時如何選擇合適的分區數?
- 1.Kafka目前有哪些內部topic,它們都有什麼特徵?各自的作用又是什麼?
- 2.優先副本是什麼?它有什麼特殊的作用?
- 3.Kafka有哪幾處地方有分區分配的概念?簡述大致的過程及原理
- 4.簡述Kafka的日誌目錄結構
- 5.Kafka中有哪些索引文件?
- 6.如果我指定了一個offset,Kafka怎麼查找到對應的消息?
- 7.如果我指定了一個timestamp,Kafka怎麼查找到對應的消息?
- 8.聊一聊你對Kafka的Log Retention的理解
- 9.聊一聊你對Kafka的Log Compaction的理解
- 10.聊一聊你對Kafka底層存儲的理解
- 11.聊一聊Kafka的延時操作的原理
- 12聊一聊Kafka控制器的作用
- 13.Kafka的舊版Scala的消費者客戶端的設計有什麼缺陷?
- 14.消費再均衡的原理是什麼?(提示:消費者協調器和消費組協調器)
- 15.Kafka中的冪等是怎麼實現的?
- 1.Kafka中的事務是怎麼實現的?
- 2.失效副本是指什麼?有哪些應對措施?
- 3.多副本下,各個副本中的HW和LEO的演變過程
- 4.Kafka在可靠性方面做了哪些改進?(HW, LeaderEpoch)
- 5.爲什麼Kafka不支持讀寫分離?
- 6.Kafka中的延遲隊列怎麼實現
- 7.Kafka中怎麼實現死信隊列和重試隊列?
- 8.Kafka中怎麼做消息審計?
- 9.Kafka中怎麼做消息軌跡?
- 10.怎麼計算Lag?(注意read_uncommitted和read_committed狀態下的不同)
- 11.Kafka有哪些指標需要着重關注?
- 12.Kafka的那些設計讓它有如此高的性能?
PDF學習筆記《Kafka源碼解析與實戰》
4.3 RabbitMQ面試(22問)
05 分佈式相關
- CAP 理論
- Paxos 協議
- Raft 協議
- 設計一個全局唯一的 ID
06 分佈式全文檢索
- 談談分詞與倒排索引的原理
- 分段存儲的思想
- 段合併的策略思想
- 文本相似度 TF-IDF
- ElasticSearch 寫索引的邏輯
- ElasticSearch 集羣中搜索數據的過程
- ElasticSearch 深翻頁的問題及解決
- ElasticSearch 性能優化
07 分佈式事務
- 分佈式事務的幾種實現方式
- TCC 柔性分佈式事務
- TCC-Transaction 框架的原理
《分佈式事務綜合案例分析》
《分佈式系統常用技術及案例分析PDF》
08 反向代理
- Nginx 的動靜分離
- Nginx 的防盜鏈
- Nginx 的跨域訪問
- Nginx 的進程模型
- Nginx 與網關
- Nginx 的高可用方案
8.1 Nginx的學習筆記
《深入理解Nginx模塊開發與架構解析第2版.PDF》
09 微服務相關
- Dubbo 的調用流程
- Dubbo 的負載均衡策略
- Dubbo 的併發和連接控制
- Dubbo 的服務暴露過程
- Dubbo 的SPI思想
- Dubbo 的六種集羣容錯模式
- Dubbo 源碼 Debug 時個人遇到的幾個難點
9.1 Java高級面試之分佈式系統Dubbo
撒花環節
內容太多,篇幅受限,所以不能僅靠一篇文章將上面分佈式的各大知識講清楚,只能粗略的介紹哪些知識是必備的,以及分享一些Java高級面試問題和學習的PDF(上面都有截圖展示)。其實也沒關係,想要深入學習朋友可以來找小編獲取這些學習的文檔(文中介紹的所有學習筆記) 【點擊分佈式】免費獲取!!