Java 网络编程(大全)

2023-10-29

前言必读

读者手册(必读)_云边的快乐猫的博客-CSDN博客

一、1网络通信的基本模式分为两种

1.CS模式(Client---客户端,Server---服务端) 

客户端是需要程序员去开发的,例如日常使用的各种的APP,服务端就是服务器。

例子:端游,依赖特定的PC端才能玩。

2.BS模式(Browser---浏览器,Server---服务端)---重点学习

服务端是需要程序员去开发的。浏览器就是我们日常使用的浏览器去访问各种网站,只要有浏览器就可以访问,不依赖特定的PC端,在任意设备上都可以访问网站服务器 。

例子:网页小游戏,联网浏览器就可以玩。 

一、2 请分析C/S和B/S架构相比的各自的优缺点?

1.CS(客户端--服务器结构)

优点 技术成熟,交互性强,网络通信量低,响应数据快。将任务分到了两端,降低了系统的开销。客户端要处理大多数的业务逻辑和UI展示。他是胖客户端。

缺点:更新太快,要求用户有相同的操作系统,如果有不同的操作系统还要开发不同的版本,对于计算机电脑的配置要求也高

2。BS(浏览器-服务器结构)

优点:主要事务在服务端实现。分布性强、维护方便、开发简单

共享性强、总体成本低,对客户端的电脑配置要求较低

缺点:数据安全性问题,对服务器要求高。数据传输速度较慢,软件的个性化明显降低,难以实现传统模式下的特殊功能要求,他是瘦客户端,大量的数据的传输都要通过服务器与浏览器进行交互,通信开销大,难以实现复杂的应用构造

二、实现网络编程的三种要素

IP地址可以理解为具体哪个计算机,端口理解计算机上的程序(一个程序一个端口),协议理解为电脑通过什么方式和外界交互

要素一:IP地址:设备在网络中的地址,是唯一的标识

详解:

(1)常见的IP分类为:

IPv4(32比特4字节)和IPv6(128位16个字节)--称号--可以标记地球上的每一粒沙子。

(2)IP地址的取经之路:

计算机:我要去找百度获取数据。

DNS服务器:发过来我看看哪个网址域名啊,给你指路具体的ip地址

计算机:知道了这个ip地址,我就可以去找具体要访问的服务器了

服务器:计算机老弟你来找我了啊,那我把你要的数据发给你吧。 

(3)公网地址和私有地址(局域网使用)

192.168开头的就是常见的私有地址 

(4)获取IP地址的代码

 要去实现这个IP地址的获取就要用到 InetAddress方法

代码例子:

package bao;

import java.net.InetAddress;

public class Test {
    public static void main(String[] args) throws Exception {
        //1.获取本机地址ip对象
        InetAddress ip1 = InetAddress.getLocalHost();
        System.out.println(ip1.getHostName());//获取主机名字
        System.out.println(ip1.getHostAddress());//获取ip地址
        //2.获取域名ip对象
        InetAddress ip2 = InetAddress.getByName("www.baidu.com");
        System.out.println(ip2.getHostName());//获取域名
        System.out.println(ip2.getHostAddress());//获取域名的ip地址
        //3.获取公网对象
        InetAddress ip3 = InetAddress.getByName("112.80.248.76");
        System.out.println(ip3.getHostName());//获取公网名字
        System.out.println(ip3.getHostAddress());//获取公网ip地址
        //判断网络是否能连接通信 ping 5s之前测试是否能通过
        System.out.println(ip3.isReachable(5000));//通过会返回true
    }
}

运行结果:

涉及到个人隐私就不放到这里来了,可以自己运行试试看  

 =========================================================================

要素二:端口:应用程序在设备中的唯一标识

一个主机设备中,端口号是唯一的

(1)端口号:一个程序一个端口号,被规定为16位的二进制,范围是0~65535

(2)周知端口:0~1023,被预先定义的知名应用占用。(例如:HTTP占用80端口,FTP占用21端口)

(3)注册端口:1024~49151,分配给用户进程或某些程序(例如:Tomcat占用8080端口)

(4)动态端口:49152~65535,不固定分配到某种进程,动态分配

 =========================================================================

要素三:协议:数据在网络中的传输协议,最常见的有UDP和TCP(重点)

(1)TCP协议: (安全,有连接确认可靠)

使用TCP协议,双方必须先建立连接,它是一种面向连接可靠通信协议,传输前,要建立三次握手方式建立连接确认。连接和发送数据都需要确认。传输完成后,还需要释放已连接的通信,通信效率相对比较低。

