您的位置:首页 > 职场人生

海量数据处理面试题-①笔记

2015-01-19 15:15 211 查看
参考文章:点击打开链接

有些文章很好,有时看过去还怕转头给忘了,于是也记点笔记,加深印象。

海量数据处理就是基于海量数据上的存储、处理、操作。这类数据因为数据量太大,要么无法在短时间内处理,要么无法一次性装入内存。

针对时间,我们可以采用算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/Trie树,针对空间,大化小,把规模大的化为规模小的。

所谓的单机及集群问题,单机就是处理装载数据的机器有限,需要考虑CPU,内存,硬盘之间的数据交互。而集群,就是机器有很多台,对于大数据能进行分布式处理,Hadoop集群进行并行计算,更多的考虑节点和节点之间的交互。

处理海量数据问题,可从以下6点进行:1、分而治之/hash映射+hash统计+堆/快速/归并排序;2、双层桶划分;3、Bloom filter/Bitmap;4、Trie树/数据库/倒排索引;5、外排序;6、分布式处理(Hadoop/Mapreduce)。

第一部分 从set/map谈到hashtable/hash_map/hash_set

set/map/multiset/multimap都内含一个RB-tree,而hash_set/hash_multiset/hash_multimap都内含一个hashtable。

STL容器分序列式容器和关联式容器两种。所谓关联式容器,类似关联式数据库,每笔数据或每个元素都有一个键值(key)和一个实值(value),即所谓的Key-Value(键-值对)。当元素被插入关联式容器中,容器内部结构(RB-tree/hashtable)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。

set/map/multiset/mutimap

set,同map一样,所有元素都会根据元素的键值自动被排序,set/map两者的所有操作,都会转而调用RB-tree的操作行为,不过两者都不允许两个元素有相同的键值。

不同的是:map所有元素都是pair,同时拥有实值(value)和键值(key)。而set元素的键值就是实值,实值就是键值。

multiset/mutimap,他们的特性及用法和set/map完全相同,唯一的差别就在于他们允许键值重复,即所有的插入操作都基于RB-tree的inset_equal()。

hash_set/hash_map/hash_multiset/hash_multimap

hash_set/hash_map的一切操作都是基于hashtable之上。不同的是,hash_set同set一样,同时拥有实值和键值,两者相同。而hash_map和map一样,每个元素同时拥有一个实值(value)和一个键值(key),所以其使用方式,和上面的map基本相同。但由于hash_set/hash_map都是基于hashtable之上,所以不具备自动排序的功能(hashtable没有自动排序的功能)。

什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基于hashtable之上,所以不含有自动排序的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: