PHP试题---文件1T大小数据按行存储取出重复最多的top10(运行内存有限制)

最近有去Testin(云测)公司面试,有问到一个关于大文件处理的一个问题,具体问题如下:文件大小1T左右,运行内存100M,文件中有可能有重复数据,现在的需求就是取出文件里面重复数最高的top10。

我一开始给出的是理想状态下的解决方案,就是这个文件中有大量重复的数据,按着这个思想来搞的话,那我肯定是在运行内存足够的情况下来多次读取这个文件,之后就是标记每行值的重复次数,至于这个处理出来的数据放在那里的问题,相信大家都有一定见解,咱这里就不废话了。

按着上述方案的话,在内存100M的情况下,确实是可以来处理这个文件的,但是我们作为程序员就不得不考虑极端情况了,那就是文件中重复的数据很少或者没有的情况,这种情况下,按着我们上述方案来说的话,可能就会让文件变得更大,或者数据量更多,虽然可以处理,但并不见得是最好的。

后来,问了下面试官,人家给出的方案是先是用文件处理工具把文件分成若干份,之后单独读取这些文件,我们把读取出来的数据进行一些处理,之后我们把重复度不同数据放到不同的文件中,最后按着重复度从高到低的顺序来处理就可以。

我来详细的解释下,意思就是我们把重复度为1的所有数据行放到一个文件中,2放到另外一个文件中,以此类推,之后就是从重复度最高的文件中取出top10,就可以了。

有人可能问了,在上述方案中,如果所有的数据重复度都是1的话,那我们应该如何,这个大家可以考虑下,我们上学考试的时候,取出班里分数前十的同学,那么最后第十个和第十一个分数一样咋办,那肯定是考虑场景来取了。

好啦,本次记录就到这里了,像上述方案之类的处理文件的方式还有很多,咱这里就不赘述了。

如果感觉不错的话,请多多点赞支持哦。。。

你可能感兴趣的:(原创,PHP试题,运行内存有限制,运行内存有限制)