【NLP 31、预训练模型的发展过程】

人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢?

只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗?

人脑只是相当于一个大型、驳杂的处理器,所以即使我们再重走一次曾经的路,结果也不会改变

                                                                                                                            —— 25.2.16

LLM(Large Language model),大语言模型出现在ChatGPT之后出现,在此之前出现的模型我们称之为预训练模型,如:GPT3

大模型的“大”主要体现在参数量级之上,如Bert模型参数量仅有0.1B,而前段时间推出的DeepSeek模型参数量达到了671B,二者参数量的区别达到上千倍

一、ELMo

ELMo发表在Bert之前,提出了预训练思想,其训练方式依旧是由前文预测后文的自回归语言模型

其与现在主流的预训练模型的区别是在于其当时使用LSTM作为其模型主体结构

建议的下游任务使用方式:【将ELMo向量与词向量拼接输入下游模型】

将预训练好的ELMo(LSTM预训练模型),将其权重冻结(保持模型权重不进行更新),然后将权重冻结与正常的词向量拼接起来,送入一个RNN语言模型


二、GPT

GPT模型也出现在Bert模型之前,启用了Transformer作为核心编码器

开始使用特有token连接不同的句子

Start:开始符token

Delim:分隔符token

Extract:结束符token

将句子分割后送入Transformer进行编码,编码后线性层进行分类预测

GPT语言模型采取单向方式:

即:由前n个字预测下一个字

在语言模型预训练的基础上,增加了有监督任务训练:

GPT:通过下游任务准确率的对比,明确指出预训练的是有效的,transformer是好用的


三、Bert

MASK LM MLM任务:给一个长的序列,中间一个词mask掉,模型把mask处理后的序列传入Transformer,最后由线性层将这个mask的词预测出来(周围词预测中间词

Next Sentence Predict NSP任务:输入两句话,中间用一个分隔符隔开,用【cls】token向量判段两句话是否是上下文关系

Bert:证明了MLM预训练强于单向训练(LTR  left to right)任务

现在发现,生成式任务更适合用LTR任务做预训练


四、预训练模型的发展过程

① ELMo:经过预训练步骤,我们可以对预测获得一定程度提升,可把预训练作为一种预测效果提升的手段

② GPT:提升效果很明显,预训练是有效的,Transformer是好用的

③ Bert:预训练是模型不可或缺的组成部分


五、国内公司跟进预训练工作

1.Ernie-baidu

Mask随机token ——> Mask某一特定实体或词组

验证得到:在一系列中文数据集(非生成式任务)上效果强于BERT

可以以完形填空的方式完成知识问答

这种做法在本质上相当于在预训练中加入了先验知识(提前告知哪些词是词组),可以更好的学习该语言

但是这也意味着对未知语言可能会无法使用该策略


2.Ernie- Tsinghua

引入知识图谱,将实体信息融合到预训练任务中

将知识图谱中训练到的一些图谱表示的向量与BERT向量进行一个组合,再通过Transformer,然后做一些特定的预测

Ernie:强调了额外知识的重要性


六、GPT2

继续使用单向语言模型

继续使用transformer模型结构(小改:归一化层的位置进行调整)

模型改进在于:Bigger model(模型结构不变,模型参数增多)、more data(数据量增多)

文本生成能力可圈可点

提出思想:NLP任务不应该有通过下游任务微调的环节

强调zero-shot(不需要做下游任务的微调)

任何一个任务,都可以看作生成式任务来做,我们将输入和任务一同送入模型,然后让模型直接输出任务结果

例:做一个英法翻译任务,输入一句话再输入一个专门的task token(代表目标是转为法语),然后我们通过生成式任务(目标为模型直接输出法语),直接转换为法语

以如今的视角来看,task token接近于提示词的作用

GPT2:大规模语言模型可以在不做有监督训练的情况下,完成许多任务


七、UNILM

UNIfied pre-trained Language Model,使用不同的Mask

使用Bert的模型结构,同时进行Mask LM,单向LM,和seq2seq训练

使得预训练后模型可以更好的应用在生成式任务上,如:机器翻译和机器摘要等

UNILM:依靠 mask 控制哪些词参与 context embedding 的计算

Mask的部分将允许参与attention计算的元素设为0,将不允许参与attention计算的元素设置为负无穷,其他部分不变,计算自注意力分数

UNILM:解决了原生BERT在生成式任务上的短板,只需要更改Mask方式


八、Transformer - XL & XLNet

Transformer-XL XLNet 都是自然语言处理领域中基于 Transformer 架构的重要模型,希望解决Transformer的长度限制问题(输入文本长度受最大位置编码影响)

1.循环机制  Recurrence Mechanism

Transformer-XL:是一种对Transformer模型的变化,将RNN的思想【tanh(Ux + Wh)】引入Transformer中,解决超长序列的问题

XLNet:是以Transformer-XL为结构的模型

记忆前面字预测的输出结果,加入到当前字的预测结果中去,在Transformer中,将前一段文本的隐向量与后一段文本向量拼接之后计算attention

公式:


2.相对位置编码 Relative Positional Encodings

① 绝对位置编码

BERT模型采用的编码是绝对位置编码,因为其对于一段文本中的所有位置都进行固定

公式:

E:word embedding        U:position embedding        Wq、Wk:Transformer模型中的参数q和参数k

② 相对位置编码

将两个位置的绝对编码Ui、Uj换成了两个位置的差值Ri-j(不可训练的正弦编码矩阵),避免了输入文本长度受最大位置编码影响的现象

公式:

Ri-j:不可训练的正弦编码矩阵(non-trainable sinusoid encoding matrix),序列中的每个位置都有唯一的编码向量。高频分量(对应较小维度)可捕捉局部细节,低频分量(对应较大维度)能捕捉全局信息。对于任意两个位置m和n,该编码能表示它们之间的相对位置关系。

        公式:

u, v :可训练的参数trainable


3.训练XLNet的预训练目标

① 自回归语言模型预训练

AR语言模型:auto regressive language model 【GPT】

特点:单向预测下一个字

缺点:缺少双向信息

② 自编码语言模型预训练

AE语言模型:auto encoding language model 【BERT】

特点:双向信息输入,预测中间某个mask的字

缺点:引入了[mask],但在实际任务中不存在,预训练与使用过程不一致,效果可能有缺

③ XLNet语言模型预训练

AR语言模型与AE语言模型融合 Permutation Language Model

首先打乱输入的句子顺序,之后进行单向预测

特点:不需要添加Mask token,并且含有双向句子信息

Transformer - XL & XLNet:修改预训练目标,同时修改模型结构,带来一定的效果提升


九、Roberta

Robustly optimized BERT approach

模型结构不变,训练方式调整:

① 更多的数据,更大的batch size,更久的训练

② 去掉next sentence prediction 前后句上下文关系的预测

③ 使用更长的样本

④ 动态改变mask位置:在多轮训练中,改变mask所在的位置,可以更好的利用语料

Roberta:挖掘旧的方法的潜力,有时比创新还要有效(模型结构不变,训练方式调整

能够最大限度的发挥一种算法的能力,是算法工程师能力的体现


十、SpanBert

模型结构不变,对Bert训练目标改动:

① 去掉了NSP(next sentence prediction)任务

② 随机mask几个连续的token

③ 新的预训练任务SBO(Span Boundary Objective):连续mask一个片段,三个参数(片段的首尾和词在mask片段中的位置编码)


1.SBO任务

Xs-1:代表mask片段之前的第一个token的Embedding

Xe+1:代表mask片段之后的第一个token的Embedding

Pi-s+1:代表目标token的Position Embedding

SBO预测层:将三个向量拼接起来,过线性层、激活层、归一化层,最终得到预测值


2.Mask片段长度采样分布


Mask指定实体或名词短语,效果不如mask随机片段

NSP作用不大,不如不加,不如SBO

SpanBert:大模型+更多的数据不是唯一出路,改变训练目标也有很大影响


十一、ALBERT

试图解决Bert模型过大的问题

想办法减少参数量

1. Factorized embedding parameterization    

Embedding层的参数因式分解

Bert模型参数量大小:词表大小 × 隐单元个数

ALBERT:将词嵌入矩阵的维度 V × H 分解为两个矩阵 V × E 和 E × H,其中 V 是词汇表大小,H 是隐藏层维度,E 是一个较小的中间维度。这样可以在不损失模型表达能力的情况下,显著减少词嵌入参数的数量。


2. Cross-layer parameter sharing

跨层参数共享,有多种共享方式:

① 只共享attention部分

参数:q、k、v、o

② 只共享feed-forward部分

两个线性层 + 一个激活层

③ 全部共享

参数量降为:1/12


3.更换预训练目标

论文认为NSP任务过于简单,用SOP(Sentence order prediction)任务替代NSP任务

SOP任务:输入两句话,预测两句话的前后顺序关系,同样是二分类任务

例:

        [CLS] 你好啊bert [SEP] 好久不见 [SEP] ——> Positive

        [CLS] 好久不见 [SEP]你好啊bert [SEP] ——> Negative

数据采样方式:给出前后连续两句话,有50%的概率交换两句话的位置,让模型判断位置顺序是否颠倒


4.局限性

① 虽然目的在于缩减参数,但缩减参数并没有带来正向的效果,模型效果依然是参数越大越好

② 虽然缩减了参数,但是前向计算速度没有提升(总参数量下降,训练速度有提升,预测速度没有很大提升)

ALBERT:工程角度讲价值不大,但是证明了参数量并非模型能力的绝对衡量标准


十二、DistillBert 模型蒸馏技术

DistillBert:蒸馏版Bert

传统的模型蒸馏技术:小的模型正常进行预训练过程(hard prediction),计算完成后与真实标签用交叉熵损失函数计算loss(student loss),超大模型会输出下一个字在词表大小上的概率分布,然后以 小模型当前输出的概率分布(soft prediction)与超大模型输出的概率分布(soft labels)之间,两者较为接近 作为一个新的训练目标,以KL散度作为损失函数计算loss(distillation loss),然后把student loss 和 distillation loss相加一起训练,一定程度上包含了Teacher model的信息

小模型从大模型输出的概率分布进行学习:对一个问题,由大模型本身进行回答构造任务的X 和 Y,然后让小模型对大模型构造的数据进行学习,然后用小模型输出 与 通过大模型得到的Y值,计算loss,再计算 小模型输出与大模型输出的概率分布之间的loss,同时计算这两者,这在如今也被称为模型蒸馏技术,也属于数据增强范畴

我们希望这个蒸馏后的小的模型能够较为接近这个超大模型的效果

Teacher model:效果较好的超大模型【老师模型】

Student(distilled) model:蒸馏后的较小模型【学生模型】

优点:包含的信息量更大,包含的概率分布更加平滑(下一个字的概率分布不应该是一个非0即1的形式)


损失函数 —— KL散度

KL散度是一种衡量两个概率分布(也可简单理解为向量)之间差异的算法。经常作为神经网络的loss函数使用。

与交叉熵计算过程实际非常接近,但交叉熵通常要求targetone-hot形式。

计算步骤:

① 计算比值:P(x)​ / Q(x)。

② 取对数:对每个比值取自然对数。

③ 加权求和:用真实分布 P(x) 作为权重,对所有事件求和。

④ 当P与Q的概率分布完全一致时,损失值loss最低

示例:Teacher model:P = [0.2, 0.4, 0.4]        Student(distilled) model:Q = [0.4, 0.2, 0.4]

 公式:

老师模型的概率分布 × log(老师模型的概率分布 / 学生模型的概率分布)

KL(P, Q) = 0.2 * log(0.2 / 0.4) + 0.4 * log(0.4 / 0.2) + 0.4 * log(0.4 / 0.4) = 0.1386294361

KL散度与交叉熵的关系

交叉熵H(P,Q)与KL散度的关系为:


十三、T5

Text-to-Text Transfer Transformer:Encoder - Decoder架构

生成式任务上,only - decoder结构效果相对更强一些

Seq2seq方法,理论上可以解决一切NLP问题【一切NLP问题都可以转化为生成式问题】

分类问题:文本  ->  标签

命名实体识别:文本  ->  实体

摘要、翻译:文本  ->  文本

回归问题:文本 -> 0.1(字符串)


预训练任务设计 text corruption

预训练任务目标与Bert类似,Bert模型运用mask方式进行训练,T5模型训练原理与Mask类似,把中间的一部分内容Mask掉,用token替代被mask的文本,输出时再用token预测回被mask的文本作为训练目标

从如今的视角来看,生成式任务更适合应用从左往右由前文预测后文的自回归结构

T5:我们有希望将NLP中的所有任务都当作一个生成式任务来做,迈向NLP的大一统


十四、GPT3

提高模型参数量:1750 亿参数量,是GPT-2的116倍

模型结构与GPT-2相同

继续使用单向自回归语言模型预训练

研究表示:不需要 Pre-training+ fine-tune【预训练 + 下游任务微调】的学习方式,而应该注重 Pre-training + Zero-, One-, Few-shot【预训练 + 零样本 / 单样本 / 小样本】的学习方式

理由:

① fine-tune需要的数据,经常是缺失的

② fine-tune会涉及对模型进行改造,使其变复杂,并失去泛化性

③ 人类学习做新任务并不需要很多样本

1. Zero-shot(零样本学习)

  • 定义:模型无需目标类别的训练样本,直接通过语义描述或属性推理完成任务。
  • 实现原理
    • 依赖预训练阶段学到的跨模态关联(如CLIP通过文本描述匹配图像)。
    • 利用任务描述的Prompt直接引导模型生成答案(如“Let's think step by step”)。
  • 典型应用:图像分类(未见类别)、文本生成(新领域指令)。

2. One-shot(单样本学习)

  • 定义仅需一个目标类别的示例即可适应新任务。
  • 实现原理
    • 元学习:在预训练基础上,通过少量参数调整(如Adapter模块)快速适应新样本。
    • 示例引导:在Prompt中提供1个示例,模型模仿其模式生成结果(如模仿写作风格)。
  • 典型应用:员工刷脸打卡(新员工仅需一张照片)、罕见病诊断。

3. Few-shot(小样本学习)

  • 定义利用少量样本(通常2-5个)提升 模型在特定任务上的性能。
  • 实现原理
    • 指令微调:通过多样化任务数据(如问答对、推理步骤)调整模型参数,增强泛化能力。
    • 动态示例选择:使用BM25等算法从池中选择与当前输入最相关的示例。
  • 典型应用:多分类任务(如5-way-5-shot)、复杂推理(需多步CoT提示)

GPT3:人工智能的目标:像人一样的学习能力


十五、从“续写”到“回答” 

Bert:输入文字——>经过Bert(用前文预测后文)——>添加线性层—— >然后作一个微调进行分类

使用bert类模型(通用模型)微调,需要一个随机初始化的线性层(成为一个专用的模型),这为使用带来了不便


LLM:模型永远生成文本,用文本描述各种各种任务的答案,解释给出答案

训练方式统一,推理方式统一(永远是一个固定的模型,以文字方式回答任何问题)


十六、InstructGPT

1.InstructGPT 的核心技术:人类反馈强化学习(RLHF)

InstructGPT 的核心创新在于将 人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)引入语言模型训练,解决了传统模型生成内容:偏离用户意图、存在偏见或有害信息的问题。

2.训练流程 ① Pretraining训练

前文预测后文,自回归语言模型

需要大量的训练数据

知识主要在Pretrain阶段注入

3.训练流程 ② 监督微调(Supervised Fine-Tuning, SFT)训练

   使用人工标注的高质量指令-响应数据对 GPT-3 进行微调,使模型初步具备遵循指令的能力。数据包括用户提示(如“解释登月”)和人工编写的理想回答。

   与Pretraining类似,输入变成一问一答的形式,输入的问题与答案之间用一个分隔符<sep>隔开,由分隔符<sep>开始,预测答案的第一个字,由预测出的答案的第一个字再去预测答案的第二个字,循环这个过程,直到预测到终止符<eos>为止,将这段预测的文本作为这个问题的答案

只计算圈内部分的loss值,当给出一定数量的问答对数据进行训练,这个模型就变成了由“续写”到“回答”的模型

SFT的mask:问题全部可见,对于答案输出后面的字只能看到前面的字,给一定量的数据让模型理解我们希望生成类似的回复

mask形状:

4.训练流程 ③ 奖励模型训练(Reward Modeling, RM)

    模型生成多个候选响应,人工标注员对结果排序(如质量从高到低),训练一个奖励模型以量化响应质量。这一步将人类偏好转化为可计算的奖励信号。

5.训练流程 ④ 强化学习微调(Reinforcement Learning, RL)

   基于奖励模型的反馈,通过近端策略优化(PPO)算法调整语言模型参数,使生成内容更贴近人类偏好。这一阶段让模型实现“智能对齐”,显著提升输出的安全性和有用性。

6.与 GPT-3 的关键差异

维度GPT-3InstructGPT
设计目标预测互联网文本的统计模式理解并执行用户指令,生成对齐内容
训练方法无监督预训练 + 零样本/小样本学习RLHF 三阶段训练,结合人类反馈
输出质量可能偏离指令、包含偏见或错误更精准、安全、符合人类价值观
参数量效率依赖大规模参数(175B)仅 1.3B 参数即可超越 GPT-3 表现

7.应用场景与优势

① 精准指令执行

自动客服:生成符合用户需求的答案,减少歧义。

代码生成:根据指令编写代码片段或优化现有代码。

文档生成:按指令输出结构化报告、合同等。

② 安全性与无害性 

通过人类反馈过滤有害内容,减少种族歧视、性别偏见等风险。

③ 任务泛化能力

在复杂指令(如多步骤推理)中表现优于传统模型,例如数学运算、逻辑分析。

8.技术突破与影响

① 对齐性优化

InstructGPT 首次系统性解决了语言模型与人类意图的“对齐鸿沟”,为后续 ChatGPT 的对话形态奠定了基础。

② 小模型高效性

1.3B 参数的 InstructGPT 在人类评估中击败 175B 的 GPT-3,证明对齐技术可降低模型规模依赖。

③ 行业范式革新

RLHF 成为大模型训练的核心范式,尽管后续研究尝试替代方法(如 DPO),但其效果仍未被超越。

9.未来挑战

标注成本高:依赖人工标注反馈,规模化应用受限。

泛化边界:对超出训练分布的指令可能失效。

多模态扩展:如何将 RLHF 应用于图像、视频等多模态生成仍需探索。
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解

#作者&#xff1a;朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一&#xff1a;使用配置文件设置密码1.3、方案二&#xff1a;使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…

网络空间安全(2)应用程序安全

前言 应用程序安全&#xff08;Application Security&#xff0c;简称AppSec&#xff09;是一个综合性的概念&#xff0c;它涵盖了应用程序从开发到部署&#xff0c;再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义&#xff1a;应用程序安全是指识别和修复应用程序…

【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 明确pytorch安装依赖2.2.2 conda创建虚拟环境2.2.3 安装pytorch2.2.4 验证pytorch安装2.2.5 安装Tensorflow2.2.6 验证Tensorflow安装 三、疑问四、总结 一、待解决问题 1.1 问题…

基于Python/Java的医院系统切换互联网医院深度编程对接探索

一、引言 1.1 研究背景与意义 在当今数字化时代,医疗行业的信息化进程不断加速,医院信息系统(Hospital Information System,HIS)作为医疗信息化的核心组成部分,对于提升医院管理效率、优化医疗服务质量起着至关重要的作用。随着互联网技术的飞速发展,互联网医院应运而…

从零开始的网站搭建(以照片/文本/视频信息通信网站为例)

本文面向已经有一些编程基础&#xff08;会至少一门编程语言&#xff0c;比如python&#xff09;&#xff0c;但是没有搭建过web应用的人群&#xff0c;会写得尽量细致。重点介绍流程和部署云端的步骤&#xff0c;具体javascript代码怎么写之类的&#xff0c;这里不会涉及。 搭…

Linux权限(一)

文章目录 基本指令sudo权限chmod修改目标属性修改角色 修改权限属性目录权限缺省权限 基本指令 sudo 1. sudo是对指令的短暂提权的 2. 比如安装软件&#xff0c;安装到系统中&#xff0c;需要管理员root权限&#xff0c;这些命令其实只安装了一份&#xff0c;普通用户和超级用…

CV -- 基于GPU版CUDA环境+Pycharm YOLOv8 目标检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…

R语言安装教程(附安装包)R语言4.3.2版本安装教程

文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手&#xff0c;还是希望更新知识体系的专业人士&#xff0c;只要按照本…

springBoot统一响应1.0版本

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

【STM32】内存管理

【STM32】内存管理 文章目录 【STM32】内存管理1、内存管理简介疑问&#xff1a;为啥不用标准的 C 库自带的内存管理算法&#xff1f;2、分块式内存管理&#xff08;掌握&#xff09;分配方向分配原理释放原理分块内存管理 管理内存情况 3、内存管理使用&#xff08;掌握&#…

DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

认知重构 | 自我分化 | 苏格拉底式提问

注&#xff1a;本文为 “认知重构 | 自我分化” 相关文章合辑。 心理学上有一个词叫&#xff1a;认知重构&#xff08;改变 “非黑即白&#xff0c;一分为二” 的思维方式&#xff09; 原创 心理师威叔 心理自救 2024 年 10 月 26 日 19:08 广东 你有没有过这样的时候&#x…

YARN的工作机制及特性总结

YARN hadoop的资源管理调度平台&#xff08;集群&#xff09;——为用户程序提供运算资源的管理和调度 用户程序&#xff1a;如用户开发的一个MR程序 YARN有两类节点&#xff08;服务进程&#xff09;&#xff1a; 1. resourcemanager 主节点master ----只需要1个来工作 2. nod…

LLM2CLIP论文学习笔记:强大的语言模型解锁更丰富的视觉表征

1. 写在前面 今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS R ICHER V ISUAL R EPRESENTATION》&#xff0c; 2024年9月微软和同济大学的一篇paper&#xff0c; 是多模态领域的一篇工作&#xff0c;主要探索了如何将大模型融合到Clip模型里面来进一步提…

Win11更新系统c盘爆满处理

1.打开磁盘管理 2.右击c盘选择属性&#xff0c;进行磁盘管理&#xff0c;选择详细信息。 3.选择以前安装的文件删除即可释放c盘空间。

Spring面试题2

1、compareable和compactor区别 定义与包位置:Comparable是一个接口&#xff0c;位于java.lang包,需要类去实现接口&#xff1b;而Compactor是一个外部比较器&#xff0c;位于java.util包 用法&#xff1a;Comparable只需要实现int compareTo(T o) 方法&#xff0c;比较当前对…

2025年02月21日Github流行趋势

项目名称&#xff1a;source-sdk-2013 项目地址url&#xff1a;https://github.com/ValveSoftware/source-sdk-2013项目语言&#xff1a;C历史star数&#xff1a;7343今日star数&#xff1a;929项目维护者&#xff1a;JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…

Django check_password原理

check_password 是 Django 提供的一个用于密码校验的函数&#xff0c;它的工作原理是基于密码哈希算法的特性。 Django 的 make_password 函数在生成密码哈希时&#xff0c;会使用一个随机的 salt&#xff08;盐值&#xff09;。这个 salt 会与密码一起进行哈希运算&#xff0…

如何在 SpringBoot 项目创建并使用 Redis 的详细介绍

本文是博主整理项目时整理出来的&#xff0c;项目使用 SpringBoot 框架&#xff0c;使用 Redis 作为缓存组件&#xff0c;用于缓存部分热点接口数据。 文章目录 一、Redis 的前置配置1、引入依赖2、单机配置3、集群配置4、两种配置路径解读 二、创建 Redis 配置类1、简易版 Red…

快速入门——第三方组件element-ui

学习自哔哩哔哩上的“刘老师教编程”&#xff0c;具体学习的网站为&#xff1a;10.第三方组件element-ui_哔哩哔哩_bilibili&#xff0c;以下是看课后做的笔记&#xff0c;仅供参考。 第一节 组件间的传值 组件可以有内部Data提供数据&#xff0c;也可由父组件通过prop方式传…