使用场景:对安全需求较高的文件下载、金融数据通信等。

三次握手连接:

客户端:在吗?

服务端:在

客户端:上号

四次握手断开连接:

客户端:不玩了

服务端:好吧

服务端:下次什么时候玩?

客户端:有空再玩 

例子:

一收一发

发送端(客户端) 

package bao;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

//发送端
public class Test {
    public static void main(String[] args) throws IOException {
        System.out.println("==============客户端启动===============");
        //1.创建发送通信管道
        Socket socket = new Socket("127.0.0.1",7777);//参数一:服务端地址 参数二:服务端端口
        //2.从scoket管道中获得一个字节输出流,负责发送数据
        OutputStream os = socket.getOutputStream();
        //3.字节流升级成打印流
        PrintStream ps = new PrintStream(os);
        //4.发送消息
        ps.println("大哥,我来了");
        ps.flush();//刷新
    }
}

 接收端 (服务端)

package bao;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class Test1 {
    public static void main(String[] args) throws IOException {
        System.out.println("========服务端启动============");
        //1.创建接收管道,注册端口
        ServerSocket serverSocket = new ServerSocket(7777);//参数一:定义服务端口
        //2.等待管道连接
        Socket accept = serverSocket.accept();
        //3.从管道中获取一个字节输入流
        InputStream is = accept.getInputStream();
        //4.字节流升级生缓冲输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        //5.按照行读取消息会更好
        String a;
        if ((a = br.readLine())!=null){
            System.out.println(accept.getRemoteSocketAddress()+"说了:"+a);
        }
    }
}

 运行结果:

/127.0.0.1:60316说了:大哥,我来了

 ==============客户端启动===============

多收多发 

发送端(客户端) 

package bao;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;


public class kehu {
    public static void main(String[] args) throws Exception {
        System.out.println("客户端启动");
        //1.创建与服务端连接的管道
        Socket s = new Socket(InetAddress.getLocalHost(), 9966);
        //2.创建一个线程负责客户端的消息读取
        new ClientReaderThread(s).start();
        //3.创建一个字节输入流管道
        OutputStream o = s.getOutputStream();
        PrintStream p = new PrintStream(o);//升级流
        //4.客户端输入数据
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入:");
            String s1 = sc.nextLine();
            p.println(s1);//发送数据出去
            p.flush();//刷新流
        }
    }
}
class ClientReaderThread extends Thread{
    private Socket socket;
    public ClientReaderThread(Socket socket){
        this.socket = socket;
    }
        @Override
        public void run(){
            try {
                //把字节输入流包装成字符输入流
                InputStream i = socket.getInputStream();
                BufferedReader b = new BufferedReader(new InputStreamReader(i));
                String s1;
                while (true){
                    if ((s1=b.readLine())!=null){
                        System.out.println("收到了消息"+s1);
                    }
                }
            } catch (IOException e) {
                System.out.println("服务器把你提出群聊");
            }
        }
    }

  接收端 (服务端)

package bao;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class fuwu {
    //1.定义一个静态变量储存全部管道
    public static List<Socket> all_Sockets = new ArrayList<>();
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动成功");
        //2.服务端口注册
        ServerSocket ss = new ServerSocket(9966);
        //3.管道死循环设置
        while (true){
            Socket s = ss.accept();
            System.out.println(s.getRemoteSocketAddress()+"上线了");
            all_Sockets.add(s);
            new fuwuThread(s).start();
        }
    }
}
class fuwuThread extends Thread{
    private Socket socket;
    public fuwuThread(Socket socket){
        this.socket=socket;
    }
    @Override
    public void run(){
        try {
            InputStream i = socket.getInputStream();
            BufferedReader b = new BufferedReader(new InputStreamReader(i));
            String s1;
            while ((s1=b.readLine())!=null){
                System.out.println(socket.getRemoteSocketAddress()+"说"+s1);
                sendMessage(s1);
            }
        } catch (IOException e) {
            System.out.println(socket.getRemoteSocketAddress()+"离线了");
            fuwu.all_Sockets.remove(socket);
        }
    }
    private void sendMessage (String s1) throws IOException {
        for (Socket s:fuwu.all_Sockets){
            OutputStream o = s.getOutputStream();
            PrintStream p = new PrintStream(o);
            p.println(s1);
            p.flush();
        }
    }
}

运行结果:

