CS-Notes 学习笔记
Java 后端 · 系统设计

100 GB 的日志中每行是一个 URL,内存只有 4 GB,怎样找出出现次数最多的 10 个?

先自己想一想,再看参考要点

参考要点

  • 按 hash(url) % 100 切成 100 个约 1 GB 的小文件,相同的 URL 一定在同一个文件中
  • 逐个文件用 HashMap 统计次数,用小顶堆取出前 10 个
  • 再用小顶堆从 100 × 10 个候选中选出全局前 10 个
  • 某个文件中不同的 URL 仍然太多、HashMap 放不下时,换哈希函数对它再切分
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。