海量数据的常见处理方法:

海量数据处理问题

 

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

 

海量数据处理问题

海量数据处理问题

 

补充问题:

海量数据处理问题

 

 

 

 

一致性哈希算法的原理:

海量数据处理问题

一致性哈希算法具体应用场景及原理

 

相关文章:

  • 2021-04-05
  • 2022-12-23
  • 2021-05-23
  • 2021-08-07
  • 2021-07-26
  • 2022-03-01
  • 2021-11-26
  • 2021-04-22
猜你喜欢
  • 2021-10-24
  • 2022-12-23
  • 2021-06-18
相关资源
相似解决方案