再也不怕面试官问我几百亿ip相关的问题了

news2024/11/24 12:54:12

首先要明确这一类的问题都是海量那个数据类型的问题,对于海量数据我们一般采用分而治之的思路去解决,考官考察的就是你有没有处理海量数据的经验。总结几个常见的海量数据相关的面试,供参考。
在这里插入图片描述

有一个存放10GB的ip地址文件,每行一个ip地址,统计这个文件中出现次数最多的100个ip,要求机器内存是1GB

这是最经典的ip海量数据问题,面试过程中也经常会出现,对于这类问题,机器内存限制,首先想到的就是分治思想,先拆解再聚合。

思路

  1. 回答了先拆解再聚合,基本思路是有了,虽然一般不考察如何写代码,但是里面还有很多细节,面试官会进行挖掘。
  2. 拆解就是将一个大文件分割成若干小文件,分割不能随意分割,要保证相同的ip尽量落在同一个文件中。(想一想如果随意分割会遇到什么问题)
  3. 文件分割采用Hash算法,保证相同的ip落在同一个文件中
  4. 对每个小文件计算出现次数最多的100个ip,这就是转为求topK的问题了
  5. 最终再对每个文件的topK进行聚合,求出最终的topK问题。

优化

  1. 极端情况下,重复的ip特别多,可能会存在每个文件的大小会有倾斜,该如何处理?
  2. 分割成多少个文件合适?你回答的数量不要随便说,而是认真思考之后的答案,要有理论根据凸显出你的思考过程。

延展

  1. 分割成小文件,插入ip之前进行topk计算 ,其实要不要先计算,取决于ip重复的数量
  2. 文件分割,考察你对每个文件大小的计算,以及运行速度的考量。

代码

参考:https://blog.csdn.net/qq_42234461/article/details/123568886,这篇博文对ip分割统计做了详细的分析以及代码层度的性能测试。

给定 40 亿个不重复的没排过序的 unsigned int 型整数,然后再给定一个数,如何快速判断这个数是否在这 40 亿个整

思路

方法1:分治法

继续采用分治法,其它问题类似上一个ip,不再过多描述。

方法2:位图法

40 亿个不重复整数,我们用 40 亿个 bit 来表示,初始位均为 0,那么总共需要内存:4,000,000,000b≈512M。

我们读取这 40 亿个整数,将对应的 bit 设置为 1。接着读取要查询的数,查看相应位是否为 1,如果为 1 表示存在,如果为 0 表示不存在。

位图算法可以参考:https://www.cnblogs.com/54chensongxia/p/11591979.html
在这里插入图片描述

总结

在海量数字中,判断数字是否存在、判断数字是否重复的问题,要想到位图法,采用位作为单位存储数据可以大大节省空间,位图法是一种非常高效的方法。

搜索引擎会通过日志文件把用户每次检索使用的所有查询串都记录下来,每个查询串的长度不超过 255 字节。

假设目前有 1000w 个记录(这些查询串的重复度比较高,虽然总数是 1000w,但如果除去重复后,则不超过 300w 个)。请统计最热门的 10 个查询串,要求使用的内存不能超过 1G。(一个查询串的重复度越高,说明查询它的用户越多,也就越热门。)

思路

每个查询串最长为 255B,1000w 个串需要占用 约 2.55G 内存,因此,我们无法将所有字符串全部读入到内存中处理。

方法一:分治法

分治法依然是一个非常实用的方法。

划分为多个小文件,保证单个小文件中的字符串能被直接加载到内存中处理,然后求出每个文件中出现次数最多的 10 个字符串;最后通过一个小顶堆统计出所有文件中出现最多的 10 个字符串。

方法可行,但不是最好,下面介绍其他方法。

方法二:HashMap 法

虽然字符串总数比较多,但去重后不超过 300w,因此,可以考虑把所有字符串及出现次数保存在一个 HashMap 中,所占用的空间为 300w*(255+4)≈777M(其中,4表示整数占用的4个字节)。由此可见,1G 的内存空间完全够用。

