一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 4039|回复: 23
收起左侧

[系统设计/OOD] 系統設計救星! 一天內手把手教你面試System design

    [复制链接] |试试Instant~ |关注本帖
jyt0532 发表于 2016-11-3 10:18:55 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
前言:常看到有人問 system design需不需要準備 new grad會不會考system design 我想給地裡的戰友們建議 當然準備面試刷題是基本中的基本 但當你刷到一定程度後 刷題投資報酬率就開始低了 這時我真心建議可以花些時間讀system design 因為你花在這個的前10-20小時投資報酬率非常高!基本的觀念有了以後可以apply到所有的問題 面試之前不管HR跟你說有沒有system design你都不怕 廢話不多說 直接進入主題

我的所有資料來源都是地裡還有以下連結

這篇文章主要是把所有手上資源照priority順序加上一些自己的整理 用簡單的方式介紹怎麼Ace system design 依照priority順序分成
明天面 下禮拜面 下個月面 跟明年面

=====明天要面system design=====

迷途書僮:誒jyt0532 我明天就要面試了 沒空讀那麼多你給的文章 該怎麼辦?
jyt0532: 很好 今天幸好你遇到我 我用最少的時間讓你知道明天面試的時候大方向怎麼走
Step1: 先問所有requirement, spec 這個系統需要提供什麼功能
Step2: Constrains: 問他我們需要處理多少traffic, 多少data, latency重不重要 A和C選哪個
Step3: 計算需要多少機器 要用什麼storage
Step4: Abstract design: 先畫出大架構! 每個會出現的component都要畫出來 再看面試官希望你深入講哪個component
Step5: Scale: 讓你的system有fault tolerance, scale成大公司的系統架構

迷途書僮: 等等step2的A和C是什麼
jyt0532: CAP的A和C 如果你明天要面試你不知道CAP是什麼 那我的建議是你今天早點休息 明天才有精神 地球是很危險的
迷途書僮: 別這樣啦 我幫你加大米拜託給我一個最簡單最好的解釋
jyt0532: 既然你都這麼說了 今天幸好你遇到我 把這個看完你就通透了http://ksat.me/a-plain-english-introduction-to-cap-theorem/
迷途書僮: 喔原來是這個 那這4個step 你這樣講真的很抽象 可不可以舉個例子 我可以apply到所有system design的題目
jyt0532: 光說不練假把戲 我帶你手把手跑一次system design process

來個基本的 假設現在要design一個hash
Step1, 2: 問requirement
多少資料需要進cache? 30TB
expected QPS? 10M
eviction strategy? LRU
Access pattern? Write back(有空的話Write through, write around, write back都要知道什麼意思 利弊)
Latency重要嗎? cache的用途就是降低latency
C or A: A

Step3:
算一下你需要多大的machine多少台
https://gist.github.com/jboner/2841832 這裡面的數字要有點sense
假設我們現在要用72GB RAM 4 core的machine
那總共以儲存data來說 需要30TB/72GB = 420台
這樣的話每台的QPS = 10M/420 = 23000, 即使所有core都用了 每個core要處理6000QPS
代表說 1/6000 = 167us 搭配上面那個link可知道即使是ram sequentially read 1MB要250M 所以我們如果用這個size的machine 會無法負荷
改變主意 假設現在用16GB RAM  4core的machine
30TB/16GB = 1875台, QPS per CPU = 10M/1875/4 = 1400QPS = 700us per queries. 這個數字負擔小多了

看完上面的流程知道我們在幹嘛了吧? 先用data constrain算出要幾台機器 再用traffic constrain算看看這樣的配置合不合理
這樣做完你就知道你的system是需要猛的機器少台一點 還是差一點的機器多台一點

Step4: 畫出大架構
這時候就必須推薦https://www.youtube.com/watch?v=-W9F__D3oY4 這根本太精采
什麼你又沒時間 好啦別說我虧待你 有人把重點整理好給你了http://ninefu.github.io/blog/Harvard_CS75_Notes/
但最後那個畫圖的地方還是要看一下

Step5: 喇賽時間
這時候小system畫完了 如果要scale的話需要什麼東西 不外乎就是load balancer啦 DB就是可能要master-slave或是multi-master 這種東西
至於怎麼fault tolerance呢 常見的處理就是replication 就是一樣的資料存很多地方 假設有P個replication
因為每次寫和讀都寫進/讀出這P個地方非常花時間 那該怎麼辦呢
假設寫的時候 只要有W個replication confirm update我就return to user
假設讀的時候 只要有R個replication給我一個一樣的value, 我就return這個value給user
depends on design的use case(這就是為什麼use case很重要) 你要看read跟write哪一個operation可以承受高一些的latency
如果要求read很快 write可以慢一點沒關係 那就可以設R = 1, W = P, 反之可以設R = P, W = 1
總之 只要R+W > N 那這database就是strong consistent! 如果真的要求高速度的話就必須犧牲consistent 那R+W就會<P(weak consistent)
這些也不是一時半刻講得完的 有需要的話我再補充 打到這邊有點累了

