这题是去哪儿二面的时候,我的老学长面试官给我出的题目.我觉得能拿来扯一扯,就写了.
题目描述:给你国内所有高校的往年的毕业生的毕业信息资料(强调了下数据很大很大),并将这一堆数据进行整合.整合后的结果为同一个人只保留他的最高学历的毕业信息.只给你一台内存为4G的电脑,问你该如何高效地处理这一堆数据.(PS:这是根据当时我简历写的那个项目来扯的,我当时的是某个省的高校近5年的毕业生信息处理)
这题目呢,就是一个典型的海量数据处理了.一开始我有点天真了,居然想着通过倒排文档来整合,图样图森破啊.这个想法直接被否定了,然后让我想想另一个解决办法.后来的想法是哈希,根据每个毕业生的身份证信息来进行哈希,把毕业生数据按照身份证前6位进行哈希(前面不是省啊,市啊什么的嘛,就这么哈希了),然后这样每次4G的内存肯定是能够处理的了(我不知道毕业生信息到底是多大,所以就化小了),然后就对这堆东西进行身份证,姓名进行查重,取最高学历的信息直接存下来就好了.这次我感觉,啊哈哈哈,应该能过了吧.然后,他又问:"如果我想要快一点,你会怎么做?".我说:"用多几台电脑呗,几台一起整肯定比一台要快."他说:"还是这样的一台电脑,我想快点,你要怎么做."我说;"嗯...这样的话,应该可以用流水线作业模型(前几天不小心看了个N年前诺基亚N9加工的视频,所以就想到了用这东西来处理)来并行处理吧."后面学长又问我"为什么这样做能提升处理速度."我说:"用流水线模型之所以会加速整个过程,是因为过去得把一组数据的三个过程(三个过程是1.将数据读入内存,2.处理数据,3.将数据存到另一个文件里)全部处理完之后,才能进行下一个组数据的处理,现在就可以三个过程并行着进行了.这样会使得程序每次不能处理4G的数据了,每次只能处理4/3G,不过这个应该不会用那么多啦,应该影响不会很大吧...."他说:"嗯,还行,这个问题算过了."(PS:这不是面经,就是说一道题而已,题目OVER)
这个问题讲完了,第一次写,写不好就喷吧,不过应该没人看.
怎么这么短....我还是详细展开下说吧....
1.什么是流水线模型.百度百科上的解释是:流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。
2.流水线模型适用范围(PS:纯属小生的个人观点,有错请指出哈,立马改).我认为任务应该满足:1,可以被切分.2,重叠执行.就比如车辆生产.要各个部件生产出来,然后再组装起来,各个部件生产和组装就是大任务切分成小任务.然后先生产零件再组装再测试什么什么的就是重叠了.还有别的,请自行Google,百度.