找到100亿个URL中重复的URL以及搜索词汇的top K 问题

前天去腾讯面试大数据开发,问到的题目,总结一下。

题目一、有一个包含100亿个URL的大文件,假设每个URL占用16B,请找出其中所有重复的URL。

题目二、某搜索公司一天的用户搜索词汇是海量的百亿数据量,请设计一种求出每天最热top 100 词汇的可行办法。

题目一解法:

       由于数据量很大,16*100亿B = 1600亿Byte,约等于160G。10亿Byte约等于1G大小。这种题目都是有数据资源限制的。如果说机器内存只有16G,那我们可以通过Hash算法,把原始大文件,hash分成10个小文件。或者hash成更多更小的文件,以满足机器资源限制。因为通过hash,我们可以保证相同的URL一定可以被分配到相同的小文件上。然后从每个文件里统计计算每个URL出现就可以了,可以使用hashMap存放统计结果。

题目二解法:

       其实也是基于题目一来发散这个题目。每天海量的搜索数据,会先存起来。但是我们在存的时候,也是先做hash,看新进来的词汇会分配到那个节点(或者说小文件、分区),更新统计这个节点(分区)的hashmap统计结果,也就是给这个新加的词汇出现次数+1,然后这个文件,对应的hashmap统计有一个小根堆(100个node),存放着当前这个小文件top 100的最热统计,最后我们汇总多个小文件的小根堆,得到总的top 100.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值