当前位置: 首页 > news >正文

Day(21)--网络编程

网络编程

在网络通信协议下,不同计算机上运行的程序,进行的数据传输

  • 应用场景:即使通信、网友对战、金融证券等等,不管是什么场景,都是计算机和计算机之间通过网络进行的数据传输

  • java.net

常见的软件架构

C/S(Client/Server,客户端 / 服务器)架构和 B/S(Browser/Server,浏览器 / 服务器)架构是软件开发中两种常见的软件架构模式,下面为你详细介绍:

C/S 架构

概念

C/S 架构将应用程序分为客户端和服务器两部分。客户端是用户直接交互的界面,负责处理用户的输入和显示结果;服务器则负责处理客户端的请求,提供数据存储和业务逻辑处理等服务。客户端和服务器之间通过网络进行通信。

优点
  • 性能较高:客户端可以在本地处理部分业务逻辑,减少了与服务器的通信次数,因此在处理大量数据和复杂业务时性能较好。

  • 用户体验好:可以根据用户的需求定制客户端界面和功能,提供更加个性化的用户体验。

  • 安全性高:客户端和服务器之间的通信可以采用加密技术,数据存储在服务器端,相对比较安全。

缺点
  • 维护成本高:客户端需要安装和维护,当软件更新时,需要对每个客户端进行更新,工作量较大。

  • 可扩展性差:当用户数量增加或业务需求变化时,需要对客户端和服务器进行相应的升级和扩展,难度较大。

  • 跨平台性差:不同操作系统的客户端需要开发不同的版本,增加了开发成本。

适用场景
  • 对性能要求较高的应用,如大型游戏、图形处理软件等。

  • 对数据安全性要求较高的应用,如银行的网上银行系统、企业的内部办公系统等。

B/S 架构

概念

B/S 架构是一种基于 Web 技术的架构模式,用户通过浏览器访问服务器上的应用程序。服务器负责处理所有的业务逻辑和数据存储,浏览器只负责显示页面和与用户进行交互。

优点
  • 易于维护:只需要对服务器进行维护和更新,用户不需要安装任何客户端软件,通过浏览器即可访问应用程序。

  • 可扩展性好:服务器可以根据用户数量和业务需求进行灵活的扩展,如增加服务器数量、升级服务器配置等。

  • 跨平台性好:只要有浏览器的设备都可以访问应用程序,不受操作系统的限制。

缺点
  • 性能相对较低:所有的业务逻辑都在服务器端处理,浏览器只负责显示页面,因此在处理大量数据和复杂业务时性能相对较低。

  • 用户体验受浏览器限制:不同浏览器对页面的渲染效果可能会有所不同,用户体验可能会受到一定的影响。

  • 安全性相对较低:由于浏览器是开放的,容易受到网络攻击,如 SQL 注入、XSS 攻击等。

适用场景
  • 对维护成本要求较低、用户数量较多的应用,如电子商务网站、社交网络平台等。

  • 对跨平台性要求较高的应用,如在线办公系统、在线教育平台等。

以下是一个简单的 Java 示例,分别展示 C/S 架构和 B/S 架构的基本实现。

C/S 架构示例

客户端代码:

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
​
public class CSClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8888);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {out.println("Hello, Server!");String response = in.readLine();System.out.println("Server response: " + response);} catch (IOException e) {e.printStackTrace();}}
}

服务器端代码:

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
​
public class CSServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8888)) {System.out.println("Server is listening on port 8888");try (Socket socket = serverSocket.accept();PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {String inputLine = in.readLine();System.out.println("Client message: " + inputLine);out.println("Hello, Client!");}} catch (IOException e) {e.printStackTrace();}}
}

B/S 架构示例(使用 Spring Boot)

创建一个简单的 Spring Boot 项目,包含一个控制器类:

java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
​
@SpringBootApplication
@RestController
public class BSApplication {
​public static void main(String[] args) {SpringApplication.run(BSApplication.class, args);}
​@GetMapping("/hello")public String hello() {return "Hello, World!";}
}

运行该 Spring Boot 应用程序后,在浏览器中访问 http://localhost:8080/hello 即可看到返回的信息。

网络编程三要素

网络编程三要素分别是 IP 地址、端口号和传输协议,以下为你详细介绍:

1. IP 地址

概念

IP 地址是互联网协议地址(Internet Protocol Address)的缩写,它是分配给网络上使用网际协议的设备的数字标签,其作用是唯一标识网络中的设备,就像现实生活中的家庭住址一样,通过 IP 地址可以在网络中找到对应的设备。

