系统设计开篇
系统设计这部分,无论广度还是深度,内容都太特么多了,每个点钻下去都是一片海。这玩意是面试高级职位必考的一个环节,甚至还面好几轮,我这里不定期整理一点,为下次跳槽打基础。
系统设计,通常以很简单的一句话开篇,然后主动权交到你手上,比如:
如何设计一个微博 ?
如何设计一个微信 ?
可以从以下几个角度思考,找自己擅长的方面说。
- 从数据库角度,有哪些表,大概长啥样,用户量有多少,是否需要考虑分库或分表?由此可以引入数据库中间件相关的一堆问题。
- 从服务角度,服务如何划分,有哪些 web service ,服务如何调用等?由此可以深入服务中间件等一堆服务发现注册治理相关问题。
- 从 api 角度,大概读写 api 有哪些 ,接口名长啥样,主要看 restful api 对外是否简洁明了。
- 从性能,吞吐量,延迟等方面,你会怎么做?考虑缓存,分布式缓存,以及消息中间件相关。
- 分布式架构下相关组件的一些问题,对 cap 理论的理解?
- 从整体角度,DNS,CDN,负载均衡等等,谈谈对整个流程的理解。
上面每个点都可以谈论很久,并不是都要说出来,这里有个技巧,从较高的层次往下讲 (api -> components (database, web server) -> input / output),不断跟面试官沟通,确定他想考察这个流程链中的哪个区域,标出一些假设和约束,然后谈谈自己对这块的理解。
系统设计这块弹性很大,往往会决定工资的上限。
Title: 系统设计开篇
Author: mjd507
Date: 2019-12-15
Last Update: 2024-01-27
Blog Link: https://mjd507.github.io/2019/12/15/system-design-1/
Copyright Declaration: This station is mainly used to sort out incomprehensible knowledge. I have not fully mastered most of the content. Please refer carefully.