经典的 海量数据面试题 —— 送你一套僻邪剑谱~

news2024/11/18 16:45:28

目录

前言

一、哈希切割

题目一

解法一:哈希切割

二、位图的应用

题目一:

解法一:哈希切割

解法二:双位图

 解法三:单位图(进阶版)

题目二

解法一:哈希切割

 解法二:位图

题目升华:怎么求交集?并集?差集?

思路:

问题一:交集

问题二:并集

问题三:差集

题目三

解法一:哈希切割

解法二:使用2个位图

三、布隆过滤器

题目一

精确算法:哈希切割

近似算法:布隆过滤器

题目二

解法一:计数器


前言

        对于大公司来说,面试考到的频率较高,请自行斟酌!


一、哈希切割

题目一

        给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 与上面条件相同, 如何找到top K的IP?

        

思考一下难点:

        通常如果忽略大小,我们可以统计每一个IP出现的次数,因为可以使用Map来统计数量。但是目前最大的问题是100G的数据太大,除非是超级计算机,否则也不乏一次性将这些数据加载到内存当中;

思路:

        既然数据太大,咱们就把他拆分成若干个小文件,但是怎么拆分呢?均分可以吗?不可以的,因为均分会出现一个情况,一个文件中最多的IP地址,不一定就是整体上最多的IP地址,所以不可以均分(均分的是数量,不是IP地址的内容均分的)。

那么换一种思路,将相同的IP存储到同一个文件中,那么只需要统计每个文件中的最大值,每一个文件都知道了,那么第topK个还是问题吗?所以最后就能实现题目要求;

解法一:哈希切割

        1.IP本身就是一个字符串,可以经过hash把IP变成一个整数;

        2.文件的下标index = 刚刚所得到的整数 % 200(相当于分成200份)如下图:

这样做的好处:

        可以把相同的字符串映射到同一个文件中;

最后:

        使用Map统计每一个文件中IP出现的次数;


二、位图的应用

题目一:

给定100亿个整数,设计算法找到只出现一次的整数?

思考一下难点:

        100亿个整形数据,肯定存在重复的整数,并且100亿个整数相当占40G的内存;

解法一:哈希切割

        把每个数字都哈希到对应的小文件中,一样的数字肯定是在一起的,遍历每一个小文件,统计数字出现的次数,此时,在内存中就能直到,那些数字只出现了一次;

解法二:双位图

        创建两个位图,用两个位图相同下标的的位置表示一个数字出现的次数,如果是(0,0)表示没出现,(0,1)表示出现一次,(1,0)表示出现两次,(1,1)表示出现三次或以上,例如下图:

 解法三:单位图(进阶版)

        两个位图可以用分别用两个bit位来表示,那么一个位图该怎么表示呢?一样的道理,每次拿出两个bit位来表示一个数字出现的次数,但是要注意的是,这里我们定位下标就不能在像以前那样除8模8了,而是除4模4再乘2,如下图:

题目二

给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?

解法一:哈希切割

        首先,把这两个大文件都使用哈希切割分割成小文件,然后让她两分割小的文件分别对应的去求交集(哈希函数一样,若对应小文件存在数据,那么必然是交集),这样问题的就迎刃而解了,如下图:

 解法二:位图

         这个方法思路就简单多了:

        1.遍历第一个文件,将数据都读取出来放到bitSet中;

        2.再遍历第二文件,读取数据,看bitSet中是否已经存在当前读取到的数据;

        3.若存在,就是交集;

题目升华:怎么求交集?并集?差集?

思路:

        交集、并集、差集,实际上都可以用两个位图来解决,分别用两个位图去遍历存放两个文件的数据,然后进行以下操作;

问题一:交集

问题二:并集

问题三:差集

题目三

        位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数

解法一:哈希切割

        这里和之前讲到的哈希切割一样,也是分成若干个小文件,通过哈希函数来映射到对应的位置,然后统计每个文件里不超过两次整数;

解法二:使用2个位图

        这里和刚刚讲到的双位图的思路是一样的,(0,0)表示没出现,(0,1)表示出现一次,(1,0)表示出现两次,(1,1)表示出现三次或以上,这道题只需要不要出现2个1的就可以,注意0次的也不要;

三、布隆过滤器

题目一

        给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和 近似算法

精确算法:哈希切割

        这里就不详细说了,上面已将讲过两次了,都是一样的方法,将两个文件分成若干小文件,再对小文件求交集;

近似算法:布隆过滤器

        使用布隆过滤器就容易很多啦,分如下两步:

        1.把第一个文件当中的query映射到布隆过滤器中;

        2.读取第2个文件,每一个query都去布隆过滤去中查找;(会存在误判);

        注意:由于布隆过滤器只能准确判断数据一定不存在,所以,有可能会将一个没有的数据误判成了“有”;

题目二

如何扩展BloomFilter使得它支持删除元素的操作

解法一:计数器

        布隆过滤器不能直接删除数据,因为删除元素时可能会影响到其他元素;但是办法总还是有的:将布隆过滤器中的每一个bit位扩展成一个小的计数器,插入元素时给计数器加一,删除元素时给计数器减一,这是一种多占用几倍的存储空间代价来进行删除功能;

存在缺陷:

1.无法确认元素是否真正在布隆过滤器中;

2.存在计数回绕


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

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

相关文章

ChatGPT踩坑(too many signups from the same IP)

ChatGPT踩坑 首先是去OpenAI的官网注册,点击API 进去注册一个账号 然后就会发现注册不成功,继续尝试就会出现下面的情况 后来我发现比较靠谱的方法是,通过google账号注册(或许微软账号也行),后面会有一步让…

