<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KVGHS6G" height="0" width="0" style="display:none;visibility:hidden"></iframe>
系统设计常见流程前三步❗️
系统设计常见流程前三步❗️
篱笆资讯
系统设计常见流程前三步❗️
哈喽大家好,我是你们的篱笆zhen老师。那在上一节课我们主要讲解了一下什么是系统设计system design,这节课呢我们准备讲解一下系统设计的一些常用套路以及一些方式方法,那话不多说我们直接开始吧。
 
现在这个呢就是系统设计的一个整体流程,主要分为这么几步,那我们一步一步拆开来看。
 
首先第一步呢叫Clarification。我们在上节课呢已经说过了Clarification是非常系统设计里非常重要的一点,所以说在这一步我们主要去问面试官一些啊基本的问题。对于一些题目呢,比如说design Twitter或者是design YouTube,那这种题目它的问题非常大,所以我们非常有必要去narrow down,这个整个的我们到底需要设计什么。那还有一些很多其他一些常见的题目我们之后可以再总结,那比如说我们可以问面试官说这个我们这个到底这个project scope就比如这个designscope到底是多少。如果它只是让我们design一个非常小的一个system比如说一个school project,那和我们要去design一个这种industry ready的这种project,那design的方法是完全不一样。
 
那或者是我们也可以问一下,比如说这个project主要是给一个user就是end user用还是说给内公司内部的一个internal team用,然后它涉不涉及到UI,然后涉不涉及到CLI就是command line interface然后涉及到一些其他的一些component。像这种问题其实都非常的有用,我们之后呢会再着重讲解一下,在Clarification这个阶段我们可以问哪一些问题,我们需要强调一点就是clarification,其实贯穿之后的每一步,比如说我们在做API design的时候,在做DATABASE design的时候,在做cost estimate的时候都可以做clarification。那我们在第一步的clarification,只是给你一个时间让你去了解这个系统,在clarification完了之后我们应该是对要设计的东西有一个大概模糊的概念。
 
下一步叫requirement,这个就是说我们去向面试官了解一下具体一些有哪些需求。从这个阶段开始我们就开始是在Google doc上面,要不然是在我们具体的画图软件上面然后去写下一些真正的requirement。那requirement分为两类,一类叫functional requirement,一类叫non functional requirement。
 
那fun functional requirement就是说我们这个系统它真正提供的这个feature它真正提供这个功能是什么,比如说啊一个designYouTube的一个问题,那它的这个workflow可能分为用普通用户上传,普通用户下载这个video。那其实是两个不同的workflow,那这个requirement就是至少会是有两个这种不同的workflow,或者比如说一个酒店Booking system,hotel Booking system它这个workflow可能就涉及了普通用户的订酒店的功能,以及administrator。就是这个酒店管理人员他可能会修改一些酒店的信息,这就是两个不同的worker我们要弄清楚,到底需要我们设计什么东西,这个是functional requirement。
 
那non functional requirement是一些隐藏在系统设计背后之后的一些相当于metrics或者characteristics。那它一般是一些特征性的characteristics然后来保证我们系统能够正常运行。常见的有availability、scalability、consistency,以及一些其他的一些metrics,比如说security或者是一些reliability,或者一些metrics。我们之后的课程会逐渐讲解一下这些metrics的一些区别,所以说我们这里呢是先不讲解。
 
在做完requirement之后我们下一个环节是叫cost estimate。在这一步是其实主要是就是说我们根据一些面试官提供的一些信息然后来对一些具体一些衡量的一些数据做一些计算。我比较常用的两个数据一个叫QPS就是core per second,就是说我们这个系统一秒钟能有多少个request进来,这个是衡量我们这个系统的这整个的压力,看它的压力是否大以及衡量我们之后是怎么去scale这个系统。然后还有一种就是叫storage,就是看我们这个系统到底存储了多少数据,比如说如果是做一个design YouTube的话,我们这个系统如果要运行十年那存储的这个YouTube的video的数量那可能是海量。如果他需要存多少的数据也会影响我们整个后面数据库的一个选系。
 
这里有一个misconception,很多同学他会在这个地方吹毛求疵,会计算的特别细致。那我作为一个面试官来说其实我对具体的数字不是特别的在意,我在意什么呢?我在意的是是个数字的级别,那比如说你同样是要存储数据,你要存储一个PB级的数据和一个MB级别的数据,选用的数据库完全不一样,那而且造成的后果就是可能对整个的系统的设计是完全不一样的。一个设计做完了requirement analysis做完了cost estimate这两步了以后,我们应该是对整个系统它到底要让我们设计一个什么系统,以及它的各个方面的一些需求都有一个大概了解,做完这几步我们之后才真正进入到主题进入到这个system design就是开始画图。
 
那让我们现在先暂停来回顾一下,我们系统设计流程中的前三步。第一步是clarification,需要我们去和面试官做一个初步的沟通,然后来大概理解一下我们需要设计一个什么样的系统。第二步是requirement analysis,需要我们进一步和面试官阐述进一步沟通去理解这个系统到底需要我们什么样的feature,什么样的功能。那再下一步是cost analysis或cost estimate,是需要我们自己去derive一些number来帮助我们理解这个系统。
 
可以发现其实前三步都是在为我们之后的具体的流程具体的画图打下一个基础,在下节课我会带大家教大家详细怎么样去画图以及怎么样去做一些API或者DATABASE design大家敬请关注!
coffee 直连行业大牛导师,1v1模拟面试与求职指导
mentors
airplay 实战与求职精品课程
数据科学
软件工程
人工智能
金融商科
产品经理
产品设计
bookmark 2000+名企面试真题
amazon google tiktok microsoft meta