“Transformer挑战者”-Mamba之最全详解图解

news2024/10/6 1:44:49

--------------------------------------------------------------------------------------------------------------------

1.AIGC未来发展前景

未完持续…

1.1 人工智能相关科研重要性

拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!!
拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!!
拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!!

重要的事情说三遍

2.Pyhton编程实战系统班

教你快速掌握Python基础语法以及Python高级语法和Python编程技巧,手把手编程实战,还会带你刷爆Python机考题和面试八股文,还会手把手教你使用Python进行人工智能实战项目开发,增添简历亮点,入职大厂不是梦!心动不如行动,赶快来吧~

3.AIGC应用班

教你快速熟练使用AIGC工具,提升效率节约时间,在熟悉各个AIGC模型原理的同时也熟练掌握如何使用AIGC工具,在AIGC应用班还会教你如何使用AIGC搞副业,月入过万不是梦!心动不如行动,赶快来吧~

📩咨询又不收费,咨询也没损失,不逼自己一把都不知道潜力有多大!
🌟🌟🌟🌟🌟🌟🌟🌟
【立即后台咨询】搞定AIGC应用难题!欢迎评论区互动提问

4.AI 绘画系统班(基础+进阶)

教你快速使用Stable-Diffusion,Midjourney等主流AI绘画工具,在办公创作等极大提升效率,同时还会教你如何使用AI绘画工作搞副业,月入过万不是梦!心动不如行动,赶快来吧~

5.人工智能顶会论文辅导(全球科研论文辅导顶尖团队)

关于如何报名人工智能顶会论文辅导请后台私信我

5.1 简介

计算机领域顶会论文,CCF,SCI,EI,专利竞赛软著等1v1论文辅导!
👇【立即咨询】一站式服务,短期快速投稿

💥个性化的指导和顶尖的科研团队支持,助您攀登科研高峰

对于计算机专业的硕博生来说,拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!!

🏃无论您是想申请研究生、博士生,还是渴望赴海外留学,或是立志进入大厂的核心岗位,一篇高质量的SCI/CCF论文是关键所在!我们的团队充满热情和专业知识,致力于为您提供卓越的科研指导和论文辅导服务。

⚠️处在导师放养的困境,无人指导
⚠️缺乏创意、缺乏写作技巧,或是面临论文课题无从下手
⚠️毕业要求高,毕业求职压力大
⚠️论文课题无从下手,熬夜失眠狂脱发

🎓QS50专业博士团队,为你的科研保驾护航!

📍QS前50科研学者/博士/博士后/大厂算法研究员
📍一站式全流程论文服务,点亮您的学术之路。
📍顶会主席、审稿人、期刊编辑协同助阵,增大中稿概率
📍全过程陪伴至录取,不中可售后退费!

⚠️特别提示:个人信息严格保密,保证论文唯一性,不dai写!❌❌❌
📩咨询又不收费,咨询也没损失,不逼自己一把都不知道潜力有多大!
🌟🌟🌟🌟🌟🌟🌟🌟
【立即后台咨询】搞定论文难题!欢迎评论区互动提问
--------------------------------------------------------------------------------------------------------------------

在大模型领域,Transformer 凭一己之力撑起了整个江山。但随着模型规模的扩展和需要处理的序列不断变长,Transformer 的局限性也逐渐凸显,比如其自注意力机制的计算量会随着上下文长度的增加呈平方级增长。为了克服这些缺陷,研究者们开发出了很多注意力机制的高效变体,但收效甚微。
最近,一项名为「Mamba」的研究似乎打破了这一局面,它在语言建模方面可以媲美甚至击败 Transformer。这都要归功于作者提出的一种新架构 —— 选择性状态空间模型( selective state space model),该架构是 Mamba 论文作者 Albert Gu 此前主导研发的 S4 架构(Structured State Spaces for Sequence Modeling )的一个简单泛化。

一. 介绍

  1. Mamba 有一个简化的架构,没有注意力或 MLPBlocks。通过使用一种称为选择性状态空间模型(Selective SSM)的新结构,我们只关注必要的信息,并实现了计算效率的显着提高。

2.它能够实现高速推理(大约比 Transformer 快 5 倍),并且具有推理成本随着序列长度(token 数量等)增加而线性增加的特点(不像之前的模型存在非线性)。增加)。这一性能改进已使用实际数据进行了验证,并在序列长度高达 1000k(100 万)的情况下得到了证实。

3.在最大限度地减少 GPU 内存层次结构之间的移动的同时,硬件优化的并行算法可实现更快的计算并减少内存需求。

4.目前尚不清楚Mamba在参数数量为2.8B以上时是否有效、超参数调优方法是否与Transformer等相同、学习的不稳定性如何等,有待未来的研究。

5.尽管还有很多未知数,但各个角度的研究开始提供证据表明 Mamba 是一种有前途的可以替代 Transformer 的架构,并且 Mamba 很可能成为未来前沿研究的中心。
在这里插入图片描述

二. 研究背景

1.随着基于 Transformer 的模型在现实世界中占据主导地位,研究人员一直在寻找一种可以替代 Transformer 的新架构。 Transformer 因其能够捕获数据之间的复杂关系而在 2017 年取得了突破,但另一方面,它也受到了序列长度和大内存占用带来的计算成本增加的困扰。

2.状态空间模型 (SSM) 在涉及连续信号数据的领域(例如音频和视觉)取得了成功,但在建模离散、信息密集的数据(例如文本和图像)方面效果较差,并未在系统中显示其性能。

在此背景下,人们希望开发一种比 Transformer 具有更高精度和计算效率的模型,并将状态空间模型应用于文本和图像(事实上,已经出现了 RetNet 和 RWKV 等新架构)。远远超过了其他人)。

三. Mamba简介

Mamba 是 Albert Gu 和 Tri Dao 于 2023 年 12 月 1 日宣布的一种新网络架构。
其基础是一个称为状态空间模型(SSM)的模型,该模型有

  1. 选择机制
  2. 针对硬件设计优化的算法
  3. 它是一个可以通过结合三个新颖性来超越 Transformer 的模型:消除注意力的简单架构和 MLP 块。

自发布以来,其潜力已成为人工智能研究人员的热门话题,不仅在海外,而且在日本的研究机构中,研究也在取得进展。

四. 什么是状态空间模型(SSM)?

在本章中,我们将了解结构化状态空间模型 S4 的工作原理,并作为理解 Mamba(选择性 SSM)的垫脚石。状态空间模型是一个串联到串联的变压器。它是一个结合了两种模型优点的模型:它在推理过程中像 RNN 一样以 O(L) 顺序运行,并且在学习过程中可以像 Transformer 一样执行并行处理。它的灵感来自于时间序列分析和控制工程中使用的经典状态空间模型,可以解释为循环神经网络(RNN)和卷积神经网络(CNN)的组合。状态空间模型的公式如下。
在这里插入图片描述
请注意,此处 A、B、C 对于输入 x(t) 是不变的(在选择性 SSM 中,它们变得依赖于 x(t))。状态空间模型可以被认为是 x→y 的连续映射。
这个公式实际上将目标视为连续信号,但在语言和图像中,需要处理离散值。
因此,如果我们对上述方程进行离散化(如有必要,请参见欧拉离散化示例),我们得到
在这里插入图片描述
它可以转化为这使得表达式离散且递归。假设h₋₁=0,我们可以为每个阶写下这个方程,以便于理解。
在这里插入图片描述
因此
在这里插入图片描述
可以用公式来表示。从这个方程可以看出,状态空间模型可以表示为一维卷积。由于训练时可以提前知道输入x,K 可以提前计算,并且可以并行处理使用它的卷积计算(已知可以使用FFT/iFFT等来加速卷积本身)。
由上可知,状态空间模型可以看成一维卷积,可以进行高速计算。
乍一看,正常的状态空间模型似乎运行良好,但它们也存在问题。
在状态空间模型中,所有过去的信息都存储在状态h中,A 起到连接h(时间t-1和时间t)的作用。这个值不好计算,因为它是从一个随机初始值开始的,在更高阶的时候,要计算k次方,导致计算量非常大。
为了解决这个问题,设计了一种使用HIPPO矩阵的结构化状态空间模型(S4),该矩阵具有良好的性质(能够在保持理论强度的同时提高计算效率)。 HIPPO 矩阵为
在这里插入图片描述
表示为HIPPO矩阵的详细推导和性质请参见结构化状态空间模型的原始论文。
由上可见,它是一个结构化的状态空间模型,是一个串到串的转换器,可以像RNN一样进行O(L)阶的推理,可以像Transformer一样并行处理,并且具有非常高的计算效率。推导出模型(S4)。
结构化状态空间模型(S4)因其赋予矩阵A结构而得名,Mamba还融入了最常见的对角线结构。
在这里插入图片描述

