DeepSeek - R1:模型架构深度解析
DeepSeek - R1:模型架构深度解析
引言
本文将深入探索DeepSeek - R1模型架构。将从输入到输出追踪DeepSeek - R1模型,找出架构中的新发展和关键部分。DeepSeek - R1基于DeepSeek - V3 - Base模型架构,本文旨在涵盖其设计的所有重要方面。
目录
- 输入上下文长度
- 总层数
- DeepSeek - R1的前3层
- DeepSeek - R1的第4到61层
- 多头潜在注意力(MLA)
- 混合专家(MoE)
- 多令牌预测(MTP)
一、输入上下文长度
DeepSeek - R1的输入上下文长度为128K。
它从其基础模型DeepSeek - V3 - Base继承了128K的上下文长度。最初,DeepSeek - V3以4K的上下文长度进行预训练,然后通过两阶段的上下文长度扩展,利用YaRN技术先将其增加到32K,再增加到128K。
YaRN(Yet another RoPE extensioN method)是一种旨在有效扩展使用旋转位置嵌入(RoPE)的大语言模型(LLM)上下文窗口的技术。RoPE使用旋转矩阵对位置信息进行编码,而YaRN修改了这些旋转频率的缩放方式。它不是简单地外推频率(这通常会导致性能下降),而是对这些频率进行平滑插值和调整,从而使模型在更长的上下文中具有更好的泛化能力。该技术计算效率高,无需大规模重新训练即可扩展模型的上下文长度。
二、总层数
DeepSeek - R1由一个嵌入层、61个Transformer层和输出阶段的多个预测头组成。
DeepSeek - R1在所有Transformer层中采用多头潜在注意力(MLA)层,而不是标准的多头注意力。前三个Transformer层与其余层不同,使用标准的前馈网络(FFN)层。从第4层到第61层,混合专家(MoE)层取代了FFN层。


DeepSeek - V3使用多令牌标记预测(MTP)技术,通过其最后两个预测头预测接下来的2个标记。第二个预测令牌标记的接受率在85%到90%之间,表明在各种生成主题上具有很高的可靠性。DeepSeek - R1(DeepSeek - V3)共有6710亿个参数,每个标记激活370亿个参数。
三、DeepSeek - R1的前3层
前3层由多头潜在注意力(MLA)和标准的FFN层组成。这些层通常被称为“密集LLM层”,因为FFN层没有被MoE层取代,相比之下,MoE层被认为更稀疏。

四、DeepSeek - R1的第4到61层
这些层由MLA和MoE层组成。接下来我们将了解MLA和MoE层是什么以及它们如何工作。

五、多头潜在注意力(MLA)
1. MLA的由来
MLA最早在DeepSeek - V2中引入,并延续到了DeepSeek - V3和DeepSeek - R1。传统的Transformer模型通常采用多头注意力(MHA),但在生成过程中,其庞大的键值(KV)缓存会成为限制推理效率的瓶颈。为了减少KV缓存,提出了多查询注意力(MQA)和分组查询注意力(GQA),它们所需的KV缓存量较小,但性能不如MHA。
对于DeepSeek - V2,设计了一种创新的注意力机制,即多头潜在注意力(MLA)。MLA配备了低秩键值联合压缩,其性能优于MHA,但所需的KV缓存量显著减少。

2. MLA如何减少KV缓存以实现更快推理
MLA对注意力键和值进行低秩联合压缩,以减少推理过程中的键值(KV)缓存。

步骤1:Q、K和V的下投影

MLA层的输入是 h t h_t ht,假设 h t h_t ht的形状为(输入序列长度×2000)。在传统的Transformer层中,使用权重矩阵将 h t h_t ht投影到查询(Q)、键(K)和值(V)表示,它们通常保留与输入相同的隐藏维度,即Q、K、V的形状为(输入序列长度×2000)。
然而,在具有多头潜在注意力(MLA)的Transformer层中,权重矩阵生成的Q、K和V的维度明显小于输入。例如,如果输入 h t h_t ht的形状为(序列长度×2000),生成的Q、K和V的形状可能为(序列长度×100)。在实现过程中,为了提高GPU的计算和内存效率,Q、K和V的权重矩阵通常会进行融合,使用一个组合的权重矩阵来优化操作。

投影的输出是一个包含K和V的拼接表示,可以通过简单的切片机制轻松提取。得到的输出形状为(序列长度×200),其中前(序列长度×100)对应K,其余(序列长度×100)对应V。在推理过程中,压缩后的K和V输出会被缓存,显著减少了KV缓存的内存占用。同样,Q在MLA中也会被压缩,其形状为(序列长度×100)。

