来源 | 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?相关推荐

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

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

  2. 字节一面:如何从 100 亿 URL 中找出相同的 URL?

    点击关注公众号,Java干货及时送达 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每 ...

  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亿数中找出前1000大的数

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...

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

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

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

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

最新文章

  1. linux限制显卡频率,关于安装Linux (FC6)频率超出范围与显卡驱动
  2. TCP/IP通信程序设计方式
  3. HDR 成像技术学习(一)
  4. 老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)
  5. jQuery中的ready
  6. java 计算 时间差_Java8 时间差计算
  7. 0804------算法笔记----------最长公共子序列
  8. Linux镜像文件提取,如何提取linux 系统镜像文件
  9. 文件搜索工具终极大PK挑战赛
  10. ret2text涉及到的堆栈平衡问题
  11. Android netd 简单分析和配置iptable
  12. 70人团队创造超30亿美元年交易额,这家美国电商竟是中国制造
  13. html ui动画效果图,20种炫酷的菜单线条动画特效UI设计效果_html/css_WEB-ITnose
  14. 解决IDEA打断点后,执行代码不会停在断点问题
  15. 【Docker】Linux各系统安装Docker,Docker-compose方式汇总
  16. day21|216.组合总和III、17.电话号码的字母组合
  17. 1分钟学会PS背景虚化
  18. 助企开门红 浙江省科技厅厅长高鹰忠一行到访加速科技
  19. 中国剩余定理与孙子问题
  20. c语言如何输出字母锥子塔,C語言课堂练习.doc

热门文章

  1. 测试算法(性能)的工具类
  2. tomcat 修改默认访问根目录
  3. linux c 获取 CPU、内存、IO、磁盘、网速
  4. centos7 安装 python3
  5. CPA、CPS、CPM、CPT、CPC 是什么
  6. iptables规则的查看、添加、删除和修改
  7. GetLocaleInfo和本地化
  8. 分支优化:neg+sbb算术运算代替逻辑跳
  9. Windows内核新手上路1——挂钩SSDT
  10. windows与linux下的\r\n