分类
  • IPv4:由 32 位二进制数组成,通常用点分十进制表示,例如192.168.1.1。IPv4 地址数量有限,目前已经基本分配完毕。

  • IPv6:为了解决 IPv4 地址不足的问题而推出的新一代 IP 协议,由 128 位二进制数组成,通常用冒号分隔的十六进制数表示,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334

相关代码示例(Java 获取本地 IP 地址)

java

import java.net.InetAddress;
import java.net.UnknownHostException;
​
public class GetLocalIP {public static void main(String[] args) {try {InetAddress localHost = InetAddress.getLocalHost();System.out.println("本地IP地址: " + localHost.getHostAddress());} catch (UnknownHostException e) {e.printStackTrace();}}
}

2. 端口号

概念

端口号是一个 16 位的整数,范围从 0 到 65535。它的作用是标识设备上的应用程序或服务,一台设备上可能同时运行多个网络应用程序,通过端口号可以区分不同的应用程序,从而将数据准确地发送到对应的应用程序。

分类
  • 系统端口(0 - 1023):这些端口被系统保留,用于一些知名的服务,例如 HTTP 服务使用的端口号是 80,HTTPS 服务使用的端口号是 443。

  • 注册端口(1024 - 49151):这些端口通常由用户程序或服务注册使用,例如 MySQL 数据库默认使用的端口号是 3306。

  • 动态端口(49152 - 65535):这些端口用于临时分配给客户端程序,当客户端程序与服务器建立连接时,系统会从动态端口中分配一个端口号给客户端使用。

相关代码示例(Java 使用指定端口创建服务器)

java

import java.io.IOException;
import java.net.ServerSocket;
​
public class ServerWithPort {public static void main(String[] args) {try {int port = 8888;ServerSocket serverSocket = new ServerSocket(port);System.out.println("服务器已启动,监听端口: " + port);} catch (IOException e) {e.printStackTrace();}}
}

3. 传输协议

概念

传输协议是指在网络中传输数据时所遵循的规则和约定,它定义了数据的传输格式、传输方式、错误处理等内容。不同的传输协议适用于不同的应用场景。

常见传输协议
  • TCP(Transmission Control Protocol,传输控制协议):是一种面向连接的、可靠的、基于字节流的传输协议。在进行数据传输之前,需要先建立连接,传输完成后再断开连接。TCP 协议通过确认机制、重传机制等保证数据的可靠传输,适用于对数据准确性要求较高的场景,例如文件传输、电子邮件等。

  • UDP(User Datagram Protocol,用户数据报协议):是一种无连接的、不可靠的传输协议。它不需要建立连接,直接将数据发送出去,不保证数据的可靠传输,可能会出现数据丢失、乱序等情况。UDP 协议的传输效率较高,适用于对实时性要求较高的场景,例如视频会议、在线游戏等。

相关代码示例(Java 使用 TCP 协议实现简单的客户端和服务器通信)

服务器端代码

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
​
public class TCPServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8888)) {System.out.println("服务器已启动,等待客户端连接...");try (Socket socket = serverSocket.accept();PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {String inputLine = in.readLine();System.out.println("客户端消息: " + inputLine);out.println("Hello, Client!");}} catch (IOException e) {e.printStackTrace();}}
}

客户端代码

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
​
public class TCPClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8888);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {out.println("Hello, Server!");String response = in.readLine();System.out.println("服务器响应: " + response);} catch (IOException e) {e.printStackTrace();}}
}

4 IP

  • ip的作用,设备在网络中的地址,是唯一的标识

  • IPv4:目前的主流方案,最多只有2^23次方个ip,目前已经用完了

  • IPv6:为了解决IPv4不够用而出现的,最多可以有2^128次方个ip

  • 利用局域网IP解决IP 不够用的问题

Inetaddress类

在 Java 中,InetAddress 类属于 java.net 包,它的主要功能是表示互联网协议(IP)地址。下面详细介绍该类的一些关键知识点:

1. 类的特点

InetAddress 类是一个抽象类,这意味着不能直接使用 new 关键字来创建它的实例。不过,它提供了多个静态方法来获取 InetAddress 实例。

2. 获取 InetAddress 实例

  • 通过主机名获取:可以使用 getByName(String host) 方法,该方法会返回一个表示指定主机名的 InetAddress 对象。

java

import java.net.InetAddress;
import java.net.UnknownHostException;
​
public class InetAddressExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");System.out.println(address);} catch (UnknownHostException e) {System.out.println("无法解析主机名: " + e.getMessage());}}
}
  • 获取本地主机地址:使用 getLocalHost() 方法,它会返回一个表示本地主机的 InetAddress 对象。

java

import java.net.InetAddress;
import java.net.UnknownHostException;public class LocalHostExample {public static void main(String[] args) {try {InetAddress localHost = InetAddress.getLocalHost();System.out.println("本地主机地址: " + localHost);} catch (UnknownHostException e) {System.out.println("无法获取本地主机地址: " + e.getMessage());}}
}
  • 通过 IP 地址获取:使用 getByAddress(byte[] addr) 方法,该方法会返回一个表示指定 IP 地址的 InetAddress 对象。

java

import java.net.InetAddress;
import java.net.UnknownHostException;
​
public class ByAddressExample {public static void main(String[] args) {try {byte[] ip = {127, 0, 0, 1};InetAddress address = InetAddress.getByAddress(ip);System.out.println(address);} catch (UnknownHostException e) {System.out.println("无法解析 IP 地址: " + e.getMessage());}}
}

3. 常用方法

  • getHostName():返回此 IP 地址的主机名。

java

import java.net.InetAddress;
import java.net.UnknownHostException;public class GetHostNameExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");String hostName = address.getHostName();System.out.println("主机名: " + hostName);} catch (UnknownHostException e) {System.out.println("无法解析主机名: " + e.getMessage());}}
}
  • getHostAddress():返回此 IP 地址的字符串表示形式。

java

import java.net.InetAddress;
import java.net.UnknownHostException;public class GetHostAddressExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");String hostAddress = address.getHostAddress();System.out.println("IP 地址: " + hostAddress);} catch (UnknownHostException e) {System.out.println("无法解析主机名: " + e.getMessage());}}
}
  • isReachable(int timeout):测试是否可以达到该地址。该方法会尝试与该地址建立连接,如果在指定的超时时间内成功建立连接,则返回 true,否则返回 false

java

import java.net.InetAddress;
import java.io.IOException;
​
public class IsReachableExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");boolean isReachable = address.isReachable(5000);System.out.println("是否可以到达: " + isReachable);} catch (IOException e) {System.out.println("发生 I/O 错误: " + e.getMessage());}}
}

4. 子类

Inet4AddressInet6AddressInetAddress 的具体子类,分别代表 IPv4 和 IPv6 地址。你可以使用 instanceof 运算符来判断一个 InetAddress 对象是 IPv4 还是 IPv6 地址。

java

import java.net.InetAddress;
import java.net.UnknownHostException;public class SubclassExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");if (address instanceof java.net.Inet4Address) {System.out.println("这是一个 IPv4 地址");} else if (address instanceof java.net.Inet6Address) {System.out.println("这是一个 IPv6 地址");}} catch (UnknownHostException e) {System.out.println("无法解析主机名: " + e.getMessage());}}
}

综上所述,InetAddress 类为 Java 程序与网络地址的交互提供了方便的方式,通过它可以轻松地进行主机名解析、IP 地址获取以及网络可达性测试等操作。

端口号

  • 是应用程序在设备中唯一的标识

  • 端口号:

    1. 由两个字节表示的整数,取值范围是0~65535

    2. 其0~1023之间的端口用于一些知名的网络网络服务或者应用

    3. 我们自己使用1024以上的端口号就可以了

  • 注意:一个端口号只能被一个应用程序使用

网络编程中的协议知识点整理

一、网络协议概述

网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合。它规定了数据传输的格式、传输顺序、错误处理等方面的内容,确保不同设备之间能够准确、可靠地进行通信。

二、常见网络协议层次模型

1. OSI 七层模型
  • 物理层:负责传输比特流,规定了传输介质、接口类型、信号编码等物理特性。例如,以太网的网线接口、光纤的传输标准等。

  • 数据链路层:将物理层接收到的比特流封装成帧,进行差错检测和流量控制。常见协议有以太网协议(Ethernet),用于局域网中设备之间的通信。

  • 网络层:负责将帧从源节点传输到目标节点,进行路由选择和寻址。主要协议有 IP(Internet Protocol)协议,包括 IPv4 和 IPv6。

  • 传输层:提供端到端的可靠通信,确保数据的正确传输。常见协议有 TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。

  • 会话层:负责建立、管理和终止会话,协调不同应用程序之间的通信。例如,RPC(Remote Procedure Call)协议。

  • 表示层:处理数据的表示和转换,如加密、解密、压缩、解压缩等。例如,SSL/TLS 协议用于数据加密传输。

  • 应用层:为用户提供应用程序接口,直接面向用户的应用程序。常见协议有 HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)等。

2. TCP/IP 四层模型
  • 网络接口层:对应 OSI 模型的物理层和数据链路层,负责将数据帧在物理网络上传输。

  • 网际层:与 OSI 模型的网络层功能相似,主要协议是 IP 协议。

  • 传输层:和 OSI 模型的传输层相同,提供 TCP 和 UDP 协议。

  • 应用层:包含了 OSI 模型的会话层、表示层和应用层的功能,常见协议有 HTTP、FTP、SMTP 等。