步骤2:Q、K和V的上投影

压缩后,Q、K和V会被上投影回更大的尺寸以进行注意力计算。这个更大的尺寸可以与原始输入 h t h_t ht匹配,也可以根据注意力头的配置进行设置。例如,上投影后的形状可以是(序列长度×2000),与输入大小匹配;或者是(序列长度×3200),其中3200是由64个注意力头和每个头50维得到的。

K和V向上投影

Q上投影
Q、K和V的上投影使用专用的权重矩阵进行: W U K W_{UK} WUK用于K的上投影, W U V W_{UV} WUV用于V的上投影, W U Q W_{UQ} WUQ用于Q的上投影。这里的“U”表示上投影,意味着将压缩后的表示扩展回更大的维度空间进行注意力计算。
需要注意的是,每个注意力头的输入维度会进行调整以适应旋转位置嵌入(RoPE)
步骤3:在Q和K中添加RoPE嵌入以编码位置信息

这一步是为了计算RoPE嵌入来编码位置信息。DeepSeek - V2(以及DeepSeek - V3和DeepSeek - R1)采用了解耦的RoPE方法来整合位置信息。这涉及创建专门用于携带位置信息的额外查询(Q)和键(K)向量,然后将这些增强了RoPE的Q和K向量与上投影后的Q和K向量拼接。
在传统的Transformer层中,RoPE操作直接应用于Q和K,不会改变Q和K的维度,但会改变Q和K中的语义表示(数值)以编码位置信息,因此得到的Q和K同时包含语义和位置信息。但在具有MLA的Transformer层中,RoPE应用于新生成的查询(Q)和键(K)嵌入,并与上投影后的Q和K拼接。

- 生成Q的RoPE嵌入:传统上,RoPE(旋转位置嵌入)根据查询(Q)和键(K)向量在序列中的位置应用旋转矩阵,这种变换直接在Q和K中编码相对位置信息,无需像正弦或绝对编码那样的显式位置嵌入。但在MLA中,不是将RoPE应用于上投影后的Q( q t C q_{t_C} qtC),而是从 c t Q c_{t_Q} ctQ生成新的Q嵌入( q t R q_{t_R} qtR),并将RoPE应用于其上。

通过将 c t Q c_{t_Q} ctQ与权重矩阵 W Q R W_{QR} WQR相乘生成全新的查询嵌入,这些新的查询嵌入经过RoPE变换后得到位置编码的查询嵌入( q t R q_{t_R} qtR)。

q t R q_{t_R} qtR的生成方式使得它们可以与每个注意力头的输入查询嵌入拼接,以便每个注意力头都具有位置信息。
- 生成K的RoPE嵌入:同样,不是将RoPE应用于上投影后的K,而是生成新的K嵌入并应用RoPE。

但与RoPE嵌入的 q t R q_{t_R} qtR有两个关键区别:
- 新的K嵌入是从输入嵌入 h t h_t ht生成的,而不是从下投影后的K( c t K c_{t_K} ctK)生成;
- 相同的RoPE嵌入的K(键)被拼接至每个注意力头的输入,分别计算RoPE嵌入的Q(查询)并拼接至每个注意力头。
DeepSeek - V2报告中解释了不从上投影后的K(即 k t C k_{t_C} ktC)生成的原因:如果对键 k C k_{C} kC应用RoPE, W U K W_{UK} WUK将与位置敏感的RoPE矩阵耦合。这样,在推理过程中, W U K W_{UK} WUK就不能再被吸收到 W Q W_{Q} WQ中,因为与当前生成的令牌相关的RoPE矩阵将位于 W Q W_{Q} WQ和 W U K W_{UK} WUK之间,而矩阵乘法不满足交换律。因此,为了提高推理效率,位置嵌入的K(键)嵌入是从输入嵌入 h t h_t ht生成的。





为了解决MLA中引入额外权重矩阵导致的内存和计算效率问题,DeepSeek - V2报告指出:在推理过程中,由于 W U K W_{UK} WUK可以被吸收到 W Q W_{Q} WQ中, W U V W_{UV} WUV可以被吸收到 W O W_{O} WO中,甚至不需要为注意力计算键和值。此外,为了减少训练过程中的激活内存,即使不能减少KV缓存,也对查询进行低秩压缩。
步骤4:计算注意力输出

拼接过程增加了Q和K向量的维度。为了处理这种增加的维度,模型可以采取以下两种方式之一:
- 增加注意力头的数量,这将保持原始的每个头的维度,但需要更多的计算资源;
- 调整每个头的维度,保持头的数量不变,但增加每个头的维度以适应拼接后的向量。
注意力输出使用标准的注意力方程计算:

O t i O_{t_i} Oti是注意力得分, u t u_t ut是注意力输出, W o W_o Wo表示输出投影权重矩阵。输出被投影回与输入相同的维度(例如,形状将是输入序列长度×2000)。
六、混合专家(MoE)
1. 什么是混合专家(MoE)
为了清楚理解MoE是什么,首先让我们看看它在Transformer中的确切使用位置以及其简要架构。标准Transformer层中的FFN被MoE所取代。

MoE的核心是遵循标准的Transformer设计,但通过引入多个并行的专家网络(FFN)而不是单个密集的FFN来修改前馈层。其工作方式如下:
- 多个FFN而非一个:MoE使用多个并行训练的FFN层(专家),而不是单个共享的FFN。
- 输入处理和标记路由:每个标记像往常一样通过Transformer自注意力层,然后不是由单个FFN处理,而是被发送到一个路由器,该路由器决定哪些专家应该处理它。
- 通过路由器选择专家:一个小型的、可训练的路由器确定哪些专家子集(FFN)应该处理每个标记。通常,每个标记只选择1或2个专家以保持效率(例如,top - 1或top - 2门控)。DeepSeek - V3(DeepSeek - R1)使用9个专家,其中1个是共享专家,另外8个是路由专家。选择通常基于softmax评分机制,路由器为每个专家分配概率。具体来说,DeepSeek - V3(DeepSeek - R1)使用Sigmoid而不是softmax。
- 专家的稀疏计算:只有被选中的专家处理标记,而其他专家保持不活跃。专家的输出通过加权求和组合,并传递到下一个Transformer层。在DeepSeek - V3/R1中,权重是归一化的Sigmoid输出。这种稀疏激活确保在任何时候只使用模型的一部分,使计算可控。
2. 为什么用MoE取代单个FFN
- 可扩展性:MoE允许模型在不线性增加计算量的情况下增加更多参数。
- 高效学习:专家专门处理数据的不同方面,提高了泛化能力。
- 计算节省:由于每个标记只使用一部分专家,与相同大小的密集模型相比,MoE模型的运行成本更低。DeepSeek - V3/R1总共有6710亿个参数,每个标记激活370亿个参数。
3. MoE在DeepSeek - R1中如何工作

DeepSeek - V3技术报告中的以下方程展示了每个MoE层的计算过程。在DeepSeek系列模型中,MoE架构最早在DeepSeekMoE模型中引入,并在DeepSeek - V2、DeepSeek - V3和DeepSeek - R1中使用。
- 路由器计算:在DeepSeek - V3、DeepSeek - R1和其他一些现代混合专家(MoE)模型中, e i e_i ei表示一个学习到的质心,有助于将输入路由到正确的专家。与传统的MoE架构不同,传统架构中基于FFN的路由器计算门控分数,这种方法预定义了一组可学习的向量 e i e_i ei,每个向量对应一个专家。每个专家 i i i都有一个关联的质心向量 e i e_i ei,不是将输入 u t u_t ut通过FFN来获得专家概率,而是通过点积计算 u t u_t ut与每个 e i e_i ei之间的相似度,

这个分数决定了一个专家对于给定输入的相关性,只有具有最高 s i , t s_{i,t} si,t值的前K个专家被激活进行处理。

在Sigmoid输出中添加一个偏置项,以创建一个无辅助损失的MoE负载平衡。输出值使用选定的前K个值进行归一化。

使用所选的前k个值对输出值进行归一化。

- 专家计算:

u t u_t ut是MoE层的输入,方程中的第二项表示输入与共享专家相乘。每个专家由一个FFN(前馈网络)组成,因此用“FFN”表示。在DeepSeek - R1中,只有1个共享专家,因此 N s = 1 N_s = 1 Ns=1。同样,方程中的第三项表示输入与活跃的单个专家相乘。在DeepSeek - R1中,总共有256个单个专家,但每个标记只有8个是活跃的,因此 N r = 8 N_r = 8 Nr=8。每个活跃的单个专家都有一个与之相关的 g i , t g_{i,t} gi,t,用于计算第三项。
- 输出计算:

