海量数据在有限资源上处理的方法

news2024/11/25 18:52:41

1. 使用哈希

适用场景:需要处理的数据中,相同的数据可以分配到同样的机器/文件进行处理。

技巧总结:相同的数会哈希到同一个位置上

这类题目一般面试官给的描述都不是很清晰,需要自己去问条件、然后给出方案。

回答思路是:问给我多少机器、需要的时效怎么样?然后用哈希的方式拆解海量数据到多台机器上,单台机器的性能还不够的话,单台机器上再拆成小文件进行处理。

例题1. 有100亿个url,统计其中重复出现的url出现的次数

对url进行哈希,会让相同url分到同一台机器上,然后用该机器上的一个哈希表来统计这台机器上分配到的url的词频。如果这台机器内存不够,就把分过来的url继续哈希,存到本地多个文件里。

例题2. 40亿个int数1G内存,求词频最高的是哪个

哈希到40个文件里,每个文件里有1亿个数,用1G内存建立哈希表统计每个文件里词频最大的数,最后计算40个最大的词频得出总的结果。

2. 使用堆

适用场景:需要统计top N,一般用小根堆或大根堆。

技巧总结:小根堆/大根堆能时刻保持top N个。单台机器用堆做top N,多台机器上继续用堆做机器之间的top N,变长2维、多维堆。

例题3. 有100亿个url,统计其中词频top100

技巧总结:二维大根堆

在例题1.思路的基础上,对每个小文件进行top100的统计,然后合并多个小文件选出他们之间的top100。也可以在每个小文件上维护一个100大小的大根堆,在每台机器上维护一个以小文件大根堆堆顶元素为元素的大根堆,这就相当于做了个二维大根堆,继续往上垒出一个全局大根堆,这种算法比前面那个要快。

例题4. 一个存满int数的10T文件,用1G内存排序后输出到另一10T文件中

技巧总结:小根堆、门槛变量

轮询原始10T的文件,用一个小根堆(小根堆的大小n跟1G内存相关)存放轮询到的前n大的数及其词频,小根堆堆顶存放的是前n大的数中最小的那个,相当于一个“门槛”,小于该门槛的数都进入不了小根堆,这样,小根堆里存的就是整个文件前n大的数了。轮询完一遍文件后,小根堆输出到目标文件中,此时按堆的方式出堆,就是排好序的。

小根堆腾空后,用一个变量记录这次的最小值,下一轮遍历所有大于等于这个最小值的都不要进入堆,这样下一轮统计到小根堆里的就是前n~2n大的数了,继续输出到目标文件。重复以上过程,直到进入小根堆的数小于n。

3.使用布隆过滤器

适用场景:黑名单过滤器,允许有一定的误判率。

技巧总结:布隆过滤器要结合bitmap来使用,可以有效减少内存占用

布隆过滤器的误判是指:不在过滤器中的一定是不在的,在过滤器中的不一定不在。它会多杀,但不会漏杀。

这类题目,要问面试官是否允许有误判率,如果可以,就用布隆过滤器,否则不能使用。

布隆过滤器的大小m(m个bit位)、误判率p、哈希函数个数k(必须是相互独立的哈希哈数)、面相要过滤的数量n,这几个量之间是有计算公式的:

                   m=-\frac{n*\ln p}{(\ln 2)^{2}}               k=0.7*\frac{m}{n}                 (1-e^{-\frac{nk}{m}})^{k}

例题5. 有个网页爬虫工具,要爬大概100亿个url,如何确保不重复爬取url

爬过的url加入到布隆过滤器里,可以确保爬过的一定不会被再爬,但未爬过的个别url可能会漏爬。

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

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

相关文章

hdfs的客户端(big data tools插件)

1.下载hadoop的压缩包在Windows,后解压 2.下载hadoop.dll文件和winutil.exe文件(网上自行查找) 下载完把这两个文件放入hadoop的bin目录 3.设置环境变量: $HADOOP_HOME指向hadoop的文件夹 4.在jetbrains公司的软件里下载big data tools插件:(在此展示的idea的) 下载完重启ide…

AI金融攻防赛:YOLO模型的数据增强与性能优化(DataWhale组队学习)

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。在前一篇文章中,我们详细介绍了如何在金融场景凭证篡改检测中应用YOLO算法。本文将在此基础…

深入了解Spring重试组件spring-retry

在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明:文章来源于真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本…

3.matplotlib基础及用法(全)

一.基础绘图 折线图plot散点图scatter柱状图bar饼图pie 二.图表设置 设置标题设置线条设置坐标轴添加图例添加注释设置画布大小与分辨率 三.高级功能 绘制子图保存图形 一.基础绘图 1.折线图plot import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11] pl…

