区块链技术博客
www.b2bchain.cn

如何准备系统设计面试?求职学习资料

本文介绍了如何准备系统设计面试?求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

系统设计在面试中一定是最让面试者头疼的事情之一。 因为系统设计相关的问题通常是开放式的,所以没有标准答案。你在和面试官思想的交流碰撞中会慢慢优化自己的系统设计方案。理论上来说,系统设计面试也是和面试官一起一步一步改进原有系统设计方案的过程。

系统设计题往往也非常能考察出面试者的综合能力,回答好的话,很容易就能在面试中脱颖而出。不论是对于参加社招还是校招的小伙伴,都很有必要重视起来。

接下来,我会带着小伙伴们从我的角度出发来谈谈:如何准备面试中的系统设计部分

由于文章篇幅有限,就不列举实际例子了,可能会在后面的文章中单独提一些具体的例子。

个人能力有限。如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!

系统设计面试一般怎么问?

我简单总结了一下系统设计面试相关问题的问法:

  1. 设计一个某某系统比如秒杀系统、微博系统、抢红包系统、短网址系统。
  2. 设计某某系统中的一个功能比如哔哩哔哩的点赞功能。
  3. 设计一个框架比如 RPC 框架、消息队列、缓存框架、分布式文件系统等等。
  4. 某某系统的技术选型比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2

系统设计怎么做?

我们将步骤总结成了以下 4 步。

Step1:问清楚系统具体要求

当面试官给出了系统设计题目之后,一定不要立即开始设计解决方案。 你需要先理解系统设计的需求:功能性需求和非功能性需求。

为了避免自己曲解题目所想要解决的问题,你可以先简要地给面试官说说自己的理解,

为啥要询问清楚系统的功能性需求也就是说系统包含哪些功能呢?

毕竟,如果面试官冷不丁地直接让你设计一个微博系统,你不可能把微博系统涵盖的功能比如推荐信息流、会员机制等一个一个都列举出来,然后再去设计吧!你需要筛选出系统所提供的核心功能(缩小边界范围)!

为啥要询问清楚系统的非功能性需求或者说约束条件比如系统需要达到多少QPS呢?

让你设计一个1w人用的微博系统和100w人用的微博系统能一样么?不同的约束系统对应的系统设计方案肯定是不一样的。

Step2:对系统进行抽象设计

我们需要在一个 High Level 的层面对系统进行设计。

你可以画出系统的抽象架构图,这个抽象架构图中包含了系统的一些组件以及这些组件之间的连接。

如何准备系统设计面试?

Step3:考虑系统目前需要优化的点

对系统进行抽象设计之后,你需要思考当前抽象的系统设计有哪些需要优化的点,比如说:

  1. 当前系统部署在一台机器够吗?是否需要部署在多台机器然后进行负载均衡呢?
  2. 数据库处理速度能否支撑业务需求?是否需要给指定字段加索引?是否需要读写分离?是否需要缓存?
  3. 数据量是否大到需要分库分表?
  4. 是否存在安全隐患?
  5. 系统是否需要分布式文件系统?
  6. ……

Step4:优化你的系统抽象设计

根据 Step 3 中的“系统需要优化的点” 对系统的抽象设计做进一步完善。

系统设计该如何准备?

知识储备

系统设计面试非常考察你的知识储备,系统设计能力的提高需要大量的理论知识储备。比如说你要知道大型网站架构设计必备的三板斧:

  1. 高性能架构设计: 熟悉系统常见性能优化手段比如引入 读写分离缓存、负载均衡、异步 等等。
  2. 高可用架构设计 :CAP理论和BASE理论、通过集群来提高系统整体稳定性、超时和重试机制、应对接口级故障:降级熔断限流、排队。
  3. 高扩展架构设计 :说白了就是懂得如何拆分系统。你按照不同的思路来拆分软件系统,就会得到不同的架构。

实战

虽然懂得了理论,但是自己没有进行实践的话,很多东西是无法体会到的!

因此,你还要 不断通过实战项目锻炼自己的系统设计能力。

保持好奇心

多思考自己经常浏览的网站是怎么做的。比如:

  1. 你刷微博的时候可以思考一下微博是如何记录点赞数量的?
  2. 你看哔哩哔哩的时候可以思考一下消息提醒系统是如何做的?
  3. 你使用短链系统的时候可以考虑一下短链系统是如何做的?
  4. ……

