通常System design的问题都是开放性的,重要的是communication,需要面试者首先通过问问题,弄清楚系统的constraint是什么,系统输入是什么,然后画出类图,告诉面试官你的idea。
需要了解的知识点:
并发:thread,deadlock,starvation。并行算法,一致性。
网络:IPC,TCP/IP
抽象:需要了解操作系统,文件系统,数据库的工作原理。
不同系统的性能: 了解RAM,disk,SSD,network的性能
估算:估算不同方案的性能,从而选出最优的
可用性和稳定性:处理异常情况,如何处理网络失败。
如何准备:
做模拟面试:找同事给你出design的问题
真正的设计一个系统
做估算
阅读open source系统的代码,看看他们如何做设计
了解操作系统和数据库的原理,可以借鉴解决问题的方法
Refer:
http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/