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

网络和通信详解

一、Java 网络编程基础

  1. IP 地址和端口号
    • IP 地址
      • IP 地址是互联网协议地址,用于标识网络中的设备。在 Java 中,InetAddress类是用于表示 IP 地址的主要类。例如,InetAddress.getByName("www.example.com")可以获取指定域名对应的 IP 地址。IP 地址分为 IPv4(如192.168.0.1)和 IPv6(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)两种格式。IPv4 地址由 32 位二进制数组成,通常用点分十进制表示;IPv6 地址由 128 位二进制数组成,用于提供更多的 IP 地址以满足不断增长的网络设备需求。
    • 端口号
      • 端口号是用于标识设备上的特定网络服务或应用程序的数字。它的取值范围是 0 - 65535,其中 0 - 1023 是系统保留端口,用于一些常见的网络服务,如 HTTP 服务通常使用端口 80,HTTPS 使用端口 443。在 Java 中,当创建网络应用程序时,需要指定一个端口号来让客户端能够找到并连接到服务端。例如,一个简单的 Web 服务器可能会在端口 8080 上监听客户端请求。
  2. 网络通信模型
    • OSI 模型和 TCP/IP 模型
      • OSI(开放式系统互联)模型是一个理论上的网络通信参考模型,分为七层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而 TCP/IP 模型是实际应用更为广泛的网络通信模型,它分为四层,分别是网络接口层、网络层、传输层和应用层。在 Java 网络编程中,主要涉及的是传输层(如 TCP 和 UDP 协议)和应用层。
      • TCP/IP 模型的网络层主要负责处理 IP 数据包的寻址和路由,确保数据能够在不同的网络之间传输。传输层则提供端到端的通信服务,TCP 协议保证数据的可靠传输,UDP 协议提供快速但不可靠的传输。应用层是程序员直接接触的一层,在这里可以通过各种协议(如 HTTP、FTP 等)来构建网络应用程序。