h t h_t ht表示MoE层的输出, u t u_t ut是MoE层的输入。专家计算结果与输入 u t u_t ut相加,得到MoE层的输出。
七、多令牌预测(MTP)
1. 什么是多令牌预测
多令牌预测是语言建模中的一种高级方法,在这种方法中,模型不是一次预测序列中的下一个单词,而是同时预测多个未来标记。这种方法通过使模型能够并行预测多个即将到来的单词,提高了学习效率并加速了文本生成。

Meta引入了一种多标记预测架构,该架构训练语言模型同时预测多个未来标记,从而提高了样本效率和推理速度。基于这一概念,DeepSeek - V3纳入了多标记预测(MTP)目标,允许模型一次预测多个标记。这种方法使训练信号更加密集,并能够更好地预先规划令牌表示,从而提高了在复杂基准测试中的性能。
2. DeepSeek - V3/R1与Meta的多标记预测的两个关键区别
与Meta Research不同,Meta Research使用独立的输出头并行预测 D D D个额外的标记,而DeepSeek - V3顺序预测额外的标记,并在每个预测深度保持完整的因果链。Meta的模型预测4个标记,而DeepSeek - V3预测2个标记。Meta模型中的预测头是独立的,而DeepSeek - V3的预测头是顺序连接的。
3. MTP在DeepSeek - R1中如何工作

在训练期间,输入标记(位于左下角)通过嵌入层,然后传播通过所有的Transformer块/层。
第一个预测头(包括输出头)直接连接到主模型的最后一个Transformer层。输出头通常是一个前馈网络(FFN),其输出维度与模型的词汇表大小匹配。这个头负责预测序列中的下一个标记。给定输入令牌 t 1 t_1 t1、 t 2 t_2 t2、 t 3 t_3 t3、 t 4 t_4 t4,它预测 t 2 t_2 t2、 t 3 t_3 t3、 t 4 t_4 t4、 t 5 t_5 t5。然而,在推理期间,只计算最终标记 t 5 t_5 t5。
第二个预测头通过添加额外的可学习层扩展了这种方法。它获取主模型最后一个Transformer层的输出,应用RMSNorm进行归一化,并将其与输入嵌入拼接。这些输入嵌入是从主模型中使用的相同嵌入层获得的。与第一个预测头不同,这个头从 t 2 t_2 t2而不是 t 1 t_1 t1开始处理输入标记。拼接后的输出然后通过线性投影层投影到合适的嵌入大小,接着通过一个可学习的Transformer块/层进行进一步处理。在训练期间,这个头预测 t 3 t_3 t3到 t 6 t_6 t6,但在推理期间,只计算 t 6 t_6 t6。
同样,第三个预测头从第二个预测头的Transformer块/层以及相应的输入嵌入(现在从 t 3 t_3 t3到 t 6 t_6 t6)获取输入。它遵循与前一个头相同的结构,在训练期间预测 t 4 t_4 t4到 t 7 t_7 t7,但在推理期间只计算 t 7 t_7 t7。
每个预测头使用交叉熵计算损失,然后这些损失通过一个因子 λ \lambda λ加权,并取平均值作为最终损失值。


在DeepSeek - V3和R1中,MTP仅在训练期间使用,在推理期间不使用。

