海量日志数据,提取出某日访问百度次数最多的那个IP

百度面试题——海量日志数据,提取出某日访问百度次数最多的那个IP 海量日志数据,找出访问次数最多的IP 分而治之,化整为零 Counter统计函数 sorted排序函数 hash函数:相同的字符串,经过hash计算得出结果肯定是相同的; 不同的字符串,经过hash计算结果相同的可能性极小。 阅读详情
 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。
或者如下阐述(雪域之鹰):
1)算法思想:分而治之+Hash
1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)24值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;
4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;

2)算法实现:

1. 由于手头没有数据,只能自己制造一个,1亿条IP数据,这个十分简单:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Random;
//produce 10000 * 10000 IP
public class IpDataSet {
private static int section = 10000;
private static int sum = 10000;
public static void main(String[] args) throws Exception {

BufferedWriter bw = new BufferedWriter(new FileWriter(new File("ip.txt")));
Random r = new Random();
StringBuffer buffer = null;
StringBuffer temp = null;

for(int i=1;i<=sum;i++){
buffer = new StringBuffer();
//每section个IP写一次。
for(int j=1;j<=section;j++){
temp = new StringBuffer();
temp.append(r.nextInt(256));
temp.append(".");
temp.append(r.nextInt(256));
temp.append(".");
temp.append(r.nextInt(256));
temp.append(".");
temp.append(r.nextInt(256));
//buffer的最后一个没有换行
if(j!=section){
temp.append("\n");
}
buffer.append(temp);
}
bw.write(buffer.toString());
//sum中的最后一个,也就是1亿条数据的最后一行没有newline();
if(i!=sum){
bw.newLine();
}
if(i0==0){
System.out.println(i);
}
}
bw.flush();
bw.close();
}
}
2.按照hashcode拆分文件:
见工程代码,一共2两种方法
3. 统计每个小文件,使用hashtable
package com.carlosfu.chap1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Hashtable;
import java.util.Iterator;

public class MaxFrecencyFinal {
public static void main(String[] args) throws Exception {
File dic = new File("data/");
File[] files = dic.listFiles();

int max = 0; // 下面IP地址的出现频率
String ip = ""; // 出现频率最大的那个IP地址
int index = 0; // 上面这个IP地址出现在第几个文件

//遍历每个文件,用hashtable的方法统计每个文件每个IP对应的频率,然后求出最大值

for(int i=0;i<files.length;i++){

File file = files[i];
Hashtable<String, Integer> table = new Hashtable<String, Integer>();
BufferedReader br = new BufferedReader(new FileReader(file));

for(String str = br.readLine();str!=null;){
Integer number = table.get(str);
if(number == null){
table.put(str, 1);
}else{
table.put(str, number+1);
}
str = br.readLine();
}
//遍历hashtable找个最大IP,max ,index

Iterator<String> it = (Iterator<String>) table.keys();
while(it.hasNext()){
String str = it.next();
int value = table.get(str);
if(value>max){
max = value;
ip = str;
index = i;
}
}
}
System.out.println("max ip at file: " + index);
System.out.println(ip);
System.out.println(max);
}
}

4.解释数组链表:
十道海量数据处理面试题Java实现(1)
RK3588 部署 ArcFace(r100)人脸识别模型:ONNX 转 RKNN 全流程详解 本文介绍了将ArcFace人脸识别模型转换为RKNN格式并部署到RK3588 NPU的方法。ArcFace是主流的人脸特征提取模型,适用于1:1比对和1:N检索等场景。文章详细说明了模型特点(输入112x112 RGB图像,输出512维特征向量)及转换步骤:首先使用torch2onnx将PyTorch模型转为ONNX格式,再通过RKNN工具进行量化转换。提供了完整的Python转换代码,包括预处理配置、模型加载、构建和导出过程。该方法能有效提升边缘设备上的人脸识别实时性,适用于门禁、考勤等应用场景。 阅读详情

相关推荐

408——计算机组成原理(持续更新)

小数点前的0代表正数,1代表负数。

qq_55202378的博客 1722

海量日志数据,提取出某日访问百度次数最多的那个IP。

题目: 海量日志数据,提取出某日访问百度次数最多的那个IP。算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;2.可以考虑采用“分而治之”的思想,按照IP地址的hash(ip)%1024,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;3.对于每个小文件,可以构建一个ip为key,出现次数为value的H

yxccc的博客 3519

uniapp 记录运动轨迹 开发_智能手环穿戴设备APP开发解决方案

智能手环是一种穿戴式智能设备,是目前备受关注的科技产品。目前智能手环具有的功能有记录日常生活中的运动数据、移动轨迹,定位等,有些还可以进行睡眠质量的检测,并将这些数据传送至移动端如手机、平板等,可对数据进行分析,指导健康生活的作用。而智能手环开发方案就是将这些功能实现,将算法烧录到主控板上。智能手环都有哪些功能  1、记录运动数据  对于喜欢健身的用户来说,智能手环记录的运动数据功能...

weixin_39678493的博客 1764

算法:海量日志数据,提取出某日访问百度次数最多的那个IP

首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。 或者如下阐述(雪域

踏雁寻花 1万+

Qt+VS集成高德红外相机SDK与OpenCV的采图实践

本文详细介绍了在Qt和Visual Studio环境中集成高德红外相机SDK与OpenCV的完整实践方案。涵盖环境配置、SDK初始化、图像采集与处理、多线程优化等关键技术点,重点解决了高德红外相机数据转换、温度信息提取和Qt界面显示优化等核心问题,为红外图像处理应用开发提供可靠参考。

palm99的专栏 645

用Python turtle库 绘制皮卡丘

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne...

qq_36295856的博客 2万+

海量日志数据提取出某日访问百度次数最多的IP,怎么做?

weixin_44844089的博客 288

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 511

海量日志数据,提取出某日访问百度次数最多的那个IP的C++实现源代码

1、海量日志数据,提取出某日访问百度次数最多的那个IP。   此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。   再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,

brk1985的专栏 2787

八路抢答器____一个作品的制作思路

学习了解到一个产品制作完全由一个人去采购,设计,仿真,画PCB。不光是需求的分析还有实现功能时如何搭建电路,和给出一个简单高效的设计方法也是至关重要的。

weixin_73690807的博客 1522

AMD KFD的SDMA Packet 类型和定义解析

本文详细分析了AMD GPU架构中的SDMA(System Direct Memory Access)数据传输机制,重点介绍了其核心数据结构——SDMA Packet。SDMA通过8种主要Packet类型(包括内存拷贝、数据写入、屏障同步、中断触发等)实现高效主机-设备通信。每种Packet采用位域结构和联合体封装设计,在保证功能完整性的同时实现空间优化。这些Packet支持丰富的访问属性和扩展字段,适用于高性能数据搬运、内存初始化、任务同步、性能分析等场景,为GPU计算提供了灵活高效的数据传输解决方案。

图形/计算GPU的驱动与虚拟化技术分享园地 1254

海量日志数据,提取出某日访问百度次数最多的那个IP----哈希表

1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再

m0_46598535的博客 521

【网络安全】AntSword蚁剑新手快速入门(附实战案例)

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑的特点主要有如下几点:1.支持多平台。包括macOS、Linux 32位、Linux 64位、Linux armv7l、Linux arm64、Windows 32位、Windows 64位。2.完善的文档。中国蚁剑文档地址。3.多项功能。文件管理功能、虚拟终端功能、数据库管理功能。4.内置代理功能。

等风来 1万+

1、(topK问题)海量日志数据,提取出某日访问百度次数最多的10个IP。

首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文件中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。#include &...

zhangyun75的博客 2295

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

百度面试题-海量日志,读取IP

4、海量日志数据,提取出某日访问百度次数最多的那个IP。 回答: 如果日志文件足够的大,大到不能完全加载到内存中的话。 那么可以考虑分而治之的策略,按照IP地址的hash(IP)%1024值,将海量日志存储到1024个小文件中。每个小文件最多包含4M个IP地址。 对于每个小文件,可以构建一个IP作为key,出现次数作为value的hash_map,并记录当前出现次数最多的1个IP地址。

dasgk的专栏 1359

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2019秋招复习笔记--海量数据处理(整理中)

1、海量日志数据,提取出某日访问百度次数最多的那个IP。 来源 算法思想:分而治之+Hash1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值(hash映射),把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;3.对于每一个小文件,可以构建...

weixin_30604651的博客 165

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Web Service CXF 两种开发的两种方式
下一篇: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
lb8607
博客等级 码龄18年 17粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值