• 云计算面试题集锦


    1. 一个大的含有50M个URL的记录,一个小的含有500个URL的记录,找出两个记录里相同的URL。

    回答:
    首先使用包含500个url的文件创建一个hash_set。
    然后遍历50M的url记录,如果url在hash_set中,则输出此url并从hash_set中删除这个url。
    所有输出的url就是两个记录里相同的url。

    2. 海量日志数据,提取出某日访问百度次数最多的那个IP。

    回答:如果日志文件足够的大,大到不能完全加载到内存中的话。那么可以考虑分而治之的策略,按照IP地址的hash(IP)%1024值,将海量日志存储到1024个小文件中。每个小文件最多包含4M个IP地址。对于每个小文件,可以构建一个IP作为key,出现次数作为value的hash_map,并记录当前出现次数最多的1个IP地址。有了1024个小文件中的出现次数最多的IP,我们就可以轻松得到总体上出现次数最多的IP。

    3. 有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。如何按照query的频度排序?

    回答:
     1)读取10个文件,按照hash(query)%10的结果将query写到对应的文件中。这样我们就有了10个大小约为1G的文件。任意一个query只会出现在某个文件中。
     2)对于1)中获得的10个文件,分别进行如下操作
      -利用hash_map(query,query_count)来统计每个query出现的次数。
      -利用堆排序算法对query按照出现次数进行排序。
      -将排序好的query输出的文件中。
      这样我们就获得了10个文件,每个文件中都是按频率排序好的query。
     3)对2)中获得的10个文件进行归并排序,并将最终结果输出到文件中。

    4. 给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?

    答案:
      unsigned int的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。

    5. 在一个文件中有10G个整数,乱序排列,要求找出中位数。内存限制为2G。

    回答:

      不妨假设10G个整数是64bit的。  2G内存可以存放256M个64bit整数。  我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。  如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Javascript事件机制
    DOM模型
    MVC与三层架构解析学习
    BOM基础
    Javascript对象
    Javascript关键字,条件语句,函数及函数相关知识
    单词首字母大写
    HTML5.1 新增的14项特性学习
  • 原文地址:https://www.cnblogs.com/hongyanee/p/3379858.html
Copyright © 2020-2023  润新知