首页 > 其他分享 >大数据面试题汇总

大数据面试题汇总

时间:2024-04-17 17:22:51浏览次数:13  
标签:面试题 int 32 汇总 整数 BitMap 电话号码 bit 数据

大数据量场景面试题

目录

假设有10亿手机号,如何快算判断一个手机号是否再其中?

- 无符号整数表示范围 [0,1<<32] 1<<32 = 4294967296 bit = 512M 内存
- 40亿整数 将对应bit设置为1 接着读取要查询的数,查看相应位是否为 1,如果为 1 表示存在,如果为 0 表示不存在

如何再海量数据中找到高频词?

  • 有一个 1GB 大小的文件,文件里每一行是一个词,每个词的大小不超过 16B,内存大小限制是 1MB,要求返回频数最高的 100 个词
    • 解题思路:
      • 遍历文件 对每个字符进行哈希然后取余,拆分成小文件,每个文件均小于1M
      • 使用hashMap 进行每个小文件的出现次数统计,同时构建一个最小堆 堆大小为 100。 如果遍历到的词的出现次数大于堆顶词的出现次数 则用新词替换堆顶的词,然后重新调整为小顶堆,遍历结束后,小顶堆上的词就是出现频数最高的 100 个词
      • 再构建一个最小堆,分别将每个小文件的堆跟堆顶元素进行比较,比他大则替换

BitMap 原理?

  • 在java中,一个int类型占32个比特,我们用一个int数组来表示时未new int[32],总计占用内存32*32bit,现假如我们用int字节码的每一位表示一个数字的话,那么32个数字只需要一个int类型所占内存空间大小就够了,这样在大数据量的情况下会节省很多内存
  • 1个int占4字节即4*8=32位,那么我们只需要申请一个int数组长度为 int tmp[1+N/32]即可存储完这些数据,其中N代表要进行查找的总数,tmp中的每个元素在内存在占32位可以对应表示十进制数0~31,所以可得到BitMap表:
  • tmp[0]:可表示0~31
  • tmp[1]:可表示32~63
  • tmp[2]可表示64~95
  • 假设这40亿int数据为:6,3,8,32,36,

BitMap 应用?

  • 在3亿个整数中找出不重复的整数,限制内存不足以容纳3亿个整数?
    • 对于这种场景我可以采用2-BitMap来解决,即为每个整数分配2bit,用不同的0、1组合来标识特殊意思
      如00表示此整数没有出现过,01表示出现一次,11表示出现过多次,就可以找出重复的整数了
      需要的内存空间是正常BitMap的2倍,为:3亿*2/8/1024/1024=71.5MB
      扫描着3亿个整数,组BitMap,先查看BitMap中的对应位置,如果00则变成01,是01则变成11,是11则保持不变,当将3亿个整数扫描完之后也就是说整个BitMap已经组装完毕。最后查看BitMap将对应位为11的整数输出即可
  • 某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数?
    • 如果用 bit表示一个号码,那么总共需要1亿个bit,总共需要大约10MB的内存
    • 把遍历到的电话号码对应的位图中的bit设置为1。当遍历完成后,如果bit值为1,则表示这个电话号码在文件中存在,否则这个bit对应的电话号码在文件中不存在。
    • 最后,统计位图中bit值为1的数量,便能得到不同电话号码的个数
      img

那么如何确定电话号码对应的是位图中的哪一位呢?

img

标签:面试题,int,32,汇总,整数,BitMap,电话号码,bit,数据
From: https://www.cnblogs.com/heyanfeng/p/18139229

相关文章

  • 解决C# 连接MYSQL数据库查询数据时 Unable to convert MySQL date/time value to Syst
    C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题“UnabletoconvertMySQLdate/timevaluetoSystem.DateTime”原因:可能是该字段(date/datetime)的值默认缺省值为:0000-00-00/0000-00-0000:00:00,这样的数据读出来转换成System.DateTime时就会有问题;解......
  • 你的数据库用对索引了吗?一文揭秘PolarDB XPlan索引选择
    ​ 对于数据库来说,正确地选择索引是基本要求,选错索引轻则导致查询缓慢,重则导致数据库整体不可用。PolarDB分布式版存在多种不同的索引:局部索引、全局索引、列存索引、归档表索引。局部索引就是单机数据库上常用的索引,目的是避免全表扫描。全局索引是分布式数据库为了避免......
  • OPC DA通信,自动读写数据
    主打的就是简单,使用非常简单!opcDaTags.Add(newOpcDaTag("numeric.random.int32"));opcDaTags.Add(newOpcDaTag("time.current"));opcDaTags.Add(newOpcDaTag("textual.weekday"));opcDaTags.Add(......
  • WPF 使用DbUtility 数据库通用操作类
    依赖准备1.在WPF项目内首先通过NuGet包管理器进行安装需要操作的数据库依赖,我这里使用的是SQLite数据库所以安装的是System.Data.SQLite。2.安装后需要下载DbUtility.dll,下边是网盘地址https://www.123pan.com/s/TaoVjv-4aWHv.html3.下载后把文件放到项目根目录下,在软件内引用......
  • mysql复制数据库
    mysql复制数据库,导出导入方法一:使用mysqldump创建新的数据库createdatabasenew_db同一个mysql服务器复制数据库方法mysqldumpold_db-u账户-p密码|mysql-P端口new_db-u账户-p密码不同mysql服务器复制数据库方法mysqldumpold_db-u账户-p密码|m......
  • mysql8修改数据目录
    mysql8修改数据目录停止mysqlsystemctlstopmysqld修改配置文件/etc/my.cnf#datadir=/var/lib/mysql#socket=/var/lib/mysql/mysql.sockdatadir=/data/mysqlsocket=/data/mysql/mysql.sock迁移数据文件mkdir/datarsync-az/var/lib/mysql/data/创建socke......
  • 全国各省市数据库
    --不足:23山东和16山东重复--创建DBPromary数据库createdatabaseDBPromaryuseDBPromarygo--创建promary表createtablepromary(proIDintprimarykey,proNamevarchar(50)notnull)--中国34个省级行政单位23个省5个自治区4个直辖市2特别行政区insertinto......
  • 光学雨量计雨量传感器的工作原理与实时数据采集
    光学雨量计雨量传感器的工作原理与实时数据采集光学雨量计是一种常用的雨量传感器,它通过光学原理实现对降水量的测量。其工作原理主要包括两个方面:雨滴传感和数据采集。在雨滴传感方面,光学雨量计利用红外线传感器或者激光器发射出的光束穿过空气,当光束遇到雨滴时,会由于雨滴的散......
  • Python 数据结构和算法实用指南(三)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第七章:哈希和符号表我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此快速且易于操作。但是,它们并不总是对我们很有效......
  • Python 数据结构和算法实用指南(一)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0前言数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究Python编......