zoukankan      html  css  js  c++  java
  • 海量数据处理面试题

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

    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%的海量数据处理面试题

  • 相关阅读:
    ROM、RAM、DRAM、SRAM和FLASH的区别
    寄存器读写为什么需要用位操作符
    不同变量存放在什么地方
    C语言中数据类型对变量的作用
    内存寻址、对齐,变量左值和右值
    位、字节、半字、字、内存位宽
    面试题10- II. 青蛙跳台阶问题
    509. 斐波那契数
    面试题10- I. 斐波那契数列
    面试题32
  • 原文地址:https://www.cnblogs.com/gattaca/p/4726249.html
Copyright © 2011-2022 走看看