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

【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


Spring AOP


下面我们再来详细学习 AOP,主要是以下几部分:

image-20250421182852776


Spring AOP 核心概念


image-20250421114620399


切点(Pointcut)


切点(Pointcut),也称之为“切入点”。

Pointcut 的作用就是提供一组规则(使用 AspectJ pointcut expression language 来描述),告诉程序对哪些方法来进行功能增强。

image-20250421112458255

上面的表达式 execution(* com.example.demo.controller.*.*(..)) 就是切点表达式。


连接点(Join Point)


满足切点表达式规则方法,就是连接点。也就是可以被 AOP 控制的方法。

以入门程序举例,所有 com.example.demo.controller 路径下的方法,都是连接点。

image-20250421114123462

上述 BookController 中的方法都是连接点。


image-20250421152705933


切点和连接点的关系:

  • 连接点是满足切点表达式元素切点可以看做是保存了众多连接点的一个集合。 比如:
  • 切点表达式:全体偶像练习生
  • 连接点就是:蔡徐坤、范丞丞等各个偶像练习生

通知(Advice)


通知就是具体要做的工作,指哪些重复的逻辑,也就是共性功能最终体现为一个方法)。

比如上述程序中记录业务方法的耗时时间,就是通知

image-20250421114310008

在 AOP 面向切面编程当中,我们把这部分重复的代码逻辑抽取出来单独定义,这部分代码就是通知的内容。


切面(Aspect)


切面(Aspect)= 切点(Pointcut)+ 通知(Advice)。

通过切面就能够描述当前 AOP 程序需要针对于哪些方法,在什么时候执行什么样的操作。

切面既包含了通知逻辑的定义,也包括了连接点的定义。

image-20250421114337427

切面所在的类,我们一般称为切面类(被 @Aspect 注解标识的类)。


通知类型


上面我们讲了什么是通知,接下来学习通知的类型@Around 就是其中一种通知类型,表示环绕通知

image-20250421114423462


Spring 中 AOP通知类型有以下几种:

注解名称描述
@Around环绕通知,此注解标注的通知方法在目标方法前、后都被执行。
@Before前置通知,此注解标注的通知方法在目标方法前被执行。
@After后置通知,此注解标注的通知方法在目标方法后被执行的,无论是否有异常都会执行。
@AfterReturning返回后通知,此注解标注的通知方法在目标方法后被执行的,有异常不会执行。
@AfterThrowing异常后通知,此注解标注的通知方法在发生异常后执行。

接下来我们通过代码来加深对这几个通知的理解:

为方便学习,我们可以新建一个项目,使用 web+lombok 依赖,删除 pom.xml 文件多余部分:

image-20250421130421846


添加 AOP 依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

先创建测试类接口:

image-20250421130303873


添加连接点:

image-20250421131054719


创建切面(需引入 AOP 依赖):

image-20250421132632270

@Slf4j
@Aspect
@Component
public class AspectDemo1 {/*** @Around(环绕通知):此注解标注的通知方法在目标执行前,后都被执行*/@Around("execution(* com.bit.springaopdemo.Controller.*.*(..))")public Object TimeAspect(ProceedingJoinPoint pjp) throws Throwable {log.info("目标方法执行前.......");Object result = pjp.proceed();log.info("目标方法执行后.......");return result;}/*** @Before(前置通知),此注解标注的通知方法在目标方法前被执行*/@Before("execution(* com.bit.springaopdemo.Controller.*.*(..))")public void doBefore(){log.info("doBefore.......");}/*** @After(后置通知),此注解标注的通知方法在目标方法后被执行的,无论是否有异常都会执行。*/@After("execution(* com.bit.springaopdemo.Controller.*.*(..))")public void doAfter(){log.info("doAfter.......");}/*** @AfterReturning(返回后通知),此注解标注的通知方法在目标方法后被执行的,有异常不会执行。*/@AfterReturning("execution(* com.bit.springaopdemo.Controller.*.*(..))")public void doAfterReturning(){log.info("AfterReturning.......");}/*** @AfterThrowing(异常后通知),此注解标注的通知方法在发生异常后执行。*/@AfterThrowing("execution(* com.bit.springaopdemo.Controller.*.*(..))")public void doAfterThrowing(){log.info("AfterThrowing.......");}
}

运行程序,观察日志:


