题目:有一个包含100亿个url的大文件,假设每个url占用64B,请找出其中所有重复的url
补充问题:某搜索公司一天的用户搜索词汇是海量的,请设计一种求出每天热门的top 100 词汇的可行方法
思想:用哈希分流的思想来处理,把包含百亿数量的词汇文件分流到不同机器上,具体多少台机器根据面试官规定或者更多的限制来决定。对每一台机器来说,如果分到的数据量依然很大,比如内存不够或其它问题,可以再用哈希函数把每台机器的流文件拆成更小的文件处理。处理每一个小文件的时候,通过哈希表统计每种词及其词频,哈希表记录建立之后,再遍历哈希表,遍历过程中使用小根堆来选择topk。
大根堆用于升序排序(所以求最小的前k个数用大根堆),小根堆用于降序排序(所以求最大的前k个数(常见的topk问题,基本都是求最大的前k个数)用小根堆)