大数据方面面试题思路与技巧
大数据题目的解题技巧
- 哈希函数可以把数据按照种类均匀分流
- 布隆过滤器用于集合的建立与查询,并可以节省大量空间
- 一致性哈希解决数据服务器的负载管理问题
- 利用并查集结构做岛问题的并行计算
- 位图解决某一范围上数字的出现情况,并可以节省大量空间
- 利用分段统计思想、并进一步节省大量空间
- 利用堆、外排序来做多个处理单元的结果合并
题目1 找到未出现的数
32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?
【进阶】
内存限制为3KB,但是只用找到一个没出现过的数即可
【再次进阶】
使用有限几个变量,但是只用找到一个没出现过的数即可
解法:位图
该题无符号整数的范围为0 到 232-1,无符号整数的个数为40亿个。
想要将范围上的所有数字存储在 bit 数组上。所需的数组长度是232,需要的内存为232/8(Byte)约等于512M左右,遍历该文件将出现的数所对应的bit 位变成1,剩下为0的位置对应的数就是没有出现过的数。
进阶问题解法:无符号整型数组 + 范围统计
3KB可以生成无符号整型数组为 3*1024/4=768。找到一个最接近这个数的2的某次方,即5