点击关注公众号,Java干货及时送达

题目描述

给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。

解答思路

每个 URL 占 64B,那么 50 亿个 URL 占用的空间大小约为 320GB。

5, 000, 000, 000 _ 64B ≈ 5GB _ 64 = 320GB

由于内存大小只有 4G,因此,我们不可能一次性把所有 URL 加载到内存中处理。对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了。

思路如下 :

首先遍历文件 a,对遍历到的 URL 求 hash(URL) % 1000 ,根据计算结果把遍历到的 URL 存储到 a0, a1, a2, ..., a999,这样每个大小约为 300MB。使用同样的方法遍历文件 b,把文件 b 中的 URL 分别存储到文件 b0, b1, b2, ..., b999 中。这样处理过后,所有可能相同的 URL 都在对应的小文件中,即 a0 对应 b0, ..., a999 对应 b999,不对应的小文件不可能有相同的 URL。那么接下来,我们只需要求出这 1000 对小文件中相同的 URL 就好了。

接着遍历 ai( i∈[0,999] ),把 URL 存储到一个 HashSet 集合中。然后遍历 bi 中每个 URL,看在 HashSet 集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

方法总结

  • 分而治之,进行哈希取余;

  • 对每个子文件进行 HashSet 统计。

在这里,我为大家准备了一份2021年最新最全的《史上最简单的java面试题》,这套电子书涵盖了诸多java技术栈的面试知识题,是作者面试BAT大厂的前的总结,作者顺利拿下AT的offer,相信可以帮助大家在最短的时间内复习Java后端的大多数面试题,从而拿到自己心仪的offer。截了张图,大家可以仔细查看左边的菜单栏,覆盖的知识面真的很广,而且质量都很不错。资料获取方法扫描下方二维码
后台回复关键词:BAT
明天见(。・ω・。)

字节一面:如何从 100 亿 URL 中找出相同的 URL?相关推荐

  1. 海量数据处理:在100亿个数中找出top 10000

    经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...

  2. 如何从 100 亿 URL 中找出相同的 URL?

    来源 | https://doocs.github.io/advanced-java/ 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找 ...

  3. 面试:如何从 100 亿 URL 中找出相同的 URL?

    题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. " 推荐一个艿艿写的 6000+ Sta ...

  4. 海量数据实战(0)从两个文件50亿数据中找出相同的URL

    **问题:**给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 目录: 文章目录 Step 1 产生50亿 URL Step 2 将5 ...

  5. 面试:如何从大量的 URL 中找出相同的 URL?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/FR7V 赠书:聊 ...

  6. 1亿个数中找出最大的100个数(top K问题)

    如何在1亿个数中找出最大的100个数(top K问题) ​ 最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序.但是在32位的 ...

  7. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)

    海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...

  8. 10亿个数中找出最大的10000个数

    转载自  海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...

  9. 10亿个数中找出最大的10000个数(top K问题)

    原博链接: https://blog.csdn.net/cbjcry/article/details/84917432 问题引入:10亿个数中找出最大的10000个数(top K问题) top K问题 ...

最新文章

  1. fileinputstream resources 读取文件_压缩20M文件从30秒到1秒,包教包会
  2. python删除所有core文件_python – 从pandas.core.series.Series中删除前导零
  3. 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志
  4. AJAX DELETE
  5. 后BERT时代:15个预训练模型对比分析与关键点探究
  6. 获取当前系统时间c语言,使用C语言获取当前系统的时间
  7. mysql插入10万测试_[原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
  8. Tensorflow安装错误ERROR: Cannot uninstall ‘wrapt‘.
  9. windows10 搜索桌面搜索功能失效的解决
  10. cocos creator基础-(六)cc.Sprite使用
  11. 最详细的制作正式版10.11 OS X El Capitan 安装U盘的方法
  12. 设为首页 加入收藏代码
  13. 企业微信怎么填写服务器,勤哲Excel服务器软件做企业微信管理系统
  14. python恶搞小程序 画樱花树+启动摄像头+拍照+通过邮件发回+删除照片
  15. BZOJ3876支线剧情
  16. U3D游戏开发工程师正确入行姿势指南
  17. faster rcn固定输入图片尺寸(一)
  18. java变量与常量的区别_Java变量与常量
  19. 软件设计师笔记(信息安全)
  20. Yolo v3的学习

热门文章

  1. LaTex中编辑公式的上下角标出现的问题---允许{}的嵌套吗?
  2. BZOJ 1096: [ZJOI2007]仓库建设
  3. 读Lodash源码——chunk.js
  4. java8学习之Lambda表达式深入与流初步
  5. LA3177 - Beijing Guards(二分+贪心【更优美的解法)
  6. Cygwin-添加到右键菜单脚本--一键安装、卸载
  7. Dubbo+zookeeper使用方法以及注意事项
  8. pl/sql developer连接远程数据库
  9. 通过BeanShell获取UUID并将参数传递给Jmeter
  10. Java中使用LUA脚本语言