技术选型

实现同样的功能,一般会有多种技术选择方案,比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2 。 很多时候,面试官在系统设计面过程中会具体到技术的选型,因而,你需要区分不同技术的优缺点。

系统设计面试必知

系统设计的时候必然离不开描述性能相关的指标比如 QPS。

性能相关的指标

响应时间

响应时间RT(Response-time)就是用户发出请求到用户收到系统处理结果所需要的时间。

RT是一个非常重要且直观的指标,RT数值大小直接反应了系统处理用户请求速度的快慢。

并发数

并发数可以简单理解为系统能够同时供多少人访问使用也就是说系统同时能处理的请求数量。

并发数反应了系统的负载能力。

QPS 和 TPS

  • QPS(Query Per Second) :服务器每秒可以执行的查询次数;
  • TPS(Transaction Per Second) :服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);

书中是这样描述 QPS 和 TPS 的区别的。

QPS vs TPS:QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

吞吐量

吞吐量指的是系统单位时间内系统处理的请求数量。

一个系统的吞吐量与请求对系统的资源消耗等紧密关联。请求对系统资源消耗越多,系统吞吐能力越低,反之则越高。

TPS、QPS都是吞吐量的常用量化指标。

  • QPS(TPS) = 并发数/平均响应时间(RT)
  • 并发数 = QPS * 平均响应时间(RT)

系统设计在面试中一定是最让面试者头疼的事情之一。 因为系统设计相关的问题通常是开放式的,所以没有标准答案。你在和面试官思想的交流碰撞中会慢慢优化自己的系统设计方案。理论上来说,系统设计面试也是和面试官一起一步一步改进原有系统设计方案的过程。

系统设计题往往也非常能考察出面试者的综合能力,回答好的话,很容易就能在面试中脱颖而出。不论是对于参加社招还是校招的小伙伴,都很有必要重视起来。

接下来,我会带着小伙伴们从我的角度出发来谈谈:如何准备面试中的系统设计部分

由于文章篇幅有限,就不列举实际例子了,可能会在后面的文章中单独提一些具体的例子。

个人能力有限。如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!

系统设计面试一般怎么问?

我简单总结了一下系统设计面试相关问题的问法:

  1. 设计一个某某系统比如秒杀系统、微博系统、抢红包系统、短网址系统。
  2. 设计某某系统中的一个功能比如哔哩哔哩的点赞功能。
  3. 设计一个框架比如 RPC 框架、消息队列、缓存框架、分布式文件系统等等。
  4. 某某系统的技术选型比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2

系统设计怎么做?

我们将步骤总结成了以下 4 步。

Step1:问清楚系统具体要求

当面试官给出了系统设计题目之后,一定不要立即开始设计解决方案。 你需要先理解系统设计的需求:功能性需求和非功能性需求。

为了避免自己曲解题目所想要解决的问题,你可以先简要地给面试官说说自己的理解,

为啥要询问清楚系统的功能性需求也就是说系统包含哪些功能呢?

毕竟,如果面试官冷不丁地直接让你设计一个微博系统,你不可能把微博系统涵盖的功能比如推荐信息流、会员机制等一个一个都列举出来,然后再去设计吧!你需要筛选出系统所提供的核心功能(缩小边界范围)!

为啥要询问清楚系统的非功能性需求或者说约束条件比如系统需要达到多少QPS呢?

让你设计一个1w人用的微博系统和100w人用的微博系统能一样么?不同的约束系统对应的系统设计方案肯定是不一样的。

Step2:对系统进行抽象设计

我们需要在一个 High Level 的层面对系统进行设计。

你可以画出系统的抽象架构图,这个抽象架构图中包含了系统的一些组件以及这些组件之间的连接。

如何准备系统设计面试?

Step3:考虑系统目前需要优化的点

对系统进行抽象设计之后,你需要思考当前抽象的系统设计有哪些需要优化的点,比如说:

  1. 当前系统部署在一台机器够吗?是否需要部署在多台机器然后进行负载均衡呢?
  2. 数据库处理速度能否支撑业务需求?是否需要给指定字段加索引?是否需要读写分离?是否需要缓存?
  3. 数据量是否大到需要分库分表?
  4. 是否存在安全隐患?
  5. 系统是否需要分布式文件系统?
  6. ……