1、正常运行的情况:


http://127.0.0.1:8080/test/t1

image-20250421150515643


观察日志:

image-20250421150603225


这个日志中,我们还是不知道目标方法 t1() 是什么时候执行的,再打上一个日志,重新运行程序,并发送请求:

image-20250421150959335


程序正常运行的情况下,@AfterThrowing 标识的通知方法不会执行。

image-20250421153218053

从上图也可以看出来,@Around 标识的通知方法包含两部分,一个“前置逻辑”,一个“后置逻辑”


其中“前置逻辑”会先于 @Before 标识的通知方法执行,“后置逻辑”会晚于 @After 标识的通知方法执行:

image-20250420172341060


2、异常时的情况:


为了方便观察,我们给 Controller 中的每个接口都加上 log 日志:

image-20250421151534707


测试方法 t1() 是没有异常的情况,接下来,我们来测试目标方法存在异常的情况:

image-20250421151755261


观察日志:

image-20250421151927017


程序发生异常的情况下:

  • @AfterReturning 标识的通知方法不会执行;

  • @AfterThrowing 标识的通知方法执行了;

image-20250421152232823


如果我们在环绕通知 @Around 中,使用 try....catch .....连接点(目标方法)的异常进行捕获,能否达到 @AfterThrowing 的功能呢?

image-20250421160235500


@Around 环绕通知中原始方法调用时有异常,通知中的环绕后的代码逻辑也不会再执行了(因为原始方法调用出异常了)。

image-20250421154553448


image-20250420172434125


注意事项:

  • @Around 环绕通知需要调用 ProceedingJoinPoint.proceed() 来让原始方法执行其他通知不需要考虑目标方法执行

  • @Around 环绕通知 的方法返回值,必须指定为 Object,来接收原始方法的返回值,否则原始方法执行完毕,是获取不到返回值的。

  • 一个切面类可以有多个切点


定义切点@PointCut


上面代码存在一个问题,就是存在大量重复的切点表达式:

execution(* com.example.demo.controller.*.*(..))


Spring 提供了 @PointCut 注解,把公共的切点表达式提取出来,需要用到时引用该切入点表达式即可。

上述代码就可以修改为:

image-20250421163815187


image-20250421164457806


当切点定义使用 private 修饰时,仅能在当前切面类中使用。

image-20250421164719422


其他切面类也要使用当前切点定义时,就需要把 private 改为 public

image-20250421165159178


引用方式为:全限定类名.方法名()

image-20250421165100748


在这里插入图片描述

在这里插入图片描述

相关文章:

【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法

Spring AOP 下面我们再来详细学习 AOP&#xff0c;主要是以下几部分&#xff1a; Spring AOP 核心概念 切点&#xff08;Pointcut&#xff09; 切点&#xff08;Pointcut&#xff09;&#xff0c;也称之为“切入点”。 Pointcut 的作用就是提供一组规则&#xff08;使用 Aspe…...

Uniapp:view容器(容器布局)

目录 一、基本概述二、属性说明三、常用布局3.1 横向布局3.2 纵向布局3.3 更多布局3.3.1 纵向布局-自动宽度3.3.2 纵向布局-固定宽度3.3.3 横向布局-自动宽度3.3.4 横向布局-居中3.3.5 横向布局-居右3.3.6 横向布局-平均分布3.3.7 横向布局-两端对齐3.3.8 横向布局-自动填充3.3…...

C# 运算符:?.(null 条件运算符)和 ??(null 合并运算符)

在 WinForms 中&#xff0c;comboBox1.SelectedValue?.ToString() ?? "" 这行代码使用了两个特殊的 C# 运算符&#xff1a;?.&#xff08;null 条件运算符&#xff09;和 ??&#xff08;null 合并运算符&#xff09;。让我分别解释它们的作用&#xff1a; ?.&…...

java/python——两个行为(操作)满足原子性的实现

目录 JAVA方法 1&#xff1a;使用 synchronized 同步块示例代码 方法 2&#xff1a;使用 ReentrantLock锁示例代码 方法 3&#xff1a;使用 AtomicReference 或其他原子类示例代码 方法 4&#xff1a;使用数据库事务&#xff08;如果涉及数据库操作&#xff09;示例代码&#x…...

SpringBoot中配置文件的加载顺序

