系统设计面试

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

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

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

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

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

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

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

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

第三步:设计核心组件

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

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

第四步:扩展设计

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

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

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

附加

预估计算量

相关推荐
Lee川5 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川9 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i11 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有11 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有11 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫12 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫12 小时前
Handler基本概念
面试
Wect13 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼13 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼13 小时前
Next.js 企业级落地
前端·javascript·面试