系统设计面试

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

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

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

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

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

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

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

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

第三步:设计核心组件

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

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

第四步:扩展设计

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

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

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

附加

预估计算量

相关推荐
Chan162 分钟前
【 Java八股文面试 | Redis篇 缓存问题、持久化、分布式锁 】
java·数据库·redis·后端·spring·缓存·面试
zhishidi2 小时前
大模型个性化推荐面试指南
人工智能·面试
程序员小远3 小时前
软件测试之bug分析定位技巧
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·bug
Kuo-Teng3 小时前
LeetCode 19: Remove Nth Node From End of List
java·数据结构·算法·leetcode·链表·职场和发展·list
Kuo-Teng3 小时前
LeetCode 21: Merge Two Sorted Lists
java·算法·leetcode·链表·职场和发展
元亓亓亓5 小时前
LeetCode热题100--39. 组合总和
算法·leetcode·职场和发展
橘颂TA5 小时前
【剑斩OFFER】算法的暴力美学——寻找数组的中心下标
算法·leetcode·职场和发展·结构与算法
xiaoxue..7 小时前
深入理解 JavaScript 异步编程:从单线程到 Promise 的完整指南
前端·javascript·面试·node.js
Kuo-Teng7 小时前
LeetCode 141. Linked List Cycle
java·算法·leetcode·链表·职场和发展
·云扬·8 小时前
【LeetCode Hot 100】 136. 只出现一次的数字
算法·leetcode·职场和发展