python经典刷题-关于文件、日期的题

目录标题1,统计目录下所有文件大小-os的使用2,按文件后缀整理文件夹3,递归搜索目录找出最大文件4,计算不同课程的最高分最低分--分组处理5,实现不同文件的关联6,批量txt文件的合并7,统计每个兴趣…

植物神经紊乱在心脑血管方面可能出现哪些症状

大家好,当植物神经的失衡涉及心脑血管的时候,可能会出现哪些症状表现? 植物神经紊乱为什么会涉及心脑血管? 你们知道吗?植物神经紊乱的实质,是由于体内庞大的神经系统的失衡导致的。而植物神经,…

javaEE 初阶 — 网络通信基础

文章目录1. IP 地址2. 端口号3. 认识协议4. 协议分层4.1 分层的作用4.2 OSI七层模型4.3 TCP/IP五层(或四层)模型4.4 网络数据传输的基本流程4.4.1 发送方4.4.2 接收方1. IP 地址 IP地址主要用于标识网络主机、其他网络设备(如路由器&#xff…

PowerSNMP for .NET 6.1.0.0 Crack

关于适用于 .NET 的 PowerSNMP 创建自定义 SNMP 管理器、陷阱和代理应用程序以监视和控制网络设备。 PowerSNMP for .NET 包括简单网络管理协议 (SNMP) 组件,可无缝集成线程通信、安全和编码/解码,因此您可以快速开发自定义 SNMP 应用程序。该开发工具需…

HW_DIMM分类与比较

DIMM 分类参考链接 UDIMM UDIMM is also known as unbuffered DIMM, that is, unbuffered dual in-line memory module. The application of this memory module means that the address and control signals can directly reach the DRAM chip on the server DIMM without g…

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

一、维度模型分类:星型模型,雪花模型,星座模型1、星型模型星型模型中只有一张事实表,以及0张或多张维度表,事实与纬度表通过主键外键相关联,维度之间不存在关联关系,当所有纬度都关联到事实表时,整个图形非常像一种星型…

ESP32设备驱动-MPU-9250 3轴陀螺仪/加速度计/磁力计驱动

MPU-9250 3轴陀螺仪/加速度计/磁力计驱动 1、MPU9250介绍 MPU-9250 是面向智能手机、平板电脑、可穿戴传感器和其他消费市场的第二代 9 轴运动处理单元™(Motion Processing Unit™)。 MPU-9250 采用 3x3x1mm QFN 封装,是世界上最小的 9 轴运动跟踪设备,采用了最新的 Inven…

钢结构之槽钢及角钢

槽钢 槽钢是截面为凹槽形的长条钢材,截面形状为槽形的型钢。 槽钢的基本介绍 槽钢属建造用和机械用碳素结构钢,是复杂断面的型钢钢材,其断面形状为凹槽形。槽钢主要用于建筑结构、幕墙工程、机械设备和车辆制造等。在使用中要求其具有较好的…

没有选品经验的电商卖家该在TikTok上卖什么商品?超店有数来帮你

TikTok近年来增速迅猛,凭借巨大的流量频频登榜多国APP下载榜首,而其电商业务同样处于快速增长状态。2022上半年,TikTok电商的GMV已超10亿美元;2022年全年,TikTok Shop在东南亚GMV增长逾三倍,达到44亿美元。…

【SpringBoot2】SpringBoot中配置文件详解

SpringBoot使用一个全局的配置文件,配置文件名是固定的,支持两种格式 1、两种格式(properties,yml) application.properties application.yml 由此可以看出 application.yml 文件格式的内容更为简洁,清晰…

SpringAMQP - 发布订阅模式

目录 发布订阅介绍 FanoutExchange简介 FanoutExchange案例 常见小问题 DirectExchange简介 DirectExchange案例 常见小问题 TopicExchange简介 TopicExchange案例 发布订阅介绍 发布(Publish)、订阅(Subscribe)发布订阅…

Python【xpath】基础上

xpath解析: 最常用且最便捷高效的一种解析方式。通用性- xpath 解析原理:- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中环境安装:- cmd 输入 pip install lxml- 如何实例化一个etree 对象- 1.将本地的html&#xff…

从管易云到MySQL通过接口配置打通数据

数据源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。写入目标:MySQLmysql是一个关系数据库管理系统(RDBMS&…

SpringBoot的自动配置

参考视频:每一帧都是干货!15分钟的视频花2小时看 一、配置类(Configuration Class) 广义的配置类:被注解Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了Configuration类…

类加载器与双亲委派

-----摘自 周志明 《深入理解Java虚拟机》类加载器Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

R语言多元数据统计分析在生态环境中的实践应用

生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…

管易云与网易互客对接集成发货单=>编辑订单

对接源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。对接目标系统:网易互客网易互客是一款智能化的客户关系管理工具。可以…

JavaEE3-Spring创建

目录 1.创建一个普通的Maven项目 2.添加Spring框架支持(spring-context,spring-beans) 3.添加启动类 1.创建一个普通的Maven项目 不选择任何模板,直接点Next。 Name:项目名称; Location:项目保存路径; …

【文件操作】-还在为运行的数据没法保存而烦恼吗??这篇博客让你十分钟之内解决问题,赶紧进来看看!!!

🎇作者:小树苗渴望变成参天大树 💦作者宣言:认真写好每一篇博客 💖作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! ✨文件操作🧨前言💤一…