边读边捋【july的】海量数据处理面试题

2023-11-10 15:32

本文主要是介绍边读边捋【july的】海量数据处理面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、寻找 TOP IP

海量日志数据,提取出某日访问百度次数最多的那个 IP。

个人捋之:海量,直接处理往往不中。

1)设计一个hash函数,其功能为将任意IP地址映射为一个数,再将该数对某个不太大的数取余,使得任意IP -> 一个不太大的数(比如1000)。这样就保证能实时地将现有日志中所有的IP分布到1000个桶里,我们每次只将一个桶提到内存里然后处理;

2)逐个将桶提到内存里,按value(次数)sort,取最大<key(IP), value(次数)>对,存下;

3)对这1000个键值对按次数排序,再取最大次数,得到对应键值即为所求。


2、搜索引擎会通过日志文件把用户每次检索所使用的所有查询串都记录下来,每个查询串的长度为
1-255 字节。假设目前有 1000 万个查询记录(但因为这些查询串的重复度比较高,所以虽然总数是 1000
万,但如果除去重复后,不超过 300 万个查询字符串),请统计其中最热门的 10 个查询串,要求使用的
内存不能超过 1G。

个人捋之:

1)1000万 * 255 byte = 2.5G > 1G,so 全部读入内存处理不成。但是题目里提到很多重复,去重后大概需要800M,自然而然想到使用STL中的map或者hash_map或者trie树起一个过滤作用,从文件中逐条读入记录,加入到map中。

2)排序,不过既然是top k 的题,自然想到用堆排。


这题数据量比较坑爹,不大不小。如july所说,如果是1亿个查询记录呢?

个人捋之:

1)25G >> 1G。考虑将这个大文件拆分成若干个能处理的小文件,比如说100个。拆分的方式不妨采用hash映射的方式:从原文件读一行,fgets(oneline, input.txt);再用hash函数算个hash值,long long hashValue = hashFunc(oneline);再将该值对100取余,hashValue %= 100;将其写入hashValue对应的那个桶对应的那个小文件中;

之后两种方法:

1>对这100个小文件,各自map去重,然后取top10;再对所有的top10 取 top10;

2>对这100个小文件,使用外排序,得top10;


3、海量数据分布在 100 台电脑中,请想个办法高效统计出这批数据的 TOP 10。
个人捋之:比较简单赶脚,100台电脑各自取top10,然后将这100个排完序的结果传给控制机,外排序,再取topk就哦了。
哦豁:少考虑了一点,如果这些分布在不同电脑中的数据有相同的怎么办?可以先reduce起来,hash映射一下,再map下去,确保每台电脑上的数据是唯一的,再像之前的处理就可以了。

4、有 10 个文件,每个文件 1G,每个文件的每一行存放的都是用户的 query,每个文件的 query 都可能重
复。要求你按照 query 的频度排序。
个人捋之:
1)依次读入这10个文件,通过hash映射为100个hash桶,每个桶写成一个文件。即得到100个文件,每个100Mb。且各个文件之间没有重复query;
2)但此时每个文件内部还是存在相同的query,可以用trie树或者map去统计每个query的次数信息。
3)这100个文件各自排序,然后通过外排序归并。由于100M的query,仍然数量很大,可以考虑每个100M文件先拆分成更小粒度的文件,先进行一层归并。

5、给定 a、b 两个文件,各存放 50 亿个 url,每个 url 各占 64 字节,内存限制是 4G,请找出 a、b 文件共
同的 url。
个人捋之:
1)100个url 6.4K,10w个url 6.4M,1亿的话,6.4G,50亿,320G的大小...
2)bloom过滤?m个bit,t 个hash函数,将a文件中每个url映射为 t 个hashValue,并将对应的位数置为1。再在b文件中每个url用同样的t个hash函数映射t个hashValue,如果对应的位数均为1,说明该url在a文件和b文件中共现过。问题在于m和t分别怎么设呢?木有经验。

这篇关于边读边捋【july的】海量数据处理面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

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

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

一些其他面试题

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

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,

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP