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

SSM基础专项复习6——Spring框架AOP(3)

系列文章

1、SSM基础专项复习1——SSM项目整合-CSDN博客

2、SSM基础专项复习2——Spring 框架(1)-CSDN博客

3、SSM基础专项复习3——Spring框架(2)-CSDN博客

4、SSM基础专项复习4——Maven项目管理工具(1)-CSDN博客

文章目录

系列文章

1、AOP 

1.1 什么是AOP

1.2 . AOP 的优势

1.3. AOP 的底层原理

2、Spring 的AOP技术-配置文件方式

2.1 AOP 相关的术语

2.2 AOP 配置文件方式的入门

2.3 . 切入点的表达式

2.4  AOP 的通知类型

3、Spring 的AOP技术-注解方式

3.1 入门程序

3.2 纯注解的方式


1、AOP 

1.1 什么是AOP

什么是 AOP 的技术?

  • 在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程。
  • AOP 是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构。
  • AOP 最早由 AOP 联盟的组织提出的,制定了一套规范,Spring 将AOP 思想引入到框架中,必须遵守 AOP 联盟的规范
  • 通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术
  • AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring 框架中的一个重要内容,是函数式编程的一种衍生范型
  • 利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)。可以在不修改源代码的前提下,对程序进行增强

1.2 . AOP 的优势

运行期间,不修改源代码的情况下对已有的方法进行增强

1. 减少重复的代码

2. 提供开发的效率

3. 维护方便

1.3. AOP 的底层原理

JDK 的动态代理技术

为接口创建代理类的字节码文件

使用 ClassLoader 将字节码文件加载到 JVM

创建代理类实例对象,执行对象的目标方法

cglib 代理技术

2、Spring 的AOP技术-配置文件方式

2.1 AOP 相关的术语

Joinpoint(连接点) 所谓连接点是指那些被拦截到的点。在spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点

Pointcut(切入点) -- 所谓切入点是指我们要对哪些

Joinpoint 进行拦截的定义

Advice(通知/增强)-- 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知. 通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Target(目标对象)-- 代理的目标对象 Weaving(织入)-- 是指把增强应用到目标对象来创建新的代理对象的过程

Proxy(代理)-- 一个类被 AOP 织入增强后,就产生一个结果代理类

Aspect(切面)-- 是切入点和通知的结合,以后咱们自己来编写和配置的

2.2 AOP 配置文件方式的入门

创建 maven 项目,坐标依赖

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- AOP 联盟 -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- Spring Aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- aspectj -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.3</version>
</dependency>
</dependencies>

编写具体的接口和实现类

package com.qcby.service;public interface UserService {public void save();
}
package com.qcby.service;public class UserServiceImpl implements UserService {
//连接点,切入点@Overridepublic void save() {System.out.println("业务层:保存用户...");}
}

将目标类配置到 Spring 中

<bean id="userService" class="com.qcby.service.UserServiceImpl"/>

定义切面类

package com.qcby.aspect;
/*** 自定义切面类 = 切入点(表达式) + 通知(增强的代码)*/
public class MyXmlAspect {/*** 通知*/public void log(){// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("增强的方法执行了...");}
}

在配置文件中定义切面类

<bean id="myXmlAspect" class="com.qcby.aspect.MyXmlAspect"/>

在配置文件中完成 aop 的配置

<!--配置 AOP 的增强--><aop:config><!--配置切面 = 切入点 + 通知组成--><aop:aspect ref="myXmlAspect"><!--前置通知:UserServiceImpl 的 save 方法执行前,会增强--><aop:before method="log" pointcut="execution(public void com.qcby.service.UserServiceImpl.save())" /></aop:aspect></aop:config>

完成测试

import com.qcby.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class TestDemo {@Autowiredprivate UserService userService;/*** 测试*/@Testpublic void run1(){userService.save();}
}

测试结果

2.3 . 切入点的表达式

再配置切入点的时候,需要定义表达式,具体展开如下:切入点表达式的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/springcontext.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--管理 bean 对象-->
<bean id="userService" class="com.qcbyjy.demo2.UserServiceImpl"/><!--配置切面类,把该类交给 IOC 容器管理-->
<bean id="myXmlAspect" class="com.qcbyjy.demo2.MyXmlAspect"/>
<!--配置 AOP 的增强-->
<aop:config>
<!--配置切面 = 切入点 + 通知组成-->
<aop:aspect ref="myXmlAspect">
<!--前置通知:UserServiceImpl 的 save 方法执行前,会增强<aop:before method="log" pointcut="execution(publicvoid com.qcbyjy.demo2.UserServiceImpl.save())" />
-->
<!--切入点的表达式
execution() 固定的写法
public 是可以省略不写的方法的返回值 int String 通用的写法,可以编写*不能省略不写的
包名+类名 不能省略不写的,编写*
UserServiceImpl AccountServiceImpl
方法名称 save() 可以写 *
参数列表 (..) 表示任意类型和个数的参数比较通用的表达式:execution(public *
com.qcbyjy.*.*ServiceImpl.*(..))
-->
<aop:before method="log" pointcut="execution(*com.qcby.*.*ServiceImpl.save*(..))" />
</aop:aspect>
</aop:config>
</beans>

