CS-Notes 学习笔记
Java 后端 · 系统设计

面试中遇到“设计一个点赞系统”这类开放题,应该按什么顺序回答?

先自己想一想,再看参考要点

参考要点

  • 先明确需求:要支持的功能、规模和哪些数据不能出错,例如点赞不能重复计、点赞数允许延迟几秒
  • 再估算高峰时的读写量和存储:日活 2000 万、每人每天点赞 5 次时,高峰小时写约 1700 次/秒、读约 3.3 万次/秒,点赞关系每年约 4 TB
  • 然后定义接口和表,(user_id, video_id) 作主键让重复点赞插入失败
  • 先给出单库事务的简单方案,再按估算找瓶颈逐个改进:热门视频的计数行锁改为 Redis 计数加合并写回,读多加缓存,数据量大按 user_id 分片
  • 最后说明哪些数据准确、哪些最终一致,以及 Redis 宕机时怎么办
  • 追问流量再涨 10 倍时,回到估算重新算每一层的量,看哪一层先超过上限
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。