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;
}
}

最新文章

  1. Java程序日志:java.util.logging.Logger类
  2. 关于学习JavaScript 的 高三编程 一些心得(二)
  3. 再谈vim中多窗口的编辑
  4. nodejs前端跨域访问
  5. 网络异步编程(C#)团购课
  6. 计算机图形学——OpenGL开发库开发库
  7. 使用ThreadPool代替Thread
  8. UVALive 6125 I’ve Got Your Back(gammon) 题解
  9. BZOJ3942 [Usaco2015 Feb]Censoring
  10. maven学习之二M2_HOME简介
  11. oracle11gRAC环境使用RMAN增量备份方案
  12. 关于python的环境变量问题
  13. DiskGenius的 “终止位置参数溢出”错误解决方法。
  14. 【转】C/C++ 内存对齐
  15. 制作安装包工具NSIS
  16. 认识元数据和IL(中)&lt;第四篇&gt;
  17. Unity琐碎(1) 编辑器参数修改
  18. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式2
  19. 谈谈动态地加载Jquery库文件的方法
  20. socket协议和http协议性能对比

热门文章

  1. 第05课 OpenGL 3D空间
  2. Vue&amp;Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理
  3. svg的animate动画动态加载删除遇到删除animate后再次加载的animate动画没有效果问题
  4. APP自动化环境搭建之appium工具介绍(二)
  5. go 集合
  6. C 语言基础,来喽!
  7. Fastjson妙用之@JSONField注解
  8. js 正则表达式 验证与限制
  9. 多云搭建 K3S 集群
  10. Vue安装Vue Devtools调试工具提示 Error: Cannot find module &#39;@vue-devtools/build-tools&#39; 解决办法