基于Java的数据采集(终结篇)

关于写过关于JAVA采集入库的三篇文章:

基于Java数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3904715.html

基于Java数据采集入库(二):http://www.cnblogs.com/lichenwei/p/3905370.html

基于Java数据采集入库(三):http://www.cnblogs.com/lichenwei/p/3907007.html

分别实现了

①抓取页面信息并显示

②简单采集入库存储

③调用本地数据库查询

④远程调用实现操作(未实现)

以上这些功能都是基于本地的,有时候我们需要远程去调用这类数据,这时我们就可以用JAVA提供的RMI机制实行远程调用访问。

当然也可以用WebServices实现(PHP版本,有时间再写个JAVA版本的):http://www.cnblogs.com/lichenwei/p/3891297.html

 

什么是RMI?

RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。

简单了解下RMI,看下简单实现吧

 

1、定义远程接口

首先,我们需要写个远程接口IHello 该接口继承了远程对象Remote.

接口IHello里面有个hello的方法,用于客户端连接后 打招呼.

由于IHello继承了远程Remote对象, 所以需要抛一个 RemoteException 远程异常.

1 import java.rmi.Remote;
2 import java.rmi.RemoteException;
3 
4 
5 public interface IHello extends Remote{
6 
7     public String hello(String name) throws RemoteException;
8 }

2、实现接口

接下来,我们实现下 该接口里的方法, 实现接口的方法在服务端.

这里的HelloImpl类 实现了接口IHello里的方法.

注意:这里HelloImpl同样继承了 UnicastRemoteObject 远程对象,这个必须写,不然服务端启动后会莫名其妙报错.

 1 import java.rmi.RemoteException;
 2 import java.rmi.server.UnicastRemoteObject;
 3 
 4 /**
 5  * UnicastRemoteObject 这个必须写,虽然不写代码也不会出错,但在运行服务器的时候会出现莫名错误
 6  * @author Balla_兔子
 7  *
 8  */
 9 public class HelloImpl extends UnicastRemoteObject implements IHello {
10 
11     protected HelloImpl() throws RemoteException {
12         super();
13     }
14 
15     @Override
16     public String hello(String name) {
17         String strHello="你好!"+name+"正在访问服务端";
18         System.out.println(name+"正在访问服务端");
19         return strHello;
20     }
21 
22 }

3、编写服务端

服务端,由于RMI实现远程访问的机制是指:客户端通过在RMI注册表上寻找远程接口对象的地址(服务端地址) 达到实现远程访问的目的,

所以,我们需要在服务端创建一个远程对象的注册表,用于绑定和注册 服务端地址 和 远程接口对象,便于后期客户端能够成功找到服务端

 1 import java.rmi.Naming;
 2 import java.rmi.RemoteException;
 3 import java.rmi.registry.LocateRegistry;
 4 
 5 
 6 public class Server {
 7 
 8     /**
 9      * @param args
10      */
11     public static void main(String[] args) {
12         try {
13             IHello hello=new HelloImpl();
14             int port=6666;
15             LocateRegistry.createRegistry(port);
16             String address="rmi://localhost:"+port+"/tuzi";
17             Naming.bind(address, hello);
18             System.out.println(">>>服务端启动成功");
19             System.out.println(">>>请启动客户端进行连接访问..");
20             
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
25 
26 }

4、编写客户端

客户端上同样需要定义一个 远程访问的地址 - 即服务端地址,

然后,通过在RMI注册表上寻找该地址;  如果找到 则建立连接.

 1 import java.net.MalformedURLException;
 2 import java.rmi.Naming;
 3 import java.rmi.NotBoundException;
 4 import java.rmi.RemoteException;
 5 import java.util.Scanner;
 6 
 7 
 8 public class Client {
 9     public static void main(String[] args) {
10         
11         int port=6666;
12         String address="rmi://localhost:"+port+"/tuzi";
13         try {
14             IHello hello=(IHello) Naming.lookup(address);
15             System.out.println("<<<客户端访问成功!");
16             //客户端 Client 调用 远程接口里的 sayHello 方法  并打印出来
17             System.out.println(hello.hello("Rabbit"));             
18             Scanner scanner=new Scanner(System.in);
19             String input=scanner.next();
20         } catch (MalformedURLException e) {
21             // TODO Auto-generated catch block
22             e.printStackTrace();
23         } catch (RemoteException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         } catch (NotBoundException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         }
30         
31     }
32 }

运行效果图:

 

华丽的分割线


 

接下来就来看看我们的程序吧,今天换种口味来采集下《2013-2014赛季常规赛排名》

这是数据网址:http://nbadata.sports.qq.com/teams_stat.aspx

先上效果图:

 

好了,剩下的上代码吧,具体看代码注释:

 

IdoAction.java (功能调用接口代码)

 1 package com.lcw.rmi.collection;
 2 
 3 import java.rmi.Remote;
 4 import java.rmi.RemoteException;
 5 import java.util.List;
 6 
 7 public interface IdoAction extends Remote{
 8     
 9     
10     public void initData() throws RemoteException;
11     
12     public void getAllDatas() throws RemoteException;
13     
14     public List<String> getAllTeams() throws RemoteException;
15     
16     public List<String> getTeamInfo(String team) throws RemoteException;
17     
18     public List<String> getAllInfo() throws RemoteException;
19     
20 }
IdoAction.java

doActionImpl.java (接口实现类)

  1 package com.lcw.rmi.collection;
  2 
  3 import java.rmi.RemoteException;
  4 import java.rmi.server.UnicastRemoteObject;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 public class doActionImpl extends UnicastRemoteObject implements IdoAction {
 11 
 12     /**
 13      * 
 14      */
 15     private static final long serialVersionUID = 1L;
 16     private Mysql mysql;
 17     private ResultSet resultSet;
 18 
 19     public doActionImpl() throws RemoteException {
 20         mysql = new Mysql();
 21     }
 22 
 23     @Override
 24     public void getAllDatas() throws RemoteException {
 25         // 调用采集类,获取所有数据
 26         CollectData data = new CollectData();
 27         data.getAllDatas();
 28         System.out.println("数据采集成功!");
 29     }
 30 
 31     @Override
 32     public List<String> getAllInfo() throws RemoteException {
 33         // 查询所有数据
 34         String sql = "select * from data";
 35         resultSet = mysql.querySQL(sql);
 36         List<String> list=new ArrayList<String>();
 37         System.out.println("当前执行命令5,正在获取NBA(2013-2014)赛季常规赛队伍所有信息..");
 38         System.out.println("获取成功,已在客户端展示..");
 39         try {
 40             while(resultSet.next()) {
 41                 for (int i = 2; i < 17; i++) {
 42                     //System.out.println("++++++++++++++");调试
 43                     list.add(resultSet.getString(i));
 44                 }
 45                 System.out.println();
 46             }
 47         } catch (SQLException e) {
 48             e.printStackTrace();
 49         }
 50         return list;
 51     }
 52 
 53     @Override
 54     public List<String> getAllTeams() throws RemoteException {
 55         // 查询所有队伍名称
 56         String sql = "select team from data";
 57         resultSet = mysql.querySQL(sql);
 58         List<String> list = new ArrayList<String>();
 59         System.out.println("当前执行命令3,正在获取NBA(2013-2014)赛季常规赛队伍..");
 60         System.out.println("获取成功,已在客户端展示..");
 61         try {
 62             while (resultSet.next()) {
 63                 list.add(resultSet.getString("team"));
 64             }
 65         } catch (SQLException e) {
 66             System.out.println("数据库暂无信息,请执行自动化采集命令");
 67             e.printStackTrace();
 68         }
 69         return list;
 70 
 71     }
 72 
 73     @Override
 74     public List<String> getTeamInfo(String team) throws RemoteException {
 75         // 根据队伍查询队伍信息
 76         ResultSet resultSet = mysql.querySQL("select * from data where team='"
 77                 + team + "'");
 78         List<String> list=new ArrayList<String>();
 79         System.out.println("当前执行命令4,正在获取用户所查询队伍信息..");
 80         System.out.println("获取成功,已在客户端展示..");
 81         try {
 82             if (resultSet.next()) {
 83                 for (int i = 2; i < 17; i++) {
 84                     list.add(resultSet.getString(i));
 85                 }
 86             }
 87             System.out.println();
 88         } catch (SQLException e) {
 89             System.out.println("数据库暂无信息,请执行自动化采集命令");
 90             e.printStackTrace();
 91         }
 92         return list;
 93     }
 94 
 95     @Override
 96     public void initData() throws RemoteException {
 97         // 初始化数据库
 98         String sql = "delete from data";
 99         try {
100             mysql.updateSQL(sql);
101             System.out.println("数据库初始化成功!");
102         } catch (Exception e) {
103             System.out.println("数据库初始化失败!");
104         }
105 
106     }
107 
108 }
doActionImpl.java

CollectData.java (采集主类)

 1 package com.lcw.rmi.collection;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.net.MalformedURLException;
 8 import java.net.URL;
 9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.List;
12 
13 public class CollectData {
14 
15     /**
16      * 采集类,获取所有数据
17      */
18     public void getAllDatas() {
19         String address = "http://nbadata.sports.qq.com/teams_stat.aspx";// 要采集数据的url
20         try {
21             URL url = new URL(address);
22             try {
23                 InputStream inputStream = url.openStream();// 打开url,返回字节流
24                 InputStreamReader inputStreamReader = new InputStreamReader(
25                         inputStream, "gbk");// 将字节流转换为字符流,编码utf-8
26                 BufferedReader reader = new BufferedReader(inputStreamReader);// 提高效率,缓存
27                 String rankRegEx = ">\\d{1,2}</td>";// 排名正则
28                 String teamRegEx = ">[^<>]*</a>";// 队名正则
29                 String dataRegEx = ">\\d{1,3}(\\.)\\d{0,2}</td>";// 正常数据正则
30                 String percentRegEX = ">\\d{1,2}(\\.)*(\\d)*%</span></td>";// 百分比数据
31                 GetRegExData regExData = new GetRegExData();
32                 String temp = "";// 存放临时读取数据
33                 int flag = 0;
34                 String tempRank = "";// 存放匹配到的返回数据
35                 String tempTeam = "";// 存放匹配到的返回数据
36                 String tempData = "";
37                 String tempPercent = "";
38                 List<String> list = new ArrayList<String>();
39                 Mysql mysql = new Mysql();
40                 while ((temp = reader.readLine()) != null) {
41                     // 匹配排名
42                     if ((tempRank = regExData.getData(rankRegEx, temp)) != "") {
43                         tempRank = tempRank.substring(1, tempRank
44                                 .indexOf("</td>"));
45                         // System.out.println("排名:" + tempRank);
46                         list.add(tempRank);
47                         flag++;
48                     }
49                     // 匹配球队
50                     // 由于该正则会匹配到其他地方的数据,需给它一个标识符,让它从"找到排名位置"才开始匹配
51                     if ((tempTeam = regExData.getData(teamRegEx, temp)) != ""
52                             && flag == 1) {
53                         tempTeam = tempTeam.substring(1, tempTeam
54                                 .indexOf("</a>"));
55                         // System.out.println("球队名称:" + tempTeam);
56                         list.add(tempTeam);
57                         flag = 0;
58                     }
59                     // 匹配正常数据
60                     if ((tempData = regExData.getData(dataRegEx, temp)) != "") {
61                         tempData = tempData.substring(1, tempData
62                                 .indexOf("</td>"));
63                         // System.out.println(tempData);
64                         list.add(tempData);
65 
66                     }
67                     // 匹配百分比数据
68                     if ((tempPercent = regExData.getData(percentRegEX, temp)) != "") {
69                         tempPercent = tempPercent.substring(1, tempPercent
70                                 .indexOf("</span></td>"));
71                         // System.out.println(tempPercent);
72                         list.add(tempPercent);
73                     }
74 
75                 }
76                 reader.close();
77                 Object[] arr = list.toArray();// 将集合转换为数组
78                 int a = -15;
79                 int b = 0;
80                 String sql = "insert into data(rank,team,chushou1,mingzhong1,chushou2,mingzhong2,chushou3,mingzhong3,qianchang,houchang,zong,zhugong,shiwu,fangui,defen) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
81                 for (int i = 0; i < 30; i++) {
82                     a += 15;
83                     b += 15;
84                     if (b <= 450) {
85                         Object[] arr1 = Arrays.copyOfRange(arr, a, b);
86                         mysql.insertNewData(sql, arr1);
87                         System.out.println("正在采集数据..当前采集数据:" + (i + 1) + "条");
88                     }
89                 }
90 
91             } catch (IOException e) {
92                 e.printStackTrace();
93             }
94         } catch (MalformedURLException e) {
95             e.printStackTrace();
96         }
97     }
98 
99 }
CollectData.java

GetRegExData.java (正则过滤功能类)

 1 package com.lcw.rmi.collection;
 2 
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5 
 6 public class GetRegExData {
 7 
 8     public String getData(String regex, String content) {
 9         Pattern pattern = Pattern.compile(regex);
10         Matcher matcher = pattern.matcher(content);
11         if (matcher.find()) {
12             return matcher.group();
13         } else {
14             return "";
15         }
16 
17     }
18 }
GetRegExData.java

Mysql.java (数据库操作类)

  1 package com.lcw.rmi.collection;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 
  9 public class Mysql {
 10 
 11     private String driver = "com.mysql.jdbc.Driver";
 12     private String url = "jdbc:mysql://localhost:3306/nba";
 13     private String user = "root";
 14     private String password = "";
 15 
 16     private PreparedStatement stmt = null;
 17     private Connection conn = null;
 18     private ResultSet resultSet = null;
 19 
 20     /**
 21      * 
 22      * @param insertSql
 23      *            采集类,插入数据操作
 24      * @param arr
 25      */
 26     public void insertNewData(String insertSql, Object[] arr) {
 27 
 28         try {
 29             Class.forName(driver).newInstance();
 30             try {
 31                 conn = DriverManager.getConnection(url, user, password);
 32                 stmt = conn.prepareStatement(insertSql);
 33                 stmt.setString(1, arr[0].toString());
 34                 stmt.setString(2, arr[1].toString());
 35                 stmt.setString(3, arr[2].toString());
 36                 stmt.setString(4, arr[3].toString());
 37                 stmt.setString(5, arr[4].toString());
 38                 stmt.setString(6, arr[5].toString());
 39                 stmt.setString(7, arr[6].toString());
 40                 stmt.setString(8, arr[7].toString());
 41                 stmt.setString(9, arr[8].toString());
 42                 stmt.setString(10, arr[9].toString());
 43                 stmt.setString(11, arr[10].toString());
 44                 stmt.setString(12, arr[11].toString());
 45                 stmt.setString(13, arr[12].toString());
 46                 stmt.setString(14, arr[13].toString());
 47                 stmt.setString(15, arr[14].toString());
 48                 stmt.executeUpdate();
 49                 stmt.close();
 50                 conn.close();
 51 
 52             } catch (SQLException e) {
 53                 e.printStackTrace();
 54             }
 55         } catch (InstantiationException e) {
 56             e.printStackTrace();
 57         } catch (IllegalAccessException e) {
 58             e.printStackTrace();
 59         } catch (ClassNotFoundException e) {
 60             e.printStackTrace();
 61         }
 62 
 63     }
 64 
 65     /**
 66      * 
 67      * @param sql更新数据库语句
 68      */
 69     public void updateSQL(String updateSql) {
 70         try {
 71             Class.forName(driver).newInstance();
 72             try {
 73                 conn = DriverManager.getConnection(url, user, password);
 74             } catch (SQLException e) {
 75                 e.printStackTrace();
 76             }
 77             try {
 78                 stmt = conn.prepareStatement(updateSql);
 79                 stmt.execute(updateSql);
 80             } catch (SQLException e) {
 81                 e.printStackTrace();
 82             }
 83 
 84         } catch (InstantiationException e) {
 85             e.printStackTrace();
 86         } catch (IllegalAccessException e) {
 87             e.printStackTrace();
 88         } catch (ClassNotFoundException e) {
 89             e.printStackTrace();
 90         }
 91     }
 92 
 93     /**
 94      * 
 95      * @param sql一般查询
 96      */
 97     public ResultSet querySQL(String searchSql) {
 98         try {
 99             Class.forName(driver).newInstance();
100             try {
101                 conn = DriverManager.getConnection(url, user, password);
102             } catch (SQLException e) {
103                 e.printStackTrace();
104             }
105             try {
106                 stmt = conn.prepareStatement(searchSql);
107                 resultSet = stmt.executeQuery();
108             } catch (SQLException e) {
109                 e.printStackTrace();
110             }
111 
112         } catch (InstantiationException e) {
113             e.printStackTrace();
114         } catch (IllegalAccessException e) {
115             e.printStackTrace();
116         } catch (ClassNotFoundException e) {
117             e.printStackTrace();
118         }
119         return resultSet;
120     }
121 }
Mysql.java

Server.java (服务端类)

 1 package com.lcw.rmi.collection;
 2 
 3 import java.net.MalformedURLException;
 4 import java.rmi.AlreadyBoundException;
 5 import java.rmi.Naming;
 6 import java.rmi.RemoteException;
 7 import java.rmi.registry.LocateRegistry;
 8 
 9 public class Server {
10 
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         try {
16             int port = 9797;
17             String address = "rmi://localhost:"+port+"/nba";
18             IdoAction action = new doActionImpl();
19             LocateRegistry.createRegistry(port);
20             try {
21                 Naming.bind(address, action);
22                 System.out.println(">>>正在启动服务端..");
23                 System.out.println(">>>服务端启动成功!");
24                 System.out.println(">>>等待客户端连接...");
25                 System.out.println(">>>客户端Balla_兔子已连接。");
26             } catch (MalformedURLException e) {
27                 e.printStackTrace();
28             } catch (AlreadyBoundException e) {
29                 e.printStackTrace();
30             }
31         } catch (RemoteException e) {
32             e.printStackTrace();
33         }
34     }
35 
36 }
Server.java

Client.java (客户端类)

  1 package com.lcw.rmi.collection;
  2 
  3 import java.net.MalformedURLException;
  4 import java.rmi.Naming;
  5 import java.rmi.NotBoundException;
  6 import java.rmi.RemoteException;
  7 import java.util.List;
  8 import java.util.Scanner;
  9 
 10 public class Client {
 11 
 12     public static void main(String[] args) {
 13         int port = 9797;
 14         String address = "rmi://localhost:" + port + "/nba";
 15 
 16         try {
 17             IdoAction action = (IdoAction) Naming.lookup(address);
 18             System.out.println("正在启动客户端..");
 19             System.out.println("客户端启动完毕,正在连接服务端..");
 20             System.out.println("连接成功...");
 21             System.out.println("---------------------------");
 22 
 23             while (true) {
 24                 System.out.println("①初始化数据库-请按 (1)");
 25                 System.out.println();
 26                 System.out.println("②自动化采集NBA(2013-2014)赛季常规赛排名数据-请按(2)");
 27                 System.out.println();
 28                 System.out.println("③查询NBA(2013-2014)赛季常规赛排名所有队伍-请按(3)");
 29                 System.out.println();
 30                 System.out.println("④查询具体球队(2013-2014)赛季常规赛排名-请按(4)");
 31                 System.out.println();
 32                 System.out.println("⑤查询具体详情-请按(5)");
 33                 System.out.println();
 34 
 35                 Scanner scanner = new Scanner(System.in);
 36                 String input = scanner.next();
 37 
 38                 if (input.equals("1")) {
 39                     System.out
 40                             .println("---------------------------------------------------------");
 41                     System.out.println("服务端数据已初始化,请按2进行数据自动化采集..");
 42                     action.initData();
 43                     System.out
 44                             .println("---------------------------------------------------------");
 45                 }
 46                 if (input.equals("2")) {
 47                     System.out
 48                             .println("---------------------------------------------------------");
 49                     System.out.println("数据自动化采集中,请稍后..");
 50                     int i=0;
 51                     while(i<10000){//延迟操作,给数据采集缓冲时间
 52                         i++;
 53                     }
 54                     System.out.println("数据采集完毕..按3,4,5进行相关操作");
 55                     action.getAllDatas();
 56                     System.out
 57                             .println("---------------------------------------------------------");
 58                 }
 59                 if (input.equals("3")) {
 60                     System.out
 61                             .println("---------------------------------------------------------");
 62                     System.out.println("正在获取NBA(2013-2014)赛季常规赛队伍,请稍后..");
 63                     System.out.println();
 64                     List<String> list = action.getAllTeams();
 65                     for (int i = 0; i < list.size(); i++) {
 66                         if (i % 5 == 0 && i != 0) {
 67                             System.out.println();
 68                         }
 69                         System.out.print(list.get(i) + "\t");
 70                     }
 71                     System.out.println();
 72 
 73                     System.out
 74                             .println("---------------------------------------------------------");
 75                 }
 76                 if (input.equals("4")) {
 77                     System.out
 78                             .println("---------------------------------------------------------");
 79                     System.out.println("请输入你要查询的队伍名称(如:76人)");
 80                     String team = scanner.next();
 81                     System.out
 82                             .print("排名\t球队\t出手\t命中率\t出手\t命中率\t出手\t命中率\t前场\t后场\t总\t助攻\t失误\t犯规\t得分");
 83                     System.out.println();
 84                     List<String> list=action.getTeamInfo(team);
 85                     for (int i = 0; i < 15; i++) {
 86                         System.out.print(list.get(i)+"\t");
 87                     }
 88                     System.out.println();
 89                     System.out
 90                             .println("---------------------------------------------------------");
 91                 }
 92                 if (input.equals("5")) {
 93                     System.out
 94                             .println("---------------------------------------------------------");
 95                     System.out.println("数据获取中,请稍后...");
 96                     System.out.println();
 97                     System.out
 98                             .print("排名\t球队\t出手\t命中率\t出手\t命中率\t出手\t命中率\t前场\t后场\t总\t助攻\t失误\t犯规\t得分");
 99                     System.out.println();
100                     List<String> list=action.getAllInfo();
101                     for(int i=0;i<450;i++){
102                         if(i%15==0&&i!=0){
103                             System.out.println();
104                         }
105                         System.out.print(list.get(i)+"\t");
106                     }
107                     System.out.println();
108                     System.out
109                             .println("---------------------------------------------------------");
110                 }
111             }
112         } catch (MalformedURLException e) {
113             e.printStackTrace();
114         } catch (RemoteException e) {
115             e.printStackTrace();
116         } catch (NotBoundException e) {
117             e.printStackTrace();
118         }
119     }
120 }
Client.java

 

好了,关于JAVA采集数据文章就到此为止了~ 撤··

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为交换机、路由器配置单臂路由实现不同网段通信

一、eNSP模拟器仿真图 二、华为交换机配置 //批量创建VLAN [Huawei]vlan batch 10 20 //PC1电脑与交换机连接端口配置 [Huawei]interface GigabitEthernet0/0/2 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-GigabitEthernet0/0/2]port default vlan 10 [Huaw…

IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频

IDEA 2020.1 经过了漫长的打磨终于发布正式版了&#xff0c;而这次的版本不止直接支持 Java 14&#xff0c;还带来了两个重量级的功能&#xff0c;官方中文版支持和 JDK 直接下载。 在之前的开发中&#xff0c;当我们需要下载 JDK 时&#xff0c;通常的步骤是这样的&#xff1…

HoughLine变换

对于HoughLine变换&#xff0c;有两种方法&#xff0c;标准霍夫变换&#xff08;SHT&#xff09;用的矩阵是CV_32FC2&#xff0c;用极坐标法记录直线,而累积概率霍夫变换&#xff08;PPHT&#xff09;用的是CV_32FC核心函数&#xff1a;cvCvtColor&#xff0c;cvHoughLines2&am…

华为交换机、路由器配置静态路由实现不同网段通信

一、eNSP模拟器仿真图 二、目标要求 在主核心交换机上配置vlanif10 192.168.10.254/24,vlanif20 192.168.20.254/24,vlanif100 192.168.100.1/24,PC1:192.168.10.1能ping通PC2:192.168.20.1,也能ping通PC3:192.168.30.1,交换机和路由器使用静态路由。 三、华为交换机配置…

答读者问:学历不高,要如何破局?

今天读者群在激烈讨论学历是否重要&#xff0c;有的朋友说非常重要&#xff0c;也有人说并没有那么重要。有读者问&#xff1a;“我是专科毕业&#xff0c;我需要读在职本科或者研究生吗”&#xff0c;也有读者问&#xff1a;“洋哥&#xff0c;三本毕业几年&#xff0c;想辞职…

华为路由器配置OSPF实现不同网段通信

一、简介 PC1、PC2、LSW1和AR1配置单臂路由,实现PC1能够ping通PC2,具体实现请参考:华为交换机、路由器配置单臂路由实现不同网段通信。下面实现AR1和AR2通过配置OSPF,实现PC1能ping通PC3。 二、华为路由器配置 AR1新增配置: [Huawei]int g0/0/1 [Huawei-GigabitEthernet…

史上最全的 SQL 优化方案!建议收藏

在进行MySQL的优化之前&#xff0c;必须要了解的就是MySQL的查询过程&#xff0c;很多查询优化工作实际上就是遵循一些原则&#xff0c;让MySQL的优化器能够按照预想的合理方式运行已。图-MySQL查询过程1优化的哲学 注&#xff1a;优化有风险&#xff0c;涉足需谨慎a优化可能带…

Linux Podman安装MySQL数据库

1.拉取MySQL镜像 这里拉取官方最新版本镜像 podman pull mysql2.查看本地镜像 podman images可以看到&#xff0c;我们已安装最新版本的mysql镜像 3.运行容器 可以使用以下命令来运行 mysql 容器 podman run -d --name mysql-test -p 4000:3306 -e MYSQL_ROOT_PASSWORD12…

不吹牛逼,撸个注解有什么难的

注解是 Java 中非常重要的一部分&#xff0c;但经常被忽视也是真的。之所以这么说是因为我们更倾向成为一名注解的使用者而不是创建者。Override 注解用过吧&#xff1f;Service 注解用过吧&#xff1f;但你知道怎么自定义一个注解吗&#xff1f;恐怕你会摇摇头&#xff0c;摆摆…

DOS命令(bat批处理脚本)遍历目录、遍历子目录下的文件、遍历数字和遍历文件内容

1.遍历目录 格式&#xff1a; for /d %%名称 in (路径) do 具体操作脚本测试&#xff1a;创建test.bat文件&#xff0c;*代表test.bat文件所在的当前目录 echo offfor /d %%a in (*) do (echo %%a)pause2.遍历目录和子目录下的文件 格式&#xff1a; for /r "目录路径&…

几位阿里朋友重写的Java并发编程,牛逼了

昨天在黄金时代群里和读者聊机械键盘大 F 的时候&#xff0c;好朋友 cxuan 推了一篇文章&#xff0c;吸引了我的眼球&#xff0c;名叫“太赞了&#xff0c;阿里几位工程师重写了 《Java 并发编程》”&#xff0c;我看完后&#xff0c;直呼“牛逼了”&#xff0c;就想着赶紧推荐…

FFmpeg 2.1 试用(新版支持HEVC,VP9)

2019独角兽企业重金招聘Python工程师标准>>> 前两天帮一位老师转码图像的时候&#xff0c;无意间发现新版FFmpeg竟然支持了下一代编码标准HEVC&#xff0c;以及Google提出的下一代编码标准VP9。真心没想到FFmpeg对下一代的编码标准支持的是如此之快。我还以为这两种…

Linus shell 在一个脚本中调用另外一个脚本变量

1.新建public.sh文件&#xff0c;并添加以下内容&#xff1a; 2.新建ceshi.sh文件&#xff0c;并添加以下内容&#xff1a; 3.在终端赋予ceshi.sh文件执行权限&#xff0c;并运行该文件。

史上最全的延迟任务实现方式汇总!附代码(强烈推荐)

这篇文章的诞生要感谢一位读者&#xff0c;是他让这篇优秀的文章有了和大家见面的机会&#xff0c;重点是优秀文章&#xff0c;哈哈。 事情的经过是这样的... 不用谢我&#xff0c;送人玫瑰&#xff0c;手有余香。相信接下来的内容一定不会让你失望&#xff0c;因为它将是目前…

面经分享:历时半个月,终于拿到了蚂蚁金服的offer!

在今天&#xff0c;我收到了蚂蚁金服A级的实习录用offer。从开始面试到拿到口头offer&#xff08;四面技术一面HR&#xff09;战线大约拉了半个月&#xff0c;从拿到口头offer到收到正式录用邮件大概又是半个月。思前想后&#xff0c;决定还是做一个整理与总结。一方面是回顾并…

bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户

net user可以获取系统用户名&#xff0c;如下&#xff1a; 可以编写代码&#xff0c;bat批处理脚本获取window系统所有用户名并设置密码&#xff0c;如下&#xff0c;如果bat文件有中文&#xff0c;在cmd中执行会出现乱码&#xff0c;解决方法是用记事本打开bat文件&#xff0…

Spring IoC?看这篇文章就够了...

前言刚开始听到 IoC&#xff0c;会觉得特别高大上&#xff0c;但其实明白原理了很简单。跟着我的脚步&#xff0c;一文带你吃透 IoC 原理。本文围绕 是何、为何、如何 来谈&#xff1a;是何上一篇文章有同学问我在官网该看哪些内容&#xff0c;怎么找的&#xff0c;那今天的截图…

交换机arp转ip-mac绑定命令工具-免费版

一、简介 为了防止ARP攻击&#xff0c;我们经常需要在三层交换机上做IP地址与MAC地址的绑定操作。 先要进入System-View系统视图模式&#xff0c;输入"sys"即可。 system-view: [huawei]arp static 192.168.60.58 7813-3a79-d0aa在交换机上使用dis arp命令可以查看…

html 链接 id属性_HTML id属性

html 链接 id属性The id attribute is used to specify a unique id for an element in HTML. This id cannot be used for multiple elements in HTML. You can add the id to any HTML element. id属性用于为HTML中的元素指定唯一的ID 。 该ID不能用于HTML中的多个元素。 您可…

老大说:谁要再用double定义商品金额,就自己收拾东西走

先看现象涉及诸如float或者double这两种浮点型数据的处理时&#xff0c;偶尔总会有一些怪怪的现象&#xff0c;不知道大家注意过没&#xff0c;举几个常见的栗子&#xff1a;典型现象&#xff08;一&#xff09;&#xff1a;条件判断超预期System.out.println( 1f 0.9999999f …