硅谷公司系统设计面试经验(一)
极客时间编辑部
讲述:丁婵大小:6.55M时长:04:46
之前,我们分享了 Landing AI Tech Lead 何平洋关于“硅谷公司如何培训编程面试官”的文章,当时的侧重点是“编程面试”,近日,何平洋又总结了“系统设计面试”的一些经验,在此分享给你,希望对你有所帮助。以下是重点内容。
硅谷大部分公司如 Amazon、Uber 等都会有专门的一场面试,考察候选人的系统设计能力,有些公司通常会把系统面试、编程面试或者行为面试混在一起考察。无论是哪种形式,过硬的系统设计能力都是优秀程序员必备的,而系统设计也是面试中必不可少的一个环节。候选人等级越高,对候选人的系统设计能力要求也就越高。根据候选人的等级和岗位,面试官需要对系统设计题目的内容和难度做出一定的调整。
接下来我们不会讨论面试题目,而是把重点放在面试方法上。因为技术更新的很快,面试题目也会因为被用的次数太多而被抛弃,但面试的方法和思路是很少改变的。
所有的解决方案都应该从问题本身出发
开发系统就是为了解决问题,那么在设计系统之前就要分析问题的本身。我发现越是有经验的候选人,越是会在开始设计前弄清楚要解决的问题是什么。比如:我们为什么要设计这个系统?我们具体要解决什么问题?有些候选人会认为问题的本身不言而喻,然而在现实中,开发的系统不解决用户问题的例子比比皆是。我们在面试中要寻找那些会从用户角度出发思考问题的人。
除此之外,候选人还应当主动去了解问题的细节。比如 DAU 是多少?具体要提供哪些功能?系统需要支持什么操作?是不是大部分情况下是读操作?这些细节问题会直接影响整个系统的设计。
这个环节,面试官可以让候选人自己提出假设,重点不是假设的内容,而是假设是否合理。面试官在一开始描述问题时,可以选择模糊细节以鼓励候选人提问,问题可以是:设计谷歌地图、设计 Redis 等。这些系统和产品不可能在短时间内设计出来,因此面试者必须先确定问题的范围。
定义成功
根据要设计系统的不同,成功的衡量标准可以是具体的数字指标:比如延时在 200 毫秒以内等。也可以是功能的实现,比如最终一致或提供搜索功能。或者是定义成功的指标:比如 DAU、MAU、留存率等。
有经验的候选人一般会很自然地提出这点,因为在日常工作中,定义成功是系统设计中十分重要的一个环节。这个部分的答案本身并不重要,重要的是为什么是这个答案。比如,候选人定的目标是延时在 200 毫秒以内,那么,这个候选人就需要说清楚,为什么是 200 毫秒,而不是 500 毫秒或者 1 秒。
系统组件设计
此外,候选人也应当具有从全局出发的能力,思考系统需要什么组件,每一个组件的职责是什么。这里常见的错误包括:
组件的职责不清楚:候选人无法解释清楚一个组件到底是做什么的。
一个组件负责的功能太多:候选人应当拆分组件以增加可复用性。
功能放在了错误的组件上。
组件高度耦合:一个组件过于依赖另外一个组件的具体实现。产品工程师可以把重点放在组件 API 的设计上。
估算
候选人需要根据之前所给的需求量、数据量等指标,来预测设计是否可行以及需要消耗多少资源。如果候选人没有预估,面试官应该主动要求候选人做出计算。比如:我们需要部署多少台机器?每天需要新增多少存储?给出的答案不重要,重要的是候选人的预估是否合理。预估很有可能会影响系统设计中所做出的选择,所以要及时讨论可能存在的问题,有经验的候选人会时常停下来做预估。
以上就是系统面试环节中需要注意的问题,受限于篇幅,我们将在下一篇文章中继续分享面试中的注意事项,欢迎持续关注。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论