Files
examination/topics/thumbup/heavykeeper-topk/short_answer.json
T

76 lines
6.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"topic": "heavykeeper-topk",
"type": "short_answer",
"schema_version": "1.0.0",
"generated": "2026-09-09T21:42:00+08:00",
"questions": [
{
"id": "sa-001",
"type": "short_answer",
"difficulty": 3,
"tags": [
"heavykeeper-topk",
"cms"
],
"question": "请对比说明 HeavyKeeper 和 Count-Min Sketch (CMS) 在处理「冷 Key 与热 Key 哈希冲突」时的行为差异,以及这种差异对 Top-K 探测准确性的影响。",
"answer": "CMS:冷 Key 与热 Key 哈希到同一桶时,冷 Key 的频率会累加到热 Key 上,且 CMS 只做加法不做减法,导致热 Key 的频率被持续高估(正偏差),冷 Key 的存在会'污染'热 Key 的计数。HeavyKeeper:采用概率衰减淘汰策略——当冷 Key 冲突到热 Key 的桶时,会以较高概率递减桶计数(因为冷 Key 频率低对应桶 count 小,衰减概率高);而热 Key 自身频繁命中会保持高 count,衰减概率低,不易被淘汰。结果是冷 Key 的污染被逐步清除,热 Key 的计数更准确。",
"keywords": [
"冷热冲突",
"概率衰减",
"计数累加",
"正偏差",
"污染"
],
"scoring_rubric": "评分标准:1. 准确描述 CMS 在冷热冲突时的行为——冷 Key 计数累加到热 Key 导致正偏差(2分);2. 准确描述 HeavyKeeper 的概率衰减淘汰机制——低 count 衰减概率高、高 count 衰减概率低(2分);3. 对比两者对 Top-K 准确性的影响——CMS 会误判、HeavyKeeper 更准确(1分)",
"explanation": "CMS 的核心缺陷是只增不减,冷 Key 的污染是永久性的。HeavyKeeper 通过指数衰减(0.92^count)让冷 Key(小 count)容易被淘汰,而热 Key(大 count)几乎不受影响,实现了'自清洁'效果。这是 HeavyKeeper 相比 CMS 在 Top-K 场景下的核心优势。",
"source": null,
"related": []
},
{
"id": "sa-002",
"type": "short_answer",
"difficulty": 4,
"tags": [
"heavykeeper-topk",
"heavykeeper"
],
"question": "HeavyKeeper 的 fading() 机制是如何实现时间窗口适应性的?请解释其工作原理以及为什么需要定期调用。",
"answer": "fading() 通过全局衰减实现时间窗口适应:每次调用时,将所有桶的计数、minHeap 中节点的计数、以及全局 total 都执行右移一位(除以 2)。效果等价于指数衰减的时间窗口——历史数据的权重随时间指数衰减。定期调用 fading() 的必要性:1. 数据流分布会随时间变化(如电商大促导致热点切换),不衰减会导致旧热点长期占据 Top-K 位置;2. 衰减让低频的旧 Key 逐渐被淘汰(count 趋向 0),腾出位置给新的热点 Key;3. 模拟滑动时间窗口,使算法只关注近期的数据分布。",
"keywords": [
"fading",
"指数衰减",
"时间窗口",
"右移减半",
"分布变化"
],
"scoring_rubric": "评分标准:1. 正确解释 fading() 的操作——对桶计数、堆节点、全局 total 统一执行右移减半(2分);2. 说明指数衰减的时间窗口效果——历史权重随时间递减(1分);3. 解释定期调用的必要性——适应数据分布变化、淘汰旧热点、腾出空间给新热点(2分)",
"explanation": "fading() 是 HeavyKeeper 区别于 CMS 的关键机制之一。CMS 没有内置衰减,数据分布变化后只能重建。HeavyKeeper 通过简单的位运算实现了优雅的指数衰减,兼顾了实现简洁性和运行效率。",
"source": null,
"related": []
},
{
"id": "sa-003",
"type": "short_answer",
"difficulty": 5,
"tags": [
"heavykeeper-topk",
"heavykeeper",
"hot-key-detection"
],
"question": "假设需要在生产环境中使用 HeavyKeeper 实现 Top-100 热 Key 检测(width=100000, depth=5, minCount=10),请分析:(1) 该配置的内存开销大约是多少?(2) 与同等精度的 CMS 相比,HeavyKeeper 的内存开销有何差异?(3) 在什么场景下应该选择 HeavyKeeper 而非 CMS?",
"answer": "(1) 内存开销分析:每个 Bucket 存储一个 fingerprint(8 字节 long)+ 一个 count(4 字节 int)+ 对象开销,假设约 24-32 字节。总桶数 = 5 × 100000 = 500000,桶内存 ≈ 500000 × 24 ≈ 12MB。加上 lookupTable(256 × 8 = 2KB)、minHeap(100 个节点,可忽略)、其他元数据,总计约 12-15MB。(2) 与 CMS 对比:CMS 每个计数器通常用 4 字节(int),相同 width×depth 配置下 CMS 只需 5 × 100000 × 4 ≈ 2MB。HeavyKeeper 多了 fingerprint 存储和对象开销,内存约为 CMS 的 5-7 倍。但 HeavyKeeper 的 Top-K 结果更准确(冷 Key 自清洁),这是用额外内存换精度。(3) 选择 HeavyKeeper 的场景:需要实时 Top-K 热 Key 探测且数据流分布会随时间变化(如 CDN 访问热点、电商流量分析);选择 CMS 的场景:只需要频率估计且内存极度受限,或数据分布稳定不需要衰减。",
"keywords": [
"内存开销",
"width",
"depth",
"fingerprint",
"CMS 对比",
"场景选择"
],
"scoring_rubric": "评分标准:1. 正确计算 HeavyKeeper 内存开销——桶数 width×depth、每桶 fingerprint+count 约 24-32 字节、总计约 12-15MB(2分);2. 正确对比与 CMS 的内存差异——CMS 仅存计数约 2MB,HeavyKeeper 约 5-7 倍但精度更高(2分);3. 准确区分适用场景——HeavyKeeper 适合动态变化的 Top-K,CMS 适合静态频率估计或内存极度受限场景(1分)",
"explanation": "内存分析是工程实践中的关键考量。HeavyKeeper 的额外内存主要来自 fingerprint 存储和 Java 对象开销。在生产环境中,如果内存预算允许且需要高质量的 Top-K 结果,HeavyKeeper 是更好的选择。如果内存极度紧张或只需要粗粒度的频率估计,CMS 可能更合适。",
"source": null,
"related": []
}
]
}