当前位置: 首页 > news >正文

【论文阅读】Co2l: Contrastive continual learning

原文链接:[2106.14413] Co$^2$L: Contrastive Continual Learning

阅读本文前,需要对持续学习的基本概念以及面临的问题有大致了解,可参考综述:

Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: Theory, method and application[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2024.

一、概述

        该论文提出了一种名为 Co²L(对比持续学习) 的新方法,旨在解决持续学习中的灾难性遗忘问题。核心思想是通过对比学习(Contrastive Learning)和自监督蒸馏(Self-supervised Distillation)来持续学习和维护可迁移的表示。

1、对比学习

        论文中提到了对比学习在持续学习中比传统的联合训练方法更能抵抗灾难性遗忘。要理解这句话,需要先弄懂对比学习和联合训练的策略分别是什么。

(1)对比学习:一种自监督学习方法,其核心思想是通过比较样本之间的相似性与差异性来学习数据的本质特征。核心机制是正负样本对的构建,一般对比学习中,会将一个数据样本的不同数据增强(旋转、缩放、颜色变换、剪切等)版本作为它的正样本,将不同数据样本作为负样本,学习过程中强制正样本之间的特征表达尽量接近,负样本尽量远离。在持续学习场景中,会将旧任务的样本全部视作负样本,以此让模型更好学习新任务的表达。

(2)联合训练:在本文所提到的持续学习场景下,所谓的联合训练实际就是传统的有监督学习,只是会在训练新任务时,回放一些旧任务的数据一并训练,以及采用正则化等手段来限制参数更新对旧任务的影响。

        我们可以发现,对比学习通过数据增强,学习到的是更通用的特征,比如形状、纹理等,这些特征在不同任务间具有高度共享性,支持新任务的快速适应。而联合训练依赖特定监督标签,导致新任务学习时容易覆盖旧任务的敏感特征,引发遗忘。

        这么说比较抽象,结合下图从损失函数的角度来分析更方便理解,对比学习目标是学习对数据变换不变的表示,可能通过数据增强和对比损失函数促进参数空间的平滑性,对应的损失函数比较平坦。而联合训练由于要同时优化多个任务的损失,可能导致不同任务之间的梯度方向冲突,容易形成尖锐的极小值。很显然,平坦的损失函数更有利于我们在参数空间寻找到一个平衡点,保证对新旧任务的整体影响最小,从而缓解灾难性遗忘问题。

       

        经过上述分析,我们可以初步下结论,在持续学习中使用对比学习有利于抵抗灾难性遗忘问题

        但是传统对比学习在持续学习中存在一个问题,就是我们只保留少量的旧任务样本,这导致负样本的数量以及多样性不足,会影响对比学习效果。

2、知识蒸馏

        知识蒸馏通常用于将“教师模型”的知识迁移到“学生模型”,传统蒸馏方式包括输出蒸馏,即让学生模型输出的概率分布尽量接近于教师模型,通过交叉熵损失实现:
 

        还有特征蒸馏,即选择教师模型与学生模型的某一中间层,目标是最小化中间层的特征表示,通过L2损失或余弦相似度实现:

        输出蒸馏依赖于输出概率分布,但是在持续学习中,往往只保留少量旧任务数据,导致模型难以准确复现旧任务的输出概率,所以输出蒸馏不适合持续学习。

        特征蒸馏需要对中间层的特征进行对齐,但在持续学习中,随着新任务的训练,模型的结构是在不断调整的,中间层的特征空间也会改变,这就导致我们无法稳定的用旧任务的特征表示来对新任务的特征表示进行蒸馏,所以特征蒸馏也不适合持续学习。

二、贡献点

        为了解决对比学习在持续学习中负样本不足的问题,提出了非对称监督对比损失(Asymmetric SupCon)的解决方案。

        为了解决传统知识蒸馏方式在持续学习场景下不适用的问题,提出了一种实例关系蒸馏的自监督蒸馏方式。

三、方法

1、非对称监督对比损失(Asymmetric Supervised Contrastive Loss)

        核心思想很简单,原本的对比学习会将旧任务和新任务的数据样本一视同仁,每个样本都有参与到正样本对和负样本对的构建,而本文提出,我们只用新任务的数据样本构建正样本对,所有的旧任务数据都只作为负样本。这样能让模型更专注于新任务,更好的学习到新旧任务的边界。

(举个例子,假设旧任务有“猫”、“狗”、“鱼”,新任务是“鸟”,如果是传统对比学习,我们就需要让模型同时学习到四个类别的特征,只不过前三个类别因为已经学习过,现在学起来更容易,但存在问题是前三个类别的样本数目很少,容易在前三个类别上出现过拟合。而新的思路是,我既然已经能识别出前三类,那我只需要学习“鸟”的特征,并保证“鸟”的特征与前三类特征尽量远离。)

        损失函数形式如下,S表示当前任务的样本的集合,对于锚点样本i,p_i是正样本对的集合,z_i和z_p是锚点样本与正样本经过投影后的特征向量,两者的点积表示余弦相似度。k表示的是负样本,所以分母是锚点样本与所有负样本之间的相似度之和。

2、实例关系蒸馏(Instance-wise Relation Distillation, IRD)

        目标是通过维护样本间的相似性结构来减少持续学习中的灾难性遗忘。IRD特点是IRD 不直接对齐单个样本的特征或分类结果,而是关注样本间的全局关系结构(如“猫”和“狗”应彼此接近,“猫”和“鸟”应远离),从而保留旧任务的特征空间结构。

(1)参考模型保存

在完成第 t−1个任务后,将模型的参数(包括编码器 f_\vartheta和投影头 g_\phi)保存为参考模型\psi ^{past} = (f_\vartheta , g_\phi ),并冻结其参数。

(2)实例相似性向量计算

        对于一个包含 2N 个增强样本的批次 B,每个样本 x~i 的实例相似性向量定义如下:

其中

(3)蒸馏损失函数

        通过交叉熵损失对齐参考模型与当前模型的相似性分布:

四、实验结果

在各类增量学习基准中都取得明显提升

通过消融实验证明了非对称监督对比损失和实例关系蒸馏的有效性。

五、总结

        本文通过改进后的对比学习强化了模型适应新任务的能力,同时,通过实例关系蒸馏,让模型能保留旧任务上的性能,缓解灾难性遗忘问题。

相关文章:

【论文阅读】Co2l: Contrastive continual learning

原文链接:[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前,需要对持续学习的基本概念以及面临的问题有大致了解,可参考综述: Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …...

Python给对象数组排序

文章目录 1. 使用sorted()函数(返回新的排序后的列表)2. 使用list.sort()方法(原地排序,不返回新列表)3. 如果数据结构是集合(set),集合本身是无序的,无法直接排序&#…...

Docker-清理容器空间prune

docker system prune -a 是一个非常有用的命令,用于清理 Docker 系统中未使用的资源,包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像(悬空镜像和所有未使用的镜像)。以下是关于该命令的详细说明: 命令…...

Kubernetes》》K8S》》Deployment 、Pod、Rs 、部署 nginx

Deployment deployment文档说明 kubectl get rs,deployment,pods 删除pod 、deployment 、service # 如果只删除pod,deployment会自动重建,所以应该先删除deployment。 # 下面演示的是删除所有deployment,可以指定只删除某个 # 删除所有…...

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 (一)克隆前准备工作 一、时钟同步 步骤: 1、输入date命令可以查看当前系统时间,可以看到此时系统时间为PDT(部分机器或许为EST),并非中国标准时间。我们在中国地区…...

基于YOLO11/WVP的电梯系统开发-模型训练与rk3568移植

1. 环境准备 代码下载: https://github.com/ultralytics/ultralytics.git切换到 8.3.0 以上的分支,yolov11 只在上述分支支持, 下载后在 ultralytics 根目录下安装 yolo 依赖环境: pip install -e . -i https://pypi.tuna.tsinghua.edu.cn…...

[数据结构]并查集(系统整理版)

基础用法 int p[N];//路径压缩 寻找祖宗节点 int find(int x){if(p[x]!x) p[x]find(p[x]);return p[x]; }int main(){ //初始化for(int i1;i<n;i) p[i]i; }合并 void merge(int a,int b){int aafind(a),bbfind(bb);if(aa!bb){p[aa]bb;} }查询是否联通 bool is_connected(…...

人工智能与软件工程结合的发展趋势

AI与软件工程的结合正在深刻改变软件开发的流程、工具和方法&#xff0c;其发展方向涵盖了从代码生成到系统维护的整个生命周期。以下是主要的发展方向和技术趋势&#xff1a; 1. 软件架构体系的重构 从“面向过程”到“面向目标”的架构转型&#xff1a; AI驱动软件设计以目标…...

Compose 实践与探索十七 —— 多指手势与自定义触摸反馈

上一节我们讲了滑动的手势识别以及嵌套滑动&#xff0c;二者都属于触摸反馈这个大的范畴内的知识。本节我们将深入触摸反馈这个话题&#xff0c;讲一讲多指手势的识别与完全自定义的触摸反馈的实现。 1、多指手势 多指手势可以分为两类&#xff1a; 利用 API 处理预设好的手…...

哈希表 - 两个数组的交集(集合、数组) - JS

一、Set基础 在 JavaScript 中&#xff0c;Set 是一种集合&#xff08;Collection&#xff09;​数据结构&#xff0c;用于存储唯一值​&#xff08;不允许重复&#xff09;&#xff0c;并且可以高效地进行添加、删除、查询等操作。它类似于数组&#xff08;Array&#xff09;…...

26_ajax

目录 了解 接口 前后端交互 一、安装服务器环境 nodejs ajax发起请求 渲染响应结果 get方式传递参数 post方式传递参数 封装ajax_上 封装ajax下 了解 清楚前后端交互就可以写一些后端代码了。小项目 现在写项目开发的时候都是前后端分离 之前都没有前端这个东西&a…...

Java面试黄金宝典24

1. 什么是跳表 定义 跳表&#xff08;Skip List&#xff09;是一种随机化的数据结构&#xff0c;它基于有序链表发展而来&#xff0c;通过在每个节点中维护多个指向其他节点的指针&#xff0c;以多层链表的形式组织数据。其核心思想是在链表基础上增加额外层次&#xff0c;每…...

每日c/c++题 备战蓝桥杯(全排列问题)

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列&#xff0c;即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个场…...

Layui实现table动态添加行,可删除、表格可编辑,小数校验

实现如图需求&#xff0c;layui实现的可编辑table&#xff0c;包含B、C、D、E列&#xff0c;A列不用实现出现&#xff0c;A列放在附件就是让你明白&#xff0c;不同的物料名称&#xff0c;行是不一样的。除了头部表头和E列不能编辑&#xff0c;每个表格都可编辑&#xff0c;其中…...

Spring Boot 非web应用程序

​​​​​在 Spring Boot 框架中&#xff0c;要创建一个非Web应用程序&#xff08;纯Java程序&#xff09; main方法运行&#xff0c;不启动tomcat&#xff0c;main方法执行结束&#xff0c;程序就退出了&#xff1b; 方式一 1、SpringBoot开发纯Java程序&#xff0c;应该采…...

数据分析中的基线校正算法全解析:原理、实现与应用

数据分析中的基线校正算法全解析:原理、实现与应用 在数据分析中,基线漂移是一个常见问题,会严重影响数据的解释和分析精度。本文将详细介绍12种主流基线校正方法,包括数学原理、Python实现代码和适用场景分析。 基线漂移问题概述 基线漂移主要由以下因素引起: 仪器强度…...

国外计算机证书推荐(考证)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)

文章目录 证书推荐1. 六西格玛 (6 Sigma)2. 亚马逊网络服务 (AWS)3. 美国生产与库存控制学会 (APICS)4. 内部审计师协会 (IIA)5. 微软 (Microsoft)6. 甲骨文 (Oracle)7. 项目管理协会 (PMI)8. 红帽 (Red Hat) 证书推荐 1. 六西格玛 (6 Sigma) 介绍&#xff1a;六西格玛是一种…...

linux》》docker 、containerd 保存镜像、打包tar、加载tar镜像

Linux》》docker: 默认情况下&#xff0c;Docker镜像保存在/var/lib/docker/目录下。 当您使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时&#xff0c;Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。 每个镜像都由一个或多个层组成&#xff0c;这些…...

大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优

目录 一、分布式系统的设计哲学演进1.1 从Google三驾马车到现代数据湖 二、企业级HDFS架构全景图2.1 联邦架构的深度实践2.2 生产环境容灾设计2.3 性能压测方法论 三、MapReduce引擎内核解密3.1 Shuffle机制全链路优化3.2 资源调度革命&#xff1a;从MRv1到YARN3.3 企业级编码规…...

【数学建模】动态规划算法(Dynamic Programming,简称DP)详解与应用

动态规划算法详解与应用 文章目录 动态规划算法详解与应用引言动态规划的基本概念动态规划的设计步骤经典动态规划问题1. 斐波那契数列2. 背包问题3. 最长公共子序列(LCS) 动态规划的优化技巧动态规划的应用领域总结 引言 动态规划(Dynamic Programming&#xff0c;简称DP)是一…...

UE学习记录part11

第14节 breakable actors 147 destructible meshes a geometry collection is basically a set of static meshes that we get after we fracture a mesh. 几何体集合基本上是我们在断开网格后获得的一组静态网格。 选中要破碎的网格物品&#xff0c;创建集合 可以选择不同的…...

LeetCode知识点整理

1、Scanner 输入&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取整数int num scanner.nextInt();// 读取一行字符串String line scanner.nextLine();scanner.close();…...

浅析车规芯片软错误防护加固的重要性

随着汽车电子技术的飞速发展&#xff0c;汽车已经从传统的机械交通工具转变为高度依赖电子系统的智能移动终端。车规芯片作为汽车电子系统的核心部件&#xff0c;其可靠性和安全性直接关系到车辆的正常运行和驾乘人员的安全。然而&#xff0c;车规芯片在复杂的运行环境中面临着…...

Android Jetpack学习总结(源码级理解)

ViewModel 和 LiveData 是 Android Jetpack 组件库中的两个核心组件&#xff0c;它们能帮助开发者更有效地管理 UI 相关的数据&#xff0c;并且能够在配置变更&#xff08;如屏幕旋转&#xff09;时保存和恢复 UI 数据。 ViewModel作用 瞬态数据丢失的恢复&#xff0c;比如横竖…...

Matlab_Simulink中导入CSV数据与仿真实现方法

前言 在Simulink仿真中&#xff0c;常需将外部数据&#xff08;如CSV文件或MATLAB工作空间变量&#xff09;作为输入信号驱动模型。本文介绍如何高效导入CSV数据至MATLAB工作空间&#xff0c;并通过From Workspace模块实现数据到Simulink的精确传输&#xff0c;适用于运动控制…...

Go 语言规范学习(6)

文章目录 StatementsTerminating statementsEmpty statementsLabeled statementsExpression statementsSend statementsIncDec statementsAssignment statementsIf statementsSwitch statementsExpression switchesType switches For statementsFor statements with single con…...

设计模式——设计模式理念

文章目录 参考&#xff1a;[设计模式——设计模式理念](https://mp.weixin.qq.com/s/IEduZFF6SaeAthWFFV6zKQ)参考&#xff1a;[设计模式——工厂方法模式](https://mp.weixin.qq.com/s/7tKIPtjvDxDJm4uFnqGsgQ)参考&#xff1a;[设计模式——抽象工厂模式](https://mp.weixin.…...

解析 ID 数组传参的解决方案:基于 Axios 的实现

解析 ID 数组传参的解决方案&#xff1a;基于 Axios 的实现 在实际开发中&#xff0c;经常需要将一个 ID 数组作为参数传递给后端接口。然而&#xff0c;不同的后端框架和前端库对数组参数的处理方式可能有所不同。通过一个具体的例子&#xff0c;在前端使用 Axios 框架发送 I…...

C语言快速入门-C语言基础知识

这个c语言入门&#xff0c;目标人群是有代码基础的&#xff0c;例如你之前学过javaSE&#xff0c;看此文章可能是更有帮助&#xff0c;会让你快速掌握他们之间的差异&#xff0c;文章内容大部分都是泛谈&#xff0c;详细的部分我会在之后时间发布&#xff0c;我也在慢慢学习&am…...

Ubuntu 22.04 上安装 VS Code

在 Ubuntu 22.04 上安装 VS Code 的方法如下&#xff1a; 方法 1&#xff1a;通过 APT 包管理器安装 更新系统包索引&#xff1a; 打开终端并执行以下命令&#xff1a; sudo apt update安装依赖项&#xff1a; 执行以下命令以安装所需的依赖项&#xff1a; sudo apt install s…...

AI人工智能-PyCharm的介绍安装应用

下载与安装 创建python项目 项目路径&#xff1a;C:\Users\miloq\Desktop\python_project 配置环境 提前找到conda配置的python-base路径 配置conda环境 运行项目 运行结果...

Todesk介绍

文章目录 ToDesk 软件介绍1. 软件概述2. ToDesk 的功能特点2.1 简单易用2.2 高质量的图像与流畅的操作2.3 跨平台支持2.4 多屏显示与协作2.5 文件传输功能2.6 实时聊天与语音通话2.7 远程唤醒与自动启动2.8 多种权限设置与安全性2.9 无需公网 IP 3. ToDesk 的应用场景3.1 个人使…...

【JavaEE】springMVC返回Http响应

目录 一、返回页面二、Controller和ResponseBody与RestController区别三、返回HTML代码⽚段四、返回JSON五、HttpServletResponse设置状态码六、设置Header6.1 HttpServletResponse设置6.2 RequestMapping设置 一、返回页面 步骤如下&#xff1a; 我们先要在static目录下创建…...

青少年编程与数学 02-011 MySQL数据库应用 02课题、MySQL数据库安装

青少年编程与数学 02-011 MySQL数据库应用 02课题、MySQL数据库安装 一、安装Windows系统Linux系统&#xff08;以Ubuntu 20.04为例&#xff09;macOS系统 二、配置&#xff08;一&#xff09;Windows系统1. 创建配置文件2. 初始化数据库3. 启动MySQL服务4. 登录MySQL5. 修改ro…...

springboot441-基于SpringBoot的校园自助交易系统(源码+数据库+纯前后端分离+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…...

【安全运营】关于攻击面管理相关概念的梳理(一)

目录 一、ASM 介绍ASM 是“Attack Surface Management”&#xff08;攻击面管理&#xff09;的缩写【框架视角&#xff0c;广义概念】1. 介绍2. 兴起的原因3. 工作流程3.1 资产发现3.2 分类和优先级排序3.3 修复3.4 监控 二、EASM 介绍EASM 是 "External Attack Surface M…...

IPv6 网络访问异常 | 时好时坏 / 部分访问正常

注&#xff1a;本文为 “ IPv6 间接性连接异常” 相关文章合辑。 略作重排&#xff0c;未去重。 如有内容异常&#xff0c;请看原文。 IPv6 间接性连接异常&#xff1f;尝试调整路由器的 MTU 设置 Nero978 2024-1-29 17:54 背景 2024 年 1 月 29 日&#xff0c;因寒假返家…...

Unity编辑器功能及拓展(1) —特殊的Editor文件夹

Unity中的Editor文件夹是一个具有特殊用途的目录&#xff0c;主要用于存放与编辑器扩展功能相关的脚本和资源。 一.纠缠不清的UnityEditor 我们Unity中进行游戏构建时&#xff0c;我们经常遇到关于UnityEditor相关命名空间丢失的报错&#xff0c;这时候&#xff0c;只得将报错…...

LLMs之PE:《Tracing the thoughts of a large language model》翻译与解读

LLMs之PE&#xff1a;《Tracing the thoughts of a large language model》翻译与解读 导读&#xff1a;这篇论文的核心贡献在于提出了一种新颖的、基于提示工程的LLMs推理过程追踪技术——“Tracing Thoughts”。该技术通过精心设计的提示&#xff0c;引导LLMs生成其推理过程的…...

[Python] 贪心算法简单版

贪心算法-简单版 贪心算法的一般使用场景是给定一个列表ls, 让你在使用最少的数据的情况下达到或超过n. 我们就来使用上面讲到的这个朴素的例题来讲讲贪心算法的基本模板: 2-1.排序 既然要用最少的数据, 我们就要优先用大的数据拼, 为了实现这个效果, 我们得先给列表从大到小…...

游戏引擎学习第191天

回顾并制定今天的计划 最近几天&#xff0c;我们有一些偏离了原计划的方向&#xff0c;主要是开始了一些调试代码的工作。最初我们计划进行一些调试功能的添加&#xff0c;但是随着工作的深入&#xff0c;我们开始清理和整理调试界面的呈现方式&#xff0c;以便能够做一些更复…...

Git撤回操作全场景指南:未推送与已推送,保留和不保留修改的差异处理

一、未推送到远程仓库的提交&#xff08;仅本地存在&#xff09; 特点&#xff1a;可直接修改本地提交历史&#xff0c;不会影响他人 1. 保留修改重新提交 git reset --soft HEAD~1 # 操作效果&#xff1a; # - 撤销最后一次提交 # - 保留工作区所有修改 # - 暂存区内容保持…...

Java 贪吃蛇游戏

这段 Java 代码实现了一个经典的贪吃蛇游戏。玩家可以使用键盘的上下左右箭头键控制蛇的移动方向&#xff0c;蛇会在游戏面板中移动并尝试吃掉随机生成的食物。每吃掉一个食物&#xff0c;蛇的身体会变长&#xff0c;玩家的得分也会增加。如果蛇撞到自己的身体或者撞到游戏面板…...

QT图片轮播器(QT实操学习2)

1.项目架构 1.UI界面 2.widget.h​ #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#define TIMEOUT 1 * 1000 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent n…...

mac m1/m2/m3 pyaudio的安装

google了很多方法&#xff0c;也尝试了 issue68的方法&#xff0c; 但是均失败了&#xff0c;但是问deepseek竟然成功了&#xff0c;下面是deepseek r1给出的方法。在M3 pro芯片上可以成功运行. 安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent…...

Appium中元素定位的注意点

应用场景 了解这些注意点可以以后在出错误的时候&#xff0c;更快速的定位问题原因。 示例 使用 find_element_by_xx 或 find_elements_by_xx 的方法&#xff0c;分别传入一个没有的“特征“会是什么结果呢? 核心代码 driver.find_element_by_id("xxx") drive…...

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...

[GWCTF 2019]我有一个数据库1 [CVE phpMyAdmin漏洞]

扫出来一些东西 访问/phpmyadmin 发现界面 这里用到了CVE-2018-12613&#xff0c;光速学习 出现漏洞的代码是&#xff1a; $target_blacklist array (import.php, export.php );// If we have a valid target, lets load that script instead if (! empty($_REQUEST[targe…...

spring 常用注解区别及使用场景

1. 组件注册注解 Bean 作用&#xff1a;用于方法上&#xff0c;表示该方法返回的对象由Spring容器管理。通常用于配置类&#xff08;Configuration&#xff09;中&#xff0c;注册第三方库或自定义的Bean。 使用场合&#xff1a; 当你需要将非Spring管理的类&#xff08;如第…...

【后端】【Django】信号使用详解

Django post_save 信号使用详解&#xff08;循序渐进&#xff09; 一、信号的基本概念 Django 的 信号&#xff08;Signal&#xff09; 允许不同部分的代码在发生某些事件时进行通信&#xff0c;而不需要直接调用。这种机制可以解耦代码&#xff0c;让不同的模块独立工作。 …...