海量数据处理(面试)

海量数据

1、从大量的URL中找出相同的URL

解法:

分治法:

  • 如果是单个很大的文件,直接划分文件,按特定大小划分,然后多线程,用map对各个文件进行统计。

  • 如果是两个很大的文件,a和b。通过遍历a文件,对每个URL进行:i=Hash(URL)%500(500为文件个数,可以为其他的值)。将该URL写入到Ai文件。对b文件也是同样的操作。然后对500个文件对【Ai, Bi】。遍历Ai文件,URL用set记录。遍历Bi文件,如果URL存在就是a、b都存在的URL。Ai、Bj中不可能存在相同的URL。

前缀树:

  • 单个文件:前缀树也是可以的。第一次就创建前缀树节点。后面就记录虫回复的URL。
  • 两个文件:对a文件先进行遍历,建立前缀树。然后对b文件遍历,如果URL在前缀树中。就记录为两个文件的相同的URL。

记:

分治法:hash划分小文件,对小文件处理。

前缀树。

2、从大量数据中找出高频词

问题描述:

一个大小为1GB的文件,文件里每一行是一个单词,每个单词16B,内存大小限制是1MB。找出频率最高的前100个单词。

解法:

  • 遍历文件中所有记录,用map记录。然后遍历map,用大小为100的小根堆筛选出TOP100。
  • 前缀树:节点值是单词的频次。然后在加上小根堆。
  • 分支法:Hash划分为多个小文件,遍历小文件进行map记录。小根堆。

3、找出访问某网站最多的ip

问题描述:

现有海量日志数据保存在一个超大文件中,文件无法直接读入内存,求其中某天访问某个网站次数最多的那个ip。

解法:

先提取日志中某天访问某个网站的全部ip到某一个文件file。接下来就是求"求出现次数最多的ip"。

  • 前缀树:遍历file,一边建立前缀树,一边记录最大值,以及对应ip。
  • 分治法:hash划分为多个小文件,i = HASH(ip) % num。这样相同的ip必然落在同一个文件中。遍历每个小文件,用map记录,再用小顶堆筛选TOP K

4、在海量数据中找出不重复的整数

问题描述:

在2.5亿个整数中找不重复的整数,内存不足以容纳这些整数。

解法:

  • 分支法:划分小文件,用set找出不重复的整数,合并子结果。

  • 位图法:每个数有三种状态(00:没有出现过,01:出现过一次,10:出现过两次),2^32*2bi = 2^33 bit = 1GB。

5、在海量数据中判断一个数是否存在

问题描述:

给定40亿个无序unsigned int,快速判断某个数字是否在这40亿个数字中

解法:

位图法,unsigned int范围是[0, 1 << 32),则需要 1 << 32 ≈ 512MB。

遍历所有数字建立位图,可以用多线程加速,无需加锁。

unsigned int bitmap16 11. 一个unsigned int的高16位确定数组的第一维度,次11位确定数组的第二维度,最低5位确定unsigned int中那一位置为一。

6、查询最热门的查询串?

解法

  • 划分小文件,unorderded_map统计小文件单词出现次数,然后小顶堆求topK
  • 前缀树+小顶堆

7、统计不同电话号码的个数

一个电话号码11位,可以用一个unsigned long long记录。问题转化为求不重复的整数的个数。

  • set
  • 位图

8、求5亿个数中的中位数

解法:

  • (内存能容纳全部数字的情况下)双堆法:一个最大堆,一个最小堆
  • 分支法:顺序读取5亿个数字,按照二进制的最高位是否为1划分为两部分。然后按照二进制的次高位继续划分。

9、如何按照query的频次排序

如果重复度较大,可以选择unordered_map

否则,内存则无法承受,先hash划分为小文件,记录频次,再对小文件频次排序,之后再归并排序。

10、Top K

堆

相关推荐
nice_lcj5206 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
nice_lcj52011 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
Yuzhiyuxia13 小时前
【AI Agent面试系列】上下文管理1
人工智能·面试·职场和发展
CoderYanger14 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
Rain的Java大神之路16 小时前
公交App上“还有2站,约5分钟”怎么实现?90%的人答错这道大厂面试题:GPS漂移、ETA不准、10万QPS热点读全拆透(附完整代码)
java·后端·面试
利威尔xu17 小时前
2026-11-05-Go内存管理面试
面试·golang
aZhe的全栈知识分享1 天前
AI 还原 Figma 效果总达不到预期?先别急着让它写代码
前端·后端·面试
Fuyo_11191 天前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
IT规划师1 天前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
ZhengEnCi2 天前
工科读研真的能抗学历贬值吗:研究生 vs 本科生的真实差距与选型判断
面试