文档详情

六招秒杀99%海量数据处理面试题.PDF

发布:2017-05-30约1.59万字共11页下载文档
文本预览下载声明
六招秒杀99%海量数据处理面试题 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来 讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对 这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐 述相关问题。最后,有一点必须强调的是,全文行文是基于面试题的分析基础之上的,具体实践过程中, 还是得具体情况具体分析,且场景也远比本文所述的任何一种情况复杂得多。 OK,若有任何问题,欢迎随时不吝赐教。谢谢。 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导 致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloomfilter/Hash/bit-map/ 堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说 规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘 的数据交互),而集群,机器有多辆,适合分布式处理,并行计算(更多考虑节点和节点间的数据交互)。 再者,通过本blog 内的有关海量数据处理的文章:BigDataProcessing,我们已经大致知道,处理海量数 据问题,无非就是: /hash +hash + / /  分而治之 映射 统计 堆快速归并排序;  双层桶划分  Bloomfilter/Bitmap;  Trie树/数据库/倒排索引;  外排序;  分布式处理之Hadoop/Mapreduce。 下面,本文第一部分、从set/map谈到hashtable/hash_map/hash_set,简要介绍下 set/map/multiset/multimap,及hash_set/hash_map/hash_multiset/hash_multimap之区别(万丈高楼 ) 6 平地起,基础最重要 ,而本文第二部分,则针对上述那 种方法模式结合对应的海量数据处理面试题分别 具体阐述。 第一部分、从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为 基础准备。一般来说,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。 所谓关联式容器,类似关联式数据库,每笔数据或每个元素都有一个键值(key)和一个实值(value)。当元素 被插入到关联式容器中时,容器内部结构(RB-tree/hashtable)便依照其键值大小,以某种特定规则将这个元 素放置于适当位置。 set/map/multiset/multimap set,同map一样,所有元素都会根据元素的键值自动被排序,因为set/map两者的所有各种操作,都只是 转而调用RB-tree 的操作行为,不过,值得注意的是,两者都不允许两个元素有相同的键值。 set map
显示全部
相似文档