Faang系统设计面试官告诉你, 你为什么总是挂系统面试, 为什么总是被降级

9812
15
大家好, 我是来自Faang的面试官, 到目前为止已经面过200+人。 今天来这里跟大家探讨一下为什么系统设计为什么这么容易挂。 把平时看到的面试里面的错误都总结给大家, 避免大家踩坑。 大家如果觉得此帖有用, 也请赏点儿米, 谢谢!
此贴主要的重心在系统设计面试上, 如果你总是挂Coding面试, 请看我的上一个帖子。

好了, 那么我就从头开始讲。

1. 首先, 自我介绍环节, 一般不算分。 这个环节一般作用有2个, 一个是舒缓一下紧张的气氛, 另一个是面试官手头上有些窗口还没来得及打开, 需要得到一定的缓冲时间。 所以说, 不怎么算分, 建议大家以越少的时间结束这个环节越好, 这样可以为你接下来的设计, 留出更多的时间。

2. 当拿到题目以后, 切记不要直接开始设计。 问问题环节是算分的, 算分的, 算分的。 最好是很仔细的把题目读清楚, 很多人设计(背诵)了很长一段以后发现, 原来题目里面有个细微的小差别, 就让整个面试的关注点完全不一样了。 所以拿到题目以后, 要通过跟面试官的交流, 分析出题目的侧重点, 才是成功的一半。
3. 问面试官问题的时候, 推荐大家有层次的问, 首先从产品的方向入手, 为什么要做这个系统, 跟公司其他业务怎么结合的?一些稍微具体的spec, 然后才是技术方面, 到底这个系统要设计的多牛逼

4. 接下来我推荐大家在开始之前, 先把数字算清楚, 再去做设计, 不然你要算出来这个系统用一台笔记本就能解决, 你设计了一整套服务器集群, 岂不是很尴尬?
5. 算数字的过程中, 2个方向都很重要, 一个是你的各种估算是否合理?以及细致?比如说, 某个系统, 你直接说QPS应该多少多少, 可能就挂了, 专业一点肯定稍微分析一下哪些是读, 哪些是写, 分别多少, 平时多少, peak多少?系统设计是一个和面试官比心法高低的过程, 在这里露出你没怎么做过系统设计的馅, 后面还怎么升级拿offer?另一方面, 就是你算出了一些基本数据的时候, 你对于这个系统做出的判断要合理。 比如说你算出来QPS是1M, 然后你说用一台机器, 就能搞定, 还不解释为什么, 比如bottleneck很小之类的时候, 面试官又会觉得你low了

6. 然后就是具体的设计了。 这里我想告诉大家最重要一点, 就是, 真心的结合当前情景去设计, 而不是背诵你之前学到的。 我知道, 大部分人准备系统设计的面试, 都是看那3份材料:X章算法, Grokking System, 稍微肯话时间的会去读DDIA那本书。 读了DDIA那本书的还好, 但是用前两者准备的人, 特别容易做出一个没有灵魂的设计。 切记, 哪怕你课件背的再熟练, 真的去面试的时候, 你也假装你没见过这个题目, 而去设计一遍。 这样你的设计才是有灵魂的。 当你重新设计一遍的时候, 你平时学到的东西, 会冥冥之中帮到你的。 而如果你是背诵的, 稍微有一点儿经验的面试官, 分分钟能看出来。 因为哪个面试官不也是当年看着这两套材料摸爬滚打进的FAANG呢?

7. 主动去做trade off。 是否主动去做trade off这一部分, 是要打分的哦!而且占比很高的哦。 有很多人, 就给面试官说我要怎么怎么做, 从来不去做任何的比较, 那么哪怕你说的是对的, 都好像在背课文, 都好像你只会那么一种, 都好像你的理解并不深刻。 切记!故意拿一些不够靠谱的设计出来, 和你的最终设计去做比较, 告诉面试官, 是因为前者不靠谱你才用的后者的

8. 当你要用某个特殊的东西的时候, 比如说什么卡夫卡, 你的重点, 不是在你用的这个东西本身是干什么的, 有多牛逼, 而是在于你的系统需要一个这样的东西, 并且很合适。 合适比牛逼更重要!

9. 存储, 接口设计, 这两大块必考, 必算分, 一定要在控制好的时间里面完成。

10. 写在最后, 系统设计面试, 表面上打分有各种条条框框, 实际上就是你跟你面试官心法的比拼, 比赢了, 你会拿到一个比面试官认知范围内还高的Level, 比如面试官是5, 他就会觉得你是6+, 比输了, 就只能被那一条一条的拿去做比较,挂一条, 可能就no hire了。 所以大家设计的时候, 一定要给面试官一种深不可测的感觉。 真正提高自己的心法是关键, 所以建议有时间的各位, 还是好好读一下DDIA那本书, 并且平时多研究自己公司的系统吧。

最后, 以上所有经验都是我一个字一个字总结, 敲出来的, 求赏脸加个米, 谢谢!
  • 285
15条回复