题目重点:根据题目的首页 profile 和历史题目描述要求,设计权限、游标分页、缓存与读链路。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练范围是当前登录用户的 profile 与本人历史题目描述列表,不等同于好友动态 Feed;若要 Home Feed,需增加关注图与排序。
- 历史题目描述按 (createdAt,postId) 倒序游标分页,每页有限条;字段权限和删除状态在服务端判断。
解题路线
- 提供 profile 读取接口和题目描述历史分页接口,也可加一个首页聚合接口返回首屏 profile 与首批题目描述;聚合层并行请求并独立超时。
- 用身份令牌鉴权,profile 字段按隐私策略裁剪,题目描述按作者与可见性过滤;游标包含时间与唯一 ID,避免同一时间戳造成重复或漏项。
- 题目描述表按 authorId+时间索引读历史,静态媒体由对象存储/CDN 下发;profile 可短期缓存,题目描述首屏缓存需随新发帖/删除失效。
- 首屏只取所需字段,历史页懒加载。监控 profile/题目描述各自延迟、空结果、隐私过滤和缓存命中;部分服务失败时明确展示哪块暂不可用。
手动走一遍
GET 首页先返回用户头像/名称与最近 20 条题目描述,响应带 nextCursor。滚动后用 cursor 获取后续;用户删除其中一帖后,题目必须从缓存和后续页面消失,游标仍能稳定继续。
规模与取舍
假设每页 P 条、作者历史总量 H,合适复合索引下单页扫描约 O(log H+P),不应一次 O(H) 返回所有历史;缓存占用取决于活跃用户与首屏大小。
易错点与追问
容易失分的边界
- 把 post history 误做社交关系 Feed,加入未被题面支持的大量复杂度。
- 无分页返回全部历史,老用户响应无限增长。
- 游标只用时间戳,等时题目描述可能重复或漏读。
- 缓存响应未按用户与权限隔离。
继续深挖
- 若题目实际上要求好友动态 Feed,候选生成、排序与粉丝量热点如何改变架构?
- profile 更新与发帖后如何保证自己立即可见?
