一道面试题,给大家分享
毕业已找到工作,尽管工资一般,但毕竟是菜鸟,所以还是能接受。现在也闲下来了,给大家分享一些面试题,以后说不定有人面试会用到。这是我技术一面时的一道题,海量处理的,我是不会做,现在也一样。
题目如下:
有一个文件,文件里面有10Gitem,item是由用户id和其拥有的资源id构成,内存是500M。如何在短时间内找到拥有资源数最多的10个用户id。注意用户id数目可能也有将近10G。
时间复杂度应该是o(n)-o(nlgn)左右的,策略自己设计。当时自己是说了一个败者树多路归并的,说的很挫,挂了。
[解决办法]
聚集索引或者hastable!
[解决办法]
用户id是什么格式的?
item会重复不?
如果ID就是一个uint32,可以分段处理
500M内存可以放100M个ID,处理40次就可以处理完uint32个ID,读40次文件就OK了。
如果ID是一个串,先把内容根据ID hash到1000个文件,然后每个文件再单独处理。只要读两次文件,但要写一次文件。
[解决办法]
没有特点的“海量”数据统计,唯一的办法就是多路归并外排序,读两次硬盘,写一次硬盘