Java Socket编程从零到实战详解
摩西摩西~最近接单子用到了Java的socket编程,顺手给整理下来咯!
各个语言的socket编程除了语法之外几乎思路都是一样的。
所以这些思路都是可以直接移植到其他语言实现的!
话不多说上车!
一、Socket基础概念与工作流程(图解)
(先理解“打电话”模型,再写代码)
1. Socket通信核心模型
- 关键角色:
- 客户端:主动发起连接(类似拨打电话)
- 服务端:监听端口,等待连接(类似待机电话)
- Socket对象:连接建立后的数据传输通道(通话线路)
2. 核心流程分解
- 服务端:创建
ServerSocket
→ 绑定端口 → 阻塞等待连接(accept()
) - 客户端:创建
Socket
→ 指定服务端IP和端口 → 发起连接 - 双向通信:通过输入流(
InputStream
)和输出流(OutputStream
)收发数据 - 关闭连接:调用
close()
释放资源
二、服务端与客户端基础代码分步解析
(每行代码加注释,新手必看)
1. 服务端基础代码(单线程版)
// 步骤1:创建ServerSocket,绑定端口8080
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服务端启动,等待连接...");// 步骤2:等待客户端连接(阻塞方法,直到有客户端连接)
Socket clientSocket = serverSocket.accept();
System.out.println("客户端接入:" + clientSocket.getRemoteSocketAddress());// 步骤3:获取输入流(接收客户端数据)
InputStream input = clientSocket.getInputStream();
byte[] buffer = new byte[1024];
int len = input.read(buffer); // 读取数据到buffer数组
String receivedData = new String(buffer, 0, len);
System.out.println("收到消息:" + receivedData);// 步骤4:发送响应数据
OutputStream output = clientSocket.getOutputStream();
output.write("已收到!".getBytes());// 步骤5:关闭连接(实际开发中需在finally块处理)
clientSocket.close();
serverSocket.close();
2. 客户端基础代码
// 步骤1:连接服务端(IP+端口)
Socket socket = new Socket("127.0.0.1", 8080);
System.out.println("连接服务端成功!");// 步骤2:发送数据
OutputStream output = socket.getOutputStream();
output.write("你好,服务端!".getBytes());// 步骤3:接收响应
InputStream input = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = input.read(buffer);
String response = new String(buffer, 0, len);
System.out.println("服务端响应:" + response);// 步骤4:关闭连接
socket.close();
三、超时设置详解(解决卡死问题)
(必学技能,避免程序无限等待)
1. 连接超时(防止无法连接时卡死)
Socket socket = new Socket();
// 设置连接超时为5秒(单位:毫秒)
socket.connect(new InetSocketAddress("127.0.0.1", 8080), 5000); //
- 触发场景:服务端未启动或网络不通
- 异常处理:捕获
SocketTimeoutException
提示用户检查网络
2. 读取超时(防止数据未到达时阻塞)
socket.setSoTimeout(3000); // 设置读取超时3秒
- 作用范围:
InputStream.read()
操作 - 异常处理:超时后抛出
SocketTimeoutException
,可重试或终止
3. 完整超时处理示例
try (Socket socket = new Socket()) {// 连接超时5秒socket.connect(new InetSocketAddress("127.0.0.1", 8080), 5000);// 读取超时3秒socket.setSoTimeout(3000);InputStream input = socket.getInputStream();// 读取数据...
} catch (SocketTimeoutException e) {System.err.println("操作超时:" + e.getMessage());
} catch (IOException e) {System.err.println("连接失败:" + e.getMessage());
}
四、心跳机制实现(维持长连接)
(防止长时间无数据导致连接断开)
1. 心跳包原理
- 作用:定时发送空数据包,告知对方连接存活
- 实现方式:客户端定时任务 + 服务端超时检测
2. 客户端心跳代码
Timer timer = new Timer();
timer.schedule(new TimerTask() {@Overridepublic void run() {try {OutputStream out = socket.getOutputStream();out.write(0); // 发送心跳包(内容可为任意约定标识)out.flush();System.out.println("心跳发送成功");} catch (IOException e) {System.err.println("心跳发送失败,连接已断开");timer.cancel(); // 停止定时任务}}
}, 0, 30000); // 立即启动,每30秒执行一次
3. 服务端检测心跳
socket.setSoTimeout(45000); // 超时时间略大于心跳间隔
try {InputStream in = socket.getInputStream();while (true) {int data = in.read(); // 阻塞等待数据if (data == 0) {System.out.println("收到心跳包");}}
} catch (SocketTimeoutException e) {System.err.println("心跳超时,连接断开");socket.close();
}
五、完整实战案例:带超时与心跳的Echo服务
服务端代码(多线程版)
public class EchoServer {public static void main(String[] args) throws IOException {ExecutorService pool = Executors.newCachedThreadPool(); // 线程池处理并发try (ServerSocket server = new ServerSocket(8080)) {System.out.println("服务端启动,端口8080");while (true) {Socket client = server.accept();client.setSoTimeout(45000); // 设置读取超时45秒 pool.submit(() -> handleClient(client));}}}private static void handleClient(Socket client) {try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter out = new PrintWriter(client.getOutputStream(), true)) {String input;while ((input = in.readLine()) != null) {if ("HEARTBEAT".equals(input)) { // 识别心跳包System.out.println("收到心跳包");continue;}out.println("Echo: " + input); // 回显消息}} catch (SocketTimeoutException e) {System.err.println("客户端超时未响应,连接关闭");} catch (IOException e) {e.printStackTrace();} finally {try { client.close(); } catch (IOException e) {}}}
}
客户端代码(带心跳与超时)
public class EchoClient {public static void main(String[] args) {try (Socket socket = new Socket()) {// 连接超时5秒socket.connect(new InetSocketAddress("127.0.0.1", 8080), 5000);// 读取超时3秒socket.setSoTimeout(3000);// 启动心跳线程(每30秒一次)startHeartbeat(socket.getOutputStream());Scanner scanner = new Scanner(System.in);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));while (true) {System.out.print("输入消息:");String msg = scanner.nextLine();out.println(msg); // 发送消息System.out.println("服务端响应:" + in.readLine());}} catch (SocketTimeoutException e) {System.err.println("操作超时:" + e.getMessage());} catch (IOException e) {System.err.println("连接异常:" + e.getMessage());}}private static void startHeartbeat(OutputStream out) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {try {out.write("HEARTBEAT\n".getBytes()); // 发送心跳标识out.flush();} catch (IOException e) {timer.cancel();}}}, 0, 30000);}
}
六、常见问题与解决方案速查表
问题现象 | 可能原因 | 解决方案 |
---|---|---|
Connection refused | 服务端未启动或端口错误 | 检查服务端代码是否运行,确认端口一致 |
Read timed out | 网络延迟或服务端未及时响应 | 增加超时时间或优化服务端代码 |
Broken pipe | 连接已关闭仍尝试写数据 | 发送前检查socket.isClosed() ,捕获异常后重连 |
内存泄漏 | 未关闭Socket或流 | 使用try-with-resources 自动关闭资源 |
七、Java Socket核心方法速查表
方法名 | 所属类 | 功能描述 | 参数说明 | 返回值 | 常见异常 | 使用示例 |
---|---|---|---|---|---|---|
ServerSocket(int port) | ServerSocket | 创建服务端Socket并绑定指定端口 | port :监听的端口号(0-65535) | 无 | BindException (端口被占用) | new ServerSocket(8080); |
accept() | ServerSocket | 阻塞等待客户端连接,返回通信用的Socket对象 | 无 | Socket (客户端连接对象) | IOException | Socket client = serverSocket.accept(); |
close() | ServerSocket | 关闭服务端Socket,释放端口资源 | 无 | 无 | IOException | serverSocket.close(); |
Socket(String host, int port) | Socket | 客户端主动连接服务端(构造函数隐式调用connect() ) | host :服务端IP;port :服务端端口 | 无 | UnknownHostException , IOException | Socket socket = new Socket("127.0.0.1", 8080); |
connect(SocketAddress addr, int timeout) | Socket | 显式连接服务端,可设置超时时间 | addr :服务端地址;timeout :超时毫秒 | 无 | SocketTimeoutException | socket.connect(new InetSocketAddress("127.0.0.1", 8080), 5000); |
getInputStream() | Socket | 获取输入流,用于接收数据 | 无 | InputStream | IOException | InputStream in = socket.getInputStream(); |
getOutputStream() | Socket | 获取输出流,用于发送数据 | 无 | OutputStream | IOException | OutputStream out = socket.getOutputStream(); |
setSoTimeout(int timeout) | Socket | 设置读取超时时间(单位:毫秒),超时后抛出SocketTimeoutException | timeout :超时时间(0表示无限等待) | 无 | SocketException | socket.setSoTimeout(3000); |
setKeepAlive(boolean on) | Socket | 启用/禁用TCP保活机制(默认关闭),自动检测连接是否存活 | on :true启用,false禁用 | 无 | SocketException | socket.setKeepAlive(true); |
shutdownOutput() | Socket | 关闭输出流(发送FIN包),通知对方数据发送完毕,但不关闭Socket | 无 | 无 | IOException | socket.shutdownOutput(); |
close() | Socket | 关闭Socket连接,释放资源 | 无 | 无 | IOException | socket.close(); |
readInt() | DataInputStream | 从输入流读取4字节的int值(常用于解析长度头) | 无 | int | EOFException , IOException | int length = new DataInputStream(in).readInt(); |
writeInt(int v) | DataOutputStream | 向输出流写入4字节的int值(常用于发送长度头) | v :要写入的整数值 | 无 | IOException | new DataOutputStream(out).writeInt(1024); |
相关文章:
Java Socket编程从零到实战详解
摩西摩西~最近接单子用到了Java的socket编程,顺手给整理下来咯! 各个语言的socket编程除了语法之外几乎思路都是一样的。 所以这些思路都是可以直接移植到其他语言实现的! 话不多说上车! 一、Socket基础概念与工作流程…...
STM32中Hz和时间的转换
目录 一、常见的频率单位及其转换 二、计算公式 三、STM32中定时器的应用 四、例子 一、常见的频率单位及其转换 赫兹(Hz)是频率的国际单位,表示每秒钟周期性事件发生的次数。 1 kHz(千赫兹) 1,000 Hz1 MHz&#…...
Apache Hive学习教程
什么是Hive? Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化 数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL)&…...
学习笔记六——Rust 切片全解析
这篇文章不是告诉你“切片是啥”,而是让你真正理解并学会用切片,同时还会把你最容易卡壳的 {:?}、char_indices() 等都讲清楚! 📚 文章目录 切片到底是什么?能不能通俗一点?切片的本质:它其实…...
Apache Doris SelectDB 技术能力全面解析
Apache Doris 是一款开源的 MPP 数据库,以其优异的分析性能著称,被各行各业广泛应用在实时数据分析、湖仓融合分析、日志与可观测性分析、湖仓构建等场景。Apache Doris 目前被 5000 多家中大型的企业深度应用在生产系统中,包含互联网、金融、…...
设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用
🔄 前情回顾:Day 7 重点回顾 在 Day 7 中,我们彻底讲透了观察者模式: 它是典型的行为型模式,核心理念是“一变多知”,当一个对象状态变化时,自动通知所有订阅者。 我们通过 RxCpp 实现了工业…...
HarmonyOS-ArkUI V2装饰器-@Once
前文,关于Param的使用: HarmonyOS-ArkUIV2装饰器-Param:组件外部输入-CSDN博客 Once装饰器是一个需要配合Param装饰器一块使用的的装饰器。它的特性是,仅仅在变量进行初始化的时候,接受一个外部传来的值进行初始化&am…...
前端Node.js的包管理工具npm指令
npm(Node Package Manager)是Node.js的包管理工具,主要用于安装、更新、删除和管理JavaScript包。以下是前端开发中常用的npm命令及其用途: 基本命令 npm提供了一系列命令行工具,用于执行各种包管理操作。以下是一…...
本地搭建直播录屏应用并实现使用浏览器远程控制直播间录屏详细教程
 本文主要介绍如何在 Windows 系统电脑本地部署直播录屏工具 Bililive-go,并结合 cpolar 内网穿透工具实现远程访问本地 Bililive-go 服务 web 界面管理录屏任务。 相信很多小伙伴都喜欢看直播,不过如果一旦临时有事看不了直播,…...
Hydra Columnar:一个开源的PostgreSQL列式存储引擎
Hydra Columnar 是一个 PostgreSQL 列式存储插件,专为分析型(OLAP)工作负载设计,旨在提升大规模分析查询和批量更新的效率。 Hydra Columnar 以扩展插件的方式提供,主要特点包括: 采用列式存储,…...
OpenGL学习笔记(assimp封装、深度测试、模板测试)
目录 模型加载Assimp网格模型及导入 深度测试深度值精度深度缓冲的可视化深度冲突 模板测试物体轮廓 GitHub主页:https://github.com/sdpyy1 OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppL…...
自动化备份全网服务器数据平台
1.项目说明 1.1概述 该项目共分为2个子项目,由环境搭建和实施备份两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历,充实简历 1.2项目组织方式及时间 时间:…...
Trea CN多多与主流AI编程工具万字解析
Trea CN多多与主流AI编程工具万字解析 (含数学建模、架构图、开发流程可视化) 一、数学建模:代码生成效率量化模型 1.1 全链路效率公式 T total N ⋅ ( 1 λ C S ) T check (1) T_{\text{total}} N \cdot \left( \frac{1}{\lambda} \…...
Django从零搭建卖家中心注册页面实战
在电商系统开发中,卖家中心是一个重要的组成部分,而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面,包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...
如何进行预算考核
✅ 一、预算考核体系总体架构 模块内容说明考核内容1. 预算目标/指标完成情况2. 预算编制/执行情况双轮驱动,目标 + 执行双考核考核对象高层、中层、基层、后台支持分层分类考核考核周期月度(滚动)+ 季度(校验)+ 年度(决算)提高适应性和准确性考核工具指标体系、差错率评…...
django相关面试题
django相关面试题 1.django的生命周期 2.django中的orm查询如何自定义方法 3.django中的中间件的作用 4.django中间件,request进来经过哪些中间件,顺序是怎么样的 5.django中的csrf是什么 6.django每访问一次数据库都会创建一个连接吗 7.uwsgi gunicorn…...
【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识
【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识 引言 在微服务架构中,分布式事务是一个不可避免的挑战。随着业务复杂度的提升,如何保证跨服务的数据一致性成为面试中的高频问题。本文将从基础到进…...
PostgreSQL 17深度解析(从17.0-17.4)
PostgreSQL 17自2024年9月发布以来,持续通过小版本迭代增强功能、优化性能并修复安全漏洞。本文将从17.0到17.4的每个版本切入,深度解析其新增特性、技术原理、性能提升及实践价值,帮助开发者、DBA及架构师全面掌握PostgreSQL 17的演进脉络。 一、PostgreSQL 17.0:基石奠定…...
人物4_Japanese
Now, I start my JaPan【Tokyo】 life, 【I go out of my country{China}, the reason is I want learn more new computer technologies in foreign, also it could let me know more different culture.】I like the place and most persons in here. The JaPan culture have…...
Go 语言中的 package main、 func main() 和main.go的使用规范
本文旨在解释 Go 语言中 package main 、 func main() 和main.go的关系及其使用规则,解决如下典型问题: 是否可以在一个项目中定义多个 func main()?是否可以在非 package main 中写 func main()?多个文件中都写 func main() 会冲…...
mac 终端 code 命令打开 vscode,修改 cursor占用
rm /usr/local/bin/code vim ~/.zshrc # 定义 cursor 函数,用于打开 Cursor 应用 function cursor {open -a "/Applications/Cursor.app" "$" }# 定义 code 函数,用于打开 Visual Studio Code function code {open -a "/Appli…...
【常用功能】下载文件和复制到剪切板
前言 前端人员在开发时经常会遇到: 后端给一个地址,需要去下载的需求。将页面的内容复制到剪切板 下载文件 我们先说下载文件,通常情况下我们会自己写上一个非常简单的工具函数。 思路如下: 创建一个a元素设置a元素跳转的链接…...
【ESP32-microros(vscode-Platformio)】
一、步骤 1、目前支持ESP32 2、同一个局域网 3、上位机要安装代理(电脑或者linux设备) 4、可直接通过USB下载,也可以使用官方烧录工具,具体的分区表地址要从USB烧录的时候日志查看,一共四个文件,第三个…...
如何使用AI辅助开发CSS3 - 通义灵码功能全解析
一、引言 CSS3 作为最新的 CSS 标准,引入了众多新特性,如弹性布局、网格布局等,极大地丰富了网页样式的设计能力。然而,CSS3 的样式规则繁多,记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中,…...
OpenCV图像形态学详解
文章目录 一、什么是图像形态学?二、基本概念:结构元素三、基本形态学操作1. 腐蚀(Erosion)2. 膨胀(Dilation)3. 开运算(Opening)4. 闭运算(Closing) 四、高级…...
Java-servlet(完结篇)过滤器乱码解决与监听器
Java-servlet(完结篇)过滤器乱码解决与监听器 前言一、过滤器乱码解决二、监听器1. HttpSessionListener2. ServletContextListener3. ServletRequestListener 三、监听器的使用场景Java-servlet 结语 前言 在之前的 Java Servlet 学习中,我…...
【发布】dtns协议的js-sdk(实现a2a协议:agent2agent)
【发布】dtns协议的js-sdk(实现a2a协议:agent2agent) dtns协议简介 dtns协议是用于dtns.network分布式智体网络的通讯协议。主要目标是将各个独立的智体节点,通过dtns协议(dtns.network)连接在一起&#…...
深度学习总结(8)
模型工作流程 模型由许多层链接在一起组成,并将输入数据映射为预测值。随后,损失函数将这些预测值与目标值进行比较,得到一个损失值,用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…...
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
🚀 Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案 ▎开发者必备:为什么选择Hyperlane处理大文件上传? 在实时数据爆炸式增长的时代,开发者面临两大核心挑战: 如何实现TB级大文件的可靠传输如…...
英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
Llama-3.1-Nemotron-Ultra-253B-v1 模型情况 1. 模型概述 Llama-3.1-Nemotron-Ultra-253B-v1 是一个基于 Meta Llama-3.1-405B-Instruct 的大型语言模型 (LLM),专为推理、人类对话偏好和任务(如 RAG 和工具调用)而优化。该模型支持 128K 令…...
2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式
——从国库管理到动态激励的加密生态全栈解决方案 一、核心智能合约架构解析 1. 国库合约:生态财政中枢 作为协议的金库守卫者,国库合约通过多签冷钱包与跨链资产池实现资金沉淀。其创新点包括: 储备资产动态再平衡:采用预言机实…...
[250411] Meta 发布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大语言特性
目录 Llama 4 家族登场:开启原生多模态 AI 创新新纪元Rust 1.86.0 版本发布亮点主要新特性与改进其他重要信息 Llama 4 家族登场:开启原生多模态 AI 创新新纪元 Meta AI 近日发布了其最新、最先进的 Llama 4 系列人工智能模型,标志着 AI 技术…...
缓存不只是加速器:深入理解 Redis 的底层机制
一、Redis 是什么?为什么我们需要它? Redis(Remote Dictionary Server)是一种高性能的内存型键值对数据库。 通俗地讲,它就像一个超快的、放在内存中的超级字典,你可以用它来存数据、查数据,而…...
windows虚拟内存
windows的虚拟内存只是 虚拟内存技术的一个拓展, 叫他分页文件更好, 真正的虚拟内存是 CPU 内存管理单元 用于调度物理内存和磁盘衍生出来的技术. 在此基础上, 虚拟内存会根据页表 去物理内存中找数据, 找不到就去磁盘找, 找到之后再登记到页表. 这里的磁盘就是window系统中所…...
Ajax------免刷新地前后端交互
本文略带PHP代码需要在PHP环境下使用 介绍 AJAX (Asynchronous JavaScript and XML) 是一种创建快速动态网页应用的开发技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。例如,在我们做爬虫的时候发现有些…...
python办公自动化---pdf文件的读取、添加水印
需要安装包:pdfminer、pypdf2 一、读取pdf中的内容 from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterprete…...
下一代数据架构全景:云原生实践、行业解法与 AI 底座 | Databend Meetup 成都站回顾
3 月底,Databend 2025 开年首场 Meetup 在成都多点公司成功举办!活动特别邀请到四位重量级嘉宾:多点科技数据库架构师王春涛、多点DMALL数据平台负责人李铭、Databend联合创始人吴炳锡,以及鹏城实验室王璞博士。在春日的蓉城&…...
Kubernetes容器编排与云原生实践
第一部分:Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代:资源浪费严重,利用率不足15% 虚拟机突破:VMware与Hyper-V实现硬件虚拟化,利用率提升至50% …...
vue项目使用html2canvas和jspdf将页面导出成PDF文件
一、需求: 页面上某一部分内容需要生成pdf并下载 二、技术方案: 使用html2canvas和jsPDF插件 三、js代码 // 页面导出为pdf格式 import html2Canvas from "html2canvas"; import jsPDF from "jspdf"; import { uploadImg } f…...
JAVA实现在H5页面中点击链接直接进入微信小程序
在普通的Html5页面中如何实现点击URL链接直接进入微信小程序,不需要扫描小程序二维码? 网上介绍的很多方法是在小程序后台设置Schema,不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方,我是通过调用API接口…...
深入剖析 Kafka 的零拷贝原理:从操作系统到 Java 实践
Kafka 作为一款高性能的分布式消息系统,其卓越的吞吐量和低延迟特性得益于多种优化技术,其中“零拷贝”(Zero-Copy)是核心之一。零拷贝通过减少用户态与内核态之间的数据拷贝,提升了 Kafka 在消息传输中的效率。本文将…...
深度学习:AI 大模型时代的智能引擎
当 Deepspeek 以逼真到难辨真假的语音合成和视频生成技术横空出世,瞬间引发了全球对 AI 伦理与技术边界的激烈讨论。从伪造名人演讲、制造虚假新闻,到影视行业的特效革新,这项技术以惊人的速度渗透进大众视野。但在 Deepspeek 强大功能的背后…...
【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】
教程总体简介:2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 1.5数据库设计 2.用户认证 Json Web Token(JWT) 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目…...
【MySQL】002.MySQL数据库基础
文章目录 数据库基础1.1 什么是数据库1.2 基本使用创建数据库创建数据表表中插入数据查询表中的数据 1.3 主流数据库1.4 服务器,数据库,表关系1.5 MySQL架构1.6 SQL分类1.7 存储引擎1.7.1 存储引擎1.7.2 查看存储引擎1.7.3 存储引擎对比 前言:…...
Python爬取视频的架构方案,Python视频爬取入门教程
文章目录 前言方案概述架构设计详细实现步骤1.环境准备2. 网页请求模块3. 网页解析模块4. 视频下载模块5. 异常处理与日志模块 代码示例:性能优化注意事项 前言 以下是一个全面的使用 Python 爬取视频的架构方案,包含方案概述、架构设计、详细实现步骤、…...
ERC-20 代币标准
文章目录 一、什么是 ERC-20?核心价值:互操作性简化开发生态基石 二、ERC-20 的六大核心功能基础功能授权与代理转账事件通知 三、ERC-20 代币的典型应用场景四、ERC-20 的技术优势与局限性优势:局限性: 五、ERC-20 代币的创建步骤…...
SpringBoot实战1
SpringBoot实战1 一、开发环境,环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 (1)导入SpringBoot项目开发所需要的依赖 一个父依赖:(工件ID为:spring-boot-starter-parent…...
GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)、稳定捕捉模块(SCM)和创新的AIoU损失函…...
解读json.loads函数参数
json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...
2025.04.10-拼多多春招笔试第一题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...