查看: 14819| 回复: 17
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] 我如何秒掉系统设计?An opinionated Approach to System Design Interview

   
全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 legendofwind 于 2021-1-19 03:29 编辑

前言
新的一年不知不觉到来, 去年这时候还在准备面试,现在已经开始在新公司面试别人了。当时有幸以3.5 YOE拿到FB E5 和其他几家大厂 Senior的职阶。
我觉得在我的面试中,系统设计出色的表现对我加分不少。 所以,一直想写个帖子总结一下我关于系统设计面试的一些体悟,或许对大家有所裨益。

系统设计面试到底考察什么?
在准备任何面试的时候,我们都要回归本质,想想这个面试到底在考察什么。
大家一定要明白,系统设计面试 != 系统设计。这个面试并不是考察你能否在短短的40分钟里设计出一个完善的系统, 而是要extract以下的signal
1. Ability to break down hard problems
    面对一个复杂的问题,怎么把它scope成一个approachable 的problem。 比如设计instgram,我们要把它breakdown 成具体一个featurelist (1. upload photo 2. timeline 3. comment)。
2. Fundemental knwoledge about distributed systems
    要有基本关于分布式系统的知识,比如load balancer,async processing, sharding。
3. Abilitiy to think through trade-offs
    没有完美的系统,it's all about trade-offs, 就像生命中任何一个抉择一样。 很多适合,面试官不在乎你最终做了什么决定,而是how did you arrive at the conclusion。 一个经典的例子是noSql vs Sql

所以我们在系统面试里,就是要给到这些面试官这些signal

如何破题 & 设计模板
现在明白了想要考察什么,具体来说说我一般是怎么approach一道系统设计题目。 我们以设计Instgram 为例子
1. narrow down functional/non-functional requirements (5min)
第一步就是map到上面 Ability to break down hard problems 这个signal。 我们要学会把一个复杂的问题breakdown成一个featurelist以及具体的requirements
我会用到 functional requirements 和 non-functional requirements 两个notion (你可以用自己的语言)。functioanl requirements就是具体的feature,non-functional 是除了feature意外关于系统性能的要求,以Inst这道题为例
# Functional Requirements
   - post photo
   - view photo
   - news feed
#Non-functional Requirements
    - availability > consistency
    - no silent drop of photo/posts


这个部分最好不要花超过五分钟

2. traffic estimation (2min)
100M daily users
- 3 billion total -> 1.5 * 10^12 = 1.5T
- 3 post each -> 300M posts daily -> 4k/s

write traffic
- average: 4k/s
- peak :12k/s

read heavy
- average 36k/s
- peak 36k/s

这个部分一定不要花太多时间,只要让面试官知道,你有考虑traffic就可以。很多时候甚至可以直接问QPS

3. draw flow chart (rest)
这一步就是画图了,我可以给大家这两个小tip
1. 一般来说,一道题都有read and write split
2. 我喜欢从client出发,自然而然的画到后端,遇到需要state的时候再开始选择db架构以及设计DB schema。我觉得这样最自然,我自己不太喜欢从 DB schema 入手解决问题。3. AVOID Microservice。 This might be controversial for some folks. 但是我会建议大家在答系统设计题的时候避免使用所谓microservice 这种架构思维。因为很简单,其实面试官想知道的是每个microservice里面的设计
你不如就直接画出LB+webservers。microservice只会让你的设计变得没有必要的复杂。如果是有你需要调用的不需要你设计的系统,直接说出API就好。
4. 一定要drive the conversation 同时与面试官保持交流,当面试官有hint他想用哪种方式设计的时候,take the hint! 一定不要自己按照自己想要的方式去设计(这是我面试的时候经常遇到candidate会犯的错)
5. Think through the tradeoffs! 这个是最重要signal

以下是我关于这道题的解法
https://docs.google.com/drawings/d/1sbMuXaY_WS5BGTXO1MDBSO9CgIvVLT1LOaJoubzHMao/edit?usp=sharing

