大数据big data相关面试

来源:互联网 发布:windows资源监控工具 编辑:程序博客网 时间:2024/04/30 12:26

1. 海量日志数据,提取出某日访问百度次数最多的那个IP

IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址,如果使用HashMap,则使用的内存((4+4)*4G)远远超出内存大小。
解决办法,用IP的高8位进行划分,将ip划分到2^8=256个文件当中,并对每个文件(区间)进行HashMap并记录访问次数最高的ip。然后就可以计算出所有IP地址中访问次数最大的IP了。

2. 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

(1) HashMap(N) / MergeSort(N*logN) 
目的是计算所有query出现的次数。因为题目要求的内存容量可以容纳3million queries,所以采用HashMap是最好的选择
(2)PriorityQueue(N*log10)
在一个整形数组中,找Top K,经典算法,不多述。

3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

题目和海量日志中提取访问次数最多的ip一样思路。将每一行的词对2000进行取模,将大文件划分成2000个小文件,每个文件含有不同词的大小总和不超过500K,这样可以在1M的内存中做HashMap,然后PriorityQueue统计出该分段中频率最高的100个。K ways merge sort找到所有文件中频率最高的100个。K < 2^(20 - 11)

4. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序

题目和海量日志中提取访问次数最多的ip一样思路。只是需要顺序读取这10个文件,然后对每一条query进行Hash后在对10取模。

5.  给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

将50亿个url进行hash然后对128取模,这样将a文件分为128个小文件,同理将b文件也分为128个小文件。这样编号不对应的文件中不含有相同url。

6. 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数

方法1. 类似第一题分而治之
方法2. 采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。

7. 5亿个int找它们的中位数

按照高8位将5亿个int分在2^8个文件当中,并统计每个文件含有数字的个数。然后就可以知道中位数在第几个文件中,并知道在该文件中的位置。