第十四章:提取出某日访问百度次数最多的那个IP

2024-02-01 05:18

本文主要是介绍第十四章:提取出某日访问百度次数最多的那个IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提取出某日访问百度次数最多的那个IP

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

分析:IP地址是32位的二进制数,所以共有N=2^32=4G个不同的IP地址, 创建一个unsigned count[N];的数组,即可统计出每个IP的访问次数

#include <fstream>  
#include <iostream>  
#include <ctime>  using namespace std;  
#define N 32           //临时文件数  #define ID(x)  (x>>27)                 //x对应的文件编号  
#define VALUE(x) (x&0x07ffffff)        //x在文件中保存的值  
#define MAKE_IP(x,y)  ((x<<27)|y)      //由文件编号和值得到IP地址.  #define MEM_SIZE  128*1024*1024       //需分配内存的大小为 MEM_SIZE*sizeof(unsigned)     char* data_path="D:/test/ip.dat";        //ip数据  //产生n个随机IP地址  
void make_data(const int& n)         
{  ofstream out(data_path,ios::out|ios::binary);  srand((unsigned)(time(NULL)));  if (out)  {  for (int i=0; i<n; ++i)  {  unsigned val=unsigned(rand());           val = (val<<24)|val;              //产生unsigned类型的随机数  out.write((char *)&val,sizeof (unsigned));  }  }  out.close();
}  //找到访问次数最大的ip地址  
int main()  
{  //make_data(100);     //   make_data(100000000);       //产生测试用的IP数据  fstream arr[N];  for (int i=0; i<N; ++i)                 //创建N个临时文件  {  char tmp_path[128];     //临时文件路径  sprintf(tmp_path,"D:/test/tmp%d.dat",i);  arr[i].open(tmp_path, ios::trunc|ios::in|ios::out|ios::binary);  //打开第i个文件  if( !arr[i])  {  cout<<"open file"<<i<<"error"<<endl;  }  }  ifstream infile(data_path,ios::in|ios::binary);   //读入测试用的IP数据  unsigned data;  while(infile.read((char*)(&data), sizeof(data)))  {  unsigned val=VALUE(data);  int key=ID(data);  arr[ID(data)].write((char*)(&val), sizeof(val));           //保存到临时文件件中  }  for(unsigned i=0; i<N; ++i)  {  arr[i].seekg(0);  }  unsigned max_ip = 0;    //出现次数最多的ip地址  unsigned max_times = 0;     //最大只出现的次数  //分配512M内存,用于统计每个数出现的次数  unsigned *count = new unsigned[MEM_SIZE];    for (unsigned i=0; i<N; ++i)  {  memset(count, 0, sizeof(unsigned)*MEM_SIZE);  //统计每个临时文件件中不同数字出现的次数  unsigned data;  while(arr[i].read((char*)(&data), sizeof(unsigned)))       {  ++count[data];  }  //找出出现次数最多的IP地址  for(unsigned j=0; j<MEM_SIZE; ++j)                             {  if(max_times<count[j])             {  max_times = count[j];  max_ip = MAKE_IP(i,j);        // 恢复成原ip地址.  }  }  }  delete[] count;  unsigned char *result=(unsigned char *)(&max_ip);  printf("出现次数最多的IP为:%d.%d.%d.%d,共出现%d次\n",   result[0], result[1], result[2], result[3], max_times);  
}  



这篇关于第十四章:提取出某日访问百度次数最多的那个IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666185

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

ROS - C++实现RosBag包回放/提取

文章目录 1. 回放原理2. 回放/提取 多个话题3. 回放/提取数据包,并实时发布 1. 回放原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv,

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到

OpenStack中加固VNC访问安全

OpenStack中加固VNC访问安全 目录 OpenStack中加固VNC访问安全1.问题发现2.流程分析3.潜在后果4.解决方案④配置IPtables⑤VNC添加访问密码 5.参考链接 1.问题发现 很多同学使用noVNC之后都没有退出终端的习惯,往往都是用完了就直接关闭网页窗口。说这样隐患很大,如果内网里面有一些script kiddie随时都能将我们线上的虚拟

Imageview在百度地图中实现点击事件

1.首先第一步,需要声明的全局有关类的引用 private BMapManager mBMapMan; private MapView mMapView; private MapController mMapController; private RadioGroup radiogroup; private RadioButton normalview; private RadioBu