如何从 100 亿 URL 中找出相同的 URL?
来源 | https://doocs.github.io/advanced-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 统计。
往期推荐
CEO不当了,CTO也不做了!我要回去写代码,这才是我所热爱的!
用谷歌搜索技术问题一定比用百度好?也未必...
好多大咖曾看他的书学习Java,如今这个男人的新作来了!
Lombok!代码简洁神器还是代码“亚健康”元凶?
IntelliJ IDEA官方宣布中文汉化包正式发布
喜欢本文欢迎转发,关注我订阅更多精彩
关注我回复「加群」,加入Spring技术交流群
如何从 100 亿 URL 中找出相同的 URL?相关推荐
- 海量数据处理:在100亿个数中找出top 10000
经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...
- 字节一面:如何从 100 亿 URL 中找出相同的 URL?
点击关注公众号,Java干货及时送达 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每 ...
- 面试:如何从 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亿数中找出前1000大的数
小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 10亿个数中找出最大的10000个数
转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...
最新文章
- linux限制显卡频率,关于安装Linux (FC6)频率超出范围与显卡驱动
- TCP/IP通信程序设计方式
- HDR 成像技术学习(一)
- 老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)
- jQuery中的ready
- java 计算 时间差_Java8 时间差计算
- 0804------算法笔记----------最长公共子序列
- Linux镜像文件提取,如何提取linux 系统镜像文件
- 文件搜索工具终极大PK挑战赛
- ret2text涉及到的堆栈平衡问题
- Android netd 简单分析和配置iptable
- 70人团队创造超30亿美元年交易额,这家美国电商竟是中国制造
- html ui动画效果图,20种炫酷的菜单线条动画特效UI设计效果_html/css_WEB-ITnose
- 解决IDEA打断点后,执行代码不会停在断点问题
- 【Docker】Linux各系统安装Docker,Docker-compose方式汇总
- day21|216.组合总和III、17.电话号码的字母组合
- 1分钟学会PS背景虚化
- 助企开门红 浙江省科技厅厅长高鹰忠一行到访加速科技
- 中国剩余定理与孙子问题
- c语言如何输出字母锥子塔,C語言课堂练习.doc