极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:46
登录|注册

硅谷公司系统设计面试经验(一)

讲述:丁婵大小:6.55M时长:04:46
之前,我们分享了 Landing AI Tech Lead 何平洋关于“硅谷公司如何培训编程面试官”的文章,当时的侧重点是“编程面试”,近日,何平洋又总结了“系统设计面试”的一些经验,在此分享给你,希望对你有所帮助。以下是重点内容。
硅谷大部分公司如 Amazon、Uber 等都会有专门的一场面试,考察候选人的系统设计能力,有些公司通常会把系统面试、编程面试或者行为面试混在一起考察。无论是哪种形式,过硬的系统设计能力都是优秀程序员必备的,而系统设计也是面试中必不可少的一个环节。候选人等级越高,对候选人的系统设计能力要求也就越高。根据候选人的等级和岗位,面试官需要对系统设计题目的内容和难度做出一定的调整。
接下来我们不会讨论面试题目,而是把重点放在面试方法上。因为技术更新的很快,面试题目也会因为被用的次数太多而被抛弃,但面试的方法和思路是很少改变的。

所有的解决方案都应该从问题本身出发

开发系统就是为了解决问题,那么在设计系统之前就要分析问题的本身。我发现越是有经验的候选人,越是会在开始设计前弄清楚要解决的问题是什么。比如:我们为什么要设计这个系统?我们具体要解决什么问题?有些候选人会认为问题的本身不言而喻,然而在现实中,开发的系统不解决用户问题的例子比比皆是。我们在面试中要寻找那些会从用户角度出发思考问题的人。
除此之外,候选人还应当主动去了解问题的细节。比如 DAU 是多少?具体要提供哪些功能?系统需要支持什么操作?是不是大部分情况下是读操作?这些细节问题会直接影响整个系统的设计。
这个环节,面试官可以让候选人自己提出假设,重点不是假设的内容,而是假设是否合理。面试官在一开始描述问题时,可以选择模糊细节以鼓励候选人提问,问题可以是:设计谷歌地图、设计 Redis 等。这些系统和产品不可能在短时间内设计出来,因此面试者必须先确定问题的范围。

定义成功

根据要设计系统的不同,成功的衡量标准可以是具体的数字指标:比如延时在 200 毫秒以内等。也可以是功能的实现,比如最终一致或提供搜索功能。或者是定义成功的指标:比如 DAU、MAU、留存率等。
有经验的候选人一般会很自然地提出这点,因为在日常工作中,定义成功是系统设计中十分重要的一个环节。这个部分的答案本身并不重要,重要的是为什么是这个答案。比如,候选人定的目标是延时在 200 毫秒以内,那么,这个候选人就需要说清楚,为什么是 200 毫秒,而不是 500 毫秒或者 1 秒。

系统组件设计

此外,候选人也应当具有从全局出发的能力,思考系统需要什么组件,每一个组件的职责是什么。这里常见的错误包括:
组件的职责不清楚:候选人无法解释清楚一个组件到底是做什么的。
一个组件负责的功能太多:候选人应当拆分组件以增加可复用性。
功能放在了错误的组件上。
组件高度耦合:一个组件过于依赖另外一个组件的具体实现。产品工程师可以把重点放在组件 API 的设计上。

估算

候选人需要根据之前所给的需求量、数据量等指标,来预测设计是否可行以及需要消耗多少资源。如果候选人没有预估,面试官应该主动要求候选人做出计算。比如:我们需要部署多少台机器?每天需要新增多少存储?给出的答案不重要,重要的是候选人的预估是否合理。预估很有可能会影响系统设计中所做出的选择,所以要及时讨论可能存在的问题,有经验的候选人会时常停下来做预估。
以上就是系统面试环节中需要注意的问题,受限于篇幅,我们将在下一篇文章中继续分享面试中的注意事项,欢迎持续关注。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
所有的解决方案都应该从问题本身出发
定义成功
系统组件设计
估算
显示
设置
留言
收藏
75
沉浸
阅读
分享
手机端
快捷键
回顶部