  <aop:before method="验证"

                      pointcut="execution(public void com.qcby.service.Cat.login(..))"/>

在这条语句中,before为通知的类型。pointcut后为目标类的方法路径,当方法需要传参时用“..”代替。

切入点表达式的格式如下:

                        execution([修饰符] [返回值类型] [类全路径] [方法名 ( [参数] )])

修饰符可以省略不写,不是必须要出现的。返回值类型是不能省略不写的,根据你的方法来编写返回值,可以使用 * 代替。

2.4  AOP 的通知类型

1. 前置通知 目标方法执行前,进行增强。

2. 最终通知 目标方法执行成功或者失败,进行增强。

3. 后置通知 目标方法执行成功后,进行增强。

4. 异常通知 目标方法执行失败后,进行增强。

5. 环绕通知 目标方法执行前后,都可以进行增强。目标对象的方法需要手动执行。

切面类

    public Object log4(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("(环绕通知)目标方法执行前的增强逻辑");// 手动执行目标对象的方法Object result = joinPoint.proceed();System.out.println("(环绕通知)目标方法执行后的增强逻辑");return result;}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/springcontext.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--管理 bean 对象-->
<bean id="userService" class="com.qcbyjy.demo2.UserServiceImpl"/><!--配置切面类,把该类交给 IOC 容器管理-->
<bean id="myXmlAspect" class="com.qcbyjy.demo2.MyXmlAspect"/><!--配置 AOP 的增强-->
<aop:config>
<!--配置切面 = 切入点 + 通知组成-->
<aop:aspect ref="myXmlAspect">
<!--
AOP 的通知类型
前置通知:目标方法执行前,进行增强。<aop:before method="log" pointcut="execution(*com.qcbyjy.*.*ServiceImpl.save*(..))" />
最终通知:目标方法执行成功或者失败,进行增强。<aop:after method="log" pointcut="execution(*com.qcbyjy.*.*ServiceImpl.save*(..))" />
后置通知:目标方法执行成功后,进行增强。<aop:after-returning method="log"
pointcut="execution(* com.qcbyjy.*.*ServiceImpl.save*(..))" />
异常通知:目标方法执行失败后,进行增强。<aop:after-throwing method="log"
pointcut="execution(* com.qcbyjy.*.*ServiceImpl.save*(..))" />
环绕通知:目标方法执行前后,都可以进行增强。目标对象的方法需要手动执行。
-->
<aop:around method="aroundLog" pointcut="execution(*
com.qcbyjy.*.*ServiceImpl.save*(..))" />
</aop:aspect>

完整流程如下: 

3、Spring 的AOP技术-注解方式

3.1 入门程序

创建 maven 工程,导入坐标。编写接口,完成 IOC 的操作。

编写切面类 给切面类添加注解 @Aspect,编写增强的方法,使用通知类型注解声明。

@Component // 把该类交给 IOC 去管理
@Aspect // 声明是切面类 == <aop:aspect ref="myXmlAspect">
public class MyXmlAspect {/*** 通知*/@Before(value = "execution(public * com.qcby.*.*ServiceImpl.save(..))")public void log1(){// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("(前置通知)增强的方法执行了...");}
}

配置注解(开启自动代理)

<aop:aspectj-autoproxy/>

@Component设置bean

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class Demo3 {
@Autowired
private OrderService orderService;
/**
* 测试
*/
@Test
public void run1(){
orderService.save();
}
}

3.2 纯注解的方式

package com.qcbyjy.demo3;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration // 配置类
@ComponentScan(value = "com.qcbyjy.demo3") // 扫描包@EnableAspectJAutoProxy // 开启自动代理 == <aop:aspectj-autoproxy/>
public class SpringConfig {
}

相关文章:

SSM基础专项复习6——Spring框架AOP(3)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具&#xff08;1&#xff…...

【嵌入式linux】网口和USB热插拔检测

在Linux常常需要对网口和USB等外设接口进行插拔检测&#xff0c;从而执行部分初始化操作。下面简要介绍Linux的Netlink机制&#xff0c;并在C程序中使用Linux的Netlink机制完成网口和USB口插拔检测。 Netlink 是 Linux 内核与用户空间进程通信的一种机制&#xff0c;主要用于内…...

C++(13)—类和对象(中) ③拷贝构造函数

文章目录 一、拷贝构造函数的基本概念1.1 什么是拷贝构造函数&#xff1f;1.2 拷贝构造函数的调用场景 二、拷贝构造函数的核心特性2.1 拷贝构造函数的参数2.2 默认拷贝构造函数 三、深拷贝与浅拷贝3.1 浅拷贝的问题 四、拷贝构造函数的实际应用4.1 何时需要显式定义拷贝构造函…...

【GPT入门】第17课 RAG向量检索分类、原理与优化

【GPT入门】第16课 RAG向量检索分类、原理与优化 1.向量检索概念1.1 文本检索的两类方式1.2 向量的定义1.3 文本向量(Text Embeddings)1.4 文本向量如何得到1.5 向量间相似度计算1.6 向量数据库功能对比1.7 open ai发布的两个向量模型2.向量数据库1.8 向量检索的优化3.检索后…...

Operator <=> (spaceship operator)

operator <>动机 在C20以前定义比较运算符&#xff1a;其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…...

队列的简单例题

题目如下 模拟队列 首先你要明白队列的话 只有队尾才能进行新增&#xff0c;也就是入队 只有队首才能出队&#xff0c;也就是删除 队首队尾指针一开始默认都是0 相当于队列中一开始是有一个元素的就是 0的位置 队首指针head0 队尾指针tail0 1.入队也就是队尾要先赋值&#xf…...

Calibre-Web-Automated:打造你的私人图书馆

有没有小伙伴在工作、学习或生活中喜欢保存一些书籍或PDF文件&#xff0c;结果过一段时间想找的时候却怎么也找不到&#xff0c;最后只能无奈放弃&#xff1f;你是否已经厌倦了手动管理电子书的繁琐&#xff1f;是否梦想拥有一个私人图书馆&#xff0c;随时随地都能轻松访问自己…...

第27周JavaSpringboot 前后端联调

电商前后端联调课程笔记 一、项目启动与环境搭建 1.1 项目启动 在学习电商项目的前后端联调之前&#xff0c;需要先掌握如何启动项目。项目启动是整个开发流程的基础&#xff0c;只有成功启动项目&#xff0c;才能进行后续的开发与调试工作。 1.1.1 环境安装 环境安装是项…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…...

鸿蒙开发者社区资源的重要性

鸿蒙系统&#xff0c;作为华为公司自主研发的操作系统&#xff0c;旨在为各类智能设备提供统一的平台。它不仅支持手机、平板电脑等移动设备&#xff0c;还涵盖了物联网&#xff08;IoT&#xff09;设备和其他智能家居产品。鸿蒙系统的开发环境和工具链对于开发者来说至关重要&…...

【QT】事件系统入门——QEvent 基础与示例

一、事件介绍 事件是 应用程序内部或者外部产生的事情或者动作的统称 在 Qt 中使用一个对象来表示一个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&…...

⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具

简介&#xff1a;一个能够通过JSON配置&#xff08;特定的语法&#xff09;来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式&#xff0c;或者处理来自不同来源的数据结构差异。例如&#xff0c;将嵌套的JSON结构扁平化&#xff0c;或者重命名字段&#xff0…...

2025-03-13 禅修-错误的做法

摘要: 2025-03-13 禅修-错误的做法 禅修-错误的做法 我们今天的课程是这个禅修防误。主要是有一些我们所明令禁止的。在整个禅修过程中&#xff0c;会对我们禅修出现一些弊端的这部分&#xff0c;我们会给大家介绍。第一&#xff0c;在禅修中要防止自由联想&#xff0c;防止幻…...

uni-app学习笔记——自定义模板

一、流程 1.这是一个硬性的流程&#xff0c;只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面&#xff0c;都如第二步一样&#xff1b;可以选择自定义的模版&#xff08;vue3Setup——这是我自己的模版&#xff09;&#xff0c;第二步的…...

【医院绩效管理专题】8.医院绩效数据的收集与整理方法:洞察现状,引领未来

医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院绩效管理已成为提升医疗服务质量、优化运营效率、增强综合竞争力的关键因素。而绩效数据的收集与整理作为绩效管理的基础环节,其科学性、准确性和完整性直…...

麒麟系统如何安装Anaconda

在银河麒麟操作系统&#xff08;Kylin OS&#xff09;中安装 Anaconda 的步骤相对简单&#xff0c;以下是基于搜索结果整理的详细安装指南&#xff1a; 步骤 1&#xff1a;下载 Anaconda 安装脚本 打开浏览器&#xff0c;访问 Anaconda 官方下载页面。选择适合 Linux 系统的安…...

Linux网络套接字编程——UDP服务器

Linux网络套接字编程——创建并绑定-CSDN博客 前面已经介绍了网络套接字的创建和绑定&#xff0c;这篇文章会通过UDP套接字实现一个UDP服务器。 先介绍将使用的接口。 recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr,…...

deepseek+kimi做ppt教程记录

1.首先注册deepseek和kimi deepseek官网&#xff1a;https://chat.deepseek.com/ kimi官网&#xff1a;https://kimi.moonshot.cn/ 以下以一篇工作总结报告为例 2.使用deepseek生成ppt大纲 让deepseek生成kimi生成ppt所需要的内容时&#xff0c;需要注意提示词内容&#xff0c;…...

Cursor 终极使用指南:从零开始走向AI编程

Cursor 终极使用指南&#xff1a;从零开始走向AI编程 问什么是cursor? mindmaproot(Cursor核心功能)智能编码代码生成自动补全错误修复项目管理多窗口布局版本控制终端集成个性设置主题定制快捷键配置插件扩展AI协作对话编程知识检索文档生成前些天发现了一个巨牛的人工智能学…...

TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索

导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据&#xff0c;让架构师更简单、高效地定位问题、分析问题、解决问题&#xff0c;已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数&#xff0c;帮助大家更好地观测系统的状…...

批量将 Excel 文档中的图片提取到文件夹

前面我们介绍过如何批量删除 Excel 文档中的所有图片或者指定的图片&#xff0c;其中就需要用到批量提取 Excel 文档中图片的操作。我们如何才能够将 Excel 文档中的图片快速的提取出来呢&#xff1f;其实单个 Excel 文档中的图片提取到文件夹中是有多种方法可以完成的&#xf…...

postgresql 数据库使用

目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…...

怎样进行相关论文的调研——How to conduct research on relevant papers?

怎样进行相关论文的调研 写在前面1.打开Web of Science2.检索同类表达3.构建“检索式”什么是“检索式” 参考内容 写在前面 偶然间刷到一篇知乎文章&#xff0c;顺着文章的推荐看了钟澄老师的科研论和在B站上的教学视频&#xff0c;深入了解后发现读文章还有这么多讲究&#…...

蓝桥杯备赛-基础练习 day1

1、闰年判断 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年:1.年份是4的倍数而不是100的倍数 2&#xff0e;年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个…...

本地算力部署大模型详细流程(一)

1、版本选择 本地部署就是自己部署deepseek模型&#xff0c;使用本地的算力。 主要瓶颈&#xff1a;内存显存的大小。特点&#xff1a;此方案不用联网。适合&#xff1a;有数据隐私方面担忧的或者保密单位根本就不能上网的。 2、部署过程 比较流行的是使用ollama&#xff1a;ht…...

便利店商品推荐数字大屏:基于python和streamlit

基于python和streamlit实现的便利店商品推荐大屏&#xff0c;针对选择困难症消费者。 import streamlit as st import pandas as pd import numpy as np import altair as alt from datetime import datetime, timedelta import time# 模拟数据生成 def generate_data():np.ra…...

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…...

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...

c语言经典基础编程题

c语言经典基础编程题 一、输出输出1.1温度输出1.2排齐数据1.3进制转换 二、选择分支2.1求最大值2.2成绩评定2.3分段函数求值2.4 利润计算2.5判断闰年2.6二次方程根 三、循环结构3.1倒数求和3.2最大数3.3判断素数3.4判断完全数3.5打印菱形&#x1f680;&#x1f680;&#x1f68…...

【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段

1、HarmonyOS 防截屏功能如何实现&#xff1f; 防截屏功能如何实现 参考demo&#xff1a; aboutToDisappear(): void {let windowClass: window.Window | undefined undefined;window.getLastWindow(getContext(this)).then((win) > {this.window win }) window.getLas…...

linux操作系统实战

第一题 创建根目录结构中的所有的普通文件 [rootlocalhost ~]# cd /[rootlocalhost /]# mkdir /text[rootlocalhost /]# cd /text[rootlocalhost text]# mkdir /text/boot /text/root /text/home /text/bin /text/sbin /text/lib /text/lib64 /text/usr /text/opt /text/etc /…...

MKS HA-MFV:半导体制造中的高精度流量验证技术解析

引言 在半导体先进制程&#xff08;如3nm节点&#xff09;中&#xff0c;工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV&#xff08;High Accuracy Mass Flow Verifier&#xff09; 通过创新设计解决了传统流量验证技术的…...

图论part2|200. 岛屿数量、695. 岛屿的最大面积

200、岛屿数量 &#x1f517;&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09;思路&#xff1a; 1. 深度优先算法 二叉树中dfs要素&#xff1a;1、访问左右相邻子节点 2、判断base case&#xff08;终止条件&#xff09;参考二叉树中的dfs看网格问题1. 网格…...

小白学Agent技术[5](Agent框架)

文章目录 Agent框架Single Agent框架BabyAGIAutoGPTHuggingGPTHuggingGPT工作原理说明GPT-EngineerAppAgentOS-Copilot Multi-Agent框架斯坦福虚拟小镇TaskWeaverMetaGPT微软UFOAgentScope现状 常见Agent项目比较概述技术规格和能力实际应用案例开发体验比较ChatChain模式 Agen…...

SpringBoot为什么流行以及能解决什么问题?

Spring Boot 之所以流行&#xff0c;主要是因为它极大地简化了 Spring 应用的开发&#xff0c;提供了一种开箱即用的体验&#xff0c;使开发者能够快速构建独立运行的、生产级的 Spring 应用。 Spring Boot 为什么流行&#xff1f; 简化配置 传统 Spring 需要大量 XML 或 Java…...

MySQL -- 数据类型

1、数据库的基础数据类型 TINYINT INT BIGINT FLOAT DECIMAL CHAR VARCHAR TEXT BLOB DATE DATETIME TIMESTAMP SET ENUM 2、不同数据类型区别以及作用 1、数值类型 1.1 整数类型 1.1.1 TINYINT 这里我们以TINYINT这个类型为例&#xff0c;解释一下在mysql中…...

TypeScript 中 interface 与 type的使用注意事项 及区别详细介绍

interfact 与 type 的区别及使用方法 一、 interfact 与 type主要区别 二、 interfact 与 type具体用法 1. 定义对象类型 interface 的典型用法&#xff1a; interface Person {name: string;age: number;greet(): void; }type 的等效定义&#xff1a; type Person {name…...

使用位运算如何找到数组中只出现一次的数?

题目链接&#xff1a;137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 算法解析 位运算是用于二进制的运算符号。而对于多次出现的数字&#xff0c;其二进制都是一模一样的&#xff0c;这里是3次重复的出现是数字。由此我们可以想到&#xff0c;如果我们由低…...

复变函数摘记1

复变函数摘记1 1. 基本概念1.1 复数、复变函数1.2 复变函数的极限、连续性1.3 复变函数的导数、微分1.4 解析函数、柯西-黎曼方程 2. 复变函数的积分2.1 复变函数的曲线积分2.2 柯西-古萨基本定理、复合闭路定理2.3 复变函数的不定积分2.4 柯西积分公式、高阶导数 \quad 本文摘…...

(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应

Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …...

暨南大学智科人工智能复试模拟

本人初试统招线以外&#xff0c;复试逆袭上岸&#xff01;&#xff01;&#xff01;复试中的笔试和面试尤为重要&#xff0c;笔试固然重要但是面试的不确定性更强。另外&#xff0c;很多同学在复试之前可能都没有完整的走过一遍复试面试的流程&#xff0c;这里建议大家最好是能…...

编译器视角下的 C++ 异常:探究 throw 与 catch 的编译原理

目录 0.写在前面 1.C异常概念 异常的定义&#xff1a; 异常处理的基本组成部分&#xff1a; 1. throw表达式 2. try块 3. catch块 2. 异常的使用 异常的抛出和匹配原则&#xff1a; 在函数调用链中异常栈展开匹配原则&#xff1a; 3.异常的重新抛出 4.异常安全 异…...

测试淘宝评论接口返回数据的详细说明

在电商数据分析、用户体验优化和竞品分析中&#xff0c;获取商品评论数据是一项重要的功能。淘宝开放平台提供了商品评论的 API 接口&#xff0c;允许开发者通过合法的方式获取商品的用户评论数据。本文将详细介绍如何测试淘宝评论接口的返回数据&#xff0c;包括接口调用步骤、…...

【微知】plantuml在泳道图中如何将几个步骤放入一个框中?(group “sub框1“; end !! “sub框1“)

背景 将几个步骤放在一起画个框&#xff0c;分区方便 命令 用法&#xff1a; group 和 end 关键字 用法&#xff1a; group "sub框1"User -> User: 模板渲染User -> User: 返回 HTMLend !! "sub框1" 这里!!是注释实操 修改前&#xff1a; 修改…...

深入解析 React 最新特性:革新、应用与最佳实践

深入解析 React 最新特性&#xff1a;革新、应用与最佳实践 1. 引言 React 作为前端开发的核心技术之一&#xff0c;近年来不断推出 新的 API 和优化机制&#xff0c;从 Concurrent Rendering&#xff08;并发模式&#xff09; 到 Server Components&#xff08;服务器组件&a…...

C语言之数据结构:理解什么是数据结构和算法(启航)

引言 启航篇&#xff0c;理解什么是数据结构和算法 在 C 语言编程领域&#xff0c;数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合&#xff08;比如数组&#xff09;&#xff0c;它是组织和存储数…...

【21】单片机编程核心技巧:if语句逻辑与真假判断

【21】单片机编程核心技巧&#xff1a;if语句逻辑与真假判断 七律 条件分野 if语句判真假&#xff0c;括号条件定乾坤。 非零为真零为假&#xff0c;大括号内藏玄门。 省略虽简风险在&#xff0c;代码规范护本根。 单片逻辑由心控&#xff0c;条件分支自成文。 注释&#xf…...

hackme靶机通关攻略

第一步&#xff1a;确定靶机IP 第二步&#xff1a;使用御剑后台扫描工具扫描敏感文件 第三步&#xff1a;访问register.php注册登录&#xff0c;进入welcome.php页面 第四步&#xff1a;访问一个不存在的页面&#xff0c;确定网站使用的中间件是Apache&#xff08;无用&#xf…...

网络安全演练有哪些形式

OPENVAS使用 1、确定指定IP是否能ping通 2、创建扫描目标 3、创建扫描任务&#xff08;scan management →newtask&#xff09; 4、开始任务start 5、查看扫描细节 6、查看扫描结果&#xff0c;包含漏洞详细信息&#xff0c;亦可到处PDF文件 7、导出扫描结果报告 8、为…...

PE,ELF,COFF

本文来自 (1)腾讯元宝 (2)程序员的自我修养 PE&#xff08;Portable Executable&#xff09;是一种文件格式&#xff0c;主要用于Windows操作系统中的可执行文件&#xff08;如.exe、.dll、.sys等&#xff09;。PE格式是Windows操作系统中标准的可执行文件格式&#xff0c;由…...