服务端启动成功
/192.168.78.1:56384上线了
/192.168.78.1:56384说大哥
/192.168.78.1:56389上线了
/192.168.78.1:56389说小弟
/192.168.78.1:56384说
/192.168.78.1:56384说大哥11

客户端启动
请输入:
大哥
请输入:
收到了消息大哥
收到了消息小弟

大哥11
请输入:
请输入:
收到了消息
收到了消息大哥11

客户端启动
请输入:
小弟
请输入:
收到了消息小弟
收到了消息
收到了消息大哥11 

 =========================================================================

                                                            TCP和UDP的分界线

 =========================================================================

(2)UDP协议:(速度快,无连接,不可靠)

不需要建立连接(因为把数据源IP、目的地IP、端口封装成数据包),每个数据包在64KB内,只管发,不管对方有没有接到确认什么的。

优点:可以广播发送,发送数据结束时无需释放资源,开销小,速度快。

使用场景:语言通话、视频通话等。

ps:这个就是一股脑的什么都封装一起,直接往外抛就什么都不管了,当然快了。

例子:

一收一发

发送端(客户端)

package bao;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Test {
    public static void main(String[] args) throws Exception {
        //一、发送端(测试时候先启动接收再发送端)
        //1.创建发送端对象,发送端自带默认端口号(人)
        System.out.println("========客户端启动============");
        DatagramSocket socket1 = new DatagramSocket();//不定义就默认端口

        //2.创建一个要发送的数据容器(容器里面有数据)
        byte[] a ="我是水".getBytes();
        //3.创建一个数据包对象把容器装起来
        DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getLocalHost(),8899);//数据,大小,服务端的IP,服务端的端口
        //4.发送出去
        socket1.send(packet1);
        //5.关闭资源,避免资源浪费
       socket1.close();
    }
}

接收端 (服务端)

package bao;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Test1 {
    public static void main(String[] args) throws Exception {
        //二、接收端(测试时候先启动接收再发送端)
        //1.创建接收端对象,注册端口(人)
        System.out.println("=========接收端启动===============");
        DatagramSocket socket2 = new DatagramSocket(8899);

        //2.创建一个要接收的数据容器(等待接收数据)
        byte[]b =new byte[1024*64];
        //3.把容器数据打包
        DatagramPacket packet2 = new DatagramPacket(b,b.length);
        //4.等待接收数据
        socket2.receive(packet2);
        //5.读取多少倒出多少
        int len = packet2.getLength();
        String rs = new String(b,0,len);
        System.out.println("接收到了数据了"+rs);

        //6.关闭资源,避免资源浪费
        socket2.close();
    }
}
//额外知识点,获取对方端口和ip地址
//String ip = packet2.getAddress().toString();
//System.out.println("对方IP地址为"+ip);

//int port = packet2.getPort();
//System.out.println("对方端口位置"+port);

运行结果:

========客户端启动============ 

=========接收端启动===============
接收到了数据了我是水 

多收多发

思想:把一收一发代码拿来改进就好了

发送端:把主要发送的代码写入死循环并写一个键盘输入代码,只有用户输入exit才能退出循环。

接收端:把等待接收的封装包开始写入死循环里面,然后再把释放资源的代码注释掉才能一直接收

发送端(客户端)

package bao;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
//发送端
public class Test {
    public static void main(String[] args) throws Exception {
        //一、1.创建发送端对象,发送端自带默认端口号(人)
        DatagramSocket socket1 = new DatagramSocket();//不定义就默认端口
        System.out.println("========客户端启动============");
        //二.6创建键盘录入
        Scanner sc = new Scanner(System.in);
        while (true) {//二、5.死循环把代码封起来(多收多发步骤)
            //二、6.接收键盘录入
            System.out.println("请输入:");
            String msg = sc.nextLine();

            //二、7.设置exit退出
            if ("exit".equals(msg)){
                System.out.println("离线成功");
                socket1.close();//释放资源
                break;
            }

            //2.创建一个要发送的数据容器(容器里面有数据)
            byte[] a =msg.getBytes();
            //3.创建一个数据包对象把容器装起来
            DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getLocalHost(),8899);//数据,大小,服务端的IP,服务端的端口
            //4.发送出去
            socket1.send(packet1);
        }
    }
}

接收端 (服务端)

