2-十七道海量数据处理面试题与bit-map详解.pdfVIP

2-十七道海量数据处理面试题与bit-map详解.pdf

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2._十七道海量数据处理面试题与 Bit-map 详解 作者:小桥流水,redfox66,July 。 前言 本博客内曾经整理过有关海量数据处理的 10 道面试题(十道海量数据处理面试题与十个方 法大总结),此次除了重复了之前的 10 道面试题之后,重新多整理了 7 道。仅作各位参考, 不作它用。 同时,程序员编程艺术系列将重新开始创作,第十一章以后的部分题目来源将取自下文中的 17 道海量数据处理的面试题。因为,我们觉得,下文的每一道面试题都值得重新思考,重 新深究与学习。再者,编程艺术系列的前十章也是这么来的。若您有任何问题或建议,欢迎 不吝指正。谢谢。 第一部分、十五道海量数据处理面试题 1. 给定 a、b 两个文件,各存放 50 亿个 url,每个 url 各占 64 字节,内存限制是 4G,让 你找出 a、b 文件共同的 url? 方案 1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G 。所以不 可能将其完全加载到内存中处理。考虑采取分而治之的方法。 1.遍历文件 a,对每个 url 求取 ,然后根据所取得的值将 url 分别存 储到 1000 个小文件(记为 )中。这样每个小文件的大约为300M。 2.遍历文件 b,采取和 a 相同的方式将 url 分别存储到 1000 小文件中(记为 )。这样处理后,所有可能相同的 url 都在对应的小文件 ( )中,不对应的小文件不可能有相同的url。然后 我们只要求出 1000 对小文件中相同的 url 即可。 3.求每对小文件中相同的 url 时,可以把其中一个小文件的 url 存储到 hash_set 中。 然后遍历另一个小文件的每个 url,看其是否在刚才构建的 hash_set 中,如果是, 那么就是共同的 url,存到文件里面就可以了。 方案 2:如果允许有一定的错误率,可以使用 Bloom filter,4G 内存大概可以表示340 亿 bit。将其中一个文件中的url 使用 Bloom filter 映射为这 340 亿 bit,然后挨个读取另外一个 文件的 url,检查是否与 Bloom filter,如果是,那么该 url 应该是共同的 url (注意会有一定 的错误率)。 读者反馈@crowgns: 1.hash 后要判断每个文件大小,如果 hash 分的不均衡有文件较大,还应继续 hash 分文件,换个 hash 算法第二次再分较大的文件,一直分到没有较大的文件为止。 这样文件标号可以用 A1-2 表示(第一次 hash 编号为 1,文件较大所以参加第二 次 hash,编号为 2 ) 2. 由于 1 存在,第一次 hash 如果有大文件,不能用直接 set 的方法。建议对每个文 件都先用字符串自然顺序排序,然后具有相同 hash 编号的(如都是 1-3,而不 能 a 编号是 1,b 编号是 1-1 和 1-2 ),可以直接从头到尾比较一遍。对于层级 不一致的,如 a1,b 有 1-1,1-2-1,1-2-2,层级浅的要和层级深的每个文件都 比较一次,才能确认每个相同的uri。 2. 有 10 个文件,每个文件 1G,每个文件的每一行存放的都是用户的 query,每个文件的 query 都可能重复。要求你按照 query 的频度排序。 方案 1: 1.顺序读取 10 个文件,按照 hash(query)%10 的结果将query 写入到另外 10 个文 件(记为 )中。这样新生成的文件每个的大小大约也 1G (假设hash 函数是随机的)。 2.找一台内存在 2G 左右的机器,依次对 用 hash_map(query, query_count)来统计每个 query 出现的次数。利用快速/堆/归并排序按照出现次 数进行排序。将排序好的 query 和对应的 query_cout 输出到文件中。这样得到

文档评论(0)

仙人指路 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档