名人博客阅读摘要一:教你如何迅速秒杀掉:99%的海量数据处理面试题

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

1.1 STL容器分两种

序列式容器:(vector/list/deque/stack/queue/heap)。

关联式容器:又分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表),这些容器均以RB-tree完成。此外,还有第3类关联式容器,如hashtable(散列表),以及以hashtable为底层机制完成的hash_set(散列集合)/hash_map(散列映射表)/hash_multiset(散列多键集合)/hash_multimap(散列多键映射表)。也就是说,set/map/multiset/multimap都内含一个RB-tree,而hash_set/ hash_map/ hash_multiset/hash_multimap都内含一个hashtable。

什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基于hashtable之上,所以不含有自动排序功能,至于加个前缀multi_无非就是允许键值重复而已。

1.2 密匙一、分而治之/Hash映射 + Hash_map统计 + 堆/快速/归并排序

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

Hash映射将大文件分成小文件,同时保证相同的IP记录分在同一个小文件中,然后进行Hash_map统计,再排序,得到每个小文件中的Top1,最后对所有的Top1排序。

1.2.2 寻找热门查询,300万个查询字符串中统计最热门的10个查询

当内存可以完全容纳的时候,就不需要分而治之,直接运用Hash_map统计每个查询字符串出现的次数,然后求解Top10。

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

顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件;对每个小文件,采用trie树/hash_map等统计每个文件中出现的词以及相应的频率;取出出现频率最大的100个词(可以用含100个结点的最小堆)后,再把100个词及相应的频率存入文件,这样又得到了5000个文件。最后就是把这5000个文件进行归并(类似于归并排序)的过程了。

1.2.4 海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10

如果同一个元素重复出现在不同的电脑中,这个时候,你可以有两种方法:(1)遍历一遍所有数据,重新hash取摸,如此使得同一个元素只出现在单独的一台电脑中;(2)暴力求解:直接统计每台电脑中各个元素的出现次数,然后把同一个元素在不同机器中的出现次数相加,最终从所有数据中找出TOP10。

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

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

 

1.2.7 小结

分而治之的关键在于保证同样的记录被分在同一个小文件中,运用Hash映射。分解完之后就是Hash_map和排序过程,其中堆排序、外部排序和TopK排序最重要。

1.3 密匙二、双层桶划分

其实质还是在于分而治之的思想,只是多重划分,不一定局限于双层。

适用范围:第k大,中位数,不重复或重复的数字。

1.3.1 2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数

将2.5亿个整数Hash映射到若干个小文件中,然后运用bitmap即可。

1.3.2 5亿个int找它们的中位数

将5亿个int映射到若干个小文件中,统计各个小文件的大小,确定中位数位于哪个小文件中,再运用SelectK算法。

1.4 密匙三:Bloomfilter/Bitmap

对Bloom filter的专门研究见后续学习。

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

用位图/Bitmap的方法,申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

1.5 密匙四、Trie树/数据库/倒排索引

Trie树、数据库索引技术、倒排索引的专门研究见后续学习。

1.6 密匙五、外排序

外排序的专门研究见后续学习。

1.7密匙六、分布式处理之Mapreduce

Mapreduce的专门研究见后续学习。

1.8 总结

六大密钥,第一点是最重要的,后续的只是处理方法。总之对大数据处理要把握最重要的思想:分而治之。此中,Hash技术、各种容器运用、各种排序、各种索引技术是最关键的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿清陪你聊聊数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值