题目重点:先定义top榜是总量、增长还是独立用户,再选计数与近似方案。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 题目讨论hashtag聚合/metrics方向,未给排名公式;本文训练采用滑动窗口独立帖子数并可扩展趋势。
- 标签规范化、删帖及机器人治理规则需确认,不能默认一条贴重复标签计多次。
解题路线
- 事件key=(postId,tag)去重,保存eventTime/version和delete;stream按窗口汇总。热tag用局部聚合再合并,避免一个全局key承受每条写。
- 总次数、独立发帖人和增长率是不同指标。定义窗口边界/迟到水位/修订策略,发布榜单版本。TopK可维护分片候选,但独立用户不能简单相加重叠分片。
- 精确结果用集合/去重存储;规模高可用近似结构并公布误差与低频限制。趋势榜需防小基数暴涨与刷量,不把比率高自动当热门。
手动走一遍
同一帖子带#A两次只计一个post/tag;删除事件重复到达不能再减第二次。A从100到200,B从1到10,按增长率B更大但绝对增长A更大,必须问清榜单目的。
规模与取舍
写量约帖子×平均不同tag,内存随窗口活跃post/tag增长。local聚合降流量但延迟增加,榜单新鲜度和准确度需一同设预算。
易错点与追问
容易失分的边界
- 仅按processingTime会让重传旧贴突然上榜。
- 分片TopK合并对于sum统计需保证候选充分,分片各取K不总保证全局topK。
继续深挖
- 如何安全处理事件迟到与跨窗口删除?
- 用户想看某tag过去一年趋势,怎样存多粒度历史?