思路如下:

首先,遍历字符串,若不在 map 中,直接存入 map,value 记为 1;若在 map 中,则把对应的 value 加 1,这一步时间复杂度 O(N)。

接着遍历 map,构建一个 10 个元素的小顶堆,若遍历到的字符串的出现次数大于堆顶字符串的出现次数,则进行替换,并将堆调整为小顶堆。

遍历结束后,堆中 10 个字符串就是出现次数最多的字符串。这一步时间复杂度 O(Nlog10)。

方法三:前缀树法

方法二使用了 HashMap 来统计次数,当这些字符串有大量相同前缀时,可以考虑使用前缀树来统计字符串出现的次数,树的结点保存字符串出现次数,0 表示没有出现。

思路如下:

在遍历字符串时,在前缀树中查找,如果找到,则把结点中保存的字符串次数加 1,否则为这个字符串构建新结点,构建完成后把叶子结点中字符串的出现次数置为 1。

最后依然使用小顶堆来对字符串的出现次数进行排序。

方法总结

前缀树经常被用来统计字符串的出现次数。它的另外一个大的用途是字符串查找,判断是否有重复的字符串等。
前缀树算法参考:https://fuhailin.github.io/Trie/
题目参考:https://edgar615.github.io/bigdata-interview.html

留一个思考题:40亿QQ号, 1G内存,怎么去重?

提示一下

  1. 可以采用分治聚合思路
  2. 可以采用位图法
  3. 试试布隆过滤器!!!!
    答案参考:https://www.cnblogs.com/crazymakercircle/p/17487056.html

总结

  1. 遇到海量数据,先想分治聚合
  2. Hash来分割,TopK在聚合
  3. 判断数字是否存在和重复,采用位图算法
  4. 字符串出现次数统计常用前缀树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【安全生产监管人员】免费试题及安全生产监管人员模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年安全生产监管人员免费试题为正在备考安全生产监管人员操作证的学员准备的理论考试专题,每个月更新的安全生产监管人员模拟试题祝您顺利通过安全生产监管人员考试。 1、【单选题】()以上地方人民政府…

基于SSM的民宿预订系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、毕业设计(论文)选题的目的和意义 由于现代人经济水平的不断提高,出门旅游已经成为人们放松和休息的一种生活方式。而出门在外,住宿也是首要问题,相比于传统的酒店…

五子棋项目自动化测试

目录 一、五子棋项目介绍 二、编写Web测试用例 三、自动化测试脚本开发 1、引入依赖 2、设计框架 3、Utils 4、LoginPage 5、RegisterPage 6、MatchPage 7、RunTest类 8、运行程序 一、五子棋项目介绍 五子棋项目是基于 WebSocket 实现的多人在线对战系统&#xff0…

【优选算法】(第三十六篇)

目录 ⼆叉树的锯⻮形层序遍历(medium) 题目解析 讲解算法原理 编写代码 ⼆叉树的最⼤宽度(medium) 题目解析 讲解算法原理 编写代码 ⼆叉树的锯⻮形层序遍历(medium) 题目解析 1.题目链接&#xf…

【高中生讲机器学习】21. 隐马尔可夫模型好难?看过来!(下篇)

创建时间:2024-10-09 首发时间:2024-10-12 最后编辑时间:2024-10-12 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名高一学生,热爱计…

SpringBoot购物推荐网站:设计与实现的最佳实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

『深度分析』Kimi版o1来了!Kimi探索版全面解读!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

28幅高清修复的英文版中国地图

我们在《183幅值得珍藏的全国地质图集》和《55幅值得珍藏的水文地质图集》两文中,为你分享过精美的全国地质图和水文地质图。 现在我们整理了28幅英文版中国地图,并经过高清修复后分享给大家,你可以在文末查看该数据的领取方法。 28幅英文版…

