一文详解系统设计面试(附爆肝整理的SD面试大礼包)

文末给大家准备了SD面试大礼包,包含各大厂面试真题,看完有份!

今年tech大环境不理想,北美筛选人才的bar明显提高,其中,系统设计在面试中占比更是明显提高——往年只考Senior的系统设计面试,今年在NG和低阶level面试中频频出现。

为什么今年要着重考察系统设计的问题?

当系统设计有问题时,从外部客户来说,会产生经济损失,比如电商平台丢失订单等等,损失都是几百万甚至上千万的。从公司内部来说,没有人愿意去维护一个不成熟的系统,太耗费精力和时间,再加上今年互联网降本增效,公司不愿意为此付出成本和代价。

所以,不仅在面试中会考,今年还尤其看重,毕竟一个具有架构能力,能立刻上手工作的员工不知道可以为公司创造多少价值。

系统设计考什么?

1.交流沟通和理解能力 :跟面试官充分交流理解所设计系统的目标,方便做设计中的 trade off。

2.设计和架构能力:这个就不用赘述。

3.扩展性 ,容错性,延迟要求 : 跟Operation相关的要求,希望candidate了解系统今后能如何扩展,易于maintain。

4.资源需求 :对于要求的QPS和latency,需要的机器数量,需要如何配置CPU, 内存,硬盘等等。

不同职级对SD能力的要求如何?

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第1张图片

L3/L4 :

①能够给出能解决问题的完整设计,可以是 interviewer 主导,可以给 hint 给出的设计合理,data 的流入流出走向清晰,不存在有哪个模块 cdd 是完全不知道怎么 work 的。

②对 trade off 有理解。会做选择,会分析 pros/cons 。

③至少对整个系统的某一个模块有一定深度的理解,能经受住一些 challenge 追问。

L5 :

①Candida 能够主动引导面试的讨论,主动分析和划清问题的边界和需求

②对数字有较好的把握,可以大体估算出存储、traffic 量级等数据

③不过度设计,不炫耀知识,而是根据问题的要求和预估的数据给出最合理的设计,给出的设计大体能够经得住 interviewer 的多番 challenge

④对整个设计中的 1 到 2 个细分领域有较深入的理解

L6+ :

①能熟练了解整个设计的所有基础部分,无需任何提示

②设计老练,给出的每个 component 都是有用的,没有多余的内容

③对如何 scale 这样问题有较深入的经验 对 2-3 个细分领域有较深入理解

④能够从这场面试的交流中判断出此人所在领域足够给团队带来影响力

系统设计面试具体有哪些步骤呢?

从candidate的角度来说,一个完整的流程大概有以下5步,可做主要参考并适当临场发挥:

  1. Functional Requirement - 和面试官确认他想要什么样的系统,到底哪些是这 一个小时需要 cover 的

  2. Non Function Requirement - 一般需要探讨 scalability,avaliability, reliability, security

(optional) back-of-the-envelope calculation - 可以问一下面试官感不感兴趣,但是至少需要知道 qps,会影响后面的设计

     3. High level architechture - 画图,跟面试官确认思路

     4. Component breakdown - 解释每一步的细节, 为什么选择这个技术 /framework/trade off

     5. Final review - 看看有没有 single point failure, 有没有面试官想进一步探讨的部分

如何为系统设计做准备?

首先要清楚,系统设计面试不是希望你在30min左右设计出一个完整的系统,而是考察你在面对一个复杂的问题时,如何把它进行拆解、细化、运用现有的系统知识完成一个具体的项目,实现工作中leader需要你实现的功能。

这一点在系统设计2023版中,FLAG资深架构师会详细梳理和解释。另外,大神还会讲解全面的SD题型,完全是以面试为导向的——

包含秒杀系统与订单系统、网站系统、协同实时编辑系统、限流器与实时数据系统、即时通讯系统、视频系统、爬虫系统等18个常见的系统。

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第2张图片 

课上会提供系统设计的通用解题步骤,并独创了系统设计训练方式,通过编程掌握核心技术点。让系统设计面试像刷题一样有迹可循:

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第3张图片

 另外,第一节的免费试听课程就会讲到设计Twitter和系统设计的通用解题法则,不妨去感受一下,简单入个门。

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第4张图片

 其次,除了上面的课程,就是神书DDIA了——

个人觉得,书里很多的理论证明,还有各种细节上的讨论,比如phantom read的具体情况,其实对于准备面试来说,并不是非常有帮助。

反而是写在各章summary里的,对于名词和术语的总结,以及对于为什么某些东西在SD里很重要的简单分析,搭配网上的一些读书笔记,能让你对这些东西有一个比较合适的理解。

值得注意的是,senior-staff这个级别的系统设计面试,只看DDIA的话,是不够的,它里面的一些有点复制粘贴意思的trade-off分析,和它不分场景都上来先算capacity的做法,其实容易把人带进沟里。

最后,再推荐几个可以跟着学习的系统设计——多练习实操项目,至少有一个能拿得出手的系统项目。

1Twitter后端项目

设计Twitter本质上就是在考高并发的信息流系统,其涉及的技术难点非常多,项目的难度也更能检验面试者水平,而且从L3~L5都能问到。

对于初级程序员(SDE1),可以把“设计Twitter”拆解出单独设计一个关注功能来问

对于高级程序员(SDE2+),面试官通常会要求面试者实现设计登陆、发推、点赞、关注、取关等一系列功能

这些技术难点在Twitter后端项目首节试听课中都有详细介绍,整个项目涉及万行代码,最后可以按工业化要求产出的可上线产品。现在可以免费试听。

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第5张图片

2 、电商秒杀系统 - Spring项目实战

实战高并发最好的项目之一,课程是由阿里巴巴资深架构师主讲,负责每年双十一淘宝系统的维护。

对于长期在中小厂工作,缺乏高并发经验的程序员非常适用,课程会从项目基础架构搭建、数据库表分析及创建、MyBatis 整合与逆向生成等开始讲起,逐步完成一个电商秒杀系统。

首节试听课上会讲解秒杀系统的重难点、常用的技术架构,现在开放了免费试听。

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第6张图片

 

写在最后

1、面经很重要,无论是大厂还是小公司,好好准备面试真题,真的考到就是赚到。

一文详解系统设计面试(附爆肝整理的SD面试大礼包)_第7张图片 

2、工作的时候要多问为什么,尤其是一些技术难点要知道为什么困难,面试会被问到,hm 尤其感兴趣。

3、 刚开始不用安排太多公司,package 相近的面试流程差不多的安排到一起好 compete,要不然后期很容易疲惫。

最后,爆肝整理的SD面试大礼包送上:戳这里

以上,希望能给苦于系统设计的各位,提供一些帮助。也欢迎各位随时提问,知无不言,言无不尽!

你可能感兴趣的:(技术资料,九章算法课程/讲座,面试,系统架构,职场和发展)