自学嵌入式第27天------TCP和UDP,URL爬虫
1. TCP和UDP区别
**TCP(传输控制协议)和UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别:
-
连接性:
-
TCP是面向连接的协议,通信前需通过三次握手建立连接,通信结束后通过四次挥手断开连接。
-
UDP是无连接的协议,发送数据前无需建立连接,直接发送数据包。
-
-
可靠性:
-
TCP提供可靠传输,确保数据按序到达,丢失或损坏的数据包会重传。
-
UDP不保证可靠性,数据包可能丢失、重复或乱序。
-
-
数据顺序:
-
TCP保证数据按发送顺序到达。
-
UDP不保证顺序,数据包可能乱序到达。
-
-
速度:
-
TCP因连接建立、确认和重传机制,速度较慢。
-
UDP无这些机制,传输速度更快。
-
-
头部开销:
-
TCP头部较大(20字节),包含序列号、确认号等字段。
-
UDP头部较小(8字节),仅包含基本信息。
-
-
适用场景:
-
TCP适用于要求可靠传输的场景,如网页浏览、文件传输。
-
UDP适用于实时性要求高的场景,如视频流、在线游戏。
-
2. TCP和UDP的Socket编写流程
TCP Socket编写流程:
-
服务器端:
-
创建Socket:
socket(AF_INET, SOCK_STREAM, 0)
-
绑定地址:
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))
-
监听连接:
listen(sockfd, backlog)
-
接受连接:
accept(sockfd, (struct sockaddr*)&cliaddr, &clilen)
-
读写数据:
read()
和write()
-
关闭Socket:
close(sockfd)
-
-
客户端:
-
创建Socket:
socket(AF_INET, SOCK_STREAM, 0)
-
连接服务器:
connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))
-
读写数据:
read()
和write()
-
关闭Socket:
close(sockfd)
-
UDP Socket编写流程:
-
服务器端:
-
创建Socket:
socket(AF_INET, SOCK_DGRAM, 0)
-
绑定地址:
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))
-
接收数据:
recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&cliaddr, &clilen)
-
发送数据:
sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&cliaddr, clilen)
-
关闭Socket:
close(sockfd)
-
-
客户端:
-
创建Socket:
socket(AF_INET, SOCK_DGRAM, 0)
-
发送数据:
sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&servaddr, sizeof(servaddr))
-
接收数据:
recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL)
-
关闭Socket:
close(sockfd)
-
3. TCP为什么安全可靠
TCP的安全可靠性源于以下机制:
-
三次握手:确保连接建立时双方都准备好通信。
-
数据包确认与重传:接收方确认收到的数据包,发送方未收到确认则重传。
-
数据包排序:TCP通过序列号保证数据按序到达。
-
流量控制:通过滑动窗口机制防止接收方缓冲区溢出。
-
拥塞控制:通过拥塞窗口和慢启动机制避免网络拥塞。
4. TCP机制
TCP的核心机制包括:
-
三次握手:建立连接时,客户端和服务器交换SYN和ACK包。
-
四次挥手:断开连接时,双方交换FIN和ACK包。
-
数据包确认与重传:接收方确认数据包,发送方未收到确认则重传。
-
滑动窗口:控制发送方发送数据的速率,防止接收方缓冲区溢出。
-
拥塞控制:通过慢启动、拥塞避免等算法防止网络拥塞。
TCP(传输控制协议)通过多种机制来保证数据传输的可靠性、效率和流量控制。以下是这些机制的详细解释:
1. 应答机制(Acknowledgment Mechanism)
-
作用:确保数据包被成功接收。
-
原理:
-
接收方收到数据后,会向发送方发送一个ACK(确认应答),ACK中包含已成功接收的数据包的序列号。
-
发送方根据ACK确认数据已成功送达,若未收到ACK,则触发重传机制。
-
-
特点:
-
确认的是连续数据的最后一个字节的序列号。
-
例如,发送方发送序列号为1-1000的数据,接收方收到后会发送ACK=1001,表示期望接收下一个序列号为1001的数据。
-
2. 超时重传机制(Retransmission Timeout Mechanism)
-
作用:解决数据包丢失或ACK丢失的问题。
-
原理:
-
发送方发送数据后启动一个定时器,若在超时时间内未收到ACK,则认为数据包丢失,触发重传。
-
超时时间(RTO, Retransmission Timeout)是动态计算的,基于网络往返时间(RTT)。
-
-
特点:
-
超时重传是TCP可靠性的核心机制之一。
-
如果多次重传失败,TCP会断开连接。
-
3. 流量控制机制(Flow Control Mechanism)
-
作用:防止发送方发送数据过快,导致接收方缓冲区溢出。
-
原理:
-
接收方通过窗口大小字段(Window Size)告知发送方其缓冲区剩余空间。
-
发送方根据窗口大小调整发送数据的速率。
-
-
特点:
-
窗口大小为0时,发送方会暂停发送,直到接收方通知有可用缓冲区空间。
-
通过滑动窗口实现动态调整。
-
4. 滑动窗口机制(Sliding Window Mechanism)
-
作用:提高数据传输效率,允许发送方在未收到ACK的情况下连续发送多个数据包。
-
原理:
-
发送方和接收方各自维护一个窗口,窗口大小由接收方的缓冲区空间决定。
-
发送方窗口内的数据可以连续发送,无需等待ACK。
-
接收方确认数据后,窗口向前滑动,发送方可以发送新的数据。
-
-
特点:
-
滑动窗口大小是动态调整的,受流量控制和拥塞控制影响。
-
支持累计确认,即ACK确认的是连续数据的最后一个字节。
-
5. 延时应答机制(Delayed Acknowledgment Mechanism)
-
作用:减少ACK的数量,提高网络利用率。
-
原理:
-
接收方收到数据后,不立即发送ACK,而是等待一段时间(通常为200ms)。
-
如果在等待期间有数据需要发送给发送方,则可以将ACK捎带在数据包中发送。
-
-
特点:
-
减少了单独的ACK包,降低了网络开销。
-
适用于双向通信场景。
-
6. 捎带应答机制(Piggybacking Acknowledgment Mechanism)
-
作用:将ACK信息附加在数据包中发送,减少单独发送ACK的开销。
-
原理:
-
当接收方需要发送数据给发送方时,可以将ACK信息附加在数据包中一起发送。
-
例如,A发送数据给B,B在回复数据时,将ACK信息附加在回复的数据包中。
-
-
特点:
-
适用于双向通信场景,减少了网络中的小包数量。
-
提高了网络利用率。
-
总结
机制 | 作用 | 核心原理 |
---|---|---|
应答机制 | 确认数据接收 | 接收方发送ACK确认已接收的数据 |
超时重传机制 | 解决数据包丢失问题 | 发送方超时未收到ACK时重传数据 |
流量控制机制 | 防止接收方缓冲区溢出 | 接收方通过窗口大小控制发送方的发送速率 |
滑动窗口机制 | 提高数据传输效率 | 发送方在窗口内连续发送数据,接收方滑动窗口确认数据 |
延时应答机制 | 减少ACK数量,提高网络利用率 | 接收方延迟发送ACK,等待可能的捎带机会 |
捎带应答机制 | 减少单独发送ACK的开销 | 将ACK信息附加在数据包中发送 |
这些机制共同作用,使得TCP能够在保证可靠性的同时,提高传输效率并适应网络环境的变化。
TCP粘包问题*:
封装自定义数据帧
-
原理:
-
在每个数据包前添加一个头部,头部包含数据包的长度信息。
-
接收方先读取头部,获取数据包长度,然后根据长度读取完整的数据包。
-
相关文章:
自学嵌入式第27天------TCP和UDP,URL爬虫
1. TCP和UDP区别 **TCP(传输控制协议)和UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别: 连接性: TCP是面向连接的协议,通信前需通过三次握手建立连…...
【虚拟化】Docker Desktop 架构简介
在阅读前您需要了解 docker 架构:Docker architecture WSL 技术:什么是 WSL 2 1.Hyper-V backend 我们知道,Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...
C#程序加密与解密Demo程序示例
目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…...
200W数据需要去重,如何优化?
优化去重逻辑的时间取决于多个因素,包括数据量、数据结构、硬件性能(CPU、内存)、去重算法的实现方式等。以下是对优化去重逻辑的详细分析和预期优化效果: 1. 去重逻辑的性能瓶颈 时间复杂度:使用HashSet去重的时间复…...
理解 UDP 协议与实战:Android 使用 UDP 发送和接收消息
一、UDP 协议概述 UDP(User Datagram Protocol,用户数据报协议)是一个无连接的网络通信协议。与 TCP 不同,UDP 不建立连接,不保证数据的顺序和完整性。它的特点是简单、高效,适用于实时性要求较高、对数据…...
7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...
基于 LeNet 网络的 MNIST 数据集图像分类
1.LeNet的原始实验数据集MNIST 名称:MNIST手写数字数据集 数据类型:灰度图 (一通道) 图像大小:28*28 类别数:10类(数字0-9) 1.通过torchvision.datasets.MNIST下载并保存到本地…...
智能体开发:推理-行动(ReAct)思维链提示
人类在处理一个需要多个步骤才能完成任务时,显著特点是能够将言语推理(内心独白)和实际行动融合在一起,在面对陌生或不确定的情况时通过这种方法学习新知识,做出决策,并执行,从而应对复杂的任务…...
Android Native 之 文件系统挂载
一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的ÿ…...
DirectX12(D3D12)基础教程四 入门指南
本章主要讲了些D3D12概念和理论,对第一、二章相关概念的补充和纠正,要的理解D3D12概念和理论基础,结合代码加深理解。 命令队列和命令列表 为了实现渲染工作的重用和多线程缩放, 在 D3D12 中,做了三个重要方面不同于 …...
android13打基础: timepicker控件
public class Ch4_TimePickerActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {private TextView tv_time; // 声明一个文本视图对象private TimePicker tp_time; // 声明一个时间选择器对象Overrideprotected void onCreate(Nullable Bund…...
国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡
基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3…...
Oracle SQL优化①——查看SQL执行计划的几种方法
前言 在日常的运维工作中,SQL优化是DBA的进阶技能,SQL优化的前提是要看SQL的执行计划是否正确,下面分享几种查看执行计划的方法,每一种方法都各有各的好处,可以根据特定场景选择某种方法。 一.使用AUTOTRACE查看执行…...
MySQL主从架构配合ShardingJdbc实现读写分离
文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...
MyBatis @Param 注解详解:多参数传递与正确使用方式
Param 注解主要用于 MyBatis 进行参数传递时给 SQL 语句中的参数 起别名,通常用于 多参数 方法,使参数在 XML Mapper 文件或注解 SQL 语句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 来为参数命名,避免 MyBatis 解析时出现参数…...
【JAVA架构师成长之路】【Redis】第14集:Redis缓存穿透原理、规避、解决方案
30分钟自学教程:Redis缓存穿透原理与解决方案 目标 理解缓存穿透的成因及危害。掌握布隆过滤器、空值缓存等核心防御技术。能够通过代码实现请求拦截与缓存保护。学会限流降级、异步加载等应急方案。 教程内容 0~2分钟:缓存穿透的定义与核心原因 定义…...
mybatis报错org/apache/commons/lang3/tuple/Pair] with root cause
mybatis一对多查询配置resultMap映射报错org/apache/commons/lang3/tuple/Pair] with root cause 原因是mybatis依赖common-lang3这个包, 只需要添加common-lang3的依赖坐标即可: <dependency><groupId>org.apache.commons</groupId><artifactId>comm…...
supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目
1. 安装 Gunicorn 在项目虚拟环境中安装 Gunicorn:2. 基本用法 配置文件 创建一个 Gunicorn 配置文件(如 gunicorn_config.py),方便管理复杂配置。 示例 gunicorn_config.py: bind "0.0.0.0:8000" #…...
STM32之软件SPI
SPI传输更快,最大可达80MHz,而I2C最大只有3.4MHz。输入输出是分开的,可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意:所有设备需要共地,时钟线主机输出&…...
fastjson漏洞
fastjson漏洞 fastjson工作原理攻击原理补充 例子 fastjson工作原理 fastjson的作用是将JAVA对象转换成对应的json表示形式,也可以反过来将json转化为对应的Java对象。fastjson使用AutoType功能进行反序列化,AutoType使用type标记字符的原始类型&#x…...
【YOLOv12改进trick】医学图像分割网络CMUNeXt引入YOLOv12中,增强全局上下文信息实现涨点,含创新点Python代码,方便发论文
🍋改进模块🍋:医学全卷积U型网络(CMUNeXtBlock) 🍋解决问题🍋:CMUNeXtBlock模块解决了在医学图像分割任务中,传统的卷积操作由于其局部性限制,难以有效提取全局上下文信息的问题。 🍋改进优势🍋:利用大卷积核和倒置瓶颈结构,提取全局上下文信息,同时保持卷…...
机器学习的半监督学习,弱监督学习,自监督学习
半监督学习、弱监督学习和自监督学习是机器学习中利用不同形式监督信号的三种方法,它们的核心区别在于标注数据的数量、质量以及监督信号的来源。以下是它们的详细对比: 1. 半监督学习(Semi-Supervised Learning) 核心特点&#x…...
K8S学习之基础十七:k8s的蓝绿部署
蓝绿部署概述 蓝绿部署中,一共有两套系统,一套是正在提供服务的系统,一套是准备发布的系统。两套系统都是功能完善、正在运行的系统,只是版本和对外服务情况不同。 开发新版本,要用新版本替换线上的旧版本&…...
【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率
计算机网络的性能指标 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是:网速、最高网速和实时网速。 相信大家看到这三个词应该就…...
单片机如何用C语言重写vfprintf
在单片机中,标准库函数 vfprintf 可能不可用或占用过多资源(如内存或代码空间),因此我们可以通过自定义实现一个轻量级的 vfprintf 函数,专门用于单片机的串口输出。以下是一个用 C 语言重写 vfprintf 的示例ÿ…...
1.4 单元测试与热部署
本次实战实现Spring Boot的单元测试与热部署功能。单元测试方面,通过JUnit和Mockito等工具,结合SpringBootTest注解,可以模拟真实环境对应用组件进行独立测试,验证逻辑正确性,提升代码质量。具体演示了HelloWorld01和H…...
使用免费IP数据库离线查询IP归属地
一、准备工作 1.下载免费IP数据库 首先,访问 MaxMind官网(https://www.maxmind.com/en/home)如果你还没有MaxMind账号,可以通过此链接地址(https://www.maxmind.com/en/geolite2/signup)进行账号注册&…...
go语言数据类型
一.Go 语言有四大显著特点:高效性:编译与运行效率高。并发性:原生支持并发编程。简洁性:编程风格简洁直接,代码可读性与可维护性高。跨平台性:程序能在 Windows、Linux、Mac OS 等多系统运行。二.go的包:pa…...
操作系统 1.3-开机页面的产生
问题引入 从打开电源开始.. 这神秘的黑色背后发生着什么?... 设计思路 伟大的数学家图灵,设计了这样的一个模型: 首先我们计算机有一个控制器,他可以处理一系列提供给他的动作。我们将控制器动作,控制器状态,数据…...
单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...
vue3中 组合式~测试深入组件:事件 与 $emit()—setup() 上下文对象ctx.emit
一、语法(props) 第一步:在组件模板表达式中,可以直接用$emit()方法触发自定义事件, <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...
uniapp小程序对接腾讯IM即时通讯无ui集成(1)
首先需要完成一些准备工作。 1.注册腾讯云账号 腾讯云 注册账号后搜索im即时通讯,新创建一个应用。 2.uniapp创建项目 腾讯云无ui集成文档 按照文档步骤下载完这两个包后打开项目。有下图这两个包就算完成了开始工作。 3.APP目录进行引入和集成 <script…...
【YOLOv12改进trick】StarBlock引入YOLOv12,创新涨点优化,含创新点Python代码,方便发论文
🍋改进模块🍋:StarBlock 🍋解决问题🍋:采用StarBlock将输入数据映射到一个极高维的非线性特征空间,生成丰富的特征表示,使得模型在处理复杂数据时更加有效。 🍋改进优势🍋:简单粗暴的星型乘法涨点却很明显 🍋适用场景🍋:目标检测、语义分割、自然语言处理…...
机器学习之强化学习
引言 在人工智能的众多分支中,强化学习(Reinforcement Learning, RL) 因其独特的学习范式而备受关注。与依赖标注数据的监督学习或探索数据结构的无监督学习不同,强化学习的核心是智能体(Agent)通过与环境…...
天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】
大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题,包含:• 社会偏见(Social Bias)LLM在生成文本时强化对特定社会群体的刻板印象,例如将穆斯林与恐怖主义关联,或…...
C# OPC DA获取DCS数据(提前配置DCOM)
OPC DA配置操作手册 配置完成后,访问远程ip,就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据,支持订阅(数据变化)、单个读取、单个写入、断线重连...
ReAct论文阅读笔记总结
ReAct:Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面,经过适当Prompt的大型语言模型(LLMs)已经展示了在算术、常识和符号推理任务中通…...
【计网】运输层
运输层 5.1 运输层概述5.2 运输层端口号、复用与分用5.3 UDP和TCP的区别5.4 TCP具体实现5.4.1 TCP的流量控制5.4.2 TCP的拥塞控制5.4.3 TCP超时重传时间的选择5.4.4 TCP可靠传输的实现5.4.5 TCP运输连接管理(一)TCP连接的建立(三报文握手&…...
计算机毕业设计SpringBoot+Vue.js多媒体素材库系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MC9S12单片机的内存映射机制
地址空间 这是个16位的单片机。CPU的寻址空间最大为2^1664K。 这个64K是包括外设、RAM、EEPROM、和FLASH的。现在程序越来越大,64K的空间肯定是不够用的。因此,需要扩展。 扩展方法就是:分页。 把原来的64K空间,划分一块出来&a…...
鸿蒙HarmonyOS评论功能小demo
评论页面小demo 效果展示 1.拆解组件,分层搭建 我们将整个评论页面拆解为三个组件,分别是头部导航,评论项,回复三个部分,然后统一在index界面导入 2.头部导航界面搭建 Preview Component struct HmNavBar {// 属性&a…...
数据仓库为什么要分层
数据仓库分层架构是数据仓库设计中的一个重要概念,其主要目的是为了更好地组织和管理数据,提高数据仓库的可维护性、可扩展性和性能。分层架构将数据仓库划分为多个层次,每个层次都有其特定的职责和功能。以下是数据仓库分层的主要原因和好处…...
【powerjob】 powerjobserver注册服务IP错误
1、问题:powerjobserver 4.3.6 的服务器上有多个网卡对应多个ip,示例 eth0 :IP1 ,docker0:IP2 和worker 进行通信时 正确的应该时IP1 但是注册显示获取的确实IP2,导致 worker 通过ip2和server通信,网络不通,注册不上 2、解决方案 …...
JCRQ1河马算法+四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测
JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-GRU-Attention、CNN-GRU-Attent…...
智能硬件如何和应用层app连接?
现在比较方便的是一键配置方式,主要是使用蓝牙、smartconfig、ZigBee和声波配置。 蓝牙配置:比如蓝牙耳机、蓝牙鼠标,只能支持点对点连接,且对设备和app距离要求严格。 ZigBee配置方式:无法直接接入网络,…...
深度学习系列78:使用langchain的api进行RAG
用起来很麻烦,看api的工夫都已经能自己写完代码了。但现在有些开源api用的是langchain的接口,还是了解一下。参考官方文档:https://www.langchain.com.cn/docs/how_to/ 1. LLM和langserve示例 以openai接口为例,可以看到分为3步…...
海思Hi3516DV300交叉编译opencv
OpenCV是一个开源的跨平台计算机视觉库,支持C、Python等多种语言,适用于图像处理、目标检测、机器学习等任务。其核心由C编写,高效轻量,提供实时视觉处理功能,广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…...
责任链模式:优雅处理复杂流程的设计艺术
引言 在软件设计中,我们经常会遇到需要按特定顺序处理请求的场景。例如,一个订单处理系统可能需要经过验证、付款、物流安排和客户通知等多个步骤。如果我们将这些步骤硬编码在一个方法中,代码将变得臃肿且难以维护。这时,责任链…...
【DeepSeek】5分钟快速实现本地化部署教程
一、快捷部署 (1)下载ds大模型安装助手,下载后直接点击快速安装即可。 https://file-cdn-deepseek.fanqiesoft.cn/deepseek/deepseek_28348_st.exe (2)打开软件,点击立即激活 (3)选…...