设计系统的第一步是理解问题和确定设计的边界。我们需要问面试官具体问题。
1. 业务量:
询问数量级数适用于大多数的问题,通常同时问是否是初创/大型应用。
设计twitter:DAU数量
设计ID生成器:每秒生成多少ID
设计tiny URL:每天生成多少个
设计爬虫:每月爬虫多少个网站
设计通知系统:每天发送多少通知
设计聊天系统:DAU数量
设计自动补全系统:DAU数量
设计视频分享系统: DAU数量,用户平均看多久
设计云盘:DAU数量
设计支付系统: DAU数量,多少笔交易
设计指标监控告警系统:DAU数量
2. 数据结构存储相关
大多数系统需要确定相关数据类型
设计twitter:纯文本还是包含图片以及视频
设计ID生成器:ID是否只有数字,ID长度
设计tiny URL:URL长度,可以有哪些字符
设计爬虫:仅存储HTML还是包含其中的PDF/图片/WORD
设计聊天系统:发送的消息大小,是否可以发送附件(图片/视频)
设计视频分享系统: 文件格式以及分辨率,上传文件大小限制
设计云盘:文件格式,上传文件大小限制
设计支付系统: 是否可以存储用户数据(信用卡)
设计指标监控告警系统:收集什么指标(CPU/内存),是否收集日志
3. 类型/目的
设计限流器:是客户端限流还是服务器限流,是IP限流还是用户ID限流
设计爬虫:是为了搜索引擎还是数据挖掘
设计通知系统:是邮件,手机推送还是短信,实时系统还是可以延迟
设计twitter:移动应用,网页应用
设计聊天系统:移动应用,网页应用,一对一还是群聊
设计视频分享系统:客户端类型(移动端,网页端,智能电视)
设计云盘:移动端,网页端
设计支付系统分:移动端,网页端
设计指标监控告警系统:如何告警(邮件, 电话)
4. 存储时间相关
设计爬虫:HTML存储多久(5年)
设计twitter:数据存放时间
设计聊天系统:数据保存多久
设计指标监控告警系统:数据存放多久(1年)
5. 具体逻辑
设计爬虫:考虑新增的和更新的网页,考虑处理重复内容
设计通知系统: 用户选择退订,通知的逻辑(客户端触发,定时触发)
设计twitter:什么功能(news feed),添加好友
设计聊天系统:一对一,群聊,显示在线状态,加密
设计自动补全系统: 返回几条,基于流行度还是频率,拼写检测,是否只支持英文,特殊字符
设计视频分享系统:是否加密
设计云盘:是否加密