Step4:优化你的系统抽象设计

根据 Step 3 中的“系统需要优化的点” 对系统的抽象设计做进一步完善。

系统设计该如何准备?

知识储备

系统设计面试非常考察你的知识储备,系统设计能力的提高需要大量的理论知识储备。比如说你要知道大型网站架构设计必备的三板斧:

  1. 高性能架构设计: 熟悉系统常见性能优化手段比如引入 读写分离缓存、负载均衡、异步 等等。
  2. 高可用架构设计 :CAP理论和BASE理论、通过集群来提高系统整体稳定性、超时和重试机制、应对接口级故障:降级熔断限流、排队。
  3. 高扩展架构设计 :说白了就是懂得如何拆分系统。你按照不同的思路来拆分软件系统,就会得到不同的架构。

实战

虽然懂得了理论,但是自己没有进行实践的话,很多东西是无法体会到的!

因此,你还要 不断通过实战项目锻炼自己的系统设计能力。

保持好奇心

多思考自己经常浏览的网站是怎么做的。比如:

  1. 你刷微博的时候可以思考一下微博是如何记录点赞数量的?
  2. 你看哔哩哔哩的时候可以思考一下消息提醒系统是如何做的?
  3. 你使用短链系统的时候可以考虑一下短链系统是如何做的?
  4. ……

技术选型

实现同样的功能,一般会有多种技术选择方案,比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2 。 很多时候,面试官在系统设计面过程中会具体到技术的选型,因而,你需要区分不同技术的优缺点。

系统设计面试必知

系统设计的时候必然离不开描述性能相关的指标比如 QPS。

性能相关的指标

响应时间

响应时间RT(Response-time)就是用户发出请求到用户收到系统处理结果所需要的时间。

RT是一个非常重要且直观的指标,RT数值大小直接反应了系统处理用户请求速度的快慢。

并发数

并发数可以简单理解为系统能够同时供多少人访问使用也就是说系统同时能处理的请求数量。

并发数反应了系统的负载能力。

QPS 和 TPS

  • QPS(Query Per Second) :服务器每秒可以执行的查询次数;
  • TPS(Transaction Per Second) :服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);

书中是这样描述 QPS 和 TPS 的区别的。

QPS vs TPS:QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

吞吐量

吞吐量指的是系统单位时间内系统处理的请求数量。

一个系统的吞吐量与请求对系统的资源消耗等紧密关联。请求对系统资源消耗越多,系统吞吐能力越低,反之则越高。

TPS、QPS都是吞吐量的常用量化指标。

  • QPS(TPS) = 并发数/平均响应时间(RT)
  • 并发数 = QPS * 平均响应时间(RT)

系统设计在面试中一定是最让面试者头疼的事情之一。 因为系统设计相关的问题通常是开放式的,所以没有标准答案。你在和面试官思想的交流碰撞中会慢慢优化自己的系统设计方案。理论上来说,系统设计面试也是和面试官一起一步一步改进原有系统设计方案的过程。

系统设计题往往也非常能考察出面试者的综合能力,回答好的话,很容易就能在面试中脱颖而出。不论是对于参加社招还是校招的小伙伴,都很有必要重视起来。

接下来,我会带着小伙伴们从我的角度出发来谈谈:如何准备面试中的系统设计部分

由于文章篇幅有限,就不列举实际例子了,可能会在后面的文章中单独提一些具体的例子。

个人能力有限。如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!

系统设计面试一般怎么问?

我简单总结了一下系统设计面试相关问题的问法:

  1. 设计一个某某系统比如秒杀系统、微博系统、抢红包系统、短网址系统。
  2. 设计某某系统中的一个功能比如哔哩哔哩的点赞功能。
  3. 设计一个框架比如 RPC 框架、消息队列、缓存框架、分布式文件系统等等。
  4. 某某系统的技术选型比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2

系统设计怎么做?

我们将步骤总结成了以下 4 步。

Step1:问清楚系统具体要求

当面试官给出了系统设计题目之后,一定不要立即开始设计解决方案。 你需要先理解系统设计的需求:功能性需求和非功能性需求。

