本文首发于公众号:更AI (power_ai),欢迎关注,编程、AI干货及时送!
在本章中,你被要求设计一个新闻订阅系统。什么是新闻订阅呢?根据 Facebook 的帮助页面,“新闻订阅是你主页中间的故事列表,它会不断更新。新闻订阅包括状态更新、照片、视频、链接、应用活动以及你在 Facebook 上关注的人、页面和群组的喜欢” [1]。这是一个流行的面试问题。常见的类似问题包括:设计 Facebook 新闻订阅,Instagram 订阅,Twitter 时间线等。
第一步 - 理解问题并确定设计范围
第一组澄清问题是理解面试官在问你设计新闻订阅系统时的想法。至少,你应该弄清楚要支持哪些功能。以下是候选人与面试官交流的一个例子:
候选人 : 这是一个移动应用吗?还是一个网页应用?或者两者都有?
面试官 : 两者都有。
候选人 : 什么是重要的功能?
面试官 : 用户可以发布帖子,并在新闻订阅页面上看到她的朋友的帖子。
候选人 : 新闻订阅是按照逆时间顺序排序的,还是按照某种特定的顺序排序,比如主题得分?例如,你的亲密朋友的帖子得分更高。
面试官 : 为了简单起见,让我们假设订阅是按照逆时间顺序排序的。
候选人 : 一个用户可以有多少朋友?
面试官 : 5000个
候选人 : 交通量是多少?
面试官 : 1000万日活用户
候选人 : 订阅可以包含图片、视频,还是只有文本?
面试官 : 它可以包含媒体文件,包括图片和视频。
现在你已经收集到了需求,我们专注于设计系统。
第二步 - 提出高层次设计并获得认可
设计分为两个流程:订阅发布和新闻订阅构建。
- 订阅发布:当用户发布一篇帖子时,相应的数据被写入缓存和数据库。一篇帖子被推送到她的朋友的新闻订阅中。
- 新闻订阅构建:为了简化,让我们假设新闻订阅是通过按逆时间顺序汇总朋友的帖子来构建的。