如何选择合适的电感器来匹配感性负载?

在匹配感性负载时,选择合适的电感器是至关重要的。电感器的主要作用是抑制电流变化,从而维持电路的稳定性。为了确保电路的稳定运行,需要考虑以下因素: 1. 电流和电压:首先,需要确定电感器的额定电流和额定…

GJS-WCP

不懂的就问,但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入,只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过,如字符串截取,环境变量等等。payload1: {{url_for.__globals__[…

【uniapp】微信小程序使用echarts图表记录

1、插件引入 在Dcloud插件市场下载echarts插件:插件地址 或去相关代码库下载js:gitee地址 将static文件夹下中的echarts.min.js和ecStat.min.js复制到自己项目的static文件夹内或到echarts官方定制自己需要的图表类型下载js文件并放入相关目录。echart…

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …

【C#】在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式

结合当前的 DevExpress 项目,在 WinForms 中使用 MVVM(Model-View-ViewModel) 设计模式。这个例子将通过数据绑定、命令绑定来展示 MVVM 模式的运用。 1. 项目结构 假设我们要实现一个简单的应用程序,它有一个文本框和一个按钮&…

【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数

引言 拷贝构造函数是C中一个重要的特性,它允许一个对象通过另一个已创建好的同类型对象来初始化。 了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现,对于编写健壮和高效的C程序至关重要。 C类和对象系列文章,可点击下…

【计网】理解TCP全连接队列与tcpdump抓包

希望是火,失望是烟, 生活就是一边点火,一边冒烟。 理解TCP全连接队列与tcpdump抓包 1 TCP 全连接队列1.1 重谈listen函数1.2 初步理解全连接队列1.3 深入理解全连接队列 2 tcpdump抓包 1 TCP 全连接队列 1.1 重谈listen函数 这里我们使用…

【JAVA】第三张_Eclipse下载、安装、汉化

简介 Eclipse是一种流行的集成开发环境(IDE),可用于开发各种编程语言,包括Java、C、Python等。它最初由IBM公司开发,后来被Eclipse Foundation接手并成为一个开源项目。 Eclipse提供了一个功能强大的开发平台&#x…

IDEA如何查看所有的断点(Breakpoints)并关闭

前言 我们在使用IDEA开发Java应用时,基本上都需要进行打断点的操作,这方便我们排查BUG,也方便我们查看设计的是否正确。 不过有时候,我们不希望进入断点,这时候除了点击断点关闭外,有没有更快速的方便关闭…

深度解析机器学习的四大核心功能:分类、回归、聚类与降维

深度解析机器学习的四大核心功能:分类、回归、聚类与降维 前言分类(Classification):预测离散标签的艺术关键算法与代码示例逻辑回归支持向量机(SVM) 回归(Regression):预…

HarmonyOS Next应用开发——图像PixelMap变换

【高心星出品】 图像变换 图片处理指对PixelMap进行相关的操作,如获取图片信息、裁剪、缩放、偏移、旋转、翻转、设置透明度、读写像素数据等。图片处理主要包括图像变换、位图操作,本文介绍图像变换。 图形裁剪 // 裁剪图片 x,y为裁剪的起…

impdp+remap_schema导入后登录报ORA-01017: Invalid Username/password

环境说明:有个11.2.0.4的rac数据库,现需要把USR_OA克隆一份出来做测试,新用户名是TEST_OA,直接是expdp导出用户,再用impdpremap_schema生成TEST_OA, 业务人员使用PLSQL(版本12.0.1.1814) 登录TEST_OA时总…

Python程序设计 内置函数 日志模块

logging(日志) 日志记录是程序员工具箱中非常有用的工具。它可以帮助您更好地理解程序的流程,并发现您在开发过程中可能没有想到的场景。 日志为开发人员提供了额外的一组眼睛,这些眼睛不断关注应用程序正在经历的流程。它们可以存储信息,例…

ShardingProxy服务端分库分表

目录 一、为什么要有服务端分库分表? 二、ShardingProxy基础使用 1、部署ShardingProxy 2、配置常用分库分表策略 三、ShardingSphere中的分布式事务机制 1、什么是XA事务? 2、实战理解XA事务 3、如何在ShardingProxy中使用另外两种事务管理器&a…

【不要离开你的舒适圈】:猛兽才希望你落单,亲人总让你回家,4个维度全面构建舒适圈矩阵

单打独斗的英雄时代已经落幕 抱团取暖才是社会寒冬的良策 自然界中,每个物种都占据着自己的领地和生存空间。 生态位的差异决定了它们的生存方式,一旦离开领地,失去群体的庇护,就会沦为野兽的美餐。 人类社会同样存在隐形圈层…