常见的海量数据处理、操作的题目:

1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
2.有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。
3.有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。
4.海量日志数据,提取出某日访问百度次数最多的那个IP。
5.在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。

6.海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。
7.怎么在海量数据中找出重复次数最多的一个?
8.上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。
9.1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?
10.一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。

11.一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,问最优解。
12. 100w个数中找出最大的100个数。
13.寻找热门查询:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复读比较高,虽然总数是1千万,但是如果去除重复和,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1) 请描述你解决这个问题的思路;
(2) 请给出主要的处理流程,算法,以及算法的复杂度。

解决海量数据问题的难点

1.处理时间长:如何设计优化?
2.空间不足:海量数据问题通常不能用直观的办法去解决, 怎么大而化小、分而治之?怎么样存储能又省又快?

针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小,分而治之(hash映射),你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。(July博客)

解决海量数据问题的主要思想

1.分治。先划分为小,再快速处理,最后合并。

  • 数据(文件)拆分:通过取模运算,将大数据(文件)拆分为若干个小数据(文件)。文件的拆分可能不是简单的几刀切,有可能是对所有数据根据某个依据的映射划分,这类似于桶的思想。
  • 适合的数据结构: 常用来解决海量数据问题的数据结构有,Bloom filter/Hash表/bitmap/堆/倒排索引/trie字典树。
  • 巧妙的算法:基于数据结构的算法。
  • 数据归并:将各小数据的结果归并起来。

解决海量数据问题的典型方法

1. 分而治之/hash映射 + hash统计 + 堆/快速/归并排序;就是先映射,而后统计,最后排序:

  • 分而治之/hash映射:针对数据太大,内存受限,只能是:把大文件化成(取模映射)小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决
  • hash_map统计:当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。
  • 堆/快速排序:统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。

2. 双层桶划分

双层桶划分—-其实本质上还是分而治之的思想,重在“分”的技巧上!
适用范围:第k大,中位数,不重复或重复的数字
基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子。

3. Bloom filter/Bitmap;

适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集
基本原理及要点:
对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。
还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。

4. Trie树/数据库/倒排索引;

适用范围:数据量大,重复多,但是数据种类小可以放入内存
基本原理及要点:实现方式,节点孩子的表示方式
扩展:压缩实现。
5. 外排序;

适用范围:大数据的排序,去重
基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树
6. 分布式处理之Hadoop/Mapreduce。

MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。但如果你要我再通俗点介绍,那么,说白了,Mapreduce的原理就是一个归并排序。

适用范围:数据量大,但是数据种类小可以放入内存
基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

下面详细介绍主要的几种方法,然后再针对上面的问题作出解答。

一 Bit map
Bitmap应该是最容易理解的一种实现,学过操作系统的同学都不会太陌生。就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0(如下图:)

然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作 p+(i/8)|(0×01<<(i%8)) 当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending),因为是从零开始的,所以要把第五位置为一(如下图):

然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:

然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。

二 Hash算法

Hash可以通过散列函数将任意长度的输入变成固定长度的输出,也可以将不同的输入映射成为相同的相同的输出,而且这些输出范围也是可控制的,所以起到了很好的压缩映射和等价映射功能。

本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3655815.html,如需转载请自行联系原作者

海量数据处理相关面试问题相关推荐

  1. 海量数据处理相关算法及数据结构【转】

    积淀 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储.处理.操作.何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存. 那解决 ...

  2. 转:6.1海量数据处理

    本文转自看云,原文地址请移步:https://www.kancloud.cn/kancloud/the-art-of-programming/41608 偶然闲游,偶遇某一站点,发现这里写的关于海量数 ...

  3. 面试中海量数据处理总结

    教你如何迅速秒杀掉:99%的海量数据处理面试题 前言 一般而言,标题含有"秒杀","99%","史上最全/最强"等词汇的往往都脱不了哗众取宠 ...

  4. 程序员面试常见海量数据处理问题

    前言 一般而言,标题含有"秒杀","99%","史上最全/最强"等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收 ...

  5. 十八道海量数据处理面试题与相关知识讲解

    转载自:http://blog.sina.com.cn/s/blog_6002b97001014mu1.html 第一部分.十五道海量数据处理面试题 1. 给定a.b两个文件,各存放50亿个url,每 ...

  6. 面试加分项,10道海量数据处理,你会几道?

    关注"java后端技术全栈" 回复"000"获取优质面试资料 十道海量数据处理面试题 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 此题,在我之前的 ...

  7. 海量数据处理的 Top K相关问题

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top ...

  8. 海量数据处理算法 各种STL容器使用的数据结构剖析

    教你如何迅速秒杀掉:99%的海量数据处理面试题 转载于:结构之法算法之道blog 前言 一般而言,标题含有"秒杀","99%","史上最全/最强&qu ...

  9. 电商项目相关面试问题及答案

    请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |–系统背景及系统概述 |–系统包括的业务模块及主业务流程 |–责任模块 [回答示例] 第一个方面:系统背景及系统概述 优购时尚商城是香 ...

最新文章

  1. RecyclerView smoothScrollToPosition 和 scrollToPosition 的区别
  2. 在腾讯云上创建您的SQL Cluster(3)
  3. 一文读懂5G:颠覆生活资费天价?
  4. NR 5G MAC媒体接入控制
  5. 虚拟机和java虚拟机
  6. 在VC中使用ADO开发数据库应用程序
  7. 《设计模式解析(第2版•修订版)》—第2章 2.4节类图
  8. linux 单用户模式 挂载u盘_(原创)Linux文件系统只读Read-only file system的快速解决方法...
  9. stat,查看文件属性
  10. 2d shader unity 阴影_Shader从入门到跑路(11):多Pass渲染
  11. java中的并发是什么意思_java中的并发是什么
  12. 黑马程序员_银行调度系统
  13. 用java代码检查sql语法错误_您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在第1行'?'附近使用正确的语法...
  14. matlab乘法和除法
  15. 技嘉服务器主板型号,服务器配件 全面认识技嘉服务器主板
  16. 量化选股——基于动量因子的行业风格轮动策略(第2部分—策略回测)
  17. WinInet库之Http通信
  18. ROS订阅tf并转换坐标
  19. 豆瓣电影R语言爬虫和数据分析.
  20. pomelo mysql_pomelo链接mysql

热门文章

  1. SAP变式配置的完整指南(中英文双语版)
  2. SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
  3. 如何在实际中计划和执行一个机器学习和深度学习项目
  4. 人脸识别技术在支付场景的机遇与挑战
  5. 「技术综述」基于弱监督深度学习的图像分割方法综述
  6. 从产品经理向人工智能产品经理进阶 | 机器学习必备知识
  7. 卷积神经的这些坑你都踩过吗?
  8. AI芯片进入新阶段 哪种企业能胜出?
  9. latex绘制表格table
  10. IBM 揭晓全球第一项 2纳米芯片技术,为半导体领域实现重大突破