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

  1. public class IpBean {
  2. private String startIp;
  3. private String endIp;
  4. private Long startLongIp;
  5. private Long endLongIp;
  6. private String state;
  7. private String country;
  8. private String province;
  9. private String city;
  10. private String area;
  11. private String isp;
  12. @Override
  13. public String toString() {
  14. return "IpBean [startIp=" + startIp + ", endIp=" + endIp + ", startLongIp=" + startLongIp + ", endLongIp="
  15. + endLongIp + ", state=" + state + ", country=" + country + ", province=" + province + ", city=" + city
  16. + ", area=" + area + ", isp=" + isp + "]";
  17. }
  18. public String getStartIp() {
  19. return startIp;
  20. }
  21. public void setStartIp(String startIp) {
  22. this.startIp = startIp;
  23. }
  24. public String getEndIp() {
  25. return endIp;
  26. }
  27. public void setEndIp(String endIp) {
  28. this.endIp = endIp;
  29. }
  30. public Long getStartLongIp() {
  31. return startLongIp;
  32. }
  33. public void setStartLongIp(Long startLongIp) {
  34. this.startLongIp = startLongIp;
  35. }
  36. public Long getEndLongIp() {
  37. return endLongIp;
  38. }
  39. public void setEndLongIp(Long endLongIp) {
  40. this.endLongIp = endLongIp;
  41. }
  42. public String getState() {
  43. return state;
  44. }
  45. public void setState(String state) {
  46. this.state = state;
  47. }
  48. public String getCountry() {
  49. return country;
  50. }
  51. public void setCountry(String country) {
  52. this.country = country;
  53. }
  54. public String getProvince() {
  55. return province;
  56. }
  57. public void setProvince(String province) {
  58. this.province = province;
  59. }
  60. public String getCity() {
  61. return city;
  62. }
  63. public void setCity(String city) {
  64. this.city = city;
  65. }
  66. public String getArea() {
  67. return area;
  68. }
  69. public void setArea(String area) {
  70. this.area = area;
  71. }
  72. public String getIsp() {
  73. return isp;
  74. }
  75. public void setIsp(String isp) {
  76. this.isp = isp;
  77. }
  78. public IpBean() {
  79.  
  80. }
  81. public void set(String startIp, String endIp, Long startLongIp, Long endLongIp, String state, String country,
  82. String province, String city, String area, String isp) {
  83. this.startIp = startIp;
  84. this.endIp = endIp;
  85. this.startLongIp = startLongIp;
  86. this.endLongIp = endLongIp;
  87. this.state = state;
  88. this.country = country;
  89. this.province = province;
  90. this.city = city;
  91. this.area = area;
  92. this.isp = isp;
  93. }
  94. }

