zoukankan      html  css  js  c++  java
  • 大数据面试题知识点分析(八)

    转自:https://blog.csdn.net/qq_26803795/article/details/79474604



    本篇博客列举几个笔试或面试常见的小案例,其实它们的解决方案很多都是类似的,主要考察的也是大数据技术处理数据的思想,下面让我们一起分析总结:

     

    1)海量日志数据,提取出某日访问百度次数最多的那个IP?

    算法思想:分而治之+Hash

    1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
    2.可以考虑采用“分而治之”的思想,按照IP地址的hash(ip)%1024,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
    3.对于每个小文件,可以构建一个ip为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个ip地址;
    4.可以得到1024个小文件中的出现次数最多的ip,再依据常规的排序算法得到总体上出现次数最多的ip。

    2)有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M,返回频数最高的100个词?

            顺序读取该文件,对于每个词X,取hash(X)%5000,然后按照该值存到5000个小文件(记为x0,x1,x2…x4999)中.这样每个文件大概是200k左右。
            如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。
         对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100个词及相应的频率存入文件,这样又得到了5000个文件,下一步就是把这5000个文件进行归并(类似于归并排序)的过程了。

     

    3)给定A、B两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出A、B文件共同的url?

      可以估算一下每个文件的大小为5G*64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理,仍然可以考虑采取分而治之的方法。

        ①遍历文件A,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,…,a999)中,这样每个小文件大约为300M。

        ②遍历文件B采取和A相同的方式将url分别存储到1000小文件(记为a0vsb0,a1vsb1,…,a999vsb999)中,不对应的小文件不可能相同的url.然后我们只要求出1000对小文件中相同的url即可。

        ③求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。


  • 相关阅读:
    Add Binary <leetcode>
    那些坑
    面试集锦
    随看随记
    View的事件处理流程
    android studio view.setId报错
    EditText的hint不显示
    EditText 焦点
    Android拍照的那些事
    微信支付提示签名错误
  • 原文地址:https://www.cnblogs.com/tongxupeng/p/10259517.html
Copyright © 2011-2022 走看看