文章目录

  • 前引
  • 海量数据相关面试问题(二):海量数据热点数据/出现频度/TOP-K问题(TOP-K Hash映射分而治之 / Hashmap统计频度 / 堆排序决出排名)
    • 1、通用数据频度/热点数据 解决办法
      • 1、分而治之/Hash映射
      • 2、Hashmap 统计频度 / 最小堆 进行数据排名
    • 2、海量数据数据频度相关面试题
      • 1、(360公司 2012) 100万条记录的文本文件,取出重复数最多的前10条。
      • 2、(360公司 2012) 100亿条记录的文本文件,取出重复数最多的前10条。
      • 3、(腾讯公司 2011) 服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号。
      • 4、(腾讯公司 2015 牛客网) 搜索引擎的日志要记录所有查询串,有一千万条查询,不重复的不超过三百万,要统计最热门的10条查询串,内存<1G,字符串长 0-255。
    • 3、浅浅总结一下

前引


刚刚大概在15分钟前才发了我们的海量数据面试问题(一)数据排序问题
然后主要讲了讲我们的非常常用的好帮手Bitmap还有面试常考的多路归并算法 并且在上一篇我们也对其有我们的代码实现

在上一篇的基础上 我们其实已经开始对海量数据的处理已经有点感觉了
那么这一篇的学习后 我相信我们将对 (如何找到频度最靠前的数据/重叠数最多的数据/出现最多次的数据)这类相同类型 换汤不换药的问题 就明白解决思路了

那我们下面还是走着吧


海量数据相关面试问题(二):海量数据热点数据/出现频度/TOP-K问题(TOP-K Hash映射分而治之 / Hashmap统计频度 / 堆排序决出排名)


1、通用数据频度/热点数据 解决办法


1、分而治之/Hash映射


至于分而治之 我相信我们也在熟悉不过了
尤其是在归并中 我们是大量的采用这个思想

对于排序 我们可以不用Hash映射 我们直接以物理内存存储形式 将大文件分成小文件即可

但是对于一些有频度要求 或者要求查看数据重复程度的 Hash映射则是必要的
什么是Hash映射 作用是什么
对于海量数据 采用Hash映射 有效的将数据均匀分散在各个数据块中 而且映射后 相同的数据是不会被放在不同的文件块中 因为以相同的key只会被分在相同的桶中 而这也是数据频度分析的大前提条件

如果相同的数据被分在了不同的文件中 那么怎么一次统计在不同文件中的相同数据中的频度呢


分而治之 和 Hash映射 也多用于 内存受限 数据不能一次性在内存存储完的场景
而且对于Hash映射 也可以将相同的数据以及类似的数据合理的分布在一块区域 方便我们进行后面的操作


2、Hashmap 统计频度 / 最小堆 进行数据排名


对于统计频度 我们一般采用哈希表
如果面试算法题做的多的朋友 我相信经常会做到有关于频度的问题 而那个时候一般存储频度的 我们也都是用的Hashmap来存储的

对于小文件块 我们就有足够的内存来存储这些数据了
我们就可以完完全全遍历一遍所有的数据 出现的数据 value则加上1 然后在O(n)的时间内 我们就把当前数据块的所有频度给统计了一遍了

当然 例如我们要求前10频度的数据 我们就在每个数据块做完统计后 再把所有的数据频度丢入最小堆(这是后面要讲的)然后取出来当前数据块前10个频度最高的数据 放入所有数据块都共用的最小堆

举个例子 有10亿数据 要求求出现次数最多的5个数据
我们每个就简单举个例子 就取100个数据块 每个数据块存1000万的数据即可 然后开始挨个挨个数据块遍历 1000万数据在遍历的时候就放入Hashmap统计频度 统计完后 再把这1000万个数据的频度统计放入最小堆 此时内存最多就需要2000万的数据就足够完成工作了(其实不止 Hashmap一般内存占用至少是所需内存的两倍-三倍左右)

然后我们再取出来最大的五个频度的数据 放入公有最小堆 那么等这10个数据块完成相同的工作后 我们的公用最小堆里面就有50个数据 此时再取出来5个 就能完成任务了


2、海量数据数据频度相关面试题


下面就放一下真题吧 真题也是我从其他博客里面找到的
为了表达敬意和感谢 还是贴一下链接吧
CSDN : 笔试和面试中的海量数据问题 博主:Beyond_2016


这篇的结束 就以这四道面试题来结束吧
要求肯定是 1、讲出实现思路 2、时间复杂度的求解

那我们也就边做边思考 结合上面的问题
也就把这种类型的面试题给速通了


1、(360公司 2012) 100万条记录的文本文件,取出重复数最多的前10条。


首先我们可以看看 100万条的数据 其实也不算多 如果我们的内存可以装的下的话 时间条件比较严苛的话 那当然我们不妨就直接放入内存计算

unordered_map来统计频度 O(n)即可统计完成
priority_queue(heap)来做排序 O(n)建堆 10 * O(lgn)完成取值 内存中占有200万条数据

这道题分析完了 我们看看下面的 逐步加深


2、(360公司 2012) 100亿条记录的文本文件,取出重复数最多的前10条。


显然这道题里面 100亿的数据 怎么找得到内存存放这么大的数据
我们此时就可以按照上面的思路来解决问题了

1、分而治之 采用Hash映射 我们不妨采用mod取余来决定文件存放 如果mod取10000 则可以使100亿条数据变为100万 则又回到了上面的解答了
相同的数据和数据差距不大的文本文件全被分到了相同的文件块中

2、Hashmap统计数据出现个数
3、最小堆来决出热点数据

套路和上面就是变成一样的了 这部分就省略了


3、(腾讯公司 2011) 服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号。


先看看题目 内存1G 2G文件
QQ号5-10位数 那我们可以把其当作数据

这个题目 刚开始我想了想 bitmap 因为有数字类型的 但发现显然不行 因为是求频度
而且这道题要求我们最快找出 那说明我们要充分利用内存

那我们不妨 把每个文件分成300M 因为unordered_map一般占用内存至少是两倍多 再加上我们的最小堆需要存储这些文件
2G文件可以分成6份 每份350MB左右 然后采用hash映射 映射到8个数据块中 然后又回到了我们熟悉的节奏中

1、Hashmap统计频度
2、最小堆决出最多频度/最热数据


4、(腾讯公司 2015 牛客网) 搜索引擎的日志要记录所有查询串,有一千万条查询,不重复的不超过三百万,要统计最热门的10条查询串,内存<1G,字符串长 0-255。


最热门数据 其实还是老套路
字符串长0-255 也就是说明不定长 那么更需要Hash映射了
Hash映射 把不定长的Key 通过映射函数 而使数据归为相同长度的桶中

1、Hash映射 映射到几分文件可以思考一下 但可以大概在300MB左右 mod值取值
2、unordered_map统计频度
3、最小堆决出最热数据 结束


3、浅浅总结一下


分而治之/Hash映射
Hashmap统计频度
最小堆 来决出最多出现/最热数据
这已经成为 频度相关问题的 三大利器了

套路也就是这个套路 但我们还是要按照题目的不同 自己也要灵活的选择恰当的数据结构 去思考怎么去存储

还是那句话 对这些东西理解越深刻 在面试场景下 才有可能临危不乱 冷静思考才能答出问题来
上一篇中 我已经以源码的形式来写出来了 所以我相信我在之后这类问题中 自己肯定是能够应付的

后面还有一个对于 怎么挑选出数据重复的类型
现在也10:30了 我也打算休息了 明天上午再来看了

那这篇就写到这里 下篇再见啦 ε=ε=ε=(~ ̄▽ ̄)~