五. 结构化状态空间模型 (S4) 的缺点和向 Mamba 的演进

如上所述,在结构化状态空间模型(S4)中,系数
在这里插入图片描述
不依赖于输入 x。因此,它的缺点是无法进行动态推理(在原论文中,这个性质被称为线性时不变性(LTI),而LTI SSM本质上是线性递归和卷积。据说是等价的)。那么,你可能会认为最好不要固定系数,让它们依赖于输入x,但这会使卷积(并行化)变得不可能(K依赖于输入x的变化,使得预计算和并行化变得不可能) 。
因此,作者们设计了

结合选择性复印和感应头的选择机制

并行扫描、核融合和激活值重新计算而不是并行化卷积

这就是方法。
从这里开始,我将解释 Mamba 的新颖性、选择机制以及考虑 GPU 内存结构的算法。
在这里插入图片描述

六 . 选择机制

如前所述,选择机制是 Mamba 中重要的新方法,也是 Mamba 学术价值的核心。基本概念是处理 RNN 中由于上下文压缩而导致的精度下降问题,以及处理 Transformer(Attention)的自回归推理显式存储整个上下文的低效推理和学习问题。也就是说,我们在拥有类似于 Transformer 的基于上下文的高级推理能力的同时,正在尝试在 SSM 的基础上实现类似于 RNN 的高效推理。

那么如何实现如此梦幻般的壮举呢?

选择机制使用一种称为“选择性复制”的方法,通过过滤掉不相关的噪声标记来选择性地复制内容,并使用一种称为“归纳头”的方法来预测从先前上下文中出现的模式(归纳头本身是在 *11 中设计的,并不是一个本文的新方法)。
作者开发了 Selective Copying,这是一种为 Induction Heads(Attention)的机械可解释性(逆向工程)而开发的方法,它学习当前 token 之前的序列并检查是否出现相同的模式(Sequence[A])。 [B]…ð[A]→[B])对于本文来说不是必需的,因此我们将省略其解释。如果您有兴趣,请阅读本文参考文献中的第 11 篇论文。

从这里,我将解释选择性复制的数学原理。
首先要注意的是,选择性复制不是一种单一的技术,而是可以使用 CNN、RNN、各种参数(例如第 4 章中的矩阵 A)和各种变换来实现,这是一个广泛的概念。
这里,我们将解释RNN门控机制,该机制在论文中被解释为比较重要的机制。
这可能会让一些人感到惊讶,但 RNN 门控机制可以被视为一种选择机制。
由于RNN的门控机制和连续时间系统的离散化已经是既定现象,因此我们将省略它们的解释(详细信息请参见原始论文中引用的论文)。
原论文的附录C给出了使用本文引用*12的论文中所示的零阶保持离散化公式推导递推公式相关的公式变换,并推导了以下公式。
在这里插入图片描述
使用零阶保持离散化公式的推导过程
在这里插入图片描述
在这里插入图片描述
这个公式对您来说可能没有意义,但请看一下我在下面创建的图表
在这里插入图片描述
如图所示,g 是通过由某些参数控制的投影从 x 找到的。由这个g,h是

在这里插入图片描述
确定多少取决于两个参数中的哪一个。
换句话说,取决于输入x的参数可以决定输入x和中间状态h应该在哪里以及多少被反映,从而实现选择性复制。

原始论文提供了如何解释选择机制的每个参数的详细信息。选择机制允许通过可变间隔(参数之一)选择性地过滤噪声标记。
Δ 的解释也很重要。 Δ表示对输入x的信息的重视程度。如果Δ较小,它将尝试维持当前状态并忽略输入x,如果Δ较大,则状态h将由于输入x而显着改变。
尽管矩阵 A 可以有选择地确定,但值得注意的是,它会通过与 Δ 的相互作用来影响模型。因此,认为与Δ具有相同的效果,可以通过选择性确定Δ和A来考虑模型设置。
矩阵 B 和 C 压缩上下文并影响噪声标记的去除方式。