Channel模块 --- 管理套接字事件

目录 设计思想 实现 设计思想 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函数进行管理的 具体来说,它里面会保存该文件描述符所监控的事件,该文件描述符所就绪的事件,以及该描述符的各种事件的处理回调…

4 机器学习之归纳偏好

通过学习得到的模型对应了假设空间中的一个假设。于是,图1.2的西瓜版本空间给我们带来一个麻烦:现在有三个与训练集一致的假设,但与它们对应的模型在面临新样本的时候,却会产生不同的输出。例如,对(色泽青绿…

java算法oj(3)栈和队列

目录 1.前言 2.正文 2.1基础操作 2.2用栈实现队列 2.2.1题目 2.2.2示例 2.2.3代码 2.3用队列实现栈 2.3.1题目 2.3.2示例 2.3.3代码 2.4最小栈 2.4.1题目 2.4.2示例 2.4.3代码 3.小结 1.前言 哈喽大家好吖,今天来分享几道栈与队列的算法题&#…

三、AOP

文章目录 1. AOP(概念)2. AOP(底层原理)2.1 AOP 底层使用动态代理2.2 AOP(JDK动态代理) 3. AOP(术语)3.1 连接点3.2 切入点3.3 通知(增强)3.4 切面 4. AOP操作…

数据丢失不再怕!四款数磁盘数据恢复据恢复工具实测心得

在办公室行政的工作中,数据恢复工具是我们不可或缺的帮手。无论是不小心删除了重要文件,还是硬盘突然罢工,这些工具总能在关键时刻帮我们力挽狂澜。今天,我就来分享一下我使用福昕数据恢复、转转大师数据恢复、超级兔子数据恢复和…

MySQL 【数字】函数大全(二)

MODPIPOWPOWERRANDROUNDSIGNSQRTTRUNCATE 1、MOD MOD(number1, number2) :返回一个数字除以另一个数字的余数。 语法: 1、MOD(number1, number2) 2、number1 MOD number2 3、number1 % number2 number1:被除数。 number2:除数。…

Qt学习系列之设计模式的小记录

Qt学习系列之设计模式的小记录 前言Qt中的设计模式使用情况数据模型视图组建代理 小tips虚函数:基类的不同具体使用界面设计后台显示 报错解决 总结 前言 在软件设计师中的设计模式有提到设计模式有三种类型: 创建型:工厂方法模式、抽象工厂…

上海AI实验室CVT-Occ时间融合利用视差搜索刷新occ3DWaymo SOTA

上海AI实验室提出CVT-Occ:通过时间融合利用视差搜索刷新occ3D-Waymo SOTA Abstract 基于视觉的3D占据预测由于单目视觉在深度估计上的固有局限性而面临显著挑战。本文介绍了CVT-Occ,一种新颖的方法,通过时间上的体素几何对应进行时间融合&a…

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

欧洲气象局开源数据如何通过大模型预测未来天气

气象预测依赖于全球各地的观测数据、复杂的数学模型和高性能计算资源。欧洲气象局(ECMWF,European Centre for Medium-Range Weather Forecasts)作为世界领先的气象预报机构,不仅提供精确的天气预报服务,还向公众和科研…

获取鸿蒙设备Udid遇到的问题

参考官方文档:注册调试设备-调试应用(HarmonyOS)-AppGallery Connect帮助中心 - 华为HarmonyOS开发者 (huawei.com) 坑一:The sdk hdc.exe version is too low, please upgrade to the latest version. 升级dev工具和sdk配置为api…

google域名邮箱:如何创建并管理邮箱账户?

google域名邮箱设置教程?如何开通Google域名邮箱? Google域名邮箱提供了一个专业且功能强大的平台,允许用户使用自定义域名创建和管理邮箱账户。烽火将详细介绍如何创建并管理Google域名邮箱账户,帮助您充分利用这一强大的工具。…