导入
问题描述
让我们来看一个要求你设计 Twitter 动态系统的问题描述。
问题描述
面试官要求你设计一个 Twitter 信息流系统,能够根据用户的社交关系图(social graph)展示最相关的内容。
理解问题
用户 A 在 Twitter 平台上关注了其他个人或机构,他们希望通过自己的信息流了解这些关注对象的动态。
过去通常采用一种较为简单的方式:将用户 A 上次访问以来其关注对象发布的所有推文按时间倒序排列展示。
然而,这种按时间倒序的信息流展示方式常常导致用户 A 错过一些本可能非常感兴趣的内容。我们来看一下为什么会发生这种情况。
Twitter 拥有大量日活跃用户,因此平台产生的数据量极为庞大。一条可能极具吸引力的推文,由于在其之后发布了大量其他推文,被迅速刷到了信息流底部。
因此,为了提供更具吸引力的用户体验,必须根据用户的兴趣和社交关系,对推文进行相关性排序,将最相关的内容优先展示。
通过基于内容与用户的相关性来组织信息流,可以显著提升体验。如今,信息流的排序已从单纯的时间顺序转变为基于相关性的排序。
问题规模
明确了问题背景后,我们进一步定义问题的规模:
- 假设有五亿日活跃用户;
- 每个用户平均关注 100 人;
- 每位用户每天平均查看 10 次自己的信息流。
这意味着,每天总共会产生 50 亿次信息流请求(5 亿 × 10),即你的推文排序系统每天需要运行 50 亿次。
最后,我们将该问题建模为一个机器学习任务: