- 浏览: 169814 次
- 性别:
- 来自: 广州
最新评论
-
edr_:
baungham 写道 thanks....一起学习
Hashcode的作用 -
baungham:
...
Hashcode的作用 -
谁说我不是会员:
...
设计模式-桥接模式与策略模式之间的区别 -
edr_:
怪兽00 写道同是实习生,你在哪儿实习?广州,外包公司..你? ...
写在2013年末 -
怪兽00:
同是实习生,你在哪儿实习?
写在2013年末
大数据时代是一个信息量爆炸的时代,利用数据分析将会产生不可估量的价值,基金,证券,电商以及现在越来越火的O2O。当然作为一个热点,企业的笔试与面试中当然少不了关于大数据的问题。
今天就写写之前的一道笔试题:每个用户访问,系统都会记录用户的IP到日志中,一个小时产生1G的日志文件,请分析日志文件获取当天访问次数前100的IP(大概是这样)。
由于IP是32位的,最多有个2^32个IP,也就是4G,所以不能完全加载到内存中处理;可以采用映射的方法,按照IP地址的Hash(IP)%1024值,把整个大文件映射为1024个小文件,再依次分析每个小文中出现频率最大的前100个IP及相应的频率,因为涉及到排序,所以使用到了TreeSet。
画图应该好理解一点:
具体代码如下:
IP对象类:
测试代码:
有一篇博文说得好,扎实的基础跟开阔的视野才是企业所看重的。
关注时代的发展,学习能力强,愿意接受新事物才是企业所喜欢的,当然双向选择,一个创新,有挑战,能快,高,长大的企业也是雇员所喜欢的。加油~
Have a nice day~
今天就写写之前的一道笔试题:每个用户访问,系统都会记录用户的IP到日志中,一个小时产生1G的日志文件,请分析日志文件获取当天访问次数前100的IP(大概是这样)。
由于IP是32位的,最多有个2^32个IP,也就是4G,所以不能完全加载到内存中处理;可以采用映射的方法,按照IP地址的Hash(IP)%1024值,把整个大文件映射为1024个小文件,再依次分析每个小文中出现频率最大的前100个IP及相应的频率,因为涉及到排序,所以使用到了TreeSet。
画图应该好理解一点:
具体代码如下:
package test.bigdata; import java.io.*; import java.security.SecureRandom; import java.util.*; public class LogAnalysis { //保存每个文件的流对象 public final Map<Integer,BufferedWriter> bwMap = new HashMap<Integer,BufferedWriter>(); //分隔文件用-存储相当数量之后再存入某个文件 public final Map<Integer,List<String>> dataMap = new HashMap<Integer,List<String>>(); //存储访问次数前100的IP public Set<IP> set = new TreeSet<IP>(); // 生成日志文件 public void creatLog(File log,long logNums) throws Exception{ FileWriter fw = new FileWriter(log,true); BufferedWriter bw = new BufferedWriter(fw); SecureRandom random = new SecureRandom(); for (int i = 0; i < logNums; i++) { bw.write("192."+random.nextInt(255)+"."+random.nextInt(255)+"."+random.nextInt(255)+"\n"); if((i+1) % 1000 == 0){ bw.flush(); } } bw.flush(); fw.close(); bw.close(); } // 分割日志文件 public void splitLog(File logflie,int fileNums) throws Exception{ FileReader fr = new FileReader(logflie); BufferedReader br =new BufferedReader(fr); String ip = br.readLine(); //先创建文件及流对象方便使用 for(int i=0;i<fileNums;i++){ File file = new File("D:\\javasoft\\TempTest\\BigData\\logSplit\\"+ i + ".txt"); bwMap.put(i, new BufferedWriter(new FileWriter(file,true))); dataMap.put(i, new LinkedList<String>()); } while(ip != null){ int hashCode = ip.hashCode(); hashCode = hashCode < 0 ? -hashCode : hashCode; int fileNum = hashCode % fileNums; List<String> list = dataMap.get(fileNum); list.add(ip + "\n"); if(list.size() % 1000 == 0){ BufferedWriter writer = bwMap.get(fileNum); for(String line : list){ writer.write(line); } writer.flush(); list.clear(); } ip = br.readLine(); } for(int fn : bwMap.keySet()){ List<String> list = dataMap.get(fn); BufferedWriter writer = bwMap.get(fn); for(String line : list){ writer.write(line); } list.clear(); writer.flush(); writer.close(); } bwMap.clear(); fr.close(); br.close(); } //分析统计,找出次数前100的IP public void analysis(File logSplit) throws Exception{ FileReader fr = new FileReader(logSplit); BufferedReader br =new BufferedReader(fr); String ip = br.readLine(); //临时temp1存储当前文件所有IP Set<IP> temp1 = new TreeSet<IP>(); while(ip != null){ ip = ip.trim(); temp1.add(new IP(ip,1)); ip = br.readLine(); } br.close(); fr.close(); //提取temp1存储当前文件访问次数前100的IP并将其与set合并 int i=0; for (IP o : temp1) { set.add(o); if (i>100) { break; } i++; } //临时temp2截取已经合并的set中前100的IP Set<IP> temp2 = new TreeSet<IP>(); for (IP o : set) { temp2.add(o); if (i>100) { break; } i++; } //使得set一直存储目前已经分析访问次数前100的IP set = temp2; temp2=null; temp1=null; } }
IP对象类:
class IP implements Comparable<IP>{ public String ip; public int nums; public IP(){} public IP(String ip,int nums){ this.ip = ip; this.nums = nums; } @Override public int compareTo(IP o) { if (this.ip.equals(o.ip)) { o.nums=this.nums+o.nums; }else { if (this.nums > o.nums) { return -1; }else{ return 1; } } return 0; } }
测试代码:
package test.bigdata; import java.io.*; public class TestIP { public static void main(String[] args) throws Exception{ //生成模拟日志文件 LogAnalysis logAnalysis = new LogAnalysis(); File log = new File("D:\\javasoft\\TempTest\\BigData\\ip.txt"); log.createNewFile(); logAnalysis.creatLog(log, 10000);//节省时间 //分割日志文件 logAnalysis.splitLog(log, 1024); //分析文件 File logSplits = new File("D:\\javasoft\\TempTest\\BigData\\logSplit"); for (File logSplit : logSplits.listFiles()) { logAnalysis.analysis(logSplit); } for (IP o : logAnalysis.set) { System.out.println(o.ip+"---"+o.nums); } } }
有一篇博文说得好,扎实的基础跟开阔的视野才是企业所看重的。
关注时代的发展,学习能力强,愿意接受新事物才是企业所喜欢的,当然双向选择,一个创新,有挑战,能快,高,长大的企业也是雇员所喜欢的。加油~
Have a nice day~
发表评论
-
收藏网址【不定期更新】
2014-03-06 17:53 0国外: http://www.programcreek.com ... -
Eclipse使用
2014-03-04 13:46 997一直以来都是使用Myeclipse开发,觉得很方便,也觉得没有 ... -
关于Java继承
2014-02-18 18:43 855关于Java继承 前阵子无意间看见一篇博文写到:子类继承父类, ... -
算法系列之回溯算法
2013-10-31 22:11 2163回溯算法 也称试探法,一种系统地搜索问题的解的算法。其基本思想 ... -
网络编程-UDP【转】
2013-10-19 00:38 1092UDP通信 转自传智播客: ... -
简述synchronized和java.util.concurrent.locks.Lock的异同
2013-10-11 00:09 8245简述synchronized和java.util.concur ... -
Java多线程-BlockingQueue【转】
2013-10-09 23:31 1926转自:Java多线程-工具篇-BlockingQueue - ... -
Java动态代理
2013-10-05 10:23 1020Java动态代理 继上篇关于Java反射机制涉及到的动态代理应 ... -
Java反射机制
2013-10-04 22:48 1757Java反射机制 继上篇文 ... -
关于类的加载顺序
2013-09-29 19:35 1356关于类的加载顺序 最近瞎搞数据结构跟算法,今天把笔记上的这道题 ... -
算法系列之KMP算法
2013-09-25 23:37 3594串的模式匹配算法 模式匹配是指将两个模式作为输入,计算模式元素 ... -
守护线程(Daemon)
2013-09-15 22:09 1484浅谈守护线程(Daemon ['d ... -
Java发射机制
2013-09-13 00:24 0Java发射机制 -
常见内部排序算法之归并排序
2013-09-11 22:45 1146常见内部排序算法之归并排序 来自百度百科的解释: 归并(Mer ... -
常见内部排序算法之插入排序
2013-09-10 23:13 1172常见内部排序算法之插入排序 今天来写写插入排序算法,包括直接插 ... -
常见内部排序算法之交换排序
2013-09-09 15:51 2832交换排序,就是不断的交换,一直到适合为止。选择排序主要是不断的 ... -
常见内部排序算法之选择排序
2013-09-09 00:09 1319常见内部排序算法 包括选择排序算法,交换排序算法,插入排序算法 ... -
浅谈生产消费模式
2013-09-03 16:52 921关于生产消费模式 关于生产消费模式,其实就是两个线程之间共用一 ... -
Hashcode的作用
2013-08-25 14:58 7912关于Hashcode的作用 总的来说,Java中的集合(C ... -
浅谈java深浅拷贝
2013-07-20 22:38 2105在一个论坛上看到了一个关于深浅拷贝的文章,引用地址:http: ...
相关推荐
这份"名企面试笔试真题:TI 笔试题.rar"文件,通过模拟数字应用工程师和MCU助理应用工程师的笔试题目,为求职者提供了一次了解和准备TI面试的机会。 1. **模拟电路与数字电路**: - 模拟电路涉及电阻、电容、电感...
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
2015阿里巴巴笔试题:产品经理及运营篇.pdf
嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...
thoughtworks的笔试题:会议安排。本人使用Java实现,把会议封装成对象,再调用工具类安排会议。下载后的代码里面包含本人姓名,记得改正!附件有运行成功截图!代码能够完美运行,如不能运行我被车撞死!!请放心...
中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 v中兴笔试题 中兴笔试题 ...中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题 中兴笔试题
java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...
大连华信去年的笔试题,可以给各位即将工作的同学一些参考
【中广核在线笔试试题解析】 中广核的在线笔试试题主要涵盖数学推理和演绎推理两大类,旨在测试应聘者的逻辑思维能力和快速解决问题的能力。以下是对部分试题的详细解答和知识点解析: 1. 数字推理题: 这类题型...
C#笔试题大全C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.C#笔试题大全.,让你...
算法笔试题:(Python实现)—— 算法面试题汇总算法笔试题:(Python实现)—— 算法面试题汇总开始之前Python实现只出现一次的数字多数元素搜索二维矩阵 II合并两个有序数组鸡蛋掉落字符串Python实现验证回文串...
数据结构算法笔试题汇总 本资源摘要信息是关于数据结构和算法的笔试题汇总,涵盖了数据结构和算法的基础知识、常见题型和解题思路。 数据结构基础知识 数据结构是一门计算机科学中研究数据的逻辑结构、对各种数据...
阿里巴巴多岗位校园招聘笔试真题汇总-2021 包含多个岗位方向的校园招聘笔试真题: 交互设计师岗 产品运营岗 技术web前端开发岗 技术岗位通识 游戏运营岗 用户体验实习生岗 研发工程师岗 营销专员岗 视觉设计师岗 ...
2012-2015历年中国移动笔试真题资料移动招聘合集: 2010年中国移动北京分公司校园招聘网申测试题.doc 2010江苏移动招聘笔试完整试卷.doc 2011年中国移动广东公司招聘笔试试题及答案---.doc 2011年江苏移动招聘笔试...
《4399游戏开发笔试题:探索游戏开发的核心技术与面试策略》 4399,作为国内知名的游戏平台,其2015年校园招聘的笔试题无疑是对潜在游戏开发者的一次全面考验。这份笔试题集不仅揭示了游戏开发的基本技能要求,也...
2023-04-08 项目笔记-...循环语句 3.1while循环 3.1.1while语句中的break和continue 3.2for循环 3.2.1语法 3.2.2break和continue中 3.2.3for语句的循环控制变量 3.2.4一些for循环的变种 3.2.5一道笔试题:- 2024-04-15
"华为历年笔试题大汇总-31" 本资源汇总了华为历年来的笔试题目,涵盖了多种类型的岗位和领域,包括通信基础、软件工程师、硬件、财经、会计等。以下是对该资源中包含的知识点的详细解释: 一、通信基础知识点 1. ...
通过这些笔试题,招聘方可以全面评估应聘者的网络理论知识、实践经验和问题解决能力,以确保他们能够在实际工作中胜任华三交换机的管理和维护工作。对于备考者来说,深入学习并掌握上述知识点,不仅有助于通过考试,...
- 在提供的代码示例中,`aMethod()` 方法尝试访问静态变量`i`,但由于该方法被声明为非静态,所以不能直接访问静态成员。这会导致编译失败,故答案为**D**。 ### 3. 实例方法调用 **知识点概述:** - 实例方法是指...