如何准备系统设计面试?
注意!!!****:系统设计&场景题已经移动到了《后端面试高频系统设计&场景题》 中,地址:https://t.zsxq.com/18rZ6D7Wk** 。**
系统设计在面试中一定是最让面试者头疼的事情之一。 因为系统设计相关的问题通常是开放式的,所以没有标准答案。你在和面试官思想的交流碰撞中会慢慢优化自己的系统设计方案。理论上来说,系统设计面试也是和面试官一起一步一步改进原有系统设计方案的过程。
系统设计题往往也非常能考察出面试者的综合能力,回答好的话,很容易就能在面试中脱颖而出。不论是对于参加社招还是校招的小伙伴,都很有必要重视起来。
接下来,我会带着小伙伴们从我的角度出发来谈谈:如何准备面试中的系统设计部分。
由于文章篇幅有限,就不列举实际例子了,可能会在后面的文章中单独提一些具体的例子。
个人能力有限。如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!
系统设计面试一般怎么问?
我简单总结了一下系统设计面试相关问题的问法:
- 设计一个某某系统比如秒杀系统、微博系统、抢红包系统、短网址系统。
- 设计某某系统中的一个功能比如哔哩哔哩的点赞功能。
- 设计一个框架比如 RPC 框架、消息队列、缓存框架、分布式文件系统等等。
- 某某系统的技术 选型比如缓存用
Redis还是Memcached、网关用Spring Cloud Gateway还是Netflix Zuul2。
系统设计怎么做?
我们将步骤总结成了以下 4 步。
Step1:问清楚系统具体要求
当面试官给出了系统设计题目之后,一定不要立即开始设计解决方案。 你需要先理解系统设计的需求:功能性需求和非功能性需求。
为了避免自己曲解题目所想要解决的问题,你可以先简要地给面试官说说自己的理解,
为啥要询问清楚系统的功能性需求也就是说系统包含哪些功能呢?
毕竟,如果面试官冷不丁地直接让你设计一个微博系统,你不可能把微博系统涵盖的功能比如推荐信息流、会员机制等一个一个都列举出来,然后再去设计吧!你需要筛选出系统所提供的核心功能(缩小边界范围)!
为啥要询问清楚系统的非功能性需求或者说约束条件比如系统需要达到多少 QPS 呢?
让你设计一个 1w 人用的微博系统和 100w 人用的微博系统能一样么?不同的约束系统对应的系统设计方案肯定是不一样的。