0
点赞
收藏
分享

微信扫一扫

1: 处理大量URL的问题或大文件的问题

题目一:问题描述: 在内存有限的机器上给10亿个URL去重,每个URL的大小小于56B,机器的内存4g


解题思路: 


1.硬解


我们通过2层的for循环也能解决这个问题。但是第一我们的机器内存受限于4G.先不关注内存能不能放得下的问题假如是100亿、1000亿条呢。我们也要考虑到性能的问题。


2.采取我们现在流行的分布式概念


我们将这些URL通过hash计算得出hash值。然后根据不同的hash值把这些去重的url分配到不同的机器上去做去重的操作。这样单台机器不会占用太大的内存,并且计算的效率也会比较高。


有时候面试中会有面试官问这些问题,我们要敢于想象。有时候会考虑怎么优化算法的问题,一时语塞也是有的。


题目二:问题描述:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,找出a、b文件共同的url


解题思路:

我们借鉴上题的解题思路。


第一步:把a、b 文件的url进行hash计算得出hash值。


第二步:把得到a、b文件中得到相同hash值的分配到同一台机器上,这样有重复的url肯定是分配到同一台机器上的。


第三步:把每台机器的a、b文件的内容放到不同的hashset上。我们做去重操作然后记录下来就可以了。


题目三:有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M,要求返回频数最高的100个词


我们根据上面两道题的思路继续解这个问题


第一步:顺序读取文件,并对每个词做hash,我们计算好1M内存的限制看需要分多少份。


我们知道 同一个词的hash肯定是一样的。

第二步:我们对每个小文件的词进行统计,可以使用hashmap等类进行处理


第三步:把切割的文件进行归并处理即可


题目四:现有海量日志数据保存在一个超级大的文件中,该文件无法直接读入内存,要求从中提取某天出访问百度次数最多的那个IP


该题的解题思路基本和上一题类似,这里就不在详述。


当我们在面试中遇到大文件,大数据量的问题,基本上都是分而治之的思路去解决的。 











举报

相关推荐

0 条评论