海量数据的常见处理方法:
Hash方法:
解决 哈希冲突的方法:
Bit-map方法:
布隆过滤器:
倒排索引
外排序法:
Trie树
Trie树
堆:
桶方法:
桶排序及相关应用题目
MapReduce方法:
Top K问题:
理论上的常见方法:
实际中常见场景的解决方案:
利用MapReduce框架:
常见的一些Top K 问题:
具体解决方案请看解法
https://blog.csdn.net/hitxueliang/article/details/52153476 BAT相关面试题
《程序员面试经典指南》---左神
问题1 :只用2GB内存在20亿个整数中找到出现次数最多的数字
解法:用哈希函数将大文件分成几个小文件 -----分别找到出现次数最多的数----最后进行汇总
问题2: 40亿个非负整数中找到没出现的数字
解法:
1 内存限制1GB : 直接使用bit Map 遍历整数 将下标对应值置 0/ 1 最终再遍历bitArr 若存在值为0 的 刚好就是没出现过的数字
2 内存限制10MB:
1) 第一次遍历 长度为64的整型数组 统计每个区间内数字的量(理论上应该为 M)
2) 进行1)之后 肯定存在区间k 计数小于应有数量M 则进行第二次遍历
申请长度为 M 的bit Map数组---再遍历所有数字 但只关注落在此区间内的数字num
bitArr [num-M*k] 置为1 最终存在为0 的值就是 第i个位置 值为 M*k +i .
哈希表:
bit Map
两次遍历:
问题 3:找到100亿个URL中重复的URL 以及搜索词汇的top k 问题:
解法:
1 找重复问题 :哈希函数进行分流 ---哈希表词频统计
2 top k :哈希函数分流--分治法--哈希表词频统计--小根堆(top k大---外排序
补充问题:
哈希分流到
问题4:40亿个非负整数中找到出现两次的数和所有数的中位数
解法 :
1 首次使用bitArr的两位来表示一个数字的词频 00 --->01 10 11 最终遍历查找10的即可
2 中位数:
ps: 1GB 10亿 1MB 百万 1k 千 2进制的计算~
1GB=1024MB 1MB=1024=2(10) KB 1KB=1024Byte
补充问题:
一致性哈希算法的原理: