字节一面:如何从 100 亿 URL 中找出相同的 URL?
点击关注公众号,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?相关推荐
- 海量数据处理:在100亿个数中找出top 10000
经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...
- 如何从 100 亿 URL 中找出相同的 URL?
来源 | https://doocs.github.io/advanced-java/ 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找 ...
- 面试:如何从 100 亿 URL 中找出相同的 URL?
题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. " 推荐一个艿艿写的 6000+ Sta ...
- 海量数据实战(0)从两个文件50亿数据中找出相同的URL
**问题:**给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 目录: 文章目录 Step 1 产生50亿 URL Step 2 将5 ...
- 面试:如何从大量的 URL 中找出相同的 URL?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/FR7V 赠书:聊 ...
- 1亿个数中找出最大的100个数(top K问题)
如何在1亿个数中找出最大的100个数(top K问题) 最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序.但是在32位的 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 10亿个数中找出最大的10000个数
转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...
- 10亿个数中找出最大的10000个数(top K问题)
原博链接: https://blog.csdn.net/cbjcry/article/details/84917432 问题引入:10亿个数中找出最大的10000个数(top K问题) top K问题 ...
最新文章
- fileinputstream resources 读取文件_压缩20M文件从30秒到1秒,包教包会
- python删除所有core文件_python – 从pandas.core.series.Series中删除前导零
- 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志
- AJAX DELETE
- 后BERT时代:15个预训练模型对比分析与关键点探究
- 获取当前系统时间c语言,使用C语言获取当前系统的时间
- mysql插入10万测试_[原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
- Tensorflow安装错误ERROR: Cannot uninstall ‘wrapt‘.
- windows10 搜索桌面搜索功能失效的解决
- cocos creator基础-(六)cc.Sprite使用
- 最详细的制作正式版10.11 OS X El Capitan 安装U盘的方法
- 设为首页 加入收藏代码
- 企业微信怎么填写服务器,勤哲Excel服务器软件做企业微信管理系统
- python恶搞小程序 画樱花树+启动摄像头+拍照+通过邮件发回+删除照片
- BZOJ3876支线剧情
- U3D游戏开发工程师正确入行姿势指南
- faster rcn固定输入图片尺寸(一)
- java变量与常量的区别_Java变量与常量
- 软件设计师笔记(信息安全)
- Yolo v3的学习
热门文章
- LaTex中编辑公式的上下角标出现的问题---允许{}的嵌套吗?
- BZOJ 1096: [ZJOI2007]仓库建设
- 读Lodash源码——chunk.js
- java8学习之Lambda表达式深入与流初步
- LA3177 - Beijing Guards(二分+贪心【更优美的解法)
- Cygwin-添加到右键菜单脚本--一键安装、卸载
- Dubbo+zookeeper使用方法以及注意事项
- pl/sql developer连接远程数据库
- 通过BeanShell获取UUID并将参数传递给Jmeter
- Java中使用LUA脚本语言