買這商品的人也買了...
-
$580$452 -
$650$507 -
$580$452 -
$690$545 -
$780$616 -
$680$537 -
$600$468 -
$534$507 -
$980$774 -
$690$538 -
$580$458 -
$890$757 -
$658Java 多線程編程核心技術, 3/e
-
$1,710System Design Interview – An Insider's Guide: Volume 2 (Paperback)
-
$880$695 -
$654$621 -
$815學透 Spring:從入門到項目實戰
-
$980$774 -
$534$507 -
$899$854 -
$528$502 -
$602PostgreSQL 數據庫實戰派
-
$580$458 -
$820$648 -
$390$371
相關主題
商品描述
系統設計面試被認為是所有技術面試中難度最大的面試,因為面試題的範圍都非常廣且模糊,其答案也是開放的,不存在標準答案或正確答案。本書是專門為準備系統設計面試的讀者而撰寫的,重點討論了分佈式系統中的常用組件和大型Web應用的系統架構,涵蓋了幾類常見的典型應用,包括聊天系統、視頻流系統、文件存儲系統(雲盤)、支付系統等,旨在幫助讀者掌握構建一個可擴展的系統所需的基礎知識,為面試做好充分準備。作為過來人,作者提出了應對面試題的“四步法”,即確定問題範圍→總體設計→細節設計→總結,書中的案例基本上都是按照這個步驟進行解析的。這種解題框架有助於在面試時搞清楚系統的需求、限制和瓶頸,理清思路,有條不紊地作答。通過本書,讀者可以瞭解不同Web應用的系統設計方案的要點及採用的技術,據此查漏補缺,補齊自己知識體系中的短板,為面試成功增添更多的可能。而對於已經是架構師的讀者而言,書中的案例將為他們提供新的思路和靈感,有助於他們在面試中更加從容地展現自己的設計思路和實踐經驗。
目錄大綱
1 從0到100萬用戶的擴展
1.1 單服務器配置
1.2 數據庫
1.2.1 使用何種數據庫
1.3 縱向擴展 vs. 橫向擴展
1.4 負載均衡器
1.5 數據庫復制
1.6 緩存
1.6.1 緩存層
1.6.2 使用緩存時的註意事項
1.7 內容分發網絡
1.7.1 使用CDN時的註意事項
1.8 無狀態網絡層
1.8.1 有狀態架構
1.8.2 無狀態架構
1.9 數據中心
1.10 消息隊列
1.11 記錄日誌、收集指標與自動化
1.11.1 添加消息隊列和各種工具
1.12 數據庫擴展
1.12.1 縱向擴展
1.12.2 橫向擴展
1.13 用戶量達到甚至超過了100萬
2 封底估算
2.1 2的冪
2.2 每個程序員都應該知道的操作耗時
2.3 可用性相關的數字
2.4 案例:估算推特的QPS和存儲需求
2.5 小技巧
3 系統設計面試的框架
3.1 有效的系統設計面試的四個步驟
3.1.1 第一步:理解問題並確定設計的邊界
3.1.2 第二步:提議高層級的設計並獲得認同
3.1.3 第三步:設計繼續深入
3.1.4 第四步:總結
3.2 面試中每一步的時間分配
4 設計限流器
4.1 第一步:理解問題並確定設計的邊界
4.2 第二步:提議高層級的設計並獲得認同
4.2.1 在哪裡實現限流器
4.2.2 流量限制算法
4.2.3 高層級架構
4.3 第三步:設計繼續深入
4.3.1 流量限制規則
4.3.2 超過流量的限制
4.3.3 詳細設計
4.3.4 分佈式系統中的限流器
4.3.5 性能優化
4.3.6 監控
4.4 第四步:總結
5 設計一致性哈希系統
5.1 重新哈希的問題
5.2 一致性哈希
5.2.1 哈希空間和哈希環
5.2.2 哈希服務器
5.2.3 哈希鍵
5.2.4 查找服務器
5.2.5 添加服務器
5.2.6 移除服務器
5.2.7 兩個問題
5.2.8 虛擬節點
5.2.9 找到受影響的鍵
5.3 總結
6 設計鍵值存儲系統
6.1 理解問題並確定設計的邊界
6.2 單服務器的鍵值存儲
6.3 分佈式鍵值存儲
6.3.1 CAP理論
6.3.2 系統組件
6.3.3 數據分區
6.3.4 數據復制
6.3.5 一致性
6.3.6 不一致性的解決方案:版本控制
6.3.7 處理故障
6.3.8 系統架構圖
6.3.9 寫路徑
6.3.10 讀路徑
6.4 總結
7 設計分佈式系統中的唯一ID生成器
7.1 第一步:理解問題並確定設計的邊界
7.2 第二步:提議高層級的設計並獲得認同
7.2.1 多主復制
7.2.2 UUID
7.2.3 工單服務器
7.2.4 推特的雪花系統
7.3 第三步:設計繼續深入
7.4 第四步:總結
8 設計URL縮短器
8.1 第一步:理解問題並確定設計的邊界
8.1.1 封底估算
8.2 第二步:提出高層級的設計並獲得認同
8.2.1 API端點
8.2.2 URL重定向
8.2.3 縮短URL
8.3 第三步:設計繼續深入
8.3.1 數據模型
8.3.2 哈希函數
8.3.3 深入探討URL縮短流程
8.3.4 深入探討URL重定向流程
8.4 第四步:總結
9 設計網絡爬蟲
9.1 第一步:理解問題並確定設計的邊界
9.2 第二步:提議高層級的設計並獲得認同
9.3 第三步:設計繼續深入
9.3.1 DFS vs. BFS
9.3.2 URL前線
9.3.3 HTML下載器
9.3.4 健壯性
9.3.5 可擴展性
9.3.6 檢測和避免有問題的內容
9.4 第四步:總結
10 設計通知系統
10.1 第一步:理解問題並確定設計的邊界
10.2 第二步:提議高層級的設計並獲得認同
10.2.1 不同類型的通知
10.2.2 聯系信息的收集流程
10.2.3 通知的發送與接收流程
10.3 第三步:設計繼續深入
10.3.1 可靠性
10.3.2 其他組件和要考慮的因素
10.3.3 更新後的設計
10.4 第四步:總結
11 設計news feed系統
11.1 第一步:理解問題並確定設計的邊界
11.2 第二步:提議高層級的設計並獲得認同
11.2.1 news feed API
11.2.2 feed的發布
11.2.3 news feed的構建
11.3 第三步:設計繼續深入
11.3.1 深入探討feed的發布流程
11.3.2 深入探討news feed的獲取流程
11.3.3 緩存架構
11.4 第四步:總結
12 設計聊天系統
12.1 第一步:理解問題並確定設計的邊界
12.2 第二步:提議高層級的設計並獲得認同
12.2.1 輪詢
12.2.2 長輪詢
12.2.3 WebSocket
12.2.4 高層級設計
12.2.5 數據模型
12.3 第三步:設計繼續深入
12.3.1 服務發現
12.3.2 消息流
12.3.3 顯示在線狀態
12.4 第四步:總結
13 設計搜索自動補全系統
13.1 第一步:理解問題並確定設計的邊界
13.1.1 封底估算
13.2 第二步:提議高層級的設計並獲得認同
13.2.1 數據收集服務
13.2.2 查詢服務
13.3 第三步:設計繼續深入
13.3.1 字典樹數據結構
13.3.2 數據收集服務
13.3.3 查詢服務
13.3.4 字典樹操作
13.3.5 擴展存儲
13.4 第四步:總結
14 設計視頻分享系統
14.1 第一步:理解問題並確定設計的邊界
14.1.1 封底估算
14.2 第二步:提議高層級的設計並獲得認同
14.2.1 視頻上傳流程
14.2.2 視頻流式傳輸流程
14.3 第三步:設計繼續深入
14.3.1 視頻轉碼
14.3.2 有向無環圖模型
14.3.3 視頻轉碼架構
14.3.4 系統優化
14.3.5 錯誤處理
14.4 第四步:總結
15 設計雲盤
15.1 第一步:理解問題並確定設計的邊界
15.1.1 封底估算
15.2 第二步:提議高層級的設計並獲得認同
15.2.1 API
15.2.2 跳出單服務器設計
15.2.3 同步沖突
15.2.4 高層級設計
15.3 第三步:設計繼續深入
15.3.1 塊服務器
15.3.2 高一致性需求
15.3.3 元數據數據庫
15.3.4 上傳流程
15.3.5 下載流程
15.3.6 通知服務
15.3.7 節約存儲空間
15.3.8 故障處理
15.4 第四步:總結
16 設計支付系統
16.1 第一步:理解問題並確定設計的邊界
16.2 第二步:提議高層級的設計並獲得認同
16.2.1 收款流程
16.2.2 復式記賬系統(Double-Entry System)
16.2.3 托管支付頁面
16.2.4 付款流程
16.2.5 實時賣家儀表板
16.3 第三步:設計繼續深入
16.3.1 重試和冪等
16.3.2 同步支付 vs. 異步支付
16.3.3 一致性
16.3.4 處理支付失敗
16.3.5 支付安全
16.4 第四步:總結
17 設計指標監控和告警系統
17.1 第一步:理解問題並確定設計的邊界
17.1.1 高層級需求
17.2 第二步:提議高層級的設計並獲得認同
17.2.1 基本原理
17.2.2 數據模型
17.2.3 高層級設計
17.3 第三步:設計繼續深入
17.3.1 指標數據的收集
17.3.2 擴展系統
17.3.3 查詢服務
17.3.4 存儲層
17.3.5 告警系統
17.3.6 可視化系統
17.4 第四步:總結
18 繼續學習
後記