上下文过滤也是可能的,并且选择性模型可以随时重置其状态以删除冗余历史记录,因此原则上其性能随着上下文的长度单调提高。
如您所知,Transformer 迄今为止一直是事实上的标准,它使用特殊标记 [SEP] 来识别句子之间的边界。另一方面,在Mamba中,还可以继承语句信息,任意重置边界处前一条语句中发生的状态。
在这里插入图片描述

七. 算法了解GPU内存结构

到目前为止,我们已经解释了选择机制,这是 Mamba 的第一个新奇之处。
在本章中,我们将解释另一个新颖之处,即一种了解 GPU 内存结构的算法。
前面提到,Mamba 使用了三种方法来代替卷积的并行化:并行扫描、核融合和激活值重新计算。
首先,我将解释并行扫描。
简而言之,并行扫描是一种通过将SSM中的递归计算视为扫描来并行处理的技术(它是最初在PostgreSQL 10中引入的著名算法,是一种允许在SSM中处理递归计算的技术)除了将其视为扫描之外,这并不是一个特别新颖的想法)。
如下图所示,我们将输入分解成对,并在二叉树上计算总和。它利用了同一层次结构中存在的对之间的计算可以并行化的事实。
在这里插入图片描述
接下来,我们将解释内核融合和激活值的重新计算。
首先你需要明白的是,模型中推理和学习的瓶颈在于HBM和SRAM这两个存储器之间的移动。
HBM(高带宽存储器)是一种超高速 DRAM 技术(与传统 DRAM 相比),通过硅芯片堆叠技术和 TSV(硅通孔)技术(高密度布线和垂直存储器堆叠)实现。由于其带宽非常宽,因此它具有很高的数据传输速率。正如您所看到的,HBM 是 DRAM 的一种,它使用电容器的电荷来存储数据。 SRAM是一种使用触发器电路来存储数据并用作高速缓存的存储器。虽然它能以比DRAM更高的速度输入和输出数据,但其内部结构复杂且无法高密度实现,因此不适合增加容量。
由上可知, GPU显存有一个层次结构:
HBM:大容量、低速
SRAM:小容量、高速。
基本上,数据存储在 HBM 中并从那里读取数据,但如果调用相同的数据,则自动从 SRAM(高速缓存)读取数据以加快处理速度。
Mamba 使用内核融合(操作系统 (OS) 中连接应用程序和硬件的中央系统)来最小化 HBM 和 SRAM 之间的移动(通常指减少调用次数的技术)并重新计算激活值。
具体来说,在普通模型中,过程是
将 Scan 输入存储在 HBM 中,在 SRAM 中计算,然后返回到 HBM
,但在 Mamba 中,过程
是从构建 Scan 输入开始,使用 SRAM,然后直接计算
同时,通过让
SRAM 计算通常在 HBM 中存储和使用的激活值(通过激活函数后的值),可以最大限度地减少 HBM 和SRAM
之间的移动。
综上所述,通过充分利用SRAM,我们尽可能避免将数据移动到HBM。

从上面我们发现Mamba通过并行扫描、核融合、重新计算激活值三种方法来加速计算。

八. 简单的架构

Mamba 最后的新颖之处在于其简单的架构,消除了注意力和 MLP 块。
请看原文中的下图。
H3 是最著名的基于 SSM 的架构,由受线性注意力和 MLP(多层感知器)块启发的块组成。
Mamba 通过均匀堆叠这两个块来简化架构。
论文中透露,这个想法取自 GAU(Gated Attention Unit)。
激活函数是SiLU/Swish,归一化层是LayerNorm,层数和参数是MHA(Multi Heads Attention)的先例,架构是Residual Network,主观上我觉得这些还有研究的空间。我认为将来有可能作为研究课题发表论文。
在这里插入图片描述

九. 原论文中图的解释以及Mamba的通用和高性能推理能力

在本章中,我们将提供图形和图表的简要说明并讨论 Mamba 的性能。