IpUtils

  1. public class IpUtils {
  2. public static void main(String[] args) {
  3. // loadIpToList();
  4. // binaryOfIp(3738648971L);
  5. }
  6. // 将相应的字段存入IpBean,并将IpBean存入list
  7. public static List<IpBean> loadIpToList() {
  8. List<IpBean> list = new ArrayList<>();
  9. try (
  10. BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\ip.txt"));
  11. ){
  12. String line = null;
  13. while((line=br.readLine()) != null) {
  14. String[] split = line.split("\\|");
  15. try {
  16. String startIp = split[0];
  17. String endIp = split[1];
  18. Long startLongIp;
  19. Long endLongIp;
  20. startLongIp = Long.parseLong(split[2]);
  21. endLongIp = Long.parseLong(split[3]);
  22. String state = split[4];
  23. String country = split[5];
  24. String province = split[6];
  25. String city = split[7];
  26. String area = split[8];
  27. String isp = split[9];
  28. IpBean ipBean = new IpBean();
  29. ipBean.set(startIp, endIp, startLongIp, endLongIp, state, country, province, city, area, isp);
  30. list.add(ipBean);
  31. } catch (Exception e) {
  32. continue;
  33. }
  34. }
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. return list;
  39. }
  40.  
  41. // 将字符串ip转成长整型ip
  42. public static long parseStrIpToLongIp(String ip){
  43. long res = 0l; //192.168.133.34
  44. if(ip == null){
  45. return res ;
  46. }else{
  47. String[] ips = ip.split("\\.");
  48. if(ips.length == 4){
  49. for (int i = 0; i < ips.length; i++) {
  50. long l = Long.parseLong(ips[i]);//
  51. res |= l<<((3-i)<<3) ;
  52. }
  53. }
  54. }
  55. return res;
  56. }
  57.  
  58. // 用来获取特定ip所属的ipBean
  59. public static IpBean binaryOfIp(Long ip, List<IpBean> list) {
  60. int start = 0;
  61. int end = list.size()-1;
  62. while(start <= end) {
  63. int middle = (start+end)/2;
  64. IpBean ipBean = list.get(middle);
  65. if(ip>=ipBean.getStartLongIp() && ip<=ipBean.getEndLongIp()) {
  66. return ipBean;
  67. }
  68. if(ip<ipBean.getStartLongIp()) {
  69. end = middle-1;
  70. }
  71. if(ip>ipBean.getEndLongIp()) {
  72. start = middle+1;
  73. }
  74. }
  75. return null;
  76. }
  77. }

测试类(此代码错误)

  1. public class IpTest {
  2. public static void main(String[] args) {
  3. Map<String, Integer> map = readData();
  4. System.out.println(map);
  5. }
  6. public static Map<String, Integer> readData() {
  7. Map<String, Integer> map = new HashMap<>();
  8. // 将数据的加载放入静态代码块
  9. List<IpBean> list;
  10. {
  11. list = IpUtils.loadIpToList();
  12. }
  13. // 获取以province为key,访问量为value的map
  14. try (
  15. BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\access.log"));
  16. ){
  17. String line = null;
  18. Integer sum = 1;
  19. while((line=br.readLine()) != null) {
  20. String[] split = line.split("\\|");
  21. String date = split[0];
  22. String ip = split[1];
  23. String url = split[2];
  24. Long ip1 = IpUtils.parseStrIpToLongIp(ip);
  25.  
  26. IpBean bean = IpUtils.binaryOfIp(ip1, list);
  27. if(bean != null) {
  28. if(map.containsKey(bean.getProvince())) {
  29. sum+=1;
  30. map.put(bean.getProvince(), sum);
  31. }
  32. map.put(bean.getProvince(), sum);
  33. }
  34. }
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. return map;
  39. }
  40. }

零基础学习java------23---------动态代理,ip,url案例的更多相关文章

  1. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  2. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  3. Spring学习(二)—— java的动态代理机制

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  4. salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_class_Auth ...

  5. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  6. 零基础学习hadoop到上手工作线路指导

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  7. 零基础学习Hadoop

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  8. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  9. [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)

    [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...

  10. 深入理解Java反射+动态代理

    答:   反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...

随机推荐

  1. hdu 1856 More is better(并查集)

    题意: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the m ...

  2. Python3使用Print输出彩色字体

    一.介绍 在一些开发程序中,有些输出消息需要突出显示,我们可以尝试着给他们换上更靓丽的颜色来突出显示. 二.实现过程 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. ...

  3. Android现有工程使用Compose

    Android现有工程使用Compose 看了Compose的示例工程后,我们也想使用Compose.基于目前情况,在现有工程基础上添加Compose功能. 引入Compose 首先我们安装 Andr ...

  4. JMeter学习笔记--录制脚本(二)

    第一步:在JMeter中添加线程组,命名为访问首页 第二步:在线程组下添加HTTP请求默认值 添加->配置元件->HTTP请求默认值,设置服务器IP和端口号(JMeter默认使用80端口号 ...

  5. 05 | 箭头函数 | es6

    基本用法 参数列表)=> {函数体} var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函数不需要参数或 ...

  6. Vue.js教程 1.前端框架学习介绍

    Vue.js教程 1.前端框架学习介绍 什么是Vue.js 为什么要学习流行框架 什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站, ...

  7. Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案

    因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...

  8. 湖湘杯2020 writeup

    这个平台中间卡的离谱,卡完过后交了flag分还掉了 Web 题目名字不重要 也算是非预期吧,赛后y1ng师傅也说了因为要多端口环境必须这样配,预期解很难 NewWebsite 后台弱口令admin a ...

  9. 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程

    title: 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程 date: 2020-04-25 sidebarDepth: 2 tags: wind ...

  10. Django笔记&教程 7-1 基于类的视图(Class-based views)介绍

    Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...