⼤数据的⼀些⾯试题 ⼤数据的⼀些⾯试题 五、双层桶划分—-其实本质上就是【分⽽治之】的思想,重在"分"的技巧上! 适⽤范围:第k⼤,中位数,不重复或重复的数字 基本原理及要点:因为元素范围很⼤,不能利⽤直接寻址表,所以通过多次划分,逐步确定范围,然后最后在⼀个可以接受的范围内进⾏。 可以通过多次缩⼩,双层只是⼀个例⼦。 扩展: 问题实例: 1).2.5亿个整数中找出不重复的整数的个数,内存空间不⾜以容纳这2.5亿个整数。 有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(⽐如⽤单个⽂件代表⼀个区域),然后将数据分离到 不同的区域,然后不同的区域在利⽤bitmap就可以直接解决了。也就是说只要有⾜够的磁盘空间,就可以很⽅便的解决。 2).5亿个int找它们的中位数。 这个例⼦⽐上⾯那个更明显。⾸先我们 将int划分为2^16个区域,然后读取数据统计落到各个区域⾥的数的个数,之后我们根据统计结果就 可以判断中位数落到那个区域,同时知道这个区域中的第 ⼏⼤数刚好是中位数。然后第⼆次扫描我们只统计落在这个区域中的那些数就可以 了。 实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受 的程度。即可以先将int64分成2^24个区域,然后确定区域 的第⼏⼤数,在将该区域分成2^20个⼦区域,然后确定是⼦区域的第⼏⼤数,然后⼦区域⾥ 的数的个数只有2^20,就可以直接利⽤direct addr table进⾏统计了。 六、数据库索引 适⽤范围:⼤数据量的增删改查 基本原理及要点:利⽤数据的设计实现⽅法,对海量数据的增删改查进⾏处理。 七、倒排索引(Inverted index) 适⽤范围:搜索引擎,关键字查询 基本原理及要点:为何叫倒排索引?⼀种索引⽅法,被⽤来存储在全⽂搜索下某个单词在⼀个⽂档或者⼀组⽂档中的存储位置的映射。 以英⽂为例,下⾯是要被索引的⽂本: T0 = "it is what it is" T1 = "what is it" T2 = "it is a banana" 我们就能得到下⾯的反向⽂件索引: "a": {2} "banana": {2} "is": {0, 1, 2} "it": {0, 1, 2} "what": {0, 1} 检索的条件"what","is"和"it"将对应集合的交集。 正向索引开发出来⽤来存储每个⽂档的单词的列表。正向索引的查询往往满⾜每个⽂档有序 频繁的全⽂查询和每个单词在校验⽂档中的验证 这样的查询。在正向索引中,⽂档占据了中⼼的位置,每个⽂档指向了⼀个它所包含的索引项的序列。也就是说⽂档 指向了它包含的那些单 词,⽽反向索引则是单词指向了包含它的⽂档,很容易看到这个反向的关系。 扩展: 问题实例:⽂档检索系统,查询那些⽂件包含了某单词,⽐如常见的学术论⽂的关键字搜索。 ⼋、外排序 适⽤范围:⼤数据的排序,去重 基本原理及要点:外排序的归并⽅法,置换选择败者树原理,最优归并树 扩展: 问题实例: 1).有⼀个1G⼤⼩的⼀个⽂件,⾥⾯每⼀⾏是⼀个词,词的⼤⼩不超过16个字节,内存限制⼤⼩是1M。返回频数最⾼的100个词。 这个数据具有很明显的特点,词的⼤⼩为16个字节,但是内存只有1m做hash有些不够,所以可以⽤来排序。内存可以当输⼊缓冲区使⽤。 九、trie树 适⽤范围:数据量⼤,重复多,但是数据种类⼩可以放⼊内存 基本原理及要点:实现⽅式,节点孩⼦的表⽰⽅式 扩展:压缩实现。 问题实例: 1).有10个⽂件,每个⽂件1G,每个⽂件的每⼀⾏都存放的是⽤户的query,每个⽂件的query都可能重复。要你按照query的频度排序。 2).1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现? 3).寻找热门查询:查询串的重复度⽐较⾼,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。 ⼗、分布式处理 mapreduce 适⽤范围:数据量⼤,但是数据种类⼩可以放⼊内存 基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。 扩展: 问题实例: 1).The canonical example application of MapReduce is a process to count the appearances of each different word in a set of documents: 2).海量数据分布在100台电脑中,想个办法⾼效统计出这批数据的TOP10。 3).⼀共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)? 经典问题分析 上千万or亿 【大数据面试题解析】 一、分而治之思想与双层桶划分 在大数据处理中,面对大规模数据,无法直接使用直接寻址表时,我们可以采用分而治之的策略。双层桶划分是一种典型的例子,它适用于寻找第k大元素、计算中位数以及处理不重复或重复数字的问题。通过多轮划分,逐渐缩小查找范围,最终在可接受的范围内进行处理。例如,若要在2.5亿个整数中找出不重复的整数数量,可以将所有整数分为2^8个区域,利用bitmap进行存储。对于中位数问题,可以先将数据划分为2^16个区域,然后逐级确定中位数所在的区域。 二、数据库索引 数据库索引是处理大量数据增删改查的关键技术。通过对数据结构和算法的设计,索引加速了对海量数据的访问。索引使得数据的查找、更新和删除更加高效。 三、倒排索引 倒排索引是搜索引擎和关键词查询的核心,用于存储某个单词在一组文档中的位置映射。例如,给定一组文本,倒排索引能快速找到包含特定单词的文档。与正向索引(每个文档指向其包含的单词列表)相比,倒排索引是单词指向包含它的文档。 四、外排序 外排序用于处理大数据的排序和去重问题,常用方法包括归并排序和基于置换选择的败者树。通过多阶段处理,内存受限的情况下,也能完成大规模数据的排序。 五、Trie树 Trie树(字典树或前缀树)适用于数据量大、重复多但数据种类少的情况。Trie树的节点表示方式和实现方式是其关键,可用于高效地存储和查找字符串。在处理重复字符串时,如用户查询频率排序,Trie树能有效减少空间占用。 六、分布式处理与MapReduce MapReduce是处理大数据的分布式计算框架,它将数据分割,分配给多台机器处理,然后进行结果的归约。经典的MapReduce应用包括单词计数,以及在海量数据中找到Top N元素。例如,要统计100台电脑上的数据Top10,MapReduce可以有效地解决这个问题。 综合这些知识点,面试时可能会遇到的具体问题包括:在内存有限的情况下,如何统计大量数据的不重复元素、计算中位数、建立索引、实现倒排索引、外排序处理大文件、用Trie树去除重复字符串、以及利用MapReduce进行分布式计算等。这些问题都需要结合具体场景,灵活运用上述技术进行解答。
- 粉丝: 195
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助