题目描述

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

推荐一个艿艿写的 6000+ Star 的 SpringBoot + SpringCloud + Dubbo 教程的仓库:https://github.com/YunaiV/SpringBoot-Labs

解答思路

每个 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 保存到一个单独的文件中。

推荐一个艿艿写的 3000+ Star 的 SpringCloud Alibaba 电商开源项目的仓库:https://github.com/YunaiV/onemall

方法总结

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

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

面试:如何从 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?

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

  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. 【面试现场】如何在10亿数中找出前1000大的数

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

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

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

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

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

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

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

最新文章

  1. 不能记账,往来帐页不能显示结转数据
  2. 今年央视春晚的创意担当,给了这个1岁的拓荒牛机器人
  3. 查看Linux硬件信息命令的使用
  4. python内置模块re_常用内置模块(11):正则表达式、re模块
  5. 干货 | 万字长文全面解析GraphQL,携程微服务背景下的前后端数据交互方案
  6. MySQL相关常用命令
  7. Oracle简单建立表空间
  8. 专访丨HashData创始人简丽荣:云原生与大数据时代,湖仓一体代表了未来
  9. python list去重函数_python 列表函数
  10. 天涯明月刀微信群服务器名称,微信群名称大全
  11. 好的架构不是设计出来的,而是演进出来的
  12. JDK8的新特性——Lambda表达式
  13. 《地平线:零之曙光》——游戏体验和主观评价
  14. 上海BFC外滩金融中心潮流新店,aaddd揭秘全新生活美学
  15. Excel_VBA开发2048游戏教程——Einsphoton
  16. 通达信指标转python_通达信转python
  17. MySQL的安全解决方案
  18. MySQL-SQL语句优化
  19. 在不支持PAE的机器上装Linux(Ubuntu)的方法
  20. KITTI数据集学习笔记

热门文章

  1. 发布几个PDF小工具
  2. 编程之美-电话号码对应英文单词方法整理
  3. 【OpenCV3】cv::Mat类成员函数详解
  4. Windbg/KD驱动调试点滴–将平时调试的一些小方法共享给大家 --------- 转
  5. INTERSPEECH 2017系列 | 语音识别之语言模型技术
  6. 巧妙设置yum软件库轻松解决软件包安装问题
  7. linux环境下创建MyOS虚拟机
  8. AJAX 在中文社区的“集体信仰动摇”?!
  9. VS 2005 文本编码小技巧 --中文亂碼問題解決
  10. 【OpenCV】8邻域种子填充法剔除短连通域的高效算法