海量数据处理
1. 给一个超过100G大小的log file,log 中存着IP地址,设计算法找到出现次数最多的IP地址?
100G的文件给我们的感觉是太大,我们的电脑内存一般都为4G左右,所以不可能一次性把这么多的信息都加载到内存,所以就要进行切分成100份。IP地址是字符串太长,我们可以把它转化为整形%100,这样取模后的值都落在0-99的区间里,所取模后值相同的IP地址都被分配到同一个文件,这时我们就可以采用哈希表统计出每个文件中最多的那个IP地址,最后比较得到100个IP中最大的那个IP就可以了。
技巧
注意切片的思想。有些会让写代码,但首先应该把思路讲出来,思路清晰也能得一半分,关于之后代码的实现,大致关键代码需要能够写出。
2. 与上题条件相同,如何找到top K的IP?
看到求top K 个 IP就要立马反应到使用堆排序,这里的堆排序应该注意的是要建一个小堆,想一下我们建立堆的话只能保证堆顶元素为最大的,这样只能得到最大的那个IP。
3. 给定100亿个整数,设计算法找到只出现一次的整数?
整数分为有符号和无符号两种,有符号数的取值为-2147483648~2147483648 是从-21亿到+21亿,无符号数的范围为0 ~ 4294967296 是从 0 到 42 亿,然而给了我们 100 亿个整数,要找出只出现一次的整数,所以我们还是要用到哈希表的思想,但我们最好不要定义一个整形数组,因