如何准备
1. 一般会被问到系统设计的candidate,是有工作经验的。所以在平时工作中,多思索,多学习,保持好奇心。因为其实对于系统设计,没有什么可以代替平时的积累。 积极的参加各种design doc的讨论,请教同事。并且 take ownership of your own system。
2. 遇到有趣的app 系统,可以想想用你自己的思考方式/模板去想想应该怎么设计。比如我之前用robinhood,我就会去思考各个feature我自己会怎么去design。无关乎对错,关键是训练思维
3. 如果想密集的训练,grokking the system design interview 是一个不错的题库。里面的很多解法我不赞同,所以我建议你自己解一遍
4. https://github.com/donnemartin/system-design-primer 这是一个好的referrence











评分

参与人数 44大米 +110 收起 理由
echofreshman + 1 很有用的信息!
hcchen + 1 赞一个
Venus + 1 很有用的信息!
BobbyBear + 1 给你点个赞!
oldfatcrab + 3 给你点个赞!

查看全部评分


上一篇:现在大数据相关的知识系统设计还会问到吗?
下一篇:Message Queue提问
推荐
denghuixing 2021-2-15 14:22:56 | 只看该作者
全局:
我非常讨厌在Traffic Estimation上面算来算去
面试别人的时候要是有人在这一步用超过五分钟那后面绝逼是背模板细问就什么也不知道
我赞成lz说的,直接问面试官要QPS
回复

使用道具 举报

全局:
感谢分享,有种学到很多的感觉!我比楼主多两年多工作经验,感觉对系统设计面试的理解远不如你深刻,最近面了FB,5轮中有两轮都是system design,然后现在收到反馈是还要加面一轮system design,你这篇文字我反复看了很多遍,准备按照这个思路去准备最后一轮加面,如果你有更多加面建议就太感谢了!另外想问个dumb的问题,你画的data flow图里面QW是代表什么组件的缩写?
回复

使用道具 举报

推荐
 楼主| legendofwind 2021-2-27 00:44:24 | 只看该作者
全局:
Kimurate 发表于 2021-2-26 15:29
请问google drawing有没有啥小技巧,我用了一下感觉画图速度有点捉急。在网上看了几个视频也没找到啥技巧。 ...

熟能生巧吧
1. 一定要有个鼠标,不要用trackpad
2. 记得把canvas给fit成一个大canvas
3. 布局我一般第一个row就写text (feature list, algorithm 之类的)。 然后下面剩下的大部分画图
4. 选择不同的图形给不同的db 以及component
回复

使用道具 举报

🔗
wendy6717 2021-1-21 16:28:52 | 只看该作者
全局:
感谢楼主分享,系统设计小白,收藏起来以备跳槽之需。
回复

使用道具 举报

🔗
 楼主| legendofwind 2021-1-21 21:06:36 | 只看该作者
全局:
wendy6717 发表于 2021-1-21 16:28
感谢楼主分享,系统设计小白,收藏起来以备跳槽之需。

不客气 一家之言
有啥问题可以一起交流!
回复

使用道具 举报

🔗
 楼主| legendofwind 2021-2-1 04:31:28 | 只看该作者
全局:
灰度发布 发表于 2021-1-26 00:48
感谢分享,有种学到很多的感觉!我比楼主多两年多工作经验,感觉对系统设计面试的理解远不如你深刻,最近面 ...

sorry之前有点忙
QW = Queue Workers 指任何去pick up work from queue 然后spend time working on it 的process
可以是physical hosts,也可以是threads

加面和正常面没有啥区别,评分标准都一样的!
祝好运!

评分

参与人数 1大米 +2 收起 理由
灰度发布 + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
Mark mark,感激up大佬分享
回复

使用道具 举报

🔗
foxinsocks 2021-2-16 04:39:11 | 只看该作者
全局:
谢谢分享。一般系统设计面试时需要用手画这些结构图吗?有什么工具,还是用手在纸上画了视频分享?
回复

使用道具 举报

🔗
 楼主| legendofwind 2021-2-23 21:36:03 | 只看该作者
全局:
foxinsocks 发表于 2021-2-16 04:39
谢谢分享。一般系统设计面试时需要用手画这些结构图吗?有什么工具,还是用手在纸上画了视频分享?

都行,如果你有白板公司一般都可以让你在白板上画
我个人prefer直接用google drawing,习惯了还比较好用,而且清晰
回复

使用道具 举报

🔗
foxinsocks 2021-2-24 12:09:04 | 只看该作者
全局:
谢谢你的建议
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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