海量数据处理面试题

    本文主要整理一些常见的海量数据处理面试题。

1. 海量id,找出出现次数最多的id

情况1:

    直接hash table统计,hash table包含N个(id, count)对,遍历求最值。

情况2:

    内存受限,海量id通过hash函数(id看做整数,hash函数取%1000)映射到1000个文件。每个文件使用hash table统计,产生1000个最值,遍历这1000个数求最值。

2. 海量id,找出出现次数最多的k个id

情况1:

    直接hash table统计,使用小根堆求top k。复杂度为O(n) + O(nlogk)。

情况2:

    内存受限,海量id通过hash函数映射到1000个文件。每个文件使用hash table统计 + 小根堆产生一个top k,共1000个top k,归并排序1000个top k,产生最终的top k。

3. bitmap        (2^32 约等于43亿)

Q1:在2.5亿个整数中找出不重复的整数

    采用2-bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示出现多次,11无意义)。遍历这2.5亿个整数,查看bitmap中相对应位,如果是00变01,01变10,10保持不变。遍历结束,查看bitmap,对应位是01的整数就是不重复的。

Q2:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    使用bitmap。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应的bit是否为1。为1表示存在,为0表示不存在。

4. 1000亿个数,无序,找出它们的中位数

    第一次扫描把这些数划分到多个区域,统计每个区域的整数个数,找到中位数所在区域。第二次扫描该区域,统计每个数出现的次数,找到中位数。(如果数据量不大,可以使用快排的partition,或者直接map统计不同数出现的次数)

 

reference:

教你如何迅速秒杀掉:99%的海量数据处理面试题

posted @ 2015-08-13 20:56  Sawyer Ford  阅读(334)  评论(0编辑  收藏  举报