100 GB 的日志中每行是一个 URL,内存只有 4 GB,怎样找出出现次数最多的 10 个?
先自己想一想,再看参考要点
参考要点
- 按 hash(url) % 100 切成 100 个约 1 GB 的小文件,相同的 URL 一定在同一个文件中
- 逐个文件用 HashMap 统计次数,用小顶堆取出前 10 个
- 再用小顶堆从 100 × 10 个候选中选出全局前 10 个
- 某个文件中不同的 URL 仍然太多、HashMap 放不下时,换哈希函数对它再切分
参考要点
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。