[找工面试指南][系统设计]FLAG面试官谈系统设计

来自其他站点
我现在FLAG之一任职工程师,面试了几十场系统设计,最近也有帮朋友辅导过系统设计,见过一般求职者容易在系统设计的时候犯的一些错误,在这里抛砖引玉一下,欢迎讨论哈:-)

系统设计是什么
美国这边在面试的时候,对于有经验的面试者喜欢加上System Design,以此作为bar raiser,联合past project experience和Behavior Questions面试去评价面试者的级别,一般来说面试官对越senior的candidate,系统设计的要求会越高

系统设计考点
完整性
系统的完整性是第一要求。这里的完整性不是说要求你把系统从如何设计数据库的表,如何做ranking,如何做存储,如何做load balance全部给一口气设计完。这里的完整性指的是你设计的系统data flow从面试官给的起点到终点是不是整清楚了,是不是cover了面试官给出的use case。也就是说答案的完整性是面试基准线,答不完整基本上面试就挂了。至于怎么保证完整性,跟后面的精确度息息相关

精确度
精确度是指能不能够把模糊的系统需求弄清楚。系统设计的面试官会故意把系统需求弄得很模糊,旨在弄清楚candidate能否提问出合理的问题,把系统的use case和行为给define清楚。这也是经验的价值所在。比如说面试官可能会让你设计一个即时的text searching的功能。比较senior的candidate会问text searching是什么text searching呢?是google那种按回车就给出很多搜索结果,还是每打一个字母就给出一个列表去suggest potential word。

策略的优劣分析
策略的优劣分析是整个设计题的题眼。保证了完整性和精确度之后,相信你在和面试官的沟通一定做得很不错,一般能够reach到E4/T4左右bar,如果想要到senior level的话,那最重要的就是做好策略的优劣分析。比如说数据有什么不同的存储策略,怎么样做sharding,好处和坏处是什么

除此之外,还有一些考点比如说scalability啊,怎么样解耦合,怎么做好功能分块,technical communication等等的,不过我在这里抛出几个最重要的标准以便大家准备。

常见问题
  • 一般系统设计不考利用具体DB和component去做设计,重要的是generic的approach。我之前有一个今日头条的朋友来面我们公司,之后挂了,他说他面系统设计的时候一上来就说用某某framework诸如此类的东西去设计系统。因为现在各种framework迭代很快,所以其实强调来也没有任何作用,更何况面试官也未必知道这些framework,那就很容易鸡同鸭讲。比如我们在说数据库的时候,我们不需要说是用mysql还是用redshift,直接说是RDBMS或者是nosql就ok了。如果要加一个stream processing的一层,你可以提到一下kafka,但是最重要的还是stream这一层的解耦合,不需要在service maintain不同的state,这样子面试官才知道candidate理解这些系统的设计理念。
  • 不要先入为主。很多candidate都有先入为主的问题,在开始设计之前就把其他题目往面试题目上面套。问清楚功能需求,use cases,输入输出,描绘清楚data flow


最后跪求大米!!!贫农揭不开锅了TAT
14条回复