面试题:2G内存找出20亿个整数中出现次数最多的数

2024-04-27 07:20

本文主要是介绍面试题:2G内存找出20亿个整数中出现次数最多的数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

空间限制:2G内存找出20亿个整数中出现次数最多的数

我们假设整数是32位,也就是4B大小的int类型

极端情况:
  • 每个数都一样,该整数统计只需要8B大小的空间
  • 每个数都不一样,此时占用空间最大20亿 * 8B 接近 16GB

需要解决这个问题,我们可以先了解一个算法:

哈希分流:

哈希分流指的是通过哈希算法将数据或请求分散到多个处理单元上,以实现负载均衡高效率处理的技术。在不同的应用场景下,哈希分流有不同的具体实现方式和目的,但核心思想相同,即使用哈希算法对输入数据(如IP地址、用户ID等)进行计算,根据计算结果将数据分配到对应的服务器或处理单元。这样可以有效地分散请求或数据,避免某单一点过载,同时提高系统的可扩展性和稳定性。

哈希分流的应用场景包括但不限于:

  1. 负载均衡:在网络服务器负载均衡中,哈希分流可以将用户请求分散到多个服务器,根据用户的某些标识(如IP地址)来决定请求应由哪个服务器处理,从而均匀分配负载。
  2. 数据分片:在数据库管理或大数据处理中,哈希分流可以将数据分片存储在不同的服务器或节点上,提高数据处理的效率和响应速度。
  3. 缓存分配:在分布式缓存系统中,通过哈希算法将数据分散存储在多个缓存节点上,可以减少单个节点的压力,提高缓存系统的命中率和性能。

1. 拆分:

我们无法再2G内存中装入所有的数字所以考虑拆分,将20亿个数字拆成不同的份,分流到不同等份中。而我们采取哈希分流的原因就如上述所说。而2G内存最多能统计多少数呢,2^31 / 2 ^ 3 = 2 ^ 28个数,然后2^32 / 2 ^ 28 = 16,所以需要拆分成16份。

2. 统计:

  • 从一个存储20亿个整数的大文件依次读取数据通过哈希分流道16个小文件中
  • 依次使用2GB内存中统计小文件中的整数出现次数,找出最大值
  • 综合16个小文件中找出的最大值进行比较找出全局最大值

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

这篇关于面试题:2G内存找出20亿个整数中出现次数最多的数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939861

相关文章

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,