下图是Selective SSM的示意图,可以帮助你直观地了解Mamba的基础知识(不过,乍一看很难理解这张图到底讲的是什么)。通过颜色,您可以看到 HBM 或 SRAM 中正在执行哪些处理。
在这里插入图片描述
下图示意性地展示了普通复制和选择性复制的区别。请参阅第 6 章的解释。
在这里插入图片描述
下图展示了常规SSM(S4)和选择性SSM算法之间的区别。如果第5章的图中有说明的话会更容易理解,请看一下。
在这里插入图片描述
下图展示了 Mamba 的架构。详细信息请参见第 8 章。
在这里插入图片描述
下图检查了使用选择性复印和感应头时的准确性。事实证明,无论模型如何,更改为选择性复制(S4 → S6)都可以提高准确性,并且通过使用感应头,可以过滤掉中间的噪声标记,即使序列长度为 1000k,Mamba 也能表现良好。表明是完全有效的。
在这里插入图片描述
下图证实了不同序列长度的缩放测量(随着模型参数数量、训练数据数量和学习过程中计算量的增加,损失按照幂律减小的规律)。
该图表明 Mamba 是一个可以与 Transformer 相媲美或超越的模型,尤其是在长序列长度方面。
在这里插入图片描述
下图显示了下游零样本评估任务的结果。从该图来看,性能比使用与 Mamba 相同的分词器、数据集和学习长度、相同规模进行训练的 Pythia 和 RWKV 高出 4 个点,甚至超过了参数数量两倍以上的模型。如图所示(相对于 Transformer 的优势)。
在这里插入图片描述
下图显示了使用 Mamba 进行 DNA 建模任务时的评估结果,受到最近语言模型在 DNA 建模中的应用的启发。 DNA 被比作一种语言,因为它由一系列具有有限词汇量的离散标记组成,并且众所周知,需要对远程依赖性进行建模。当序列长度较长时,使用 Mamba 已被证明特别有利。
在这里插入图片描述
下图展示了Mamba在语音生成任务上的优越性的数据。结果表明,参数数量较少的 Mamba 的性能优于最先进的大型生成对抗网络 (GAN) 和基于扩散的模型。
在这里插入图片描述
下图显示了 Mamba 的扫描速度和端到端推理吞吐量的数据。
Mamba 的 Scan 速度比标准 Pytorch 实现快 20-40 倍,Mamba 的推理速度比 Transformer 快 4-5 倍。
在这里插入图片描述
下表给出了评估SSM层有效性的数据以及各个参数的重要性。
非选择性 SSM 的 SSM 层已被证明具有类似的性能。研究还表明,使用选择性 SSM (S6) 可以提高性能。尽管 Δ 是最重要的参数并且对性能有贡献,但它必须与其他参数一起考虑。考虑到硬件效率,可以得出结论,矩阵A更适合作为实数(稍后我们将看到,它也可以是复数)。还有关于Δ的表达性与绩效之间的关系,以及状态维度N与绩效之间的关系的讨论。
在这里插入图片描述

十. 讨论

状态 h 有实数和复数。在大多数以前的状态空间模型中,状态 h 是一个复数,这被认为支持性能。然而,也有人建议,即使在实数的情况下,根据条件也可以获得良好的性能。作者进行了一项实验,期望复数在连续模态中有效,但在离散模态中无效。
另外,原论文讨论了使用复数进行SSM初始化、Δ的参数化以及了解硬件的算法的具体方法,但它们太长了,这里不予讨论。详情请阅读原论文(本身数量并没有那么大)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pandas入门篇(二)-------Dataframe篇5(进阶)(Dataframe的时间序列Dataframe最终篇!!)(机器学习前置技术栈)

目录 概述一、pandas的日期类型(一)datetime64类型的特点(二) 时间序列的创建1.从字符串创建datetime64类型2. 整数(Unix时间戳)创建datetime64类型3.导入数据时直接转换 (三)dateti…

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

笨蛋学C++之 C++连接数据库

笨蛋学C 之 VS2019使用C连接数据库 创建数据库SQL语句VS2019选择空项目&#xff0c;点击下一步创建输入项目名称&#xff0c;点击创建创建成功点击新建项创建源文件因为mysql是64位&#xff0c;此时的c项目是86位&#xff0c;所以这里需要将项目修改为x64位点击项目 -> 0501…

linux 单机安装consul

sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo && sudo yum -y install consul#添加consul配置文件 nano /etc/consul.d/server.json {"server": true,"boots…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

使用 uni-app 开发 iOS 应用的操作步骤

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;上一期和大家一起探讨了使用uniapp开发iOS应用的优势及劣势之后有许多小伙伴想要尝试使用uniapp开发iOS应用&#xff0c;但是却不懂如何使用uniapp开发iOS应用&#xff0c;所以这一期淼淼就来给你们分享…