下面的优先级由高到低 命令行参数java系统属性java系统环境变量外部config文件夹的application-{profile}.ym文件外部的application-{profile}.ym文件内部config文件夹的application-{profile}.ym文件内部的application-{profile}.ym文件外部config文件夹的application.ym文件外…...

Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试

所需下载地址&#xff1a; 通过网盘分享的文件&#xff1a;rtmp 链接: https://pan.baidu.com/s/1t21J7cOzQR1ASLrsmrYshA?pwd0000 提取码: 0000 window&#xff1a; 解压 win目录下的 nginx-rtmp-module-1.2.2.zip和nginx 1.7.11.3 Gryphon.zip安装包&#xff0c;解压时选…...

在线查看【免费】 txt, xml(渲染), md(渲染), java, php, py, js, css 文件格式网站

可以免费在线查看 .docx/wps/Office/wmf/ psd/ psd/eml/epub/dwg, dxf/ txt/zip, rar/ jpg/mp3 m.gszh.xyz m.gszh.xyz 免费支持以下格式文件在线查看类型 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx, xlam, xla, pages 等 Office 办…...

RIP动态路由(三层交换机+单臂路由)

RIP动态路由&#xff08;三层交换机单臂路由&#xff09; J1 (配置VLAN&#xff0c;修改端口) Switch>en Switch>en Switch# Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#int f0/1 Switch(config-if)#sw Switch(confi…...

Docker 基本概念与安装指南

Docker 基本概念与安装指南 一、Docker 核心概念 1. 容器&#xff08;Container&#xff09; 容器是 Docker 的核心运行单元&#xff0c;本质是一个轻量级的沙盒环境。它基于镜像创建&#xff0c;包含应用程序及其运行所需的依赖&#xff08;如代码、库、环境变量等&#xf…...

Oracle DBA培训一般多长时间?

Oracle DBA培训的时间通常在‌2个月到6个月‌之间&#xff0c;具体看课程类型和你的学习目标。不过别只看总时长&#xff0c;关键得看每天学什么、练什么——有些机构把时间拖到半年&#xff0c;结果全是理论&#xff1b;有些课程压缩到2个月&#xff0c;但全是干货。下面分情况…...

【回眸】Linux 内核 (十七) 之 网络编程

前言 努力赶紧把Linux内核的内容更新完。 网络编程 协议的部分已经很成熟&#xff0c;只需要调用即可。 进程间通讯无法进行多机通信&#xff0c;网络通讯则解决了这一缺陷。 TCP/UDP协议对比 &#xff08;1&#xff09;TCP 面向连接&#xff08;如打电话要先拨号建立连接…...

Batch Size

1. 什么是Batch Size&#xff1f; Batch Size&#xff08;批大小&#xff09;是指在深度学习模型训练过程中&#xff0c;每次前向传播和反向传播时输入到模型中的样本数量。具体来说&#xff0c;深度学习模型的训练通常基于梯度下降&#xff08;Gradient Descent&#xff09;算…...

Maven插件管理的基本原理

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试

Fluter 应用调试 Flutter 构建模式 目前&#xff0c;Flutter一共提供了三种运行模式&#xff0c;分别是Debug、Release和Profile模式。其中&#xff0c;Debug模式主要用在软件编写过程中&#xff0c;Release模式主要用于应用发布过程中&#xff0c;而Profile模式则主要用于应…...

MySQL-存储过程--游标

存储过程 游标 什么是游标 一个游标是一个SQL语句执行时系统内存创建的一个临时工作区域。一个游标包含一个查询语句的信息和它操作的数据行的信息。 mysql游标的特点 只读&#xff1a; 无法通过游标更新基础表中的数据不可滚动&#xff1a; 只能根据select中确定的顺序来…...

Spring AOP 事务

目录 一,引入依赖: 二,切面 1,基本概念 2, 通知类型: 3,Pointcut 4, 切面优先级: 5 ,自定义优先级Order 6,切点表达式 7, 自定义注解 总结: AOP有几种创建方式 三, Spring AOP原理 1, 代理模式 (1)静态代理 (2)动态代理 △JDK动态代理 △CGLIB动态代理 JDB和c…...

Itext进行PDF的编辑开发

这周写了一周的需求&#xff0c;是制作一个PDF生成功能&#xff0c;其中用到了Itext来制作PDF的视觉效果。其中一些功能不是很懂&#xff0c;仅作记录&#xff0c;若要学习请仔细甄别正确与否。 开始之前&#xff0c;我还是想说&#xff0c;这傻福需求怎么想出来的&#xff0c…...

Python 中消费者 - 生产者模式详解

目录 引言 消费者 - 生产者模式原理 示例场景 Python 实现消费者 - 生产者模式 使用队列&#xff08;Queue&#xff09;实现 代码解释 使用协程实现 代码解释 应用场景 总结 引言 在软件开发里&#xff0c;消费者 - 生产者模式是一种常见且重要的设计模式。这种模式让…...

基于Hadoop的音乐推荐系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本毕业生数据分析与可视化系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Java语言、爬虫技术进行编写&#xff0c;使用了Spring Boot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff…...

移动端动态滑动拨盘选择器【Axure元件库】

模拟移动端底部对话框效果&#xff0c;制作的年份、日期滑动拨盘选择器&#xff0c;支持日期动态滑动选择&#xff0c;提升原型制作强度。 该模板主要使用中继器、动态面板和矩形制作&#xff0c;使用简单&#xff0c;复用性强。只需对中继器数据表格中的数据项进行修改、增删…...

7. 深入Spring AI:刨析 Advisors 机制

目录 1、序言2、什么是Advisor?3、源码分析Advisor3.1、Advisor接口3.2、Advisor Ordered3.3、CallAroundAdvisor & StreamAroundAdvisor3.4、BaseAdvisor4、内置的Advisor类型4.1、MessageChatMemoryAdvisor4.2、PromptChatMemoryAdvisor4.3、VectorStoreChatMemoryAdvis…...

高保真动态项目管理图表集

本作品为项目管理图表类原型&#xff0c;以关系图谱、甘特图、流程图、泳道图为核心&#xff0c;提供基础的图表设计风格和交互案例&#xff0c;再进阶到高级的动态交互设计&#xff0c;由浅入深诠释Axure设计高端复杂的动态交互设计的魅力。 作品介绍 原型名称&#xff1a;Ax…...

MCP:AI时代的“万能插座”,开启大模型无限可能

摘要&#xff1a;Model Context Protocol&#xff08;MCP&#xff09;由Anthropic在2024年底开源&#xff0c;旨在统一大模型与外部工具、数据源的通信标准。采用客户端-服务器架构&#xff0c;基于JSON-RPC 2.0协议&#xff0c;支持stdio、SSE、Streamable HTTP等多种通信方式…...

IDEA打不开、打开报错

目录 场景异常原因解决 场景 1、本机已经安装了IDEA 2、再次安装另外一个版本的IDEA后打不开、打开报错 异常 这里忘记截图了。。。 原因 情况1-打不开&#xff1a;在同一台电脑安装多个IDEA是需要对idea的配置文件进行调整的&#xff0c;否则打不开 情况2-打开报错&#…...

TM1640学习手册及示例代码

数据手册 TM1640数据手册 数据手册解读 这里我们看管脚定义DIN和SCLK&#xff0c;一个数据线一个时钟线 SEG1~SEG8为段码&#xff0c;GRID1~GRID16为位码&#xff08;共阴极情况下&#xff09; 这里VDD给5V 数据指令 数据命令设置 地址命令设置 显示控制命令 共阴极硬件连接图…...

动态规划-零钱兑换

332.零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。你可以认为每种硬币的数量是无…...

leetcode50.pow(x,n)

class Solution {private double f(double x,long n){if(n0)return 1.0;else {double tempf(x,n/2);return n%21?temp*temp*x:temp*temp;}}public double myPow(double x, int n) {long Nn;return n>0?f(x,N):1.0/f(x,-N);} }...

ECA 注意力机制:让你的卷积神经网络更上一层楼

ECA 注意力机制&#xff1a;让你的卷积神经网络更上一层楼 在深度学习领域&#xff0c;注意力机制已经成为提升模型性能的重要手段。从自注意力&#xff08;Self-Attention&#xff09;到各种变体&#xff0c;研究人员不断探索更高效、更有效的注意方法。今天我们要介绍一种轻…...

《谷歌Gemini 1.5:长语境理解重塑文档分析与检索新格局》

