[Facebook TAO, Amazon Dynamo, Kafka, RabbitMQ, Zookeeper]这几篇paper建议读一下,可以学到很多实际分布式系统设计的模式,以及如何容错。read repair?consisten hashing? how to choose partition key?master election?这些问题读完这些paper以后就迎刃而解了。对于面试本身也有直接的帮助。比如high scale系统就一定得上NoSQL么?SQL database更改schema很麻烦么?Facebook TAO就是搭载MySQL上的,value就是一个json,schema都是application定的。我就在某一轮面试时说用SQL,面试官追问那schema不好更改怎么办,我就直接说如果expect schema会经常变,用json就行,TAO就是这么干的。面试官表示OK。另外有些公司的面试题就有design key value store,那基本上就按照dynamo来答就好了。. ----
之后建议直接开始系统设计面试的准备,边准备边继续巩固内功。
[System Design Interview by Alex Xu][Grokking system design interview]这两个放一起说了。我两个都有,感觉没有必要,建议大家买一个就行,alex的书略好一点。这本书的用处有两个:一是给出一个面试的template;二是提供大量的例题来参考。建议第一遍精读,第二遍看到题之后先不要读内容,自己按照面试的流程来先走一遍,把这道题重点要讲的部分过一遍,再速读巩固。
. Χ
之后就可以开始练习每一道题了。可以先用白板,假装在面试,把每道题都走一遍。然后去google搜索题目,看一下各大公司都是怎么做的,学习一下亮点。比如design facebook video live commenting 这道题,FB自己有blog,重点就是write local, read global。那么面试如果能答出这一点一定会拿到很多分数对吧。
现在来说一说在面试中需要注意的地方,不要发生肚子里明明有很多东西,却因为面试技巧上的失策而痛失offer。
在真正的面试中,注意千万不要见到自己准备过的题就心里暗喜,开始滔滔不绝地讲心里的答案。系统设计面试模拟的是真实工作中工程师之间解决问题的过程,需要大量的交流,而不是像回答BQ一样一个人一直讲。而且面试官的题目有可能侧重点和你准备的有所不同,一定要仔细交流,确认每一个requirement。每一道题都按照template来一步一步的走。当然有时候不需要把template全走一遍,比如有的面试官会直接把QPS给你,不用做计算。有的面试官会说咱们直接讨论怎么scale,跳过requirement的部分。面试中要多多和面试官进行确认,比如你可以给出两个方向,我们下一步是讨论数据库还是讨论API。有的面试官会让你自己来主导,有的面试官会告诉你下一步。如果可以自己主导,那么就可以往自己准备过的方向上面引。比如design news feed,那么一定要把交流引到push vs pull mode上面。不同的题目需要侧重的地方不同,最好能自己提出重点方向。比如design calendar system,需要book会议室的题目和只需要online meeting的题目侧重点会完全不同。这里强烈建议找到一个一起面试的朋友或者愿意帮你的朋友来mock面试。我自己经历了几次mock以后对于面试交流的掌握有了很大的提高。
BQ
BQ应该是所有面试里最好准备的部分了,有过一些工作经验的话都比较简单,尤其是对于香蕉厂员工来说,每天工作的一部分就是互相扔贝索斯语录。大家按照leadership principle的14(现在是16)条来准备就好。大家可以准备5到8个例子,利用STAR method (Situation, Task, Action,Result)来把例子写下来。尽量写的详细一些。最好是那种一个例子可以cover很多个问题的,写下来每个例子可以cover的LP。核心要义就是体现你是一个good team player, good problem solver 。然后在练习讲的时候可以针对具体问题对例子进行删减。远程面试的好处是可以直接把例子打开现场快速查找。不过不要照着读,一定要现场组织语言。准备足够以后基本上听完面试官的问题就大概知道面试官想听到的点是什么。一个小技巧是听完题以后,不要着急回答。和面试官说give me 30 seconds to think about a good example,利用这个时间来组织一下语言,想一下用哪个例子,侧重点是什么。
在面试中如果遇到非常规题,不要慌张,还是通过那30秒来快速回想一个例子。如果实在想不到合适的例子,千万不要现场编造。可以直接和面试官说想不到一个例子。这是没关系的,我谷歌和fb的面试都遇到了没有例子的问题,面试官就直接move到下一题了。-baidu 1point3acres
最后还有一类面试题不是“tell me about a time when xxx”的,而是比较虚的问题。比如我遇到过"what is your ideal team culture" "if you were to give some advice to a junior new member, what would you say"。这一类不太好准备,就只能根据经验现场发挥了。这里体现了香蕉厂的一个好处,把平时乱丢的LP jargon讲一讲,面试官就很满意哈哈。. 1point3acres
.1point3acres