三、常见网络协议详解

1. IP 协议
  • 功能:为网络中的设备分配唯一的 IP 地址,实现数据包的路由和转发。

  • 版本

    • IPv4:采用 32 位地址,地址数量有限,格式为点分十进制,如 192.168.1.1

    • IPv6:采用 128 位地址,解决了 IPv4 地址不足的问题,格式为冒分十六进制,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334

2. TCP 协议
  • 特点:面向连接、可靠传输、基于字节流。在传输数据之前,需要先建立连接(三次握手),传输完成后需要断开连接(四次挥手)。

  • 三次握手

    1. 客户端向服务器发送 SYN 包,请求建立连接。

    2. 服务器收到 SYN 包后,向客户端发送 SYN + ACK 包,表示同意建立连接。

    3. 客户端收到 SYN + ACK 包后,向服务器发送 ACK 包,连接建立成功。

  • 四次挥手(:确保连接断开,且数据处理完毕)

    1. 客户端向服务器发送 FIN 包,表示请求关闭连接。

    2. 服务器收到 FIN 包后,向客户端发送 ACK 包,表示同意关闭连接。

    3. 服务器向客户端发送 FIN 包,表示请求关闭连接。

    4. 客户端收到 FIN 包后,向服务器发送 ACK 包,表示同意关闭连接。