=====下禮拜要面system design=====

從小公司到上億用戶公司的架構演進(非常建議讀)
InterviewBit:這是個非常好的互動式網站 他是一步一步漸進式的問你每個你在面試中該問的問題 帶你走過一遍system design interview的process 非常建議這裡面的八題都要寫過
Scalable Web Architecture and Distributed Systems

=====下個月要面=====
把這裡的文章都K過你就比大多數candidate強很多了 除非你想進的事system and data infra那就是另外一段故事了


=====明年面試=====
明年才要面你現在就開始準備的話 基本上你是個非常自律的人 你就定時follow各公司engineer寫的文章就可以了 別忘了面之前一個月再回來看我這篇


其實有工作經驗的都知道 你很常需要去design一個新的project 而釐清use case這些事情是基本 連use case都沒問那面試官根本不會覺得你是個好的工程師 主要考察的是communication and problem solving, 給你一個開放性問題 你怎麼分析step by step, 你如何跟別人討論你的idea, 如何optimize你的system 往這個方向想就覺得其實system design真的沒什麼好怕的 這篇寫了快五個小時 請各位地友不吝賞個大米吧  這篇就不設權限了 希望造福大家 如果大米超過100我再稍微寫一下怎麼design twitter吧



补充内容 (2016-11-7 02:51):
筆誤 example是要打造一個cache不是打造一個hash

补充内容 (2016-11-12 04:37):
下一篇已經寫好了 可是不知道為什麼需要經過審核

评分

38

查看全部评分

本帖被以下淘专辑推荐:

依水斜阳 发表于 2016-11-3 14:41:38 | 显示全部楼层
我竟然是沙发!感谢楼主!
回复 支持 反对

使用道具 举报

queenjuliana 发表于 2016-11-3 18:32:00 | 显示全部楼层
支持一下~谢谢分享
回复 支持 反对

使用道具 举报

AC4Fun 发表于 2016-11-6 21:00:54 | 显示全部楼层
写的简直太好了,不过第一个印象笔记的链接好像挂了哦
回复 支持 反对

使用道具 举报

 楼主| jyt0532 发表于 2016-11-7 02:50:35 | 显示全部楼层
筆誤 example是要打造一個cache不是打造一個hash
回复 支持 反对

使用道具 举报

kawayipk 发表于 2016-11-7 03:18:14 | 显示全部楼层
太详细了,非常感谢。
回复 支持 反对

使用道具 举报

mikemike0 发表于 2016-11-7 04:05:29 | 显示全部楼层
感謝lz 以後能用上 萬分感謝了!
回复 支持 反对

使用道具 举报

hiji1232 发表于 2016-11-8 08:16:25 | 显示全部楼层
很受用~~收藏了先~~谢谢lz
回复 支持 反对

使用道具 举报

eko910817 发表于 2016-11-8 08:32:09 | 显示全部楼层
mark一下 谢谢楼主!!!
回复 支持 反对

使用道具 举报

sevenwonder 发表于 2016-11-10 01:32:09 | 显示全部楼层
能不能说下OOD
回复 支持 反对

使用道具 举报

nevermor 发表于 2016-11-10 01:56:51 | 显示全部楼层
先mark,繁体看的疼…
回复 支持 反对

使用道具 举报

archiezhao1992 发表于 2016-11-14 22:58:58 | 显示全部楼层
收藏键就是为这种帖准备的!
回复 支持 反对

使用道具 举报

xuxiaoyang626 发表于 2016-11-14 23:04:08 | 显示全部楼层
mark 赞一个!!!
回复 支持 反对

使用道具 举报

iphehe 发表于 2016-11-15 06:16:01 | 显示全部楼层
必须多谢楼主啊!
回复 支持 反对

使用道具 举报

dojiangv 发表于 2016-11-15 12:01:57 | 显示全部楼层
写的真好,真详细!
回复 支持 反对

使用道具 举报

1451427216 发表于 2016-11-15 12:09:43 | 显示全部楼层
mark 一下,多谢楼主
回复 支持 反对

使用道具 举报

feichangh 发表于 2016-11-15 23:39:14 | 显示全部楼层
赞一下,多谢楼主分享
回复 支持 反对

使用道具 举报

phyyu 发表于 2016-11-16 10:13:17 | 显示全部楼层
关于系统设计的干货不多,多谢啦
回复 支持 反对

使用道具 举报

jimwallet 发表于 2016-11-27 23:43:25 | 显示全部楼层
比较有意思的是,现在好像大家热衷于跟着google的master-slave架构去设计。没有人会用p2p架构去设计吗?用上consistent hashing
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 21:57

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表