海量数据相关面试问题(二):海量数据热点数据/出现频度/TOP-K问题(TOP-K 分而治之/Hash映射 / Hashmap统计频度 / 堆排序决出排名)相关推荐

  1. 海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序

    1.从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备.一般来说,STL ...

  2. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  3. 海量数据处理相关面试问题

    常见的海量数据处理.操作的题目: 1.给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 2.有10个文件,每个文件1G,每个文件的每一 ...

  4. [笔试题目] 简单总结笔试和面试中的海量数据问题

    最近在笔试和面试中遇到了很多关于海量数据的问题,在此进行简单的记录,写一篇方便自己下次学习的处理海量数据的文章及在线笔记,同时也希望对你有所帮助.当然,海量数据最出名的还是七月July,但这里我是想直 ...

  5. 笔试和面试中的海量数据问题

    一. 原题重现 2015年9月27日百度笔试论述题二选一,其中第一道是关于MapReduce相关的:第二道是搜索引擎中url去重,海量数据集url如何在爬取过程中避免重复爬取过的url.       ...

  6. 简单总结笔试和面试中的海量数据问题

    最近在笔试和面试中遇到了很多关于海量数据的问题,在此进行简单的记录,写一篇方便自己下次学习的处理海量数据的文章及在线笔记,同时也希望对你有所帮助.当然,海量数据最出名的还是七月July,但这里我是想直 ...

  7. 【笔试面试】简单总结笔试和面试中的海量数据问题

    最近在笔试和面试中遇到了很多关于海量数据的问题,在此进行简单的记录,写一篇方便自己下次学习的处理海量数据的文章及在线笔记,同时也希望对你有所帮助.当然,海量数据最出名的还是七月July,但这里我是想直 ...

  8. 大数据(二)大数据相关的技术

    大数据(二)大数据相关的技术 1. 云技术 大数据常和云计算联系到一起,因为实时的大型数据集分析需要分布式处理框架来向数十.数百或甚至数万的电脑分配工作.可以说,云计算充当了工业革命时期的发动机的角色 ...

  9. 【面试 redis】【第十二篇】redis的相关面试问题【完结】

    redis的相关面试问题==完结,详情查看日记 ========================================== redis教程:http://www.redis.net.cn/t ...

最新文章

  1. Java 如何实现二维码?
  2. 解决安卓机在微信上播放视频有广告问题
  3. windows下django学习笔记(二)--HelloWorld
  4. Universal-Image-Loader(UIL)图片载入框架使用简介
  5. Python服务器开发三:Socket
  6. Web应用程序系统的多用户权限控制设计及实现-总述【1】
  7. html获取边缘元素,JQuery 获取元素到浏览器可视窗口边缘的距离
  8. Django重新整理3
  9. H264--NAL层的处理--3
  10. mac 安装appium
  11. windows是第几代计算机,第几代cpu不支持win7?全面分析第几代cpu不支持win7
  12. shawn的博客开通啦
  13. 数据分析模型篇—安索夫矩阵
  14. PostgreSQL on Linux 最佳部署手册
  15. 网络篇 OSPF的LSDB过载保护-52
  16. arcgis把jpg转成栅格图像_]在ArcGIS中配准(TIF、JPEG)栅格图像并矢量化(转)
  17. 关于节日文化的HTML网页设计-----二十四节气
  18. 缺陷跟踪管理工具-Mantis BugFree Bugzilla
  19. 函数调用计算最高分及对应的学生学号
  20. 11. Nginx HTTPS

热门文章

  1. 6 生僻字_蔬菜中的生僻字你知道哪些?
  2. Unity 支持 3ds max 2021 物理材质吗?(FBX 出口)是否应该使用BPR材质?
  3. 如何在小内存主机上搭建博客
  4. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法
  5. 特征值与特征向量、特征矩阵
  6. socket通信简介(概念、函数、原理)
  7. 二叉树 html模板,用 DOM 与 CSS 展示二叉树
  8. 各种SQL子查询实例
  9. 黑马程序员—GUI(菜单)小例子
  10. C++元编程——CNN进行Minist手写数字识别