十道海量数据处理面试题与十个方法大总结:http://blog.csdn.net/v_JULY_v/article/details/6279498
1.哈希法
2.Bit-map法
3.Bloom filter法
4.数据库优化法
5.倒排索引法
6.外排序法
7.Trie树
8.堆
9.双层桶法
10.MapReduce法
经典实例
top K问题
1.提取访问最多的IP
分治+hash---用hash映射(即对10000取模)得到10000个小文件,在小文件中用hash-map或堆排序
2.统计搜索引擎最热门的10个查询串
用O(N)完成hash表统计,再借助堆,维护一个K小根堆为N*O(logK)
用Trie树遍历所有查询串,没有出现为0,再用10个元素的最小根堆
3.1G文件,内存限制1M,返回频数最高的100个词
用hash映射hash(x)%5000对1G进行分割,直到小文件小于1M,再对每个小文件用hash_map或堆排序
4.10个文件,每个1G,每一行为用户的query,可能重复,对query的频度排序
1)按照hash(query%10)hash映射将query写入10个文件,再载入2G的内存中分别对每个文件里的query排序,最后归并排序10个文件
2)可能重复次数比较多,直接采用hash_map或堆来排序
3)做完hash映射后,交给多个文件来处理,采用分布式架构来处理(MapReduce),最后合并
5.a,b两个文件各存放50亿个url,内存4G,找到a,b共同的url
用hash映射(hash(url%1000))分别分割a,b
6.在2.5亿个整数中找出不重复的数
1)类同与题1,先分为5000个小文件,再维护一个hash_map或数组找到不重复的,再归并
2)用位图法(Bit-Map)`00为不存在,01为1个,10为多个,总共需要2^32*2位,即2^30byte(1G),进行扫描
7.
重复问题
位图法
排序问题
分治法(将大文件映射为小文件)、位图法