nginx--平滑升级

失败了&#xff0c;等我拍好错继续更新 命令 选项说明 帮助: -? -h 使用指定的配置文件: -c 指定配置指令:-g 指定运行目录:-p 测试配置文件是否有语法错误:-t -T 打印nginx的版本信息、编译信息等:-v -V 发送信号: -s 示例: nginx -s reload 信号说明 立刻停止服务:stop,相…

【C++】学习笔记——string_3

文章目录 六、string类5. string类的操作6. string类的转换7. string类的模拟实现 未完待续 搭配文档食用 六、string类 5. string类的操作 上面的函数中&#xff0c;有些是不常用的&#xff0c;咱们只挑几个重要的进行讲解。 c_str 就是将字符串转换成 C语言 字符串的格式。…

[Java EE] 多线程(六):线程池与定时器

1. 线程池 1.1 什么是线程池 我们前面提到,线程的创建要比进程开销小,但是如果线程的创建/销毁比较频繁,开销也会比较大.所以我们便引入了线程池,线程池的作用就是提前把线程都创建好,放到用户态代码中写的数据结构中,后面就可以随用随取. 线程池最大的好处就是减少每次启动,…

Python中动画显示与gif生成

1. 动画生成 主要使用的是 matplotlib.animation &#xff0c;具体示例如下&#xff1a; import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np fig, ax plt.subplots() t np.linspace(0, 3, 40) g -9.81 v0 12 z g * t**2 / …

【Python函数和类6/6】类与对象

目录 目标 类与对象 类的定义 栗子 实例化对象 属性和方法的调用 特殊的self参数 类方法的其它参数 函数与方法的区别 总结 目标 在前面的博客当中&#xff0c;我们已经接触了一部分封装。比如&#xff1a;将数据扔进列表中&#xff0c;这就是一个简单…

短视频素材去哪里搬运?短视频素材有哪些类型?

在这个数字化和视觉传达至关重要的时代&#xff0c;选择合适的视频素材对于提升视频内容的吸引力和观众参与度至关重要。无论您是一名广告制片人、社交媒体经理还是独立视频制作者&#xff0c;以下这些精选的视频素材网站将为您提供从高清视频到特效资源的全面支持&#xff0c;…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式&#xff0c;但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式&#xff0c;旨在通过使用一个工厂类来创建对象&#xff0c;而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护&#xff0c;因为新的对…

reactjs后台管理系统搭建

1 通过yarn 模板创建reactjs项目 yarn create vite reactjs-antdesign-admin --template react-ts 2 基础路由测试 定义一个router/index.tsx&#xff0c;里面定义路由组件 const Router: React.FC () > {return (<HashRouter><Switch><Route path"…

Edge浏览器使用心得与深度探索

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

信息时代的智慧导航:高效搜索、信息筛选与信任构建的全面指南!

文章目录 一、高效搜索&#xff1a;快速定位目标信息的秘诀二、信息筛选&#xff1a;去伪存真&#xff0c;找到有价值的信息三、信任构建&#xff1a;深入了解与直接沟通《搜索之道&#xff1a;信息素养与终身学习的新引擎》亮点内容简介目录获取方式 随着科技的飞速发展&#…

前端基础学习html(2)

目录 表格标签&#xff1a; 列表标签&#xff1a; 表格标签&#xff1a; <!-- 表格基本架构 --><!-- tr表示一行&#xff0c;td表示一行内单元格 --><!--th为第一行表头加粗居中显示 --><table border"1"><thead><tr><th&g…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…

【linux学习指南】linux指令与实践文件编写

文章目录 &#x1f4dd;前言&#x1f320; linux目录结构&#x1f309;linux命令介绍 &#x1f320;pwd命令&#x1f309;mkdir指令&#xff08;重要&#xff09; &#x1f320;cd 指令&#x1f309;touch指令 &#x1f320;rmdir指令 && rm 指令&#xff08;重要&…

nginx--配置文件

组成 主配置文件&#xff1a;nginx.conf 子配置文件&#xff1a;include conf.d/*.conf 协议相关的配置文件&#xff1a;fastcgi uwsgi scgi等 mime.types&#xff1a;⽀持的mime类型&#xff0c;MIME(Multipurpose Internet Mail Extensions)多用途互联⽹网邮件扩展类型&…