SWE · VO System Design

Oracle 社交首页 API:Profile 与 Post History

根据题目的首页 profile 和历史题目描述要求,设计权限、游标分页、缓存与读链路。

题目重点:根据题目的首页 profile 和历史题目描述要求,设计权限、游标分页、缓存与读链路。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练范围是当前登录用户的 profile 与本人历史题目描述列表,不等同于好友动态 Feed;若要 Home Feed,需增加关注图与排序。
  • 历史题目描述按 (createdAt,postId) 倒序游标分页,每页有限条;字段权限和删除状态在服务端判断。

解题路线

  1. 提供 profile 读取接口和题目描述历史分页接口,也可加一个首页聚合接口返回首屏 profile 与首批题目描述;聚合层并行请求并独立超时。
  2. 用身份令牌鉴权,profile 字段按隐私策略裁剪,题目描述按作者与可见性过滤;游标包含时间与唯一 ID,避免同一时间戳造成重复或漏项。
  3. 题目描述表按 authorId+时间索引读历史,静态媒体由对象存储/CDN 下发;profile 可短期缓存,题目描述首屏缓存需随新发帖/删除失效。
  4. 首屏只取所需字段,历史页懒加载。监控 profile/题目描述各自延迟、空结果、隐私过滤和缓存命中;部分服务失败时明确展示哪块暂不可用。

手动走一遍

GET 首页先返回用户头像/名称与最近 20 条题目描述,响应带 nextCursor。滚动后用 cursor 获取后续;用户删除其中一帖后,题目必须从缓存和后续页面消失,游标仍能稳定继续。

规模与取舍

假设每页 P 条、作者历史总量 H,合适复合索引下单页扫描约 O(log H+P),不应一次 O(H) 返回所有历史;缓存占用取决于活跃用户与首屏大小。

易错点与追问

容易失分的边界

  • 把 post history 误做社交关系 Feed,加入未被题面支持的大量复杂度。
  • 无分页返回全部历史,老用户响应无限增长。
  • 游标只用时间戳,等时题目描述可能重复或漏读。
  • 缓存响应未按用户与权限隔离。

继续深挖

  • 若题目实际上要求好友动态 Feed,候选生成、排序与粉丝量热点如何改变架构?
  • profile 更新与发帖后如何保证自己立即可见?
✓已复制微信号!