系统设计面试

如何处理一个系统设计的面试题

系统设计面试是一个开放式的对话。他们希望你去主导这个对话

第一步:描述使用场景,约束和假设

把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。

  • 谁会使用它?
  • 他们会怎样使用它?
  • 有多少用户?
  • 系统的作用是什么?
  • 系统的输入输出分别是什么?
  • 我们希望处理多少数据?
  • 我们希望每秒钟处理多少请求?
  • 我们希望的读写比率?

第二步:创造一个高层级的设计

使用所有重要的组件来描绘出一个高层级的设计

  • 画出主要的组件和连接 (process on)
  • 证明你的想法

第三步:设计核心组件

对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url缩写服务,开始讨论:

  1. 生成并储存一个完成 url 的 hash
  • MD5 和 Base62
  • Hash碰撞
  • SQL还是NoSQL
  • 数据库模型
  1. 将一个 hased url翻译成一个完整的 url
  • 数据库查找
  1. API和面向对象设计

第四步:扩展设计

确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?

  • 负载均衡
  • 水平扩展
  • 缓存
  • 数据库分片

论述可能的解决办法和代价。每件事情需要取舍。可以使用可扩展系统的设计原则来处理瓶颈。

附加

预估计算量

相关推荐
liuyang-neu1 小时前
力扣 11.盛最多水的容器
算法·leetcode·职场和发展
宇宙李6 小时前
2024java面试-软实力篇
面试·职场和发展
测试界柠檬6 小时前
接口测试到底测试什么?
自动化测试·软件测试·功能测试·程序人生·职场和发展·单元测试·压力测试
自身就是太阳7 小时前
2024蓝桥杯省B好题分析
算法·职场和发展·蓝桥杯
孙小二写代码7 小时前
[leetcode刷题]面试经典150题之1合并两个有序数组(简单)
算法·leetcode·面试
珊珊而川7 小时前
【浏览器面试真题】sessionStorage和localStorage
前端·javascript·面试
markzzw8 小时前
我在 Thoughtworks 被裁前后的经历
前端·javascript·面试
无名之逆8 小时前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
爱棋笑谦9 小时前
二叉树计算
java·开发语言·数据结构·算法·华为od·面试
码拉松9 小时前
千万不要错过,优惠券设计与思考初探
后端·面试·架构