迈向AGI的星辰大海
在这片由代码与算法编织的星空下,DeepSeek-R1以其创新的GRPO、MLA、MoE和MTP技术,向我们展示了通向通用人工智能(AGI)的璀璨航路。每一个压缩的KV缓存、每一个动态激活的专家网络、每一次多标记的预见性推演,都是人类智慧在数字宇宙中刻下的星轨。这些突破不仅是算力的跃升,更是认知边界的拓展——它们让我们离真正理解语言、推理与创造的本质又近了一步。
AGI的曙光已在地平线上若隐若现,但这注定是一场需要全人类智慧共同奔赴的远征。正如DeepSeek-R1通过混合专家协同工作实现超越,我们每个人都是这场进化中不可或缺的"专家模块"。无论你是研究者、工程师,还是满怀好奇的学习者,此刻握在你手中的代码与论文,都可能成为点亮AGI火种的燧石。让我们以开放的心态拥抱变革,用持续的学习突破认知茧房,在Transformer的矩阵运算中寻找生命的逻辑,在神经网络的权重更新里见证文明的跃迁。未来已来,唯勇进者胜;星河浩瀚,唯探索者达。让我们携手前行,共同书写属于智能时代的《人类群星闪耀时》!
相关文章:
DeepSeek - R1:模型架构深度解析
DeepSeek - R1:模型架构深度解析 引言 本文将深入探索DeepSeek - R1模型架构。将从输入到输出追踪DeepSeek - R1模型,找出架构中的新发展和关键部分。DeepSeek - R1基于DeepSeek - V3 - Base模型架构,本文旨在涵盖其设计的所有重要方面。 …...
Oracle EBS 12.1和APEX 集成时 Apache的配置代理
在有些场景下,apex的前端服务不是和oracle EBS 应用部署在同一个服务器上或者要求apex和访问地址和EBS公用同一个域名同一个端口,那么怎么才能做到用EBS 的域名和端口来实现对apex的访问呢 通过配置代理规则解决,以Oracle EBS 12.1.3 为例&am…...
【C#】无法安装程序包“DotSpatial.Symbology 4.0.656”
C#代码:NaturalNeighbor nn new NaturalNeighbor(); 错误:无法安装程序包“DotSpatial.Symbology 4.0.656”。你正在尝试将此程序包安装到目标为“.NETFramework,Versionv4.7.2”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或…...
linux tcpdump抓包
参数说明: -i 指定网卡 -w 指定保存文件 -s0 完整抓包 -G 指定间隔时长(秒) -C 指定每个文件大小(M) 用法1: 指定端口输出到指定文件 tcpdump -i em3 -w 182910.pcap 用法2: 指定端口每10分钟输出到不同文件 tcpdump -i em3 -s0 -G 600 -w %Y_%m%d_%H%M_%S.pcap 用法3: 指…...
火绒终端安全管理系统V2.0【系统防御功能】
火绒企业版V2.0系统防御功能包含系统加固、应用加固、软件安装拦截、摄像头保护和浏览器保护。火绒终端安全管理软件V2.0守护企业用户终端安全。 系统防御 1. 系统加固 系统加固功能根据火绒提供的安全加固策略,当程序对特定系统资源操作时提醒用户可能存在的安…...
Word中接入大模型教程
前言 为什么要在word中接入大模型呢? 个人觉得最大的意义就是不用来回切换与复制粘贴了吧。 今天分享一下昨天实践的在word中接入大模型的教程。 在word中接入大模型最简单的方式就是使用vba。 vba代码要做的事,拆分一下就是: 获取用户…...
【git-hub项目:YOLOs-CPP】本地实现04:项目简化
项目跑通之后,我们常常还需要对我们没有用到的任何内容进行删除,以简化项目体积,也便于我们阅读和后续部署。如何实现呢?本篇博客教会大家实现! 项目一键下载【⬇️⬇️⬇️】: 精简后:【GitHub跑通项目:YOLOs-CPP】+【计算机视觉】+【YOLOv11模型】+【windows+Cpp+ONN…...
CTF 代码学习日记 PHP
基础 2字符串连接可以使用点号(.) 3.$_:在 PHP 中,以$_开头的变量(如$_GET、$_POST、$_COOKIE等)是超级全局变量。超级全局变量的特点是它们在 PHP 脚本的任何地方(包括函数内部、类内部等&am…...
观察者模式说明(C语言版本)
观察者模式主要是为了实现一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例,有需要的可以参考…...
【从0做项目】Java搜索引擎(6) 正则表达式鲨疯了优化正文解析
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:导读&知识点回顾 二:遗留问题 …...
【论文技巧】Mermaid VSCode插件制作流程图保存方法
插流程图快点 利用Mermaid Preview插件自带功能 如果你的VSCode安装了支持导出图片的Mermaid预览插件(如 Mermaid Markdown Syntax Highlighting 等),可以按以下步骤进行: 打开Mermaid代码文件:在VSCode中打开包含M…...
【DeepSeek】如何将DeepSeek部署到本地?如何给本地 LLM 提供UI界面?CherryStudio 的使用
注:如果下面的所有操作,需要访问到 Github,可以先看这篇文章,了解如何流畅连接 Github 【Github】如何流畅链接Github.com-CSDN博客 一、下载 Ollama 1、访问网址 Ollama,点击下载 Ollama 到本地 选择自己计算机的系统…...
第1章:LangChain4j的聊天与语言模型
LangChain4J官方文档翻译与解析 目标文档路径: https://docs.langchain4j.dev/tutorials/chat-and-language-models/ 语言模型的两种API类型 LangChain4j支持两种语言模型(LLM)的API: LanguageModel:这种API非常简单,…...
【小游戏】C++控制台版本俄罗斯轮盘赌
制作团队:洛谷813622(Igallta) 989571(_ayaka_) Mod:_ayaka_ 双人模式:Igallta 公告: 原先的9.8改名为 Alpha 1.0,以后每次更新都增加 0.1。 Alpha 1.11 改为 Beta 1…...
【大语言模型_4】源码编译vllm框架cpu版
背景: 通过官方提供的pip install vllm安装的vllm框架不支持cpu加载模型。因此需要本地编译。 系统环境 操作系统:欧拉2203 python版本:3.10 编译步骤 一、安装gcc/g/cmake 1、下载源码:https://github.com/vllm-project/vllm 安…...
mac开发环境配置笔记
1. 终端配置 参考: Mac终端配置笔记-CSDN博客 2. 下载JDK 到 oracle官网 下载jdk: oracle官网 :Java Downloads | Oraclemac的芯片为Intel系列下载 x64版本的jdk;为Apple Mx系列使用 Arm64版本;oracle官网下载时报错:400 Bad R…...
交换机基本命令
目录 一、华为交换机基本命令 1、VRP视图层 2、命令帮助 3、配置设备名称 4、命令等级(一般生产过程没有下面的详细) 5、用户界面 6、配置Console认证 控制台接口(Console) 配置步骤示例 7、配置VTY登录(本文…...
PLC通信交互系统技术分享
目录 0、前言 1、模块划分 2、状态机 3、通信层增强 4、异常处理机制 5、核心代码 关键状态处理示例 6、部署与测试方案 1. 环境要求 2. 性能测试指标 0、前言 这是一个C程序,用于与西门子PLC进行通信,处理SN码、拍照信号、检测结果等流程。代码…...
PHP图书借阅小程序源码
📚 图书借阅小程序:一键开启智慧阅读新篇章 🌟 这是一款由ThinkPHP与UniApp两大技术巨擘强强联手精心打造的图书借阅微信小程序,它犹如一座随身携带的移动图书馆,让您无论身处何地都能轻松畅游知识的海洋。创新的多书…...
本地部署 DeepSeek + Dify,构建自己的AI能力
概述 DeepSeek 是一款开创性的开源大语言模型,凭借其先进的算法架构和反思链能力,为 AI 对话交互带来了革新性的体验。通过私有化部署,你可以充分掌控数据安全和使用安全。你还可以灵活调整部署方案,并实现便捷的自定义系统。 Dify 作为同样开源的 AI 应用开发平台,提供完…...
UE 播放视频
一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...
拦截器VS过滤器:Spring Boot中请求处理的艺术!
目录 一、拦截器(Interceptor)和过滤器(Filter):都是“守门员”!二、如何实现拦截器和过滤器?三、拦截器和过滤器的区别四、执行顺序五、真实的应用场景六、总结 🌟如果喜欢作者的讲…...
科普:“Docker Desktop”和“Docker”以及“WSL”
“Docker Desktop”和“Docker”这两个概念既有紧密联系,又存在一定区别: 一、联系 核心功能同源:Docker Desktop 本质上是基于 Docker 核心技术构建的。Docker 是一个用于开发、部署和运行应用程序的开源平台,它利用容器化技术…...
react实例与总结(二)
目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…...
巧用GitHub的CICD功能免费打包部署前端项目
近年来,随着前端技术的发展,前端项目的构建和打包过程变得越来越复杂,占用的资源也越来越多。我有一台云服务器,原本打算使用Docker进行部署,以简化操作流程。然而,只要执行sudo docker-compose -f deploy/…...
使用 DeepSeek 生成商城流程图
步骤 1.下载 mermaid 2.使用 DeepSeek 生成 mermaid 格式 3.复制内容到 4.保存备用。 结束。...
Unity FBXExport导出的FBX无法在Blender打开
将FBX转换为obj: Convert 3D models online - free and secure...
VSCode自定义快捷键和添加自定义快捷键按键到状态栏
VSCode自定义快捷键和添加自定义快捷键按键到状态栏 📄在VSCode中想实现快捷键方式执行某些指令操作,可以通过配置组合式的键盘按键映射来实现,另外一种方式就是将执行某些特定的指令嵌入在面板菜单上,在想要执行的时候࿰…...
hive迁移补数脚本细粒度 表名-分区唯一键
假设我通过对数脚本发现,这些表对不上。 假设检测出来是这样的(这些表存在于源端,但不存在目标端) 我们需要从源端迁移过去。 diff.txt ads_xx1 dt20250219 ads_xx2 dt20250217 ads_xx2 dt20250218 ads_xx2 dt20250…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