3. UDP 协议
  • 特点:无连接、不可靠传输、基于数据报。不需要建立连接,直接发送数据,传输效率高,但不能保证数据的可靠到达。适用于对实时性要求较高、对数据准确性要求较低的场景,如视频直播、在线游戏等。

  • 三种通信方式

    • 单播

      • 下面聊天室的代码就是单播

    • 组播

      • 组播地址:224.0.0.0~239.255.255.255

        • 其中224.0.0.0~224.0.0255 位预留的组播地址

    • 广播

      • 广播地址255.255.255.255

  • 以下是用 Java 语言实现该聊天室功能的代码示例及解析:

    发送端代码(Sender.java)

    java

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.*;
    ​
    public class Sender {public static void main(String[] args) throws IOException {// 创建DatagramSocket对象用于发送数据报DatagramSocket ds = new DatagramSocket();
    ​// 创建BufferedReader用于从键盘读取输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line;while (true) {line = br.readLine();// 判断是否输入886,如果是则结束发送if ("886".equals(line)) {break;}// 将输入的字符串转换为字节数组byte[] bys = line.getBytes();// 创建DatagramPacket对象,指定发送的数据、长度、目标地址和端口DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("localhost"), 12345);// 发送数据报ds.send(dp);}// 关闭资源ds.close();}
    }

    接收端代码(Receiver.java)

    java

    import java.io.IOException;
    import java.net.*;
    ​
    public class Receiver {public static void main(String[] args) throws IOException {// 创建DatagramSocket对象,指定接收数据的端口DatagramSocket ds = new DatagramSocket(12345);while (true) {// 创建字节数组用于存储接收的数据byte[] bys = new byte[1024];// 创建DatagramPacket对象用于接收数据报DatagramPacket dp = new DatagramPacket(bys, bys.length);// 接收数据报ds.receive(dp);// 获取接收到的数据的实际长度int length = dp.getLength();// 将字节数组转换为字符串并输出String data = new String(bys, 0, length);System.out.println("收到消息: " + data);}}
    }

    代码解析

    1. 发送端(Sender.java)

      • 首先创建 DatagramSocket 对象,这是 UDP 通信中用于发送和接收数据报的套接字。

      • 通过 BufferedReader 从键盘读取用户输入。

      • 使用 while 循环持续读取输入,当输入为 886 时跳出循环。

      • 对于每次读取到的非 886 输入,将其转换为字节数组,创建 DatagramPacket 对象,指定目标地址(这里用 localhost 表示本地主机)和端口(12345),然后通过 send 方法发送数据报。

      • 最后关闭 DatagramSocket 资源。

    2. 接收端(Receiver.java)

      • 创建 DatagramSocket 对象并指定端口(12345),用于接收发送端发来的数据报。

      • 使用一个无限循环(死循环)持续接收数据报。在循环内,先创建字节数组和 DatagramPacket 对象。

      • 通过 receive 方法接收数据报,然后获取数据的实际长度,将字节数组转换为字符串并输出接收到的消息。

    注意事项:

    • 这里发送端和接收端的端口要对应一致(都是 12345 ),实际应用中可根据需求修改。

    • 代码中发送的目标地址为 localhost,意味着发送和接收都在本地进行,若要在网络中不同主机间通信,需改为对应主机的 IP 地址。

4. HTTP 协议
  • 功能:用于在 Web 浏览器和 Web 服务器之间传输超文本(如 HTML 页面)。

  • 版本

    • HTTP/1.0:无状态协议,每次请求都需要建立新的连接,效率较低。

    • HTTP/1.1:支持持久连接、请求头压缩、分块传输等功能,提高了传输效率。

    • HTTP/2:采用二进制分帧、多路复用、头部压缩等技术,进一步提高了性能。

  • 请求方法:常见的有 GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。

5. FTP 协议
  • 功能:用于在客户端和服务器之间进行文件传输。

  • 工作模式

    • 主动模式:服务器主动连接客户端的数据端口。

    • 被动模式:服务器等待客户端连接其数据端口。

6. SMTP、POP3 和 IMAP 协议
  • SMTP(Simple Mail Transfer Protocol):用于发送电子邮件。

  • POP3(Post Office Protocol 3):用于接收电子邮件,将邮件从服务器下载到本地客户端后,服务器上的邮件通常会被删除。

  • IMAP(Internet Message Access Protocol):也是用于接收电子邮件,但可以在服务器上保留邮件副本,方便在不同设备上同步邮件。

四、协议的选择和应用场景

  • TCP 协议:适用于对数据准确性要求较高、对实时性要求较低的场景,如文件传输、网页浏览等。

  • UDP 协议:适用于对实时性要求较高、对数据准确性要求较低的场景,如视频直播、在线游戏等。

  • HTTP 协议:主要用于 Web 应用开发,实现客户端和服务器之间的通信。

  • FTP 协议:用于文件的上传和下载。

  • SMTP、POP3 和 IMAP 协议:用于电子邮件的发送和接收。

相关文章:

Day(21)--网络编程

网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输 应用场景:即使通信、网友对战、金融证券等等,不管是什么场景,都是计算机和计算机之间通过网络进行的数据传输 java.net 常见的软件架构 C/S&am…...

Android主流播放器功能详解

Android主流播放器功能详解 前言 本文将深入介绍Android三大主流播放框架(ijkplayer、ExoPlayer和MediaPlayer)的功能特性和实战应用,帮助你选择合适的播放框架并掌握其使用方法。 三大播放框架概述 播放框架开发方特点适用场景MediaPlayerAndroid官方简单易用,系统内置…...

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记2

目录 一、ArcGIS Engine概述 1、 定义 2、 核心功能 3、 与ArcObjects(AO)的关系 二、开发环境搭建 1、 开发工具要求 2、 关键步骤 三、 ArcGIS Engine核心组件 1、 对象模型 2、 类库分类 四、 第一个AE应用程序(C#示例&#xf…...

语音合成(TTS)从零搭建一个完整的TTS系统-第一节-效果演示

一、概述 语音合成又叫文字转语音(TTS-text to speech ),本专题我们记录从零搭建一个完整的语音合成系统,包括文本前端、声学模型和声码器,从模型训练到系统的工程化实现,模型可以部署在手机等嵌入式设备上…...

文章记单词 | 第35篇(六级)

一,单词释义 across [əˈkrɒs] prep. 从一边到另一边;横过;在… 对面;遍及;在… 上;跨越;adv. 从一边到另一边;横过;宽;从… 的一边到另一边;在…...

MySQL Binlog 数据恢复总结

🌲 总入口:你想恢复什么? 恢复类型 ├── 表结构 表数据(整张表被 DROP) │ ├── Binlog 中包含 CREATE TABLE │ │ └── ✅ 直接用 mysqlbinlog 提取建表 数据语句,回放即可 │ └── B…...

【Linux】进程基础入门指南(下)

> 🍃 本系列为Linux的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:【小编的个人主页】 >小编将在这里分享学习Linux的心路历程✨和知识分享🔍 >如果本篇文章有不足,还请多多包涵&a…...

NoETL×大模型:Aloudata重构数据智能新范式,开启Chat BI新落地之道

在当今数据驱动的时代,企业对于高效、智能的数据处理与分析需求日益增长。随着大模型的兴起,如DeepSeek等,数据智能领域正经历着前所未有的变革。 Aloudata大应科技创始人&CEO周卫林表示,企业的核心竞争力包括人才壁垒、技术…...

算法题(126):前缀和

审题: 本题需要我们将题目给出的数组的数据的[l,r]范围内的数据和打印 思路: 方法一:前缀和 前缀和的思想就是预处理数据,通过空间换时间的方式提高代码效率 第一步:利用数组f将前缀和记录下来,f[i]表示索引…...

选择排序(简单选择排序、堆排序)

简单选择排序(Selection Sort) 1. 算法思想 它通过多次遍历数组,每次从未排序部分中选择最小(或最大)的元素,将其放到已排序部分的末尾(或开头),直到整个数组有序。 2.…...

【JavaEE】Spring AOP的注解实现

目录 一、AOP 与 Spring AOP二、Spring AOP简单实现三、详解Spring AOP3.1 Spring AOP 核心概念3.1.1 切点(Pointcut)3.1.2 连接点(Join Point)3.1.3 通知(Advice)3.1.4 切面(Aspect&#xff09…...

【天外之物】加速度与速度的单位向量的内积得到加速度在切向向量上的值

切向加速度的标量值 a T a_T aT​ 正是加速度矢量 a \mathbf{a} a 与单位切矢量 T ^ \mathbf{\hat{T}} T^ 的内积(点积)。 1. 数学定义 设物体的速度为 v \mathbf{v} v,加速度为 a \mathbf{a} a,单位切矢量为 T ^ \mathbf{…...

​​eBay 2025春季财报揭示跨境电商新蓝海:五大隐秘品类引爆增长密码​

核心数据速览​​ 2024年第一季度,eBay全球商品交易总额(GMV)达255亿美元,同比增长5%。这一增长不仅源于季节性消费回暖,更折射出跨境电商行业在能源转型、供应链重构及消费需求升级中的结构性变革。透过数据&#xff…...

兔子桌面tv版下载-兔子桌面tv版官方app免费下载安装

兔子桌面 TV 版是一款专为智能电视和机顶盒设计的轻量化桌面应用,其界面采用大图标、大字体设计,支持自由调整应用顺序,将常用的影视、游戏 App 置顶,还可通过主题市场下载动态背景,满足用户对电视界面的个性化需求。 …...

绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力【2】

工业与医疗:精准化的幕后推手 在工业4.0与智慧医疗领域,绿算轻舟FPGA加速卡通过实时信号处理与高精度控制,推动关键场景的技术升级。 工业自动化:在机器视觉质检中,实现亚像素级缺陷检测,产线检测速度大幅…...

ubuntu1804服务器开启ftp,局域网共享特定文件给匿名用户

要在 Ubuntu 18.04 上设置一个 FTP 服务器,满足以下要求: 允许匿名登录(无需账号密码)。指定分享特定目录下的文件。只允许只读下载。 可以使用 vsftpd(Very Secure FTP Daemon)来实现。以下是详细步骤&a…...

k8s中pod报错 FailedCreatePodSandBox

问题现象: 创建容器时出现一下情况 而且删掉控制器的时候pod还会卡住 解决: 将calico的pod重新删掉。其中有1个控制器pod以及3个node pod 删掉后,大概10来秒就重新创建完成了。 然后现在在使用kubectl apply -f 文件.yaml 就可以正常创…...

请详细说明下面训练阶段的差别: Supervised Fine-Tuning、Reward Modeling、PPO、DPO、KTO、Pre-Training

目录 🔧 一、训练阶段总体流程(从底层到上层) 🧠 1. Pre-Training(预训练) 📌 目的: 📚 数据: ⚙️ 方法: 💡 举个例子&#xf…...

Go语言入门到入土——一、安装和Hello World

Go语言入门到精通——安装和Hello World 文章目录 Go语言入门到精通——安装和Hello World下载并安装让Go跑起来为你的代码启动依赖跟踪调用外部包总结 下载并安装 下载地址:https://go.dev/dl/ 下载后傻瓜式安装 查看是否安装完成 go version让Go跑起来 创建一个…...

React 入门完全指南:从零开始构建现代 Web 应用

在当今快速发展的前端开发领域,React 凭借其高效的组件化架构和强大的生态系统,已成为最受欢迎的 JavaScript 库之一。根据 2023 年 Stack Overflow 开发者调查,React 连续七年成为最常用的 Web 框架。无论是初创公司还是科技巨头&#xff0c…...

0701表单组件-react-仿低代码平台项目

文章目录 1 react表单组件1.1 受控组件 (Controlled Components)示例代码: 1.2 非受控组件 (Uncontrolled Components)示例代码: 2 AntD表单组件实战2.1 开发搜索功能2.2 开发注册页2.3 开发登录页2.4 表单组件校验 结语 1 react表单组件 input表单组件…...

Android ViewStub显示VISIBLE与消失GONE,Kotlin(2)

Android ViewStub显示VISIBLE与消失GONE,Kotlin(2) 在 Android ViewStub显示VISIBLE与消失GONE,Kotlin-CSDN博客 基础上完善。 import android.os.Bundle import android.util.Log import android.view.View import android.view…...

跨站脚本(XSS) 的详细分类、对比及解决方案

以下是 跨站脚本(XSS) 的详细分类、对比及解决方案: 一、XSS的分类与详解 1. 反射型XSS(非持久型XSS) 定义:攻击载荷通过URL参数传递,服务器直接返回到页面中,需用户主动触发。 工…...

JVM:程序计数器、虚拟机栈、本地方法栈

一、程序计数器 (1)程序计数器介绍 作用:当线程执行 Java 方法时,程序计数器记录该线程下一条要执行的字节码指令的地址;当线程执行本地方法时,程序计数器的值为未指定(undefined)…...

适配器模式在Java开发中的应用

适配器模式(Adapter Pattern)是设计模式中的一种结构型模式,它允许将一个类的接口转换成客户端所期望的另一个接口。通过这种方式,原本因接口不兼容而无法协同工作的类能够一起工作。适配器模式在Java开发中非常常见,尤…...

(三)谷歌Code as Policies复现(操作记录)

目录 《复现的项目来源》 一、创建虚拟环境 二、下载原项目并修改(非必须) 二、可直接下载修改后的项目 三、配置环境 (1)安装jupyterlab以及内核 (2)安装ffmpeg (3)配置环境…...

驱动学习专栏--字符设备驱动篇--2_字符设备注册与注销

对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 : static inline int register_chrdev(unsigned int major, const char *name, const…...

奥创中心卸载工具Armoury Crate Uninstall Tool官网下载

为了应对用户对 Armoury Crate 占用资源大、卸载困难等问题的普遍反馈,ASUS 官方提供了一个专门的卸载工具,即 Armoury Crate Uninstall Tool(奥创中心卸载工具)。该工具的主要作用是帮助用户彻底从系统中移除 Armoury Crate 相关的所有组件,…...

【Linux网络】网络基础概念深度解析

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

【NLP 61、大模型应用 —— RAG方法】

生活打不败一个大口吃饭的人! —— 25.4.13 一、模型幻觉问题 模型幻觉(AI Hallucination)是指人工智能模型(尤其是大语言模型)生成看似合理但实际不准确、虚构或与事实不符内容的现象。其本质是模型基于统计概…...

UV工具——小试牛刀

背景 MCP开发使用到 为什么MCP更推荐使用uv进行环境管理? MCP 依赖的 Python 环境可能包含多个模块,uv 通过 pyproject.toml 提供更高效的管理方式,并且可以避免 pip 的一些依赖冲突问题。此外,uv 的包管理速度远超 pip…...

vue3+vite 多个环境配置

同一套代码 再也不用在不同的环境里来回切换请求地址了 然后踩了一个坑 就是env的文件路径是在当前项目下 不是在views内 因为公司项目需求只有dev和pro两个环境 虽然我新增了3个 但是只在这两个里面配置了 .env是可以配置一些公共配置的 目前需求来说不需要 所以我也懒得配了。…...

《分布式软总线架构下,设备虚拟化技术的深度剖析与优化策略》

设备之间的互联互通和协同工作已成为一种趋势。分布式软总线架构作为实现这一目标的关键技术,为不同设备之间的通信和协作提供了基础。而设备虚拟化技术则是在分布式软总线架构下,进一步提升设备资源利用效率的重要手段。本文将深入探讨在分布式软总线架…...

MCP 正当时:FunctionAI MCP 开发平台来了!

作者:封崇 MCP:AI 时代的“操作系统接口” 2024 年 11 月,Anthropic 发布模型上下文协议(MCP),这一开放标准迅速引发开发者社区的"协议觉醒"。其本质是通过标准化接口实现 LLM 与外部世界的双向…...

AI Agents系列之AI代理的类型

在本文中,我们将探讨不同类型的 AI 代理,包括它们的实现、实际应用、优势和局限性。从简单反射代理到多代理系统,我们将了解这些模型如何推动自动化、决策制定和智能问题解决。 文章目录 1. AI代理的类型1.1 简单反射代理1.1.1 实现**1.1.2 优势****1.1.3 局限性**1.2 基于…...

Go RabbitMQ基础教程:入门与实践指南,实战代码讲解

简介: RabbitMQ是一款实现高级消息队列协议(AMQP)的消息代理软件,也称为消息队列或消息中间件。它通过解耦应用程序之间的直接通信,支持异步数据交换,增强了系统的可扩展性和灵活性。RabbitMQ能够跨平台运…...

LeetCode详解之如何一步步优化到最佳解法:27. 移除元素

LeetCode详解系列的总目录(持续更新中): LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客 LeetCode详解系列的上一题链接: LeetCode详解之如何一步步优化到最佳解法…...

c++原子操作

原子操作,顾名思义,该操作不可分割。多线程环境也能保证读写数据不错乱。百度搜索了下,其核心概念如下: 1、不可分割性。原子操作是指一系列不可被CPU上下文交换的机器指令,操作要么完全执行,要么完全不执…...

在 Redis Lua 脚本中,keyCount 参数的作用是明确区分脚本参数中的 KEYS 和 ARGV,具体关系如下:

在 Redis Lua 脚本中,keyCount 参数的作用是**明确区分脚本参数中的 KEYS 和 ARGV**,具体关系如下: --- ### 核心作用 1. **参数分类标识** - keyCount 表示脚本中使用的 Redis KEY 的数量(即 KEYS 数组的长度)…...

小白如何从0学习CSS

以下是针对小白从零开始系统学习 CSS 的完整路径和实用指南,结合核心概念、实践技巧和项目经验,助你掌握网页样式的精髓: 1. 理解 CSS 是什么? 定义:CSS(层叠样式表)用于控制网页的视觉表现&…...

一文掌握RK3568开发板Android13挂载Windows共享目录

在物联网和边缘计算场景中,开发板与PC端的高效文件交互尤为重要。现以iTOP-RK3568开发板为例,详细演示Android13系统如何通过CIFS协议挂载Windows共享目录,实现开发板与PC的无缝文件共享。 RK3568开发板优势 iTOP-3568开发板采用瑞芯微RK3…...

UE5烘培后->为什么C磁盘满了

烘培会产生ddc 需要把路径切换一下,比如切换到游戏空间下。 如何修改,修改如下: 使用记事本打开BaseEngine.ini文件。 将以下内容: textCopy Code Path\"%ENGINEVERSIONAGNOSTICUSERDIR%DerivedDataCache\" 替换为&…...

本地搭建全网可访问的开源音乐服务器Melody结合内网穿透随时听歌

文章目录 前言1. 添加镜像源2. 本地部署Melody3. 本地访问与使用演示4. 安装内网穿透5. 配置Melody公网地址6. 配置固定公网地址 前言 嗨,各位音乐发烧友们!今天我要带你们解锁一个超酷的新技能——在香橙派Zero3上搭建自己的在线音乐平台,并…...

深度学习Y5周:yolo.py文件解读

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、前言 文件位置:./models/yolo.py 此文件是实现YOLOv5网络模型的搭建文件,如果想改进YOLOv5,这个文件是必须进行修改的…...

Qt实现文件传输服务器端(图文详解+代码详细注释)

Qt实现文件传输服务器 1、前言2、服务器2.1 服务器UI界面2.2添加网络模块和头文件2.3、创建服务器对象2.4 连接有新连接的信号与槽2.5实现有新连接处理的槽函数2.6 选择文件按钮实现2.6.1 连接按钮点击的信号与槽2.6.2 添加头文件2.6.3 创建所需对象2.6.3 选择文件按钮实现 2.7…...

记录学习的第二十七天

今天效率低下,只做了一道力扣的每日一题。 看了题解才懂的。下面复述一遍吧。 算法就是越长越合法型滑动窗口。 核心: 如果此时窗口中有c个元素x,此时再进一个x,那么相同数对就增加c个。 如果此时窗口有c个元素x,此…...

docker 安装TDengine 时序数据库

TDengine是一个高性能、分布式a的时序数据库,专为物联网(loT)和大数据分析日设计。使用Docker快速地搭建 TDengine 的开发或测试环境。以下技术指南,帮助您通过Docker Compose 安装并运行TDengine 1.拉取镜像 (3.3.6.0版本) docker pull registry.cn-ha…...

如何更好使用呼叫中心系统和语音机器人

​要更好地使用呼叫中心系统和语音机器人,需要结合两者的优势,实现自动化、智能化、高效率的客户服务与业务运营。以下是优化策略和具体实践方法: 一、呼叫中心系统优化 1. 智能路由与IVR优化 ​ ​智能ACD(自动呼叫分配&…...

C复习(主要复习)

指针和数组 指针数组是一个数组,数组的每个元素都是指针。它适用于需要存储多个指针的场景,如字符串数组。数组指针是一个指针,指向一个数组。它适用于需要传递整个数组给函数或处理多维数组的场景。 函数指针:函数指针的定义需要…...

网页五子棋项目测试报告

一、测试概述 网页五子棋项目运用 Java 语言与 Spring 框架开发,具备用户登录注册、人机对战、在线匹配对局、房间邀请对局及积分排行榜等功能。本次测试旨在评估项目各功能的完整性、稳定性与交互性,依据各文章所描述的功能设计和实现细节进行全面测试…...