大数据处理面试题

针对求多个数据中出现最多的Top(K)

数据重复率高

首先看看数据重复率,若重复率很高,可以直接在内存中将数据存进HashMap,然后利用最大堆求出出现次数最多的K个数据。

数据重复率低

化大为小,hash分割文件

将大文件用hash划分为多个小文件,如果小文件还超出了所需内存怎么办?没事,再对其进行hash,将其分为更多的小文件。如果多次hash文件大小仍然超出内存,就不用管它了,因为这说明那个文件内的数组重复率非常高。

分而治之,hash统计频率

分别对每个小文件用hashtable统计数据频率。

合并结果,堆排序

用最大堆对其排序。


针对大量数据排序

化大为小

将大文件直接分割为多个小文件。

分而治之

分别对小文件进行内排序。

合并结果

采用败者树进行多路合并。
若是对频率排序,还是得先用hash分割,再统计频率,视统计结果确定对其直接排序或者外排序。


找出两个大文件中相同的数据

化大为小

用相同的hash函数分别对这两个文件进行hash。编号为a1,a2,a3……和b1,b2,b3……

分而治之

分别对对应的小文件进行hash查找。


大量数据查重,过滤

bitmap

一个文件中查找在另一个文件中没有出现过的数:
在数据位数较小,如32位整型情况下,可以采用bitmap,将整型所有数映射为bitmap上对应的位。
一个文件中查找没有重复的数:
使用2bitmap,00代表没有出现过,01代表出现过一次,10代表重复多次。

布隆过滤器

数据位数较大,bitmap无法存储,采用布隆过滤器。利用多个hash函数映射到多个bitmap上。

你可能感兴趣的:(面试)