二、基于 TCP 的 Java 网络编程

  1. Socket 和 ServerSocket 类
    • ServerSocket
      • ServerSocket是服务端用于监听客户端连接请求的类。当创建一个ServerSocket对象并指定一个端口号后,它就开始在该端口上监听。例如,ServerSocket serverSocket = new ServerSocket(8080);表示在端口 8080 上等待客户端连接。当有客户端请求连接时,可以通过serverSocket.accept()方法接受连接,这个方法会阻塞当前线程,直到有客户端连接成功,然后返回一个Socket对象用于和客户端进行通信。
    • Socket
      • Socket类代表一个客户端和服务端之间的连接。在客户端,可以通过Socket socket = new Socket("localhost", 8080);来创建一个连接到本地主机(localhost)的 8080 端口的连接。一旦连接建立,客户端和服务端就可以通过Socket对象获取输入流和输出流来进行数据的读写。例如,服务端可以通过InputStream inputStream = socket.getInputStream();获取客户端发送的数据输入流,通过OutputStream outputStream = socket.getOutputStream();向客户端发送数据。
  2. TCP 通信流程示例
    • 服务端流程
      • 首先创建ServerSocket对象并开始监听端口。
      • 当客户端连接请求到来时,接受连接并获取Socket对象。
      • 通过Socket对象获取输入流和输出流,读取客户端发送的数据并进行处理,然后将处理结果通过输出流发送回客户端。
      • 通信结束后,关闭SocketServerSocket对象。
    • 客户端流程
      • 创建Socket对象连接到服务端。
      • 获取输入流和输出流,将数据发送给服务端,并读取服务端返回的数据。
      • 通信结束后,关闭Socket对象。
  3. 应用场景和示例代码
    • 简单的文件传输服务端和客户端示例
      • 服务端代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class FileTransferServer {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器正在等待客户端连接...");Socket socket = serverSocket.accept();System.out.println("客户端已连接");InputStream inputStream = socket.getInputStream();FileOutputStream fileOutputStream = new FileOutputStream("received_file.txt");byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer))!= -1) {fileOutputStream.write(buffer, 0, length);}System.out.println("文件接收成功");socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}
  • 客户端代码
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class FileTransferClient {public static void main(String[] args) {try {Socket socket = new Socket("localhost", 8080);FileInputStream fileInputStream = new FileInputStream("source_file.txt");OutputStream outputStream = socket.getOutputStream();byte[] buffer = new byte[1024];int length;while ((length = fileInputStream.read(buffer))!= -1) {outputStream.write(buffer, 0, length);}System.out.println("文件发送成功");socket.close();} catch (IOException e) {e.printStackTrace();}}
}
  • 在这个示例中,客户端将本地的source_file.txt文件发送给服务端,服务端接收文件并保存为received_file.txt。通过 TCP 协议的可靠传输保证文件内容的完整性。

三、基于 UDP 的 Java 网络编程

  1. DatagramSocket 和 DatagramPacket 类
    • DatagramSocket
      • DatagramSocket类用于发送和接收 UDP 数据包。在服务端和客户端都可以使用这个类。在服务端,可以使用DatagramSocket在指定端口监听 UDP 数据包;在客户端,可以使用它向指定的 IP 地址和端口发送 UDP 数据包。例如,DatagramSocket socket = new DatagramSocket();创建一个 UDP 套接字,用于发送和接收 UDP 数据包。
    • DatagramPacket
      • DatagramPacket类用于表示 UDP 数据包。它包含了要发送或接收的数据、数据的长度、目标 IP 地址和端口号(对于发送数据包)或者源 IP 地址和端口号(对于接收数据包)。例如,创建一个发送数据包可以使用byte[] data = "Hello".getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8080);,这里指定了要发送的数据为Hello,目标地址为本地主机的 8080 端口。
  2. UDP 通信流程示例
    • 服务端流程
      • 创建DatagramSocket对象并绑定到指定端口。
      • 创建DatagramPacket对象用于接收数据,通过DatagramSocketreceive方法接收数据包。
      • 处理接收到的数据,然后可以创建新的DatagramPacket对象将处理结果发送回客户端。
      • 通信结束后,关闭DatagramSocket对象。
    • 客户端流程
      • 创建DatagramSocket对象(如果不需要接收数据,也可以不创建)。
      • 创建DatagramPacket对象,将数据填充进去,通过DatagramSocketsend方法发送数据包给服务端。
      • 如果需要接收服务端返回的数据,可以创建接收数据包并使用receive方法接收。
      • 通信结束后,关闭DatagramSocket对象(如果创建了的话)。
  3. 应用场景和示例代码
    • 简单的 UDP 消息发送和接收示例
      • 服务端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPServer {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket(8080);byte[] buffer = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);socket.receive(receivePacket);String message = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到消息: " + message);InetAddress clientAddress = receivePacket.getAddress();int clientPort = receivePacket.getPort();String response = "已收到你的消息";byte[] responseData = response.getBytes();DatagramPacket sendPacket = new DatagramPacket(responseData, responseData.length, clientAddress, clientPort);socket.send(sendPacket);socket.close();} catch (IOException e) {e.printStackTrace();}}
}
  • 客户端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPClient {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket();String message = "你好";byte[] data = message.getBytes();InetAddress serverAddress = InetAddress.getByName("localhost");DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 8080);socket.send(packet);byte[] buffer = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);socket.receive(receivePacket);String response = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到回复: " + response);socket.close();} catch (IOException e) {e.printStackTrace();}}
}
  • 在这个示例中,客户端向服务端发送一个简单的消息,服务端接收消息后发送一个回复给客户端。UDP 协议的快速性使得这种简单的消息交互能够快速完成,但不保证消息一定能完整和准确地到达。

四、高级网络编程主题

  1. 多线程在网络编程中的应用
    • 在网络编程中,尤其是服务端编程,为了能够同时处理多个客户端的连接请求,通常会使用多线程。例如,在基于 TCP 的服务端中,当接受一个客户端连接后,可以为这个客户端连接创建一个新的线程来处理后续的通信,这样服务端就可以继续监听其他客户端的连接请求,而不会因为一个客户端的长时间通信而阻塞。
    • 以下是一个简单的基于多线程的 TCP 服务端示例:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;class ClientHandler implements Runnable {private Socket socket;public ClientHandler(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();byte[] buffer = new byte[1024];int length;while ((length = inputStream.read(buffer))!= -1) {String message = new String(buffer, 0, length);System.out.println("收到客户端消息: " + message);String response = "已收到你的消息";outputStream.write(response.getBytes());}socket.close();} catch (IOException e) {e.printStackTrace();}}
}public class MultiThreadedTCPServer {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器正在等待客户端连接...");while (true) {Socket socket = serverSocket.accept();System.out.println("客户端已连接");Thread thread = new Thread(new ClientHandler(socket));thread.start();}} catch (IOException e) {e.printStackTrace();}}
}
  • 在这个示例中,ClientHandler类实现了Runnable接口,用于处理单个客户端的通信。在MultiThreadedTCPServermain方法中,每当有客户端连接时,就创建一个新的线程来运行ClientHandler,这样就可以同时处理多个客户端的通信。
  1. 网络安全相关概念(SSL/TLS)

    • SSL/TLS 简介
      • SSL(安全套接层)和 TLS(传输层安全)是用于在网络通信中提供安全加密的协议。它们可以保证数据在传输过程中的保密性、完整性和认证性。在 Java 中,可以通过javax.net.ssl包来实现 SSL/TLS 加密的网络通信。例如,在基于 TCP 的服务端和客户端通信中,可以使用 SSL/TLS 来加密传输的数据,防止数据被窃取或篡改。
    • 使用示例(简单介绍)
      • 首先需要创建密钥库(KeyStore)和信任库(TrustStore),用于存储服务器和客户端的证书、私钥等信息。然后在创建ServerSocketSocket对象时,通过SSLContext等相关类来配置 SSL/TLS 加密。具体的实现较为复杂,涉及到证书的生成、配置和管理等多个步骤,但这样可以为网络通信提供更高的安全性。
  2. Java 网络编程中的 NIO(非阻塞 I/O)

    • NIO 简介
      • Java NIO(New Input/Output)是一种非阻塞式的 I/O 操作方式,相比于传统的阻塞式 I/O,它可以在一个线程中同时处理多个通道(Channel)的 I/O 事件,提高了网络编程的效率。NIO 主要涉及三个核心组件:通道(Channel)、缓冲区(Buffer)和选择器(Selector)。
    • 核心组件介绍
      • 通道(Channel):通道类似于传统 I/O 中的流(Stream),但它是双向的,可以用于读写数据。在网络编程中,有SocketChannel(用于 TCP 通信)、DatagramChannel(用于 UDP 通信)等。例如,SocketChannel socketChannel = SocketChannel.open();可以打开一个 TCP 通道。
      • 缓冲区(Buffer):缓冲区是用于存储数据的容器,在 NIO 中,数据的读写都是通过缓冲区进行的。例如,ByteBuffer buffer = ByteBuffer.allocate(1024);创建了一个容量为 1024 字节的字节缓冲区。
      • 选择器(Selector):选择器用于监听多个通道的 I/O 事件,如连接就绪、读就绪、写就绪等。一个线程可以通过一个选择器来管理多个通道,当某个通道有 I/O 事件发生时,选择器会通知该线程进行处理。例如,Selector selector = Selector.open();创建一个选择器,然后可以将通道注册到选择器上,并设置感兴趣的 I/O 事件。
    • 简单示例(以 TCP 为例)
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;public class NIOServer {public static void main(String[] args) {try {ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.bind(new InetSocketAddress(8080));serverSocketChannel.configureBlocking(false);Selector selector = Selector.open();serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);System.out.println("服务器正在等待客户端连接...");while (true) {selector.select();Set<SelectionKey> selectedKeys = selector.selectedKeys();Iterator<SelectionKey> keyIterator = selectedKeys.iterator();while (keyIterator.hasNext()) {SelectionKey key = keyIterator.next();if (key.isAcceptable()) {ServerSocketChannel acceptedChannel = (ServerSocketChannel) key.channel();SocketChannel socketChannel = acceptedChannel.accept();socketChannel.configureBlocking(false);socketChannel.register(selector, SelectionKey.OP_READ);} else if (key.isReadable()) {SocketChannel socketChannel = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.allocate(1024);int length = socketChannel.read(buffer);if (length == -1) {socketChannel.close();key.cancel();} else {buffer.flip();System.out.println("收到客户端消息: " + new String(buffer.array(), 0, length));ByteBuffer responseBuffer = ByteBuffer.wrap("已收到你的消息".getBytes());socketChannel.write(responseBuffer);}

相关文章:

网络和通信详解

一、Java 网络编程基础 IP 地址和端口号 IP 地址&#xff1a; IP 地址是互联网协议地址&#xff0c;用于标识网络中的设备。在 Java 中&#xff0c;InetAddress类是用于表示 IP 地址的主要类。例如&#xff0c;InetAddress.getByName("www.example.com")可以获取指定…...

网络安全框架及模型-PPDR模型

网络安全框架及模型-PPDR模型 概述: 为了有效应对不断变化的网络安全环境,人们意识到需要一种综合性的方法来管理和保护网络安全。因此,PPDR模型应运而生。它将策略、防护、检测和响应四个要素结合起来,提供了一个全面的框架来处理网络安全问题。 工作原理: PPDR模型的…...

WPF+LibVLC开发播放器-LibVLC播放控制

接上一篇&#xff1a; LibVLC在C#中的使用 实现LibVLC播放器播放控制 界面 界面上添加一个Button按钮用于控制播放 <ButtonGrid.Row"1"Width"88"Height"24"Margin"10,0,0,0"HorizontalAlignment"Left"VerticalAlignme…...

子模块、Fork、NPM 包与脚手架概述

子模块 在 Git 仓库中嵌套另一个仓库&#xff0c;通过引用的方式引入到主项目&#xff0c;版本管理依赖 Git 提交记录或分支&#xff0c;更新需手动拉取并提交&#xff0c;适用于共享代码并保持项目独立性。 优点&#xff1a;子模块支持直接查看和修改&#xff0c;保持子模块…...

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…...

【el-table】表格后端排序

在需要排序的列添加属性 sortable&#xff0c;后端排序&#xff0c;需将sortable设置为custom 如果需要自定义轮转添加 sort-orders 属性&#xff0c;数组中的元素需为以下三者之一&#xff1a;ascending 表示升序&#xff0c;descending 表示降序&#xff0c;null 表示还原为原…...

APP聊天项目介绍

项目结构说明 res/layout目录&#xff1a;存放布局相关的 XML 文件&#xff0c;用于定义界面的外观&#xff0c;包含activity_main.xml&#xff08;主界面布局&#xff09;和message_item.xml&#xff08;聊天消息项布局&#xff09;。 res/drawable目录&#xff1a;存放一些…...

android user版本默认usb模式为充电模式

android插入usb时会切换至默认设置的模式&#xff0c;debug版本为adb&#xff0c;user版本为mtp protected long getChargingFunctions() {// if ADB is enabled, reset functions to ADB// else enable MTP as usual.if (isAdbEnabled()) {return UsbManager.FUNCTION_ADB;} e…...

常见问题QA的前端代码

这个的后端代码参见此文 使用语言向量建立常见问题的模糊搜索-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144207262?spm1001.2014.3001.5501 这段代码实现了一个简单的问答页面&#xff0c;页面分为左右两部分&#xff0c;左侧用于展示对话记录&#xff0c…...

float globalMapVIsualizationLeafSize; 的中文意思是什么

1.在visual studio 中新建文件 没有包含#include <string>头文件&#xff0c;也可以使用 str2.append(", C");吗&#xff1f; 在 Visual Studio 或任何其他 C 开发环境中&#xff0c;即使新建的文件中没有显式包含 #include <string> 头文件&#xff0c…...

基于Java Springboot诗词学习APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse微信开…...

CSS学习记录02

CSS颜色 指定颜色是通过使用预定义的颜色名称&#xff0c;或RGB&#xff0c;HEX&#xff0c;HSL&#xff0c;RGBA&#xff0c;HSLA值。 CSS颜色名 在CSS中&#xff0c;可以使用颜色名称来指定颜色&#xff1a; CSS背景色 您可以为HTML元素设置背景色&#xff1a; <h1 s…...

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎&#xff0c;以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程&#xff0c;逐步剖析 InnoDB 的关键概念&#xff0c;帮助您更好地理解和应用。 1. 逻辑存储结构 InnoDB 的数据…...

C++看懂并使用-----回调函数

一&#xff09;回调函数的定义 在 C 中&#xff0c;回调函数是一段作为参数传递给其他函数的可执行代码。它允许在一个函数内部的特定点调用外部定义的函数&#xff0c;以实现更灵活的功能。 回调函数&#xff08;Callback Function&#xff09;是一种通过函数指针或函数对象&a…...

构建短视频矩阵生态体系开发分享

短视频矩阵系统模型的技术开发是一个综合性强、复杂度高的工程项目&#xff0c;它涵盖了广泛的技术选择与架构规划。以下是该项目开发过程中的关键步骤和核心考虑因素&#xff1a; 需求分析阶段&#xff1a; 明确目标用户群体及其需求&#xff0c;以确保系统设计的针对性和实…...

qt QGraphicsScale详解

1、概述 QGraphicsScale是Qt框架中提供的一个类&#xff0c;它提供了一种简单而灵活的方式在QGraphicsView框架中实现缩放变换。通过设置水平和垂直缩放因子、缩放中心点&#xff0c;可以创建各种缩放效果&#xff0c;提升用户界面的交互性和视觉吸引力。结合QPropertyAnimati…...

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印&#xff0c;还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索&#xff0c;DWG To PDF.pc3 &#xff0c;获取到文件目录 &#xff0c;替换到代码中&#xff0c; originalValue ACADPref.PrinterConfigPath \ r"C:…...

Java基础面试题16:简述Servlet的体系结构

Servlet 是 JavaEE 技术中的一大核心组件&#xff0c;它运行在服务器端&#xff0c;用于处理客户端的请求并生成响应。如果你想深入了解它的体系结构&#xff0c;下面会用通俗的语言带你一步步搞懂。 1. Servlet API&#xff1a;开发者和容器沟通的桥梁 Servlet API 是开发 S…...

Web开发基础学习——理解React组件中的根节点

Web开发基础学习系列文章目录 第一章 基础知识学习之理解React组件中的根节点 文章目录 Web开发基础学习系列文章目录前言一、根节点的概念二、示例解释总结 前言 在 React 应用中&#xff0c;根节点&#xff08;Root Node&#xff09;是指 React 组件树的起始点&#xff0c;…...

【人工智能】探索自然语言生成(NLG):用GPT生成文本

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 自然语言生成(Natural Language Generation, NLG)是自然语言处理(NLP)领域的重要分支,旨在生成符合语法和语义的自然语言文本。近年来,基于深度学习的生成式预训练模型(GPT)在NLG任务中取得了巨大…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...