MLE / Research · ML Domain / ML System Design

Hashtag聚合服务:计数口径、趋势窗口与热键

先定义top榜是总量、增长还是独立用户,再选计数与近似方案。

题目重点:先定义top榜是总量、增长还是独立用户,再选计数与近似方案。

题意与假设

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

  • 题目讨论hashtag聚合/metrics方向,未给排名公式;本文训练采用滑动窗口独立帖子数并可扩展趋势。
  • 标签规范化、删帖及机器人治理规则需确认,不能默认一条贴重复标签计多次。

解题路线

  1. 事件key=(postId,tag)去重,保存eventTime/version和delete;stream按窗口汇总。热tag用局部聚合再合并,避免一个全局key承受每条写。
  2. 总次数、独立发帖人和增长率是不同指标。定义窗口边界/迟到水位/修订策略,发布榜单版本。TopK可维护分片候选,但独立用户不能简单相加重叠分片。
  3. 精确结果用集合/去重存储;规模高可用近似结构并公布误差与低频限制。趋势榜需防小基数暴涨与刷量,不把比率高自动当热门。

手动走一遍

同一帖子带#A两次只计一个post/tag;删除事件重复到达不能再减第二次。A从100到200,B从1到10,按增长率B更大但绝对增长A更大,必须问清榜单目的。

规模与取舍

写量约帖子×平均不同tag,内存随窗口活跃post/tag增长。local聚合降流量但延迟增加,榜单新鲜度和准确度需一同设预算。

易错点与追问

容易失分的边界

  • 仅按processingTime会让重传旧贴突然上榜。
  • 分片TopK合并对于sum统计需保证候选充分,分片各取K不总保证全局topK。

继续深挖

  • 如何安全处理事件迟到与跨窗口删除?
  • 用户想看某tag过去一年趋势,怎样存多粒度历史?
✓已复制微信号!