看了教你如何迅速秒杀掉:99%的海量数据处理面试题一文,的确是挺有收获的,特别是对这种海量数据的处理,的确是有了一个挺清晰的思路,特别感谢原文博主July。
处理海量数据问题存在的原因就在于1)数据量太大,无法在短时间内解决;2)内存不够,没办法装下那么多的数据。
而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率;2)针对空间,就是分而治之,将大数据量拆分成多个比较小的数据片,然后对其各个数据片进行处理,最后再处理各个数据片的结果。
原文中也给出一个问题,“从1亿个ip中访问次数最多的IP”,就试着来解决一下吧。
1)首先,生成1亿条数据,为了产生更多的重复ip,前面两节就不变了,只随机生成后面的2节。
private static String generateIp() {
return "192.168." + (int) (Math.random() * 255) + "."
+ (int) (Math.random() * 255) + "\n";
}
private static void generateIpsFile() {
File file = new File(FILE_NAME);
try {
FileWriter fileWriter = new FileWriter(file);
for (int i = 0; i < MAX_NUM; i++) {
fileWriter.write(generateIp());
}
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
1个char是一个Byte,每个ip大概是15Btye,所以生成的ip文件,大概是1,500,000,000Byte = 1,500,000 KB,如下: