零基础学习java------23---------动态代理,ip,url案例
1. 动态代理
2. ip,url案例
给定的access.log是电信运营商的用户上网数据,第一个字段是时间, 第二个字段是ip地址,第三个字段是访问的网站,其他字段可以忽略不计。

第一个字段是网段的起始IP地址,第二个字段是网段的结束IP地址,第三个字段是网段的起始IP地址对应的十进制,第四个字段是网段的结束IP地址对应的十进制,第五个字段代表洲,第六个代表国家,第七个代表省,第八个代表城市,第九个区域,第十个运营商。其他字段可以忽略不计。
要求:
通过计算access.log中的用户行为数据,统计出各个省份访问量(一次请求记作一次独立的访问量),并按照各个省份的访问量的从高到低进行排序
步骤分析:
1.读取ip规则数据(ip.txt),将每条数据封装在bean里面,并将所有的bean数据封装在list中
2.将ip装成长整型数据,以便判断特定ip是在哪个省份
3.使用二分查找IpBean,得出某个ip所在的IpBean,进而得到所属的省份
4.读取用户行为数据(access.log),以province为key,访问量为value存入map
具体代码:
IpBean
public class IpBean {
private String startIp;
private String endIp;
private Long startLongIp;
private Long endLongIp;
private String state;
private String country;
private String province;
private String city;
private String area;
private String isp;
@Override
public String toString() {
return "IpBean [startIp=" + startIp + ", endIp=" + endIp + ", startLongIp=" + startLongIp + ", endLongIp="
+ endLongIp + ", state=" + state + ", country=" + country + ", province=" + province + ", city=" + city
+ ", area=" + area + ", isp=" + isp + "]";
}
public String getStartIp() {
return startIp;
}
public void setStartIp(String startIp) {
this.startIp = startIp;
}
public String getEndIp() {
return endIp;
}
public void setEndIp(String endIp) {
this.endIp = endIp;
}
public Long getStartLongIp() {
return startLongIp;
}
public void setStartLongIp(Long startLongIp) {
this.startLongIp = startLongIp;
}
public Long getEndLongIp() {
return endLongIp;
}
public void setEndLongIp(Long endLongIp) {
this.endLongIp = endLongIp;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getIsp() {
return isp;
}
public void setIsp(String isp) {
this.isp = isp;
}
public IpBean() {
}
public void set(String startIp, String endIp, Long startLongIp, Long endLongIp, String state, String country,
String province, String city, String area, String isp) {
this.startIp = startIp;
this.endIp = endIp;
this.startLongIp = startLongIp;
this.endLongIp = endLongIp;
this.state = state;
this.country = country;
this.province = province;
this.city = city;
this.area = area;
this.isp = isp;
}
}
IpUtils
public class IpUtils {
public static void main(String[] args) {
// loadIpToList();
// binaryOfIp(3738648971L);
}
// 将相应的字段存入IpBean,并将IpBean存入list
public static List<IpBean> loadIpToList() {
List<IpBean> list = new ArrayList<>();
try (
BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\ip.txt"));
){
String line = null;
while((line=br.readLine()) != null) {
String[] split = line.split("\\|");
try {
String startIp = split[0];
String endIp = split[1];
Long startLongIp;
Long endLongIp;
startLongIp = Long.parseLong(split[2]);
endLongIp = Long.parseLong(split[3]);
String state = split[4];
String country = split[5];
String province = split[6];
String city = split[7];
String area = split[8];
String isp = split[9];
IpBean ipBean = new IpBean();
ipBean.set(startIp, endIp, startLongIp, endLongIp, state, country, province, city, area, isp);
list.add(ipBean);
} catch (Exception e) {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// 将字符串ip转成长整型ip
public static long parseStrIpToLongIp(String ip){
long res = 0l; //192.168.133.34
if(ip == null){
return res ;
}else{
String[] ips = ip.split("\\.");
if(ips.length == 4){
for (int i = 0; i < ips.length; i++) {
long l = Long.parseLong(ips[i]);//
res |= l<<((3-i)<<3) ;
}
}
}
return res;
}
// 用来获取特定ip所属的ipBean
public static IpBean binaryOfIp(Long ip, List<IpBean> list) {
int start = 0;
int end = list.size()-1;
while(start <= end) {
int middle = (start+end)/2;
IpBean ipBean = list.get(middle);
if(ip>=ipBean.getStartLongIp() && ip<=ipBean.getEndLongIp()) {
return ipBean;
}
if(ip<ipBean.getStartLongIp()) {
end = middle-1;
}
if(ip>ipBean.getEndLongIp()) {
start = middle+1;
}
}
return null;
}
}
测试类(此代码错误)
public class IpTest {
public static void main(String[] args) {
Map<String, Integer> map = readData();
System.out.println(map);
}
public static Map<String, Integer> readData() {
Map<String, Integer> map = new HashMap<>();
// 将数据的加载放入静态代码块
List<IpBean> list;
{
list = IpUtils.loadIpToList();
}
// 获取以province为key,访问量为value的map
try (
BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\access.log"));
){
String line = null;
Integer sum = 1;
while((line=br.readLine()) != null) {
String[] split = line.split("\\|");
String date = split[0];
String ip = split[1];
String url = split[2];
Long ip1 = IpUtils.parseStrIpToLongIp(ip);
IpBean bean = IpUtils.binaryOfIp(ip1, list);
if(bean != null) {
if(map.containsKey(bean.getProvince())) {
sum+=1;
map.put(bean.getProvince(), sum);
}
map.put(bean.getProvince(), sum);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
零基础学习java------23---------动态代理,ip,url案例的更多相关文章
- 音乐出身的妹纸,零基础学习JAVA靠谱么
问:表示音乐出身的妹纸一枚 某一天突然觉得身边认识的是一群程序员 突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- Spring学习(二)—— java的动态代理机制
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_class_Auth ...
- 零基础学习openstack【完整中级篇】及openstack资源汇总
1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...
- 零基础学习hadoop到上手工作线路指导
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 零基础学习Hadoop
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...
- 深入理解Java反射+动态代理
答: 反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...
随机推荐
- Node.js躬行记(14)——压力测试
公司有个匿名聊天的常规H5界面,运营向做一次 50W 的推送,为了能配合她的计划,需要对该界面做一次压力测试. 一.JMeter 压测工具选择了JMeter,这是Apache的一个项目,它是用Java ...
- grpc协议
gRPC详解 gRPC是什么? gRPC是什么可以用官网的一句话来概括 A high-performance, open-source universal RPC framework 所谓RPC(re ...
- 跟着老猫来搞GO,基础进阶
回顾一下上一篇博客,主要是和大家分享了GO语言的基础语法,其中包含变量定义,基本类型,条件语句,循环语句.那本篇呢就开始和大家同步一下GO语言基础的进阶. 函数的定义 上次其实在很多的DEMO中已经写 ...
- loadruuner12基准测试流程
基准测试:单用户测试 一.归纳基准测试: 方法一:单用户循环5次 1.调试好脚本(加检查点,在VuGen中运行成功) 2.打开控制台,设置Run-time Settings 3.迭代次数:5 4.Pa ...
- 设置IDEA启动,不要自动打开上次使用时的项目
打开idea时自动加载最近编辑的项目,很费时间,关闭设置如下
- sqlalchemy insert on duplicate update
sqlalchemy insert on duplicate update from sqlalchemy.dialects.mysql import insert insert_stmt = ins ...
- ES6基础知识(Promise 对象)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 性能优化 | Go Ballast 让内存控制更加丝滑
关于 Go GC 优化的手段你知道的有哪些?比较常见的是通过调整 GC 的步调,以调整 GC 的触发频率. 设置 GOGC 设置 debug.SetGCPercent() 这两种方式的原理和效果都是一 ...
- 【linux系统】命令学习(四)统计命令
sort 排序 -b 忽略开头的空白符 -f 将小写字母看做为大写字母 -h 根据存储容量排序(kb mb hb )从小到大 -n 按数字排序 -o 把结果写入文件 -r 以相反的顺序来排序 -t 指 ...
- 【linux系统】jmeter安装
安装步骤: 1.下载jmeter安装包 wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.1.tgz 如报错以下,需使 ...