海量数据面试题总结,这下面试不慌了!

文章目录

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

  • 寻找热门查询,300万个查询字符串中统计最热门的10个查询

  • 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

  • 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

  • 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

  • 2.5亿个整数中找出不重复的整数,内存空间不足以容纳这2.5亿个整数。

  • 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

  • 已知某个文件内包含一些电话号码,每个号码为 8 位数字,统计不同号码的个数。

  • 5亿个int找它们的中位数

海量数据相关的面试题主要是考察数据量比较大,内存不足时数据的处理方式,规律性还是很强的,其实简单来说就是分治,将大的数据分成多个小的数据,分别进行处理。

需要先掌握的一些基本概念

  • 常用的排序算法(堆排序)

  • HashMap,用于统计频率,遍历字符串,若不在 map 中,直接存入 map,key为字符串,value 记为 1;若在 map 中,则把字符串对应的 value 加 1

  • Hash映射,用于分治

  • BitMap,用于判断某个数据是否存在

  • 前缀树

  • topK问题

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

题目的隐藏含义就是海量日志数据不能一次读取到内存中,否则直接用HashMap统计IP出现的频率(IP为key,频率为Value),然后按照频率排序就好了。

这道题的做法是先对文件遍历一遍,将一天访问百度的IP记录到一个单独的文件,如果这个文件还是很大,可以对IP进行hash取余,将IP映射到多个文件中,然后利用HashMap统计每个文件中IP的频率,分别找到每个文件中频率最高的IP,再从这些IP中找到整体频率最高的IP。

如果是频率最高的前N个怎么办?这时可以在利用HashMap统计每个文件中IP的频率后,维护一个小顶堆,找到TopN。具体方法是:依次遍历每个小文件,构建一个小顶堆,堆大小为 N。如果遍历到的IP的出现次数大于堆顶IP的出现次数,则用新IP替换堆顶的IP,然后重新调整为小顶堆,遍历结束后,小顶堆上的词就是出现频数最高的 N 个IP。

注:TopN问题在手写代码也是高频题,需要重点掌握,比如力扣215题:https://leetcode.cn/problems/kth-largest-element-in-an-array/comments/

寻找热门查询,300万个查询字符串中统计最热门的10个查询

题目详细描述:搜索引擎会通过日志文件把用户每次检索使用的所有查询串都记录下来,每个查询床的长度不超过 255 字节。假设目前有一千万个记录(

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值