哈希切割 及 海量数据处理面试题讲解

news2024/11/24 5:53:13

文章目录

  • 哈希切割及海量数据处理面试题讲解
    • 问题1
    • 问题2

哈希切割及海量数据处理面试题讲解

问题1

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

近似算法:

把一个文件的内容set到布隆过滤器中,然后遍历另一个文件判断在不在,在的就是交集。

精确算法:

首先我们估算一下100亿个字符串大概占多少空间?

那我们要假设一下,假设单个字符串50字节,那100亿个就是5000亿字节,大概就是500G(之前我们算过1G大概10亿字节嘛)。
每个文件500G
在这里插入图片描述

那我们肯定要对文件进行切割,因为我们只有1G可用内存。

那我们可以把每个文件切成1000份,然后每份500mb
在这里插入图片描述

那大家思考一下,我们这样切分有没有什么问题?

比如我们现在要那A0去跟B找交集,那会有什么问题?
是不是A0跟B的每一个小文件都可能会有交集啊,那我们找交集的时候每一个小文件都需要跟另一个文件的1000个小文件都找一下交集,这是不是太暴力,效率太低了啊。

所以呢我们可以换一个切割方法:

不再像上面那样平均切割。
那怎么切呢?
这种方法叫做哈希切割
那它是这样切的:
选择一个哈希函数,把query字符串传过去,算出来一个散列地址i,这个i是几,就把它放到第i个文件里面
在这里插入图片描述
那这样切割能达到一个什么效果呢?
🆗,我们用哈希函数去切割的话,A、B文件中相同的值进入的小文件的文件号一定是一样的(因为它们的值是一样的,用的哈希函数也是一样的,那算出来的i肯定就是一样的)。
那这样的话,我们找交集就不用像之前那样麻烦了,编号相等的小文件找交集就行了。
A0只用和B0找交集就行了,A1和B1,A2和B2,…,依次类推
在这里插入图片描述

但是这样切割也会有一个问题就是:

哈希切割的话不是平均切割,那就会导致有的小文件比较小,有的比较大,那就有可能存在有的小文件超过了可用内存1G(那其实就是对应的冲突比较多)
那如果存在这样的文件,即分割之后还是比较大的这种,它其实又分为两种情况:
1.在这单个文件中,存在大量重复的query字符串
2.没什么重复值,大部分都是不同的
那这两种不同的情况,我们的处理方式也是不同的。

那问题来了我们如何去辨别这两种情况呢?

其实也不难,如果出现这种比较大的小文件,我们直接搞一个set/unordered_set,然后把文件里面的query字符串插入进行。
那如果是大量重复值的情况,那往set里面插入的话后面的是不是就会插入失败啊。
所以:
如果整个小文件里面的字符串都可以成功插入到set里面,那就是第一种情况(大量重复值)
如果在插入的过程中抛了内存异常,那就是第二种情况(大部分都是不同的,没什么重复值),因为我们只有1G内存,如果没什么重复值那就都插入成功,然后就会内存不够用,是会抛异常的。
那对于这种情况呢我们就换哈希函数对它再进行切割使它体积变小,在分割的小一点,然后就可以直接找交集了

问题2

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

怎么处理呢?

首先还是使用一个哈希切割,比如这里我们切500份,那这样相同的IP就会进入同一个小文件。
然后我们通过单个小文件就可以统计出它里面存到各个IP出现的次数
在这里插入图片描述
那统计次数的话我们可以直接用map/unordered_map
那同样的,如果出现有些划分完的文件比较大:
在这里插入图片描述

那找TOP-K的IP呢?

🆗,那TOK-K的问题我们之前二叉树的文章里面是详细讲解过的,这里就不细说了。
那我们就可以建一个K个数的小堆,每个元素存一个pair(key是IP,value是次数),然后遍历后面的IP次数更新这个小堆,最后TOP-K就出来了。

在这里插入图片描述

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

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

相关文章

PL2303串口不支持WINDOWS11解决方法

1.打开设置管理器--端口选择不支持的串口--右击--选择卸载驱动--刷新 即可使用 2.禁用驱动更新:保存下面为 "disable_win11_update_driver.reg", 双击加入注册表 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\W…

【商业知识】中国消费者洞察

文章目录 一、市场: 中国消费市场已进入复苏期二、政策: 政策不断优化消费环境三、社会: 消费者逐步步入正确消费时代四、品牌: 科普专业知识,加深消费者对技术力的感知五、电商直播: 提供源头优质产品,提高生活质量六、信息平台: 科学消费和内容营销&am…

【Java Web】Kafka,构建TB级异步消息系统

1. 阻塞队列 BlockingQueue 解决线程通信的问题;阻塞方法:put从队列中存一个 , take 从队列中拿出一个 生产者消费者模式 生产者:产生数据的线程;消费者:使用数据的线程。 实现类 ArrayBlockingQueueLinke…

pyqt5调用摄像头

pyqt5调用摄像头 1、UI布局 2、代码 # !/usr/bin/python # -*- coding: utf-8 -*-""" contact: 微信 1257309054 file: t.py time: 2023/9/10 0:16 author: LDC """import sysimport cv2 from PyQt5 import QtCore from PyQt5 import QtWidget…

buuctf crypto 【RSA】解题记录

1.打开文件后,可以看到公钥,打开后解析公钥 2.分解一下n,得到p,q(使用yafu分解)后,写出脚本 3.运行,得到flag

Emscripten安装并配置环境变量

前言 Emscripten官网 官网有安装教程,但有些细节没有讲清楚,本文会很详细的讲解每一步。 一、下载 emsdk 包 emsdk – github地址 可以使用 git 去拉取,不过可能会超时拉取失败。 git clone https://github.com/emscripten-core/emsdk.…

电子信息工程专业课复习知识点总结:(一)电路分析基础

文章目录 第一章:电路的基本概念和电路定律第二章:电阻电路的等效变换第三章:电阻电路的一般分析方法第四章:电路定理1.叠加定理2.替代定理3.戴维南定律4.诺顿定律5.最大功率传输定理6.特勒根定理7.互易定理8.对偶定理 第七章 储能…

常用调优命令及各种 OOM 的应对策略【JVM调优】

文章目录 1. 常见的调优命令2. 常见的性能调优3. 常用的调优工具4. 各种 OOM 的应对策略5. 配置垃圾收集器6. CPU 占用过高 1. 常见的调优命令 ① jps:显示所有虚拟机进程; ② jstack:生成当前线程快照; ③ jmap:生成…

基于SSM的在线云音乐系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Linux内核分析与应用3-进程管理

本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 3.1 进程概述 一个程序通过编译器将其编译成汇编程序,经过汇编器将其汇编成目标代码,通过链接器形成可执行文件a.out或者elf格式,…

Kali2022.3虚拟机编译AOSP(从Kali安装到完成Aosp编译详细记录)

一.前言 测试的硬件环境(轻薄本):cpu:Amd r5 4600u,内存:16g,外接固态硬盘盒子。测试(下载和编译Android10)结果:下载时长为0.5-1h,编译时长接近5h;虚拟机环境:VMware Workstation …

Stream流用法详解

文章目录 🐒个人主页🏅JavaSE系列专栏📖前言:🎀什么是Stream流?🧸流的概念 🐕如何获取流🐕流的操作🏅中间操作(返回类型都是流)filter…

【strcat函数和strncat函数的对比与模拟实现】

strcat函数和strncat函数的对比与模拟实现 1.strcat函数的介绍 资源来源于cplusplus网站 它的作用是: 将源字符串的副本追加到目标字符串。目标中的结束空字符被源的第一个字符覆盖,并且在由目标中的两个字符串串联形成的新字符串的末尾包含一个空字符…

数据结构之单链表(c++(c语言)通用版)

我们创建一个长度为n的链表时,可以采取头插法创建或者尾插法创建,本篇博客我们采取头插法来创建,(作者只学了头插,尾插等以后来补qwq,补上喽)。 头插原理 我们先来画图来看看头插的创建形式把&#xff0c…

《python趣味工具》——酷炫二维码(2):批量定制合适的二维码

今天,我们将学习如何从Excel中提取相应的内容然后批量生成相应的二维码。 文章目录 一、Excel的基本操作:1. Excel的基本结构:2. 安装xlrd模块:3. 读取指定工作表:4. 读取指定内容:Tip:切片读取&#xff1a…

线性代数的学习和整理19,特征值,特征向量,以及引入的正交化矩阵概念(草稿)

目录 1 什么是特征值和特征向量? 1.1 特征值和特征向量这2个概念先放后 1.2 直观定义 1.3 严格定义 2 如何求特征值和特征向量 2.1 方法1:结合图形看,直观方法求 2.1.1 单位矩阵的特征值和特征向量 2.1.2 旋转矩阵 2.2 根据严格定义…

buuctf crypto 【RSA2】解题记录

1.打开文件 2.写脚本 3.16进制转字符串

Ardupilot — AP_OpticalFlow代码梳理

文章目录 前言 1 Copter.cpp 1.1 void Copter::setup() 2 system.cpp 2.1 void Copter::init_ardupilot() 3 sensors.cpp 3.1 void Copter::init_optflow() 3.2 对象optflow说明 4 OpticalFlow.cpp 4.1 void OpticalFlow::init(uint32_t log_bit) 5 AP_OpticalFlow_…

十三、函数式编程(1)

本章概要 新旧对比Lambda 表达式 递归 函数式编程语言操纵代码片段就像操作数据一样容易。 虽然 Java 不是函数式语言,但 Java 8 Lambda 表达式和方法引用 (Method References) 允许你以函数式编程。 在计算机时代早期,内存是稀缺和昂贵的。几乎每个人…

手写Spring:第20章-事务处理

文章目录 一、目标:事务处理二、设计:事务处理2.1 事务单元测试2.2 事务设计 三、实现:事务处理3.1 工程结构3.2 事务管理的核心类图3.3 定义事务注解3.3.1 定义事务注解3.3.2 定义事务接口3.3.3 默认事务定义实现类3.3.4 委托事务定义实现类…