o 随着花时间看各种各样的资料和实战,我可以感觉到我的design水平(不管是硬实力还是套路)肯定是在一点一点提高的,一个知识点可能在好多资料里重复出现(比如message queue),我的理解也会越来越深,所以请一定不要放弃
o 一个人基本不可能所有component都做过,所以要尽量把面试官往自己熟悉的方向引导,回答最好要有亮点(面试官都没有想到的点)
o solution多提几个option,就算很明显有问题的也可以提,之后讨论trade off,最后选择一个并解释为什。完了你每加一个东西都要解释一下为什么加它,是不是必要的
o 设计可以从简到繁,不然可能会被说over design。。。
o 如果到最后你觉得光看资料的帮助已经很小很小了,还有一个option就是真的去做一些小的project来增加一下hands-on experience(本人没有试过,听朋友推荐的)
我的流程一般是(这个只适用于没有经验的朋友,高手可以具体问题具体分析):
o Functional requirements
o Nonfunctional requirements (availability, consistency, heavy read/write, etc.)可以顺便提一句需要monitoring system(technical/business metrics)
o Scale estimation (DAU, QPS (low latency), etc.)
o API design + database schema
o Overview design workflow
o What are the failure cases and how the system could handle it
o Scale up/out
o Deep dive in one area (需要和面试官check)