package bao;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
//二、接收端
public class Test1 {
    public static void main(String[] args) throws Exception {
        //1.创建接收端对象,注册端口(人)
        System.out.println("=========接收端启动===============");
        DatagramSocket socket2 = new DatagramSocket(8899);

        //2.创建一个要接收的数据容器(等待接收数据)
        byte[]b =new byte[1024*64];
        //3.把容器数据打包
        DatagramPacket packet2 = new DatagramPacket(b,b.length);
        while (true) {//二、6.把封装代码写入死循环并删掉释放资源的代码(多收多发步骤)
            //4.等待接收数据
            socket2.receive(packet2);
            //5.读取多少倒出多少
            int len = packet2.getLength();
            String rs = new String(b,0,len);
            System.out.println("接收到了来自:"+packet2.getAddress()+"对方端口是:"+packet2.getPort()+rs);
        }
    }
}
//额外知识点,获取对方端口和ip地址
//String ip = packet2.getAddress().toString();
//System.out.println("对方IP地址为"+ip);

//int port = packet2.getPort();
//System.out.println("对方端口位置"+port);

运行结果: 

========客户端启动============
请输入:
你在吗
请输入:
在干嘛
请输入: 

=========接收端启动===============
接收到了来自:(隐私不展示)对方端口是:(隐私不展示)你在吗
接收到了来自:(隐私不展示)对方端口是:(隐私不展示)在干嘛

多开客户端 步骤

一台主机中可以创建很多个客户端给接收端发消息 

 1.在客户端的页面右上角点击

2.找到Allow multiple instances勾选完成

 广播(当前主机和所在网络中的所有主机通信)

步骤:(前提在同一网段内)

发送端的参数地址指定为255.255.255.255,并且指定端口:例如6666

接收端的参数端口只要匹配成功就可以了,例如:6666

例子:

发送端

//修改前

 //3.创建一个数据包对象把容器装起来
DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getLocalHost(),8899);//数据,大小,服务端的IP,服务端的端口

//修改后

 //3.创建一个数据包对象把容器装起来
DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getByName("255.255.255.255"),6666);//数据,大小,服务端的IP,服务端的端口

 接收端

//修改前
        //1.创建接收端对象,注册端口(人)
System.out.println("=========接收端启动===============");
DatagramSocket socket2 = new DatagramSocket(8899);

//修改后
        //1.创建接收端对象,注册端口(人)
System.out.println("=========接收端启动===============");
DatagramSocket socket2 = new DatagramSocket(6666);

组播 (当前主机和所在网络中的一组主机通信)

发送端和接收端都要用MulticastSocket绑定同一个IP地址和绑定同一个端口

范围:224.0.0.0~~~~239.255.255.255

发送端

//修改前
            //3.创建一个数据包对象把容器装起来
DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getByName("255.255.255.255"),6666);//数据,大小,服务端的IP,服务端的端口

//修改后
            //3.创建一个数据包对象把容器装起来
DatagramPacket packet1 = new DatagramPacket(a,a.length, InetAddress.getByName("224.0.1.1"),6666);//数据,大小,服务端的IP,服务端的端口

接收端

//修改前

         //1.创建接收端对象,注册端口(人)
System.out.println("=========接收端启动===============");
DatagramSocket socket2 = new DatagramSocket(6666);

//修改后
        //1.创建接收端对象,注册端口(人)