为了避免自己曲解题目所想要解决的问题,你可以先简要地给面试官说说自己的理解,

为啥要询问清楚系统的功能性需求也就是说系统包含哪些功能呢?

毕竟,如果面试官冷不丁地直接让你设计一个微博系统,你不可能把微博系统涵盖的功能比如推荐信息流、会员机制等一个一个都列举出来,然后再去设计吧!你需要筛选出系统所提供的核心功能(缩小边界范围)!

为啥要询问清楚系统的非功能性需求或者说约束条件比如系统需要达到多少QPS呢?

让你设计一个1w人用的微博系统和100w人用的微博系统能一样么?不同的约束系统对应的系统设计方案肯定是不一样的。

Step2:对系统进行抽象设计

我们需要在一个 High Level 的层面对系统进行设计。

你可以画出系统的抽象架构图,这个抽象架构图中包含了系统的一些组件以及这些组件之间的连接。

如何准备系统设计面试?

Step3:考虑系统目前需要优化的点

对系统进行抽象设计之后,你需要思考当前抽象的系统设计有哪些需要优化的点,比如说:

  1. 当前系统部署在一台机器够吗?是否需要部署在多台机器然后进行负载均衡呢?
  2. 数据库处理速度能否支撑业务需求?是否需要给指定字段加索引?是否需要读写分离?是否需要缓存?
  3. 数据量是否大到需要分库分表?
  4. 是否存在安全隐患?
  5. 系统是否需要分布式文件系统?
  6. ……

Step4:优化你的系统抽象设计

根据 Step 3 中的“系统需要优化的点” 对系统的抽象设计做进一步完善。

系统设计该如何准备?

知识储备

系统设计面试非常考察你的知识储备,系统设计能力的提高需要大量的理论知识储备。比如说你要知道大型网站架构设计必备的三板斧:

  1. 高性能架构设计: 熟悉系统常见性能优化手段比如引入 读写分离缓存、负载均衡、异步 等等。
  2. 高可用架构设计 :CAP理论和BASE理论、通过集群来提高系统整体稳定性、超时和重试机制、应对接口级故障:降级熔断限流、排队。
  3. 高扩展架构设计 :说白了就是懂得如何拆分系统。你按照不同的思路来拆分软件系统,就会得到不同的架构。

实战

虽然懂得了理论,但是自己没有进行实践的话,很多东西是无法体会到的!

因此,你还要 不断通过实战项目锻炼自己的系统设计能力。

保持好奇心

多思考自己经常浏览的网站是怎么做的。比如:

  1. 你刷微博的时候可以思考一下微博是如何记录点赞数量的?
  2. 你看哔哩哔哩的时候可以思考一下消息提醒系统是如何做的?
  3. 你使用短链系统的时候可以考虑一下短链系统是如何做的?
  4. ……

技术选型

实现同样的功能,一般会有多种技术选择方案,比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2 。 很多时候,面试官在系统设计面过程中会具体到技术的选型,因而,你需要区分不同技术的优缺点。

系统设计面试必知

系统设计的时候必然离不开描述性能相关的指标比如 QPS。

性能相关的指标

响应时间

响应时间RT(Response-time)就是用户发出请求到用户收到系统处理结果所需要的时间。

RT是一个非常重要且直观的指标,RT数值大小直接反应了系统处理用户请求速度的快慢。

并发数

并发数可以简单理解为系统能够同时供多少人访问使用也就是说系统同时能处理的请求数量。

并发数反应了系统的负载能力。

QPS 和 TPS

  • QPS(Query Per Second) :服务器每秒可以执行的查询次数;
  • TPS(Transaction Per Second) :服务器每秒处理的事务数(这里的一个事务可以理解为客户发出请求到收到服务器的过程);

书中是这样描述 QPS 和 TPS 的区别的。

QPS vs TPS:QPS 基本类似于 TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

吞吐量

吞吐量指的是系统单位时间内系统处理的请求数量。

一个系统的吞吐量与请求对系统的资源消耗等紧密关联。请求对系统资源消耗越多,系统吞吐能力越低,反之则越高。

TPS、QPS都是吞吐量的常用量化指标。

  • QPS(TPS) = 并发数/平均响应时间(RT)
  • 并发数 = QPS * 平均响应时间(RT)

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 如何准备系统设计面试?求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们