如何答好面试中的系统设计题?
資深大佬 : hakunamatata11 16
系统设计面试主要考察以下几个方面:
- 可行解 Work Solution 25%
- 特定问题 Special Case 20%
- 分析能力 Analysis 25%
- 权衡 Tradeoff 15%
- 知识储备 Knowledge Base 15%
在面试中,常见的错误是面试官给出问题后,候选人就开始怼各种关键词,什么 Load Balancer,Memcache,NodeJS,MongoDB,MySQL……
实际上,针对系统设计问题,九章算法有一套 4S 分析法,即使完全不知道的问题也可以按照这个方法一步步去回答。
所谓 4S 分析法中的 4S 是指Scenario (场景),Service (服务),Storage (存储),Scale (扩展)。
接下来,我们结合 4S 分析法来具体回答一道常见系统设计题:如何设计一个推特?
第一步:Scenario 场景
在这一步,你需要询问面试官:需要设计哪些功能(也可以自己想),需要承受多大的访问量?
首先可以把 Twitter 的功能一个个罗列出来,很显然你无法在 45 分钟的面试中完成所有功能的设计,所以需要筛选出核心功能( Post a Tweet,Timeline,News Feed,Follow/Unfollow a user,Register/Login )。
然后有的面试官可能会问你系统承受的 QPS 大概是多少?需要考虑并发用户,读频率( Read QPS )以及写频率( Write QPS )。记住重要的是你的思考和计算过程而不是计算结果。
分析 QPS 有什么用?
- 如果 QPS = 100,那么用你的笔记本作 Web 服务器就好了;
- QPS = 1K,一台好点的 Web 服务器也能应付,需要考虑 Single Point Failure ;
- QPS = 1m,则需要建设一个 1000 台 Web 服务器的集群,并且要考虑如何 Maintainance (某一台挂了怎么办)。
QPS 和 服务器 /数据库之间的关系
- 一台 Web Server 承受量约为 1K 的 QPS (考虑到逻辑处理时间以及数据库查询的瓶颈);
- 一台 SQL Database 承受量约为 1K 的 QPS (如果 JOIN 和 INDEX query 比较多的话,这个值会更小);
- 一台 NoSQL Database (Cassandra) 约承受量是 10k 的 QPS ;
- 一台 NoSQL Database (Memcached) 约承受量是 1M 的 QPS 。
关于更多的内容,可以来看我主讲的**《系统架构设计》**,现在前两节限免开放。
大佬有話說 (0)