在人工智能的快速发展进程中&#xff0c;大语言模型不断突破边界&#xff0c;为各个领域带来变革性影响。谷歌Gemini 1.5的问世&#xff0c;凭借其卓越的长语境理解能力&#xff0c;在文档分析和检索任务方面掀起了一阵技术革新的浪潮。 以往的大语言模型在处理长文本时&#…...

量变与质变的辩证关系

量变和质变是唯物辩证法中揭示事物发展状态和形式的一对重要范畴&#xff0c;二者之间存在着密切的辩证关系。 一、量变是质变的必要准备 含义 量变是指事物数量的增减和场所的变更&#xff0c;是一种渐进的、不显著的变化。例如&#xff0c;水的温度升高&#xff0c;从0℃逐…...

讯联桌面TV版apk下载-讯联桌面安卓电视版免费下载安装教程

在智能电视的使用过程中&#xff0c;一款好用的桌面应用能极大提升我们的使用体验。讯联桌面 TV 版就是这样一款备受关注的应用&#xff0c;它可以让安卓电视拥有更个性化、便捷的操作界面。今天&#xff0c;就为大家详细介绍讯联桌面 TV 版 apk 的免费下载安装教程。 一、下载…...

【Vue】组件基础

目录 &#x1f680; Vue 非单文件组件 和 单文件组件 的区别与实践对比 ✨ 引言 一、非单文件组件 1. 基本使用 2. 注意&#xff1a; 3. 组件的嵌套 4. 关于VueComponent&#xff1a; 5. 一个重要的内置关系&#xff08;有点难理解&#xff09; 二、 单文件组件 那就…...

OpenCV---图像预处理(四)

OpenCV—图像预处理&#xff08;四&#xff09; 文章目录 OpenCV---图像预处理&#xff08;四&#xff09;九&#xff0c;图像掩膜9.1 制作掩膜9.2 与运算9.3 颜色替换9.3.19.3.2 颜色替换 十&#xff0c;ROI切割十 一&#xff0c;图像添加水印11.1模板输入11.2 与运算11.3 图像…...

《MySQL:MySQL表的基本查询操作CRUD》

CRUD&#xff1a;Create&#xff08;创建&#xff09;、Retrieve&#xff08;读取&#xff09;、Update&#xff08;更新&#xff09;、Delete&#xff08;删除&#xff09;。 Create into 可以省略。 插入否则更新 由于主键或唯一键冲突而导致插入失败。 可以选择性的进行同步…...

Psychology 101 期末测验(附答案)

欢呼 啦啦啦~啦啦啦~♪(^∇^*) 终于考过啦~ 开心(*^▽^*) 撒花✿✿ヽ(▽)ノ✿ |必须晒下证书: 判卷 记录下判卷,还是错了几道,填空题2道压根填不上。惭愧~ 答案我隐藏了,实在想不出答案的朋友可以留言,不定时回复。 建议还是认认真真的学习~认认真真的考试~,知识就…...

Linux:权限相关问题

文章目录 shell命令以及运行的原理Linux权限 shell命令以及运行的原理 操作系统分为内核和外壳程序&#xff0c;xshell是外壳程序&#xff0c;外壳程序包括我们windows桌面上的图形化界面&#xff0c;本质都是翻译给核心处理&#xff0c;再显示出来&#xff0c;而我们输入的命令…...

大模型应用开发大纲

AI大模型学习路径脑图结构 一、AI及LLM基础 学习目标&#xff1a;建立对AI和LLM的基础理解&#xff0c;了解主要的机器学习和神经网络模型&#xff0c;掌握API调用方法。 1.1 AI领域基础概念 AI, NL/NLU/NLG机器学习: 学习方法, 拟合评估神经网络: CNN, RNN, TransformerTra…...

【NCCL】transport建立(一)

transport建立 NCCL transport建立主要在ncclTransportP2pSetup函数中实现。 概况 先简单概括一下ncclTransportP2pSetup函数做了哪些事&#xff0c;方便理解代码流程。 recvpeer 表示本卡作为接收端的对端&#xff0c;sendpeer 表示本卡作为发送端的对端。假设8个rank全连接…...

智慧能源安全新纪元:当能源监测遇上视频联网的无限可能