System.out.println("=========接收端启动===============");
MulticastSocket socket2 = new MulticastSocket(6666);
//绑定组播IP(JDK开始过时的API)
socket2.joinGroup(InetAddress.getByName("224.0.1.1"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 网络编程(大全) 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 分布式配置管理系统QConf

    分布式配置管理系统QConf 分布式配置管理系统QConf是360公司开源的系统 详见 https github com Qihoo360 QConf 整体架构图如下 资料 1 https github com Qihoo360 QConf
  • 第4章_瑞萨MCU零基础入门系列教程之瑞萨 MCU 源码设计规范

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • 【git】用好 stash,工作超nice

    一 介绍 如果修改后的内容还不想commit 就可以用git stash命令 它会将工作区和暂存区中的修改 也就是还没commit的内容 都会被保存到堆栈里 并在之后恢复到任意指定的分支上 二 应用场景 1 在分支a进行开发feature
  • python统计秒数

    code 1 没有cuda的版本 import time s time time for i in range 100 pass t time time print time sec format t s 2 cuda 同步 torch c
  • DC/DC电路——自举电容(boost)的作用

    DCDC电路中 偶尔存在有自举电容的情况 手册对该电容的定义如下 假如该点的电压低于MOSFET的最小开启电压 MOSFET将保持关断状态 看芯片手册的内部结构 此芯片的MOSFET为N沟道的MOSFET N沟道的MOSFET开通电压VGS
  • 第36.4节 动画-路径动画中的角度控制问题

    目录 本节功能 关键点 所有代码 本节功能 本节创建了一个高高低低的三维的路径 在楼顶和地面之间穿梭 一个飞机沿着这个路径进行飞行 如下图所示 请使用浏览器打开 平时遇到问题或加群也可以加我微信 13324598743 击此打开网盘资源链接
  • 使用jiraRestClient报错java.lang.ClassNotFoundException: com.google.common.base.MoreObjects

    问题是swagger需要guava依赖 导入依赖解决
  • 【工欲善其事必先利其器】论文编辑及文献管理(Endnote,Latex,JabRef ,overleaf)资源下载及使用指南

    EndnoteX9 百度网盘下载及安装 Download 百度网盘 链接 https pan baidu com s 1 WWYVkwF0uAUVvv73XZM6Q 提取码 mnd9 参考链接 EndNote X9 3 3 Build 13
  • 字节跳动面试题 —— 水壶问题

    原题 给你一个装满水的 8 升满壶和两个分别是 5 升 3 升的空壶 请想个优雅的办法 使得其中一个水壶恰好装 4 升水 每一步的操作只能是倒空或倒满 图片 理解了这个题目的意思之后 我们的第一个方法肯定就是使用强大的脑力来进行暴力破解法
  • 关于常量指针的用法

    一 指向常量的指针 例1 int main int num 5 const int fun 100 int pi const int pci pi num pci fun printf num addr p value d n num nu
  • LocalDateTime、LocalDate、Date的相互转换

    目录 使用背景 转换方法 LocalDateTime 转 LocalDate LocalDate 转 LocalDateTime LocalDate 转 Date Date转LocalDate LocalDateTime转Date Date
  • 跑一跑NeuralAnnot

    GitHub 传送阵 一 运行 这东西标注器代码西八兄弟没开源 我搞完之后才发现是标注结果展示 1 环境 西八兄弟好像没给环境配置 和环境有关的就这句话 1 python 3 8或以上 不然会报错 2 pycocotools 3 libgl
  • Vue3 引入Element Plus

    Element Plus 是为适配 Vue3 而对 Element UI 进行重构后产生的前端组件库 包含丰富的基础组件 下面先贴出 官方文档 里面的介绍已经十分全面和详细 大家遇到的很多问题都可以在上面找到答案 假设现在我们已经用 vue
  • 社区发现算法(二)

    GN算法 本算法的具体内容请参考Finding and evaluating community structure in networks Newman and Girvan 重要概念 边介数 betweenness 网络中任意两个节点通
  • linux与centos的区别与联系

    linux与centos的区别与联系 1 centos是基于linux建立的操作系统 2 linux属于内核系统 只有终端命令界面 无图形界面 3 centos同时拥有终端命令界面和图形界面 4 linux和centos都是属于开源系统 一
  • 计算机视觉与图像处理学习笔记之人脸识别的三种方法

    人脸检测是指在图像中完成人脸定位的过程 而人脸识别是在人脸检测的基础上进一步判断人的身份 OpenCV提供了三种人脸识别的方法 EigenFaces 特征脸 FisherFaces 人鱼脸 Local Binary Patterns His
  • Linux-安装命令01:apt-get命令详解(超详细)【apt-get是Ubuntu默认的包管理工具】

    简介 apt get 是一条linux命令 适用于deb包管理式的操作系统 例如Ubuntu系统 主要用于自动从互联网的软件仓库中搜索 安装 升级 卸载软件或操作系统 sudo apt get y update sudo apt get y
  • JSP九大作用域

    jsp的九大作用域 request 请求对象 类型 javax servlet ServletRequest 作用域 Request response 响应对象 类型 javax servlet SrvletResponse 作用域 Pag
  • 增长黑盒

    大家好 我是Alan 增长黑盒 增长黑盒 是一家专注研究企业增长的公司 近两年来我们输出了数十篇企业增长策略和案例的深度研究报告 并建立了国内最大的增长黑客社区 今天的这篇文章将结合自己从零搭建了一整套增长工程的案例 谈一谈增长驱动力的研究
  • Java 网络编程(大全)

    前言必读 读者手册 必读 云边的快乐猫的博客 CSDN博客 一 1网络通信的基本模式分为两种 1 CS模式 Client 客户端 Server 服务端 客户端是需要程序员去开发的 例如日常使用的各种的APP 服务端就是服务器 例子 端游 依