• 海量数据处理面试题


        本文主要整理一些常见的海量数据处理面试题。

    1. 海量id,找出出现次数最多的id

    情况1:

        直接hash table统计,hash table包含N个(id, count)对,遍历求最值。

    情况2:

        内存受限,海量id通过hash函数(id看做整数,hash函数取%1000)映射到1000个文件。每个文件使用hash table统计,产生1000个最值,遍历这1000个数求最值。

    2. 海量id,找出出现次数最多的k个id

    情况1:

        直接hash table统计,使用小根堆求top k。复杂度为O(n) + O(nlogk)。

    情况2:

        内存受限,海量id通过hash函数映射到1000个文件。每个文件使用hash table统计 + 小根堆产生一个top k,共1000个top k,归并排序1000个top k,产生最终的top k。

    3. bitmap        (2^32 约等于43亿)

    Q1:在2.5亿个整数中找出不重复的整数

        采用2-bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示出现多次,11无意义)。遍历这2.5亿个整数,查看bitmap中相对应位,如果是00变01,01变10,10保持不变。遍历结束,查看bitmap,对应位是01的整数就是不重复的。

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

        使用bitmap。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应的bit是否为1。为1表示存在,为0表示不存在。

    4. 1000亿个数,无序,找出它们的中位数

        第一次扫描把这些数划分到多个区域,统计每个区域的整数个数,找到中位数所在区域。第二次扫描该区域,统计每个数出现的次数,找到中位数。(如果数据量不大,可以使用快排的partition,或者直接map统计不同数出现的次数)

    reference:

    教你如何迅速秒杀掉:99%的海量数据处理面试题

  • 相关阅读:
    POJ 1077 Eight(单向搜索)
    HDU 1943 Ball bearings(简单数学问题)
    POJ 2632 Crashing Robots(水模拟)
    HDU 1047 Integer Inquiry(高精度加法)
    POJ 1068 Parencodings(模拟)
    [转]修改 ibatis 分页机制(ORACLE物理分页)
    实现判断机器大小端的两种方法
    linux环境下库的制作和升级
    fork函数的理解1
    如何求一个文件的行数?
  • 原文地址:https://www.cnblogs.com/gattaca/p/4726249.html
Copyright © 2020-2023  润新知