引言&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;能源安全已成为国家安全战略的重要组成部分。如何构建更加智能、高效的能源安全保障体系&#xff1f;能源安全监测平台与视频监控联网平台的深度融合&#xff0c;正为我们开启一扇通向未来能源管理新世界的大门。这种创…...

腾讯一面-软件开发实习-PC客户端开发方向

1.自我介绍就不多赘述了 2. 请介绍一下你的项目经历 - 介绍了专辑鉴赏项目&#xff0c;前端使用html语言编写&#xff0c;后端基于http协议使用C语言进行网页开发。此外&#xff0c;还提及项目中涉及处理多线程问题以及做过内存池管理项目。 3. 项目中HTTP协议是使用库实现的…...

Cad c# 射线法判断点在多边形内外

1、向量叉乘法 2、射线法原理 射线法是判断点与多边形位置关系的经典算法&#xff0c;核心思想是&#xff1a; 从目标点发出一条水平向右的射线&#xff08;数学上可视为 y p_y, x \geq p_x 的射线&#xff09;&#xff0c;统计该射线与多边形边的交点数量&#xff1a; - 偶…...

【第16届蓝桥杯软件赛】CB组第一次省赛

个人主页&#xff1a;Guiat 归属专栏&#xff1a;算法竞赛 文章目录 A. 移动距离&#xff08;5分填空题&#xff09;B. 客流量上限&#xff08;5分填空题&#xff09;C. 可分解的正整数D. 产值调整E. 画展布置F. 水质检测G. 生产车间H. 装修报价 正文 总共10道题。 A. 移动距离…...

DePIN驱动的分布式AI资源网络

GAEA通过通证经济模型激励全球用户共享闲置带宽、算力、存储资源&#xff0c;构建覆盖150多个国家/地区的分布式AI基础设施网络。相比传统云服务&#xff0c;GAEA具有显著优势&#xff1a; 成本降低70%&#xff1a;通过利用边缘设备资源&#xff0c;避免了集中式数据中心所需…...

CC注入Tomcat Upgrade/Executor/WebSocket内存马

学习一下Tomcat中和组件内存马不一样的马。除了学习注入原理外&#xff0c;其payload还在一些缩短payload的场景有应用&#xff0c;比如shiro CC注入Tomcat Upgrade/Executor/WebSocket内存马 漏洞所用环境及测试全部代码https://github.com/godownio/TomcatMemshell 漏洞路…...

算法工程师面试题与参考答案资料(2025年版)

一、核心技术能力 1. 编程能力与工具 问题 1(选择题): 下列哪种Python数据类型是通过哈希表实现的? A. 列表 (list)...

烂土豆Juicypotato提权原理和利用

烂土豆Juicypotato提权原理和利用 0x00 Potato&#xff08;烂土豆&#xff09;提权的原理&#xff1a; 所谓的烂土豆提权就是俗称的MS16-075 可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别。 一、简单的原…...

基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发

基于LangChain4J的AI Services实践&#xff1a;用声明式接口重构LLM应用开发 前言&#xff1a;当Java开发遇上LLM编程困境 在LLM应用开发领域&#xff0c;Java开发者常面临两大痛点&#xff1a;一是需要手动编排Prompt工程、记忆管理和结果解析等底层组件&#xff0c;二是复杂…...

重构便携钢琴专业边界丨特伦斯便携钢琴V30Pro定义新一代便携电钢琴

在便携电钢琴领域&#xff0c;特伦斯推出的V30Pro折叠钢琴以"技术革新场景适配"的双重升级引发关注。这款产品不仅延续了品牌标志性的折叠结构&#xff0c;更通过声学系统重构与智能交互优化&#xff0c;重新定义了便携乐器的专业边界。 ▶ 核心特点&#xff1a;技术…...

【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示

【日期】2025-04-21 【问题】 在小程序上u-input后置插槽展示&#xff0c;真机运行安卓机上不展示 【原因】&#xff1a; 原代码&#xff1a;&#xff08;插槽写法惯性使用#&#xff0c;此处在APP上不兼容该写法&#xff09; <u-input v-model"currentScore"…...

每天学一个 Linux 命令(30):cut

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/28/index.html cut 命令用于从文件或输入流中提取文本的特定部分(如列、字符或字节位置)。它常用于处理结构化数据(如 CSV、TSV)或按固定格式分割的文本。以下是详细说明和示例: 命令格式 cut [选项] [文件...]…...