【NLP】18. Encoder 和 Decoder
1. Encoder 和 Decoder 概述
在序列到序列(sequence-to-sequence,简称 seq2seq)的模型中,整个系统通常分为两大部分:Encoder(编码器)和 Decoder(解码器)。
- Encoder(编码器):
输入一段序列(例如一句话),经过编码器(一般使用 RNN、LSTM、GRU 或者 Transformer Encoder)后,将整个序列的信息压缩成一个(或多个)固定维度的向量表示,这个向量通常被认为是整个输入序列的语义表示。 - Decoder(解码器):
解码器接收 Encoder 输出的向量信息(可以是单个向量,也可以是多个隐藏状态组成的序列),再利用另一个 RNN(或其他结构)生成目标序列。例如,对于机器翻译任务,Decoder 会利用编码得到的源语言表示生成目标语言句子。
这种 Encoder-Decoder 结构最初由 Sutskever 等人(2014)的 seq2seq 模型成功应用于机器翻译任务,开创了自然语言生成新纪元。
2. Encoder 部分详细说明
2.1 Encoder 的基本角色
Encoder 的任务是将输入序列(如一整句话、一个段落或整个文档)转换成一个紧凑的向量表示。这一步骤通常有以下特点:
- 信息汇聚:
Encoder 通常会逐步处理输入序列(例如使用 RNN 从左到右遍历),在每一步都更新隐藏状态,最终在序列结束时获得一个包含全局信息的向量(或一组向量)。 - 使用最后的隐藏状态或全序列:
有时,简单的做法是取 RNN 在最后一个时刻的隐藏状态作为整个序列的表示(此时称为“accepter”,即仅用最后一个状态来生成预测)。但更复杂的 Encoder 会输出整个隐藏状态序列,并将其提供给 Decoder,在解码过程中每一步都可利用(见第 5 部分)。
2.2 双向 Encoder 和多层结构
- 双向 RNN:
为了更全面地捕捉输入句子的上下文信息,Encoder 常常使用双向 RNN(BiRNN),即同时利用从左到右的(正向)和从右到左的(反向)信息,最后将两边隐藏状态拼接或加权融合,得到更为丰富的文本表示。 - 多层模型:
为了提高表示能力,还会采用多层(堆叠)RNN,每一层可以捕捉不同层次(如语法、语义)的信息。实际系统中可能会有 2 层、甚至更多层的 Encoder。
例如,机器翻译中常见的设置包括 2 个 Encoder 层(甚至可以把双向 RNN 作为第一层,后面再堆叠一层单向或双向 RNN),以确保充分捕捉输入句子的细节信息。
3. Decoder 部分详细说明
3.1 Decoder 的基本角色与架构
Decoder 的任务是生成一个序列(例如翻译句子、摘要、对话回复或代码),其工作流程如下:
- 接收 Encoder 的输出:
Decoder 通常接收 Encoder 输出的向量表示(可能是单个向量,也可能是整个隐藏状态序列),然后将其作为生成目标序列的初始信息或在每一步的条件输入。 - RNN 解码器:
最常见的 Decoder 是基于 RNN(或其变种,如 LSTM、GRU),每一步输出一个 token,并更新自身状态,然后继续生成下一个 token。
3.2 解码时如何决定停止
生成序列时需要一个停止条件来决定何时结束输出。常用的策略有两种:
- 固定长度输出:
预先设定生成的 token 数量,例如固定生成 10 个词。这种方法简单但缺乏灵活性。 - 特殊停止符( <EOS> 或 “stop”)输出:
在训练时设置一个特殊的停止标记,当 Decoder 生成这个标记时,认为序列结束。这种方法更灵活,适应于长度可变的任务,如机器翻译和对话生成。
实际模型往往采用后者,即在输出词汇表中包含一个停止符,解码过程持续直到生成停止符。
3.3 Teacher Forcing (教师强制)
- 定义:
教师强制是一种训练技巧,在训练 Decoder 时,将真实的目标 token 作为下一步的输入(而不是使用 Decoder 自己生成的 token),以加速训练收敛并稳定训练过程。 - 作用:
通过教师强制,Decoder 在初期训练阶段可以直接获得正确的上下文信息,提高生成序列的质量;同时,训练过程中可以逐渐减少教师强制的比例,逼迫模型在推断时依赖自身生成的序列。
3.4 Beam Search 与评分调整
在测试时,为了生成高质量的输出序列,常用的方法是 Beam Search:
- Beam Search:
在每一步解码时,保留概率最高的 N 个候选序列而非仅选取最优的一个。这样可以在后续生成过程中通过搜索多个候选序列来避免局部最优。 - 长度归一化:
由于较长的序列总的概率(对数和)较小,实际评分时通常会调整为每个词的平均概率(例如 1 ∣ w o r d s ∣ ∑ log P ( w o r d ∣ c o n t e x t ) ∣ w o r d s ∣ \frac{1}{|words|}\sum \log P(word|context)∣words∣ ∣words∣1∑logP(word∣context)∣words∣这样能避免偏好生成太短的序列,从而获得更符合人类语言习惯的输出。
4. 典型应用场景
Encoder-Decoder 架构被广泛应用于各类 NLP 任务,以下是几个典型案例:
4.1 机器翻译
- 过程:
Encoder 将源语言句子转换成向量表示,Decoder 利用该表示生成目标语言句子。 - 成功案例:
Google 的 Neural Machine Translation(NMT)系统就是基于 Encoder-Decoder 架构实现的。
4.2 文本摘要
- 过程:
输入为长文档,通过 Encoder 编码,Decoder 生成该文档的简短摘要,保留关键信息。
4.3 对话生成(如 GPT)
- 过程:
模型接收对话历史(作为上下文输入),Decoder 生成下一句回复。这里往往采用较深的 Decoder 和大规模预训练方法。
4.4 代码生成
- 过程:
将自然语言的需求描述(request)经过 Encoder 得到语义表示,Decoder 根据该表示生成对应的代码。
5. 模型设计中的补充细节
5.1 Encoder 与 Decoder 的信息传递
最初的 Encoder-Decoder 模型存在“瓶颈”问题,即所有信息必须通过 Encoder 输出的那个固定向量传递,这往往导致信息不足。为了解决这一问题,后续改进方法包括:
- 注意力机制(Attention):
在每一步解码时,Decoder 不仅使用最后的编码向量,而是通过注意力机制对 Encoder 的所有输出进行加权求和,动态获取对当前生成最有帮助的信息。这样大大缓解了信息瓶颈问题,也使得模型能够更好地处理长序列。
5.2 多层和混合结构
- 多层 Encoder-Decoder:
可以使用多层(例如2层 Encoder 与 1层 Decoder、甚至 Encoder 与 Decoder 都为多层)提高模型表达能力,每一层可以处理不同层次的语言信息。 - 双向 Encoder:
尤其在 Encoder 部分,使用双向 RNN 可以更全面捕捉上下文;而 Decoder 部分通常采用单向生成,但可在输入(通过注意力)中引入 Encoder 输出的双向信息。
5.3 训练与推理的差异
- 训练阶段:
采用教师强制,使用真实的 token 作为 Decoder 的输入,可以快速收敛。 - 推断阶段:
则完全依赖模型自身生成的 token,由于前后依赖性强,每一步必须依据前一步的输出,导致难以并行计算。为此使用 Beam Search 等解码策略,但推断效率相对较低,是目前 Encoder-Decoder 模型在实际应用中常见的计算瓶颈问题。
6. 模型存在的问题与改进挑战
6.1 瓶颈问题
如前所述,Encoder-Decoder 模型要求 Encoder 将所有输入信息压缩到一个固定大小的向量中,这往往造成信息丢失。注意力机制、记忆网络以及使用层次化编码器都被提出用以缓解这一问题。
6.2 推理过程难以并行化
由于 Decoder 每一步生成都依赖前一步的输出(自回归),解码过程是串行的,因此难以利用现代硬件(如 GPU)的并行能力进行快速推理。Transformer 模型的设计在一定程度上可以并行化编码部分,但解码依旧存在自回归问题。
6.3 训练难度和解码策略
教师强制虽然加速了训练,但可能导致训练期间与推断期间的分布不匹配;同时,为了生成较优解码序列需要精心设计 Beam Search 的参数(如 beam width、长度归一化策略),这也增加了系统的复杂性与调优成本。
7. 实际案例演示(以机器翻译为例)
以机器翻译为例,我们可以看到 Encoder-Decoder 模型如何工作:
- Encoder 部分:
– 输入:英文句子 “I love natural language processing.”
– 使用双向 LSTM 将整句话编码成一组隐藏状态(或经过注意力整合为一个上下文向量)。 - Decoder 部分:
– 接收 Encoder 输出,开始生成目标语言句子(例如中文翻译)。 – 采用教师强制在训练中,指导模型在每一步预测正确的中文词汇。 – 在推断时,使用 Beam Search 选择多个候选词,直到生成特殊的结束符 “”。 - 训练与推断:
– 训练中计算损失函数时通常采用交叉熵损失,对每个生成词的概率取对数后求和再求平均。
– 在 Beam Search 时,对候选序列的总分调整为平均每个词的对数概率,以防短序列得分偏高。
这种完整的流程是机器翻译的早期成功案例,也为后来的对话生成、文本摘要等任务提供了模型框架。
相关文章:
【NLP】18. Encoder 和 Decoder
1. Encoder 和 Decoder 概述 在序列到序列(sequence-to-sequence,简称 seq2seq)的模型中,整个系统通常分为两大部分:Encoder(编码器)和 Decoder(解码器)。 Encoder&…...
基于Cline和OpenRouter模型进行MCP实战
大家好,我是herosunly。985院校硕士毕业,现担任算法工程师一职,获得CSDN博客之星第一名,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得多项AI顶级比赛的Top名次,其中包括阿里云、科大讯飞比赛第一名…...
Elasticsearch 故障转移及水平扩容
一、故障转移 Elasticsearch 的故障转移(Failover)机制是其高可用性的核心,通过分布式设计、自动检测和恢复策略确保集群在节点故障时持续服务。 1.1 故障转移的核心组件 组件作用Master 节点管理集群状态(分片分配、索引创建&…...
聊聊Spring AI的Prompt
序 本文主要研究一下Spring AI的Prompt Prompt org/springframework/ai/chat/prompt/Prompt.java public class Prompt implements ModelRequest<List<Message>> {private final List<Message> messages;private ChatOptions chatOptions;public Prompt(…...
centos 7:虚拟机网络配置
1、网络模式选择 桥接模式 特点:虚拟机会获得与物理机同网段的独立IP,可直接访问内网/外网适用场景:渗透测试、需要与其他设备交互的场景配置要点:需在VMware中指定桥接到物理机的真实网卡(如WiFi或有线网卡ÿ…...
Spring - 14 ( 5000 字 Spring 入门级教程 )
一:Spring原理 1.1 Bean 作用域的引入 在 Spring 的 IoC 和 DI 阶段,我们学习了 Spring 如何有效地管理对象。主要内容包括: 使用 Controller、Service、Repository、Component、Configuration 和 Bean 注解来声明 Bean 对象。通过 Applic…...
基于贝叶斯估计的多传感器数据融合算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 贝叶斯估计 4.2 多传感器数据融合 5.完整程序 1.程序功能描述 基于贝叶斯估计的多传感器数据融合算法matlab仿真,输入多个传感器的数据,通过贝叶斯估计…...
linux编辑器-vim
一、基本概念 vim有很多模式但是有三个重要的模式分别是命令模式、插入模式、低行模式。 命令模式:控制光标移动、字符、字或行的删除、移动、复制等。插入模式:只有在该模式下才可以进行文字输入。低行模式:文件的保存或退出,也…...
day27图像处理OpenCV
文章目录 一、图像预处理1 图像翻转(图像镜像旋转)2 图像仿射变换2.1 图像旋转2.2 图像平移2.3 图像缩放2.4 图像剪切 3 插值方法3.1 最近邻插值3.2 双线性插值(常用)3.3 像素区域插值--一般缩小使用3.4 双三次插值3.5 Lanczos插值 一、图像预处理 1 图像翻转(图像镜像旋转) …...
iOS开发--接入ADMob广告失败
接入ADMob的第三方广告,初始化时提示错误如下: state Not Ready;No such adapter in the application 查了各种官方文档,发现接入过程正确,查了Chatgpt和DeepSeek,它们各种分析,分析结果如下: …...
PyTorch进阶学习笔记[长期更新]
第一章 PyTorch简介和安装 PyTorch是一个很强大的深度学习库,在学术中使用占比很大。 我这里是Mac系统的安装,相比起教程中的win/linux安装感觉还是简单不少(之前就已经安好啦),有需要指导的小伙伴可以评论。 第二章…...
vue3 ts 自定义指令 app.directive
在 Vue 3 中,app.directive 是一个全局 API,用于注册或获取全局自定义指令。以下是关于 app.directive 的详细说明和使用方法 app.directive 用于定义全局指令,这些指令可以用于直接操作 DOM 元素。自定义指令在 Vue 3 中非常强大࿰…...
【漫话机器学习系列】199.过拟合 vs 欠拟合(Overfit vs Underfit)
机器学习核心问题:过拟合 vs 欠拟合 图示作者:Chris Albon 1. 什么是拟合(Fit)? 拟合(Fit)是指模型对数据的学习效果。 理想目标: 在训练集上效果好 在测试集上效果也好 不复杂、…...
从0到1使用C++操作MSXML
1. 引言 MSXML(Microsoft XML Core Services)是微软提供的一套用于处理XML的COM组件库,广泛应用于Windows平台的XML解析、验证、转换等操作。本文将详细介绍如何从零开始,在C中使用MSXML解析和操作XML文件,包含完整的…...
【中间件】nginx反向代理实操
一、说明 nginx用于做反向代理,其目标是将浏览器中的请求进行转发,应用场景如下: 说明: 1、用户在浏览器中发送请求 2、nginx监听到浏览器中的请求时,将该请求转发到网关 3、网关再将请求转发至对应服务 二、具体操作…...
C语言中冒泡排序和快速排序的区别
冒泡排序和快速排序都是常见的排序算法,但它们在原理、效率和应用场景等方面存在显著区别。以下是两者的详细对比: 一、算法原理 1. 冒泡排序 原理:通过重复遍历数组,比较相邻元素的大小,并在必要时交换它们的位置。…...
进程基本介绍
进程是操作系统的重要内容,都是需要了解和学习的,那么今天我们就来好好看看. 进程基本介绍 1、Linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid,进程号). 2.每个进程都可以以两种方式存在的,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,…...
通过平台大数据智能引擎及工具,构建设备管理、运行工况监测、故障诊断等应用模型的智慧快消开源了
智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。 基于多年的深度…...
不同数据库的注入报错信息
不同数据库在报错注入时返回的报错信息具有显著差异,了解这些差异可以帮助快速判断数据库类型并构造针对性的注入攻击语句。以下是主流数据库的典型报错模式及对比: 目录 1. MySQL 2. Microsoft SQL Server 3. Oracle …...
tcpdump`是一个非常强大的命令行工具,用于在网络上捕获并分析数据包
通过 tcpdump,你可以抓取网络流量,诊断网络问题,或分析通信协议的细节。下面是如何在 Linux 上使用 tcpdump 进行抓包的详细步骤。 1. 安装 tcpdump 在大多数 Linux 发行版中,tcpdump 是默认安装的。如果没有安装,可…...
【漏洞复现】Vite 任意文件读取漏洞 CVE-2025-30208/CVE-2025-31125/CVE-2025-31486/CVE-2025-32395
Vite是什么,和Next.js有什么区别? 我上一篇文章刚介绍了Next.js漏洞的复现: 【漏洞复现】Next.js中间件权限绕过漏洞 CVE-2025-29927_next.js 中间件权限绕过漏洞-CSDN博客 Vite 和 Next.js 是两个不同类型的前端工具,它们各自…...
Odrive源码分析(六) 相关控制变量传递
本文记录下odrive源代码中相关控制模块之间变量的传递,这对理解odrive源代码至关重要。 通过前面文字的分析,odrive有两条数据链路,一条是通过中断进行实时的控制,另外一条是OS相关的操作,主要分析下中断内部的相关变量…...
ARM架构FFmpeg极致优化交叉编译指南
ARM架构FFmpeg极致优化交叉编译指南 一、工具链科学配置 使用最新的ARM官方工具链(Linaro或ARM GNU Toolchain) 确保工具链支持目标平台特定指令集(如NEON, VFP等) 设置正确的–sysroot和–prefix参数 1. 工具链选择原则 # 32位ARM (推荐) wget https://developer.arm.com/…...
zk源码—7.ZAB协议和数据存储一
大纲 1.两阶段提交Two-Phase Commit(2PC) 2.三阶段提交Three-Phase Commit(3PC) 3.ZAB协议算法 4.ZAB协议与Paxos算法 5.zk的数据存储原理之内存数据 6.zk的数据存储原理之事务日志 7.zk的数据存储原理之数据快照 8.zk的数据存储原理之数据初始化和数据同步流程 1.两阶…...
2025蓝桥杯C++A组省赛 题解
昨天打完蓝桥杯本来想写个 p y t h o n python python A A A 组的题解,结果被队友截胡了。今天上课把 C A CA CA 组的题看了,感觉挺简单的,所以来水一篇题解。 这场 B B B 是一个爆搜, C C C 利用取余的性质比较好写&#…...
用哪个机器学习模型 依靠极少量即时静态数据来训练ai预测足球赛的结果?
目录 一、模型推荐 1.集成树模型(XGBoost/CatBoost) 2.逻辑回归(Logistic Regression) 3.贝叶斯概率模型(Naive Bayes或贝叶斯网络) 4.支持向量机(SVM) 二、模型排除 三、训练…...
讲解贪心算法
贪心算法是一种常用的算法思想,其在解决问题时每一步都做出在当前状态下看起来最优的选择,从而希望最终能够获得全局最优解。C作为一种流行的编程语言,可以很好地应用于贪心算法的实现。下面我们来讲一篇关于C贪心算法的文章。 目录 贪心算法…...
0基础 | 电动汽车的“电源翻译官” | DC/DC转换器 | 电源系统三
你有没有想过,电动汽车里那么多五花八门的电子设备,比如车灯、仪表盘、摄像头,甚至连控制马达的“大脑”(ECU),是怎么用上电的?今天就来聊聊电动车里一个默默工作的“小功臣”——DC/DC转换器&a…...
zynq7020 u-boot 速通
zynq u-boot 速通 简介 上回最小系统已经跑起来,证明串口和 ddr 正确配置.现在我们需要正确配置 网口, qspi, emmc. 网口:通过 tftp 下载 dtb,image,rootfs 在线调试.qspi:固化 boot.bin 到 qspi flash,这样 qspi 启动就可以直接运行 u-boot.emmc:存放 ubuntu_base 跟文件系统…...
C++学习之路,从0到精通的征途:string类的模拟实现
目录 一.string类的成员变量与成员函数 二.string类的接口实现 1.构造函数,析构函数,拷贝构造函数,赋值重载 (1)构造函数 (2)析构函数 (3)拷贝构造函数 &…...
网页制作中的MVC和MVT
MVC(模型-视图-控制器)和MVT(模型-模板-视图)是两种常见的软件架构模式,通常用于Web应用程序的设计。它们之间的主要区别在于各自的组件职责和工作方式。 MVC(模型-视图-控制器): 模…...
02 - spring security基于配置文件及内存的账号密码
spring security基于配置的账号密码 文档 00 - spring security框架使用01 - spring security自定义登录页面 yml文件中配置账号密码 spring:security:user:name: adminpassword: 123456yml文件中配置账号密码后,控制台将不再输出临时密码 基于内存的账号密码 …...
Firebase Studio:开启 AI 驱动的开发新纪元
Firebase Studio(前身为 Project IDX)的推出,标志着软件开发范式正经历深刻变革。它不仅是一个传统的 IDE,更是一个以 AI 为主导的、代理式 (agentic) 的云端开发环境,专注于全栈 AI 应用(包括 API、后端、…...
网络基础2
目录 跨网络传输流程 网络中的地址管理 - 认识 IP 地址 跨网络传输 报文信息的跨网络发送 IP地址的转化 认识端口号 端口号范围划分 源端口号和目的端口号 认识 TCP / UDP协议 理解 socket 网络字节序 socket 编程接口 sockaddr 结构 我们继续来学习网络基础 跨网…...
Maven工具学习使用(十一)——部署项目到仓库
1、使用Maven默认方式 Maven 部署项目时默认使用的上传文件方式是通过 HTTP/HTTPS 协议。要在 Maven 项目中配置部署,您需要在项目的 pom.xml 文件中添加 部分。这个部分定义了如何部署项目的构件(如 JAR 文件)到仓库。。这个部分定义了如何…...
FPGA 37 ,FPGA千兆以太网设计实战:RGMII接口时序实现全解析( RGMII接口时序设计,RGMII~GMII,GMII~RGMII 接口转换 )
目录 前言 一、设计流程 1.1 需求理解 1.2 模块划分 1.3 测试验证 二、模块分工 2.1 RGMII→GMII(接收方向,rgmii_rx 模块) 2.2 GMII→RGMII(发送方向,rgmii_tx 模块) 三、代码实现 3.1 顶层模块 …...
torch.cat和torch.stack的区别
torch.cat 和 torch.stack 是 PyTorch 中用于组合张量的两个常用函数,它们的核心区别在于输入张量的维度和输出张量的维度变化。以下是详细对比: 1. torch.cat (Concatenate) 作用:沿现有维度拼接多个张量,不创建新维度 输入要求…...
索引下推(Index Condition Pushdown, ICP)
概念 索引下推是一种数据库查询优化技术,通过在存储引擎层面应用部分WHERE条件来减少不必要的数据读取。它特别适用于复合索引的情况,因为它可以在索引扫描阶段就排除不符合全部条件的数据行,而不是将所有可能匹配的记录加载到服务器层再进行…...
C++基础精讲-06
文章目录 1. this指针1.1 this指针的概念1.2 this指针的使用 2. 特殊的数据成员2.1 常量数据成员2.2 引用数据成员2.3 静态数据成员2.4 对象成员 3. 特殊的成员函数3.1 静态成员函数3.2 const成员函数3.3 mutable关键字 1. this指针 1.1 this指针的概念 1.c规定,t…...
Django3 - 建站基础
学习开发网站必须了解网站的组成部分、网站类型、运行原理和开发流程。使用Django开发网站必须掌握Django的基本操作,比如创建项目、使用Django的操作指令以及开发过程中的调试方法。 一、网站的定义及组成 网站(Website)是指在因特网上根据一定的规则,…...
UE5蓝图设置界面尺寸大小
UE5蓝图设置界面尺寸大小 Create widget 创建UIadd to Viewport 添加视图get Game User Settings获取游戏用户设置set Screen Resolutions 设置屏幕尺寸大小1920*1080set Fullscreen Mode 设置全屏模式为:窗口化或者全屏Apply Settings 应用设置...
无数字字母RCE
无数字字母RCE,这是一个老生常谈的问题,就是不利用数字和字母构造出webshell,从而能够执行我们的命令。 <?php highlight_file(__FILE__); $code $_GET[code]; if(preg_match("/[A-Za-z0-9]/",$code)){die("hacker!&quo…...
AutoGen参数说明
UserProxyAgent用户 user_proxy = UserProxyAgent配置说明: # 构造参数 def __init__(self,name: str,is_termination_msg: Optional[Callable[[Dict], bool]] = None,max_consecutive_auto_reply: Optional[int] = None,human_input_mode: Literal["ALWAYS", &qu…...
6.2 GitHub API接口设计实战:突破限流+智能缓存实现10K+仓库同步
GitHub Sentinel 定期更新 API 接口设计 关键词:GitHub API 集成、异步爬虫开发、RESTful 接口设计、请求限流策略、数据增量更新 1. 接口架构设计原则 采用 分层隔离架构 实现数据采集与业务逻辑解耦: #mermaid-svg-WihvC78J0F5oGDbs {font-family:"trebuchet ms&quo…...
用java代码如何存取数据库的blob字段
一.业务 在业务中我们被要求将文件或图片等转成 byte[] 或 InputStream存到数据库的Blob类型的字段中. 二.Blob类型介绍 在 MySQL 中,Blob 数据类型用于存储二进制数据。MySQL 提供了四种不同的 Blob 类型: TINYBLOB: 最大存储长度为 255 个字节。BL…...
2025蓝桥杯C++研究生组真题-上海市省赛
2025蓝桥杯C研究生组真题 A:数位倍数(5分) 问题描述:请问在 1 至 202504(含)中,有多少个数的各个数位之和是 5 的整数倍。例如:5、19、8025 都是这样的数。 A是填空题,…...
原子操作CAS(Compare-And-Swap)和锁
目录 原子操作 优缺点 锁 互斥锁(Mutex) 自旋锁(Spin Lock) 原子性 单核单CPU 多核多CPU 存储体系结构 缓存一致性 写传播(Write Propagation) 事务串行化(Transaction Serialization&#…...
Aspose.Words导出word,服务器用内存流处理,不生成磁盘文件
框架集:.NET8 public async Task<IActionResult> ExportPDF(long? id) {var infoawait form_Dahui_ReportDao.GetAsync(id);if (info null){return Content("没找到数据");}//读取word模板string fileTemp Path.Combine(AppContext.BaseDirect…...
攻防世界——Web题ez_curl
目录 Express PHP和Node.js的解析差异 Python代码 这道题最终得不到flag,用了很多师傅的代码也不成功。但还是需要学习 下载的附件: const express require(express);const app express();const port 3000; const flag process.env.flag;app.ge…...
力扣面试150题--螺旋矩阵
Day 20 题目描述 思路 根据题目描述,我们需要顺时针输出矩阵元素,顺时针说明有四种输出状态,横向从左到右和从右到左,纵向从上到下和从下到上,唯一的难点在于,输出完成一层后,如何进入内层&am…...