我们都被系统面试害惨了...
系统设计实际上是高屋建瓴的扯淡,是彻彻底底的吹牛逼,是面试造火箭的典型。
为什么这么说?
实际上大多数人都没有完全对口的系统设计经验,甚至连系统设计经验都没有,就要求被面系统设计相关的题。
如果觉得有点难以理解,举个例子:
一个滴滴程序员跳到快手,他可能会有定位信息服务系统、优惠券系统的设计经验,但大概率没有视频流推荐系统的设计经验,反之亦然。
更何况大多数人所在的公司DAU不超过10,000,用户人数不超过100,000,别说是系统设计了,公司的寿命可能都还没有你的工作年限长
所以,如果只是应付系统设计面试,建议大家先学会“扯淡”。
如果是想真正提升系统设计的能力,在今后的工作中,你也一定会慢慢接触到的。
那么,我重点讲讲如何应付系统设计面试。
第一步,首先要了解系统设计面试的评分标准。系统设计面试主要考察以下几个方面:
  • 可行解 Work Solution 25%
  • 特定问题 Special Case 20%
  • 分析能力 Analysis 25%
  • 权衡 Tradeoff 15%
  • 知识储备 Knowledge Base 15%
实际上,针对系统设计问题,九章算法有一套4S分析法,即使完全不知道的问题也可以按照这个方法一步步去回答。
所谓4S分析法中的4S是指Scenario(场景),Service(服务),Storage(存储),Scale(扩展)
在九章算法的《系统架构设计2021版》会具体讲解一个经典的系统设计题目——如何设计一个Twitter?,感兴趣的同学可以来免费试听体验一下~
扫码报名,免费试听
第一步: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(某一台挂了怎么办)。
第二步,Service服务
所谓服务可以认为是逻辑处理的整合,对于同一类问题的逻辑处理可以归并到一个服务中。这一步实际上就是将整个系统细分为若干个小的服务。
根据第一步选出的核心功能,我们可以将推特拆分成如下的几个服务:
第三步,Storage 存储
接下来就是4S分析法中最重要的一部分,存储。根据每个服务的数据特性选择合适的存储结构,然后细化数据表结构。
系统设计中可以选择的存储结构一般有三大类:数据库系统,文件系统,缓存系统。其中数据库系统又分为关系型数据库(SQL Database)和非关系型数据库(NoSQL Database)。
确定存储结构后,我们需要细化数据表结构,面试中可以通过画图展示数据存储和读取的流程。
用过前3个步骤的分析,我们已经得到了一个可行方案,注意是Work Solution而不是Perfect Solution,这个方案可以存在很多待解决的缺陷。
所以需要4S分析法的最后一步,Scale 扩展
这一步主要分两部分,一个是优化,包括解决设计缺陷,更多功能设计以及一些特殊情况如何处理;另一个是维护,包括系统的鲁棒性和扩展性,比如有一台服务器/数据库挂了怎么办?如果有流量暴增,如何扩展?
关于这一步更多的内容,可以来看硅谷技术专家主讲的系统架构设计,现在前两节限免开放。
↓↓扫码免费试听
最后总结一下系统设计面试中需要注意的点
  • Ask before design. 问清楚再动手设计,不要一上来就冲着一个巨牛的方案去设计;
  • No more no less. 不要总想着设计最牛的系统,要设计够用的系统;
  • Work solution first. 先设计一个基本能工作的系统,然后再逐步优化;
  • Analysis is important than solution. 系统设计没有标准答案,记住答案是没用的,通过分析过程展示知识储备,权衡各种设计方式的利弊。
如果你觉得你就是想“真真正正的造火箭”,可以来体验FB高级架构师的《Twitter 后端系统 - Django 项目实战》
从零设计Twitter,6周时间内进行万行代码输出,还原真实开发环境中的完整流程,按工业化要求产出可上线的产品。
核心知识点包括:
感兴趣的同学也可以来体验下呀~
扫码报名,免费试听
戳下方
阅读原文”免费试听课程
继续阅读
阅读原文