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

Spring

一.Ioc&DI

1.类的五种控制反转注解

这五个注解作用都一样,只是意义不一样,用来提高代码的可读性。

@Controller:控制层,接收请求,对请求进⾏处理,并进⾏响应。

@Servie:业务逻辑层,处理具体的业务逻辑。

@Repository:数据访问层,也称为持久层,负责数据访问操作。

@Configuration:配置层,处理项⽬中的⼀些配置信息。

@Component:其他

2.bean对象

①bean对象的获取

// 定义bean对象
@Component
public class Text {@Bean(name = {"a1","a2"}) //1.对bean对象进行重命名,2.同一个对象多个名称public UserInof user1(){UserInof user1 = new UserInof();user1.setName("zhangsan");user1.setAge(18);return user1;}
}
@SpringBootTest
class SpringbootDemo3ApplicationTests {// 先获取Spring的上下文对象@Autowiredpublic ApplicationContext applicationContext;@Testpublic void lala(){//根据bean类型, 从Spring上下⽂中获取对象UserInof userinof1 = applicationContext.getBean(UserInof.class);//根据bean名称, 从Spring上下⽂中获取对象UserInof userinof2 = (UserInof)applicationContext.getBean("a1");//根据bean类型+名称, 从Spring上下⽂中获取对象UserInof userinof3 = applicationContext.getBean("a1",UserInof.class);System.out.println("userinof1"+userinof1);System.out.println("userinof2"+userinof2);System.out.println("userinof3"+userinof3);}}

还有其它方式获取bean对象,这里就不过多写了,可以自己看源码。

②bean的命名约定

如果我们用上面的五大注解没有对bean进行命名:如果类是大驼峰bean对象的名字就是小驼峰(注意:当有多个字符并且第⼀个和第⼆个字符都是⼤写时, 将保留原始的⼤⼩写)

类名: UserController, Bean的名称为: userController
类名: UController, Bean的名称为: UController 

3.方法注解@bean

作用:

@Bean 注解的主要作用是告诉 Spring 框架,某个方法会返回一个对象(即一个 Bean),并将这个对象注册到 Spring 的应用上下文中,由 Spring 容器管理。Spring 容器会负责这个 Bean 的生命周期,包括创建、初始化、依赖注入和销毁。

①使用场景

1. 使⽤外部包⾥的类, 没办法添加类注解

2. ⼀个类, 需要多个对象, ⽐如多个数据源

②@bean的基础使用(这里就拿上面写过的代码进行描述)

// 定义bean对象
@Component // 这里必须添加控制反转的注解
public class Text {// 如果这里不对bean对象进行重命名那么bean的名字就是方法的名字@Bean(name = {"a1","a2"}) //1.对bean对象进行重命名,2.同一个对象多个名称public UserInof user1(){UserInof user1 = new UserInof();user1.setName("zhangsan");user1.setAge(18);return user1;}
}

注意事项:

1.@bean注解要配合类注解使⽤(这里的类注解就是必须要实用控制反转的注解)

2.可以给一个类定义多个bean对象

4.扫描路径

我们定义的bean想要生效就需要被spring扫描到,spring默认的扫描路径是:SpringBoot启动类所在包及其⼦包,如果不在我们可以通过添加@ComponentScan来增加我们的扫描路径,但是我们一般不会使用因为很麻烦,我们只需要把@SpringBootApplication的类放好位置即可。

5.DI

①依赖注入的三种方式:

属性注入,构造方法注入,Setter注入:目前最常用的方法是属性注入

1.交给spring管理的对象

@Service
public class UserService {public void sayHi() {System.out.println("Hi,UserService");}
}

2.属性注入(常用)

@Controller
public class UserController {@Autowiredprivate UserService userService;public void sayHi(){System.out.println("hi,UserController...");userService.sayHi();//使用被注入的对象}
}

3.构造方法注入

@Controller
public class UserController2 {private UserService userService;@Autowired//最高加上这个注解来指定用的这个构造方法进行的注入public UserController2(UserService userService) {this.userService = userService;}public void sayHi(){System.out.println("hi,UserController2...");userService.sayHi();//使用被注入的对象}
}

4.Setter方法注入

@Controller
public class UserController3 {private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}public void sayHi(){System.out.println("hi,UserController3...");userService.sayHi();}
}
②@Autowired存在的问题

当一个类出现了多个bean对象的时候只使用Autowired注入就会出现问题。

所以有三种解决方案:@Primary,@Qualifier,@Resource

1.@Primary当存在多个相同类型的Bean注⼊时,加上@Primary注解,来确定默认注入是哪一个。

// 用法就像下面一样
@Component
public class BeanConfig {@Primary //指定该bean为默认bean的实现@Bean("u1")public User user1(){User user = new User();user.setName("zhangsan");user.setAge(18);return user;}@Beanpublic User user2() {User user = new User();user.setName("lisi");user.setAge(19);return user;}
}

2.使⽤@Qualifier注解:指定当前要注⼊的bean对象。 在@Qualifier的value属性中,指定注⼊的bean的名称。

@Controller
public class UserController {@Qualifier("user2") //指定bean名称@Autowiredprivate User user;public void sayHi(){System.out.println("hi,UserController...");System.out.println(user);}
}

注意事项:@Qualifier注解不能单独使⽤,必须配合@Autowired使⽤

3.使⽤@Resource注解:是按照bean的名称进⾏注⼊。通过name属性指定要注⼊的bean的名称。

@Controller
public class UserController {@Resource(name = "user2")private User user;public void sayHi(){System.out.println("hi,UserController...");System.out.println(user);}
}

 ③补充概念梳理:

@Autowird 与 @Resource的区别:

• @Autowired 是spring框架提供的注解,⽽@Resource是JDK提供的注解

• @Autowired 默认是按照类型注⼊,⽽@Resource是按照名称注⼊.

Autowired的装配顺序:

二.AOP

1.添加依赖

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

2.aop的代码案例

@Slf4j
@Aspect  // 标识这是⼀个切⾯类
@Component
public class TimeAspect {/*** 记录⽅法耗时*/@Around("execution(* com.example.demo.controller.*.*(..))")public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {//记录⽅法执⾏开始时间long begin = System.currentTimeMillis();//执⾏原始⽅法Object result = pjp.proceed();//记录⽅法执⾏结束时间long end = System.currentTimeMillis();//记录⽅法执⾏耗时log.info(pjp.getSignature() + "执⾏耗时: {}ms", end - begin);return result;}
}

解释:

1. @Aspect: 标识这是⼀个切⾯类

2. @Around: 环绕通知, 在⽬标⽅法的前后都会被执⾏. 后⾯的表达式表⽰对哪些⽅法进⾏增强.

3. ProceedingJoinPoint.proceed() 让原始⽅法执⾏

3.Spring Aop核心概念

①连接点:JoinPoint,可以被AOP控制的方法

②通知:Advice,指定哪些重要的选择,也就其实把功能(最终体现在一个方法)

③切入点:PointCut,匹配连接点的条件,通知道会在切入点方法支持执行的被见用

④切面:Aspect,描述通知与切入点的对应关系(通知+切入点)

⑤目标对象:Target,通短所应用的的对象

4.通知类型(通知的方式)

@Around(感觉这个最常用): 环绕通知, 此注解标注的通知⽅法在⽬标⽅法前, 后都被执⾏

@Before: 前置通知, 此注解标注的通知⽅法在⽬标⽅法前被执⾏

@After: 后置通知, 此注解标注的通知⽅法在⽬标⽅法后被执⾏, ⽆论是否有异常都会执⾏

@AfterReturning: 返回后通知, 此注解标注的通知⽅法在⽬标⽅法后被执⾏, 有异常不会执⾏

@AfterThrowing: 异常后通知, 此注解标注的通知⽅法发⽣异常后执⾏

代码案例:

@Slf4j
@Aspect
@Component
public class AspectDemo {//前置通知@Before("execution(* com.example.demo.controller.*.*(..))")public void doBefore() {log.info("执⾏ Before ⽅法");}//后置通知@After("execution(* com.example.demo.controller.*.*(..))")public void doAfter() {log.info("执⾏ After ⽅法");}//返回后通知@AfterReturning("execution(* com.example.demo.controller.*.*(..))")public void doAfterReturning() {log.info("执⾏ AfterReturning ⽅法");}//抛出异常后通知@AfterThrowing("execution(* com.example.demo.controller.*.*(..))")public void doAfterThrowing() {log.info("执⾏ doAfterThrowing ⽅法");}//添加环绕通知@Around("execution(* com.example.demo.controller.*.*(..))")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {log.info("Around ⽅法开始执⾏");Object result = joinPoint.proceed();log.info("Around ⽅法结束执⾏");return result;}
}

5.@PointCut

这个代码可以用于定义一个公共的切点,需要⽤到时引⽤该切⼊点表达式即可,这就可以用于解决重复的代码

@Slf4j
@Aspect
@Component
public class AspectDemo {//定义切点(公共的切点表达式)@Pointcut("execution(* com.example.demo.controller.*.*(..))")private void pt(){}//前置通知@Before("pt()")public void doBefore() {//...代码省略}//后置通知@After("pt()")public void doAfter() {//...代码省略}// 后面的代码就不多写了
}

当切点定义使⽤private修饰时,仅能在当前切⾯类中使⽤,当其他切⾯类也要使⽤当前切点定义时,就需要把private改为public。引⽤⽅式为:全限定类名.⽅法名()

@Slf4j
@Aspect
@Component
public class AspectDemo2 {//前置通知@Before("com.example.demo.aspect.AspectDemo.pt()") // 但是我觉得这种写法应该很少public void doBefore() {log.info("执⾏ AspectDemo2 -> Before ⽅法");}
}

6.切面优先级 @Order

在多个切面类同是对一个方法使用 @Before,@After...... 时我们无法判断是那个@Before先执行,这里我们便需要设计切面的优先级,这里我们需要使用的注解是 @Order

@Aspect
@Component
@Order(2)
public class AspectDemo2 {//...代码省略
}@Aspect
@Component
@Order(1)
public class AspectDemo3 {//...代码省略
}@Aspect
@Component
@Order(3)
public class AspectDemo4 {//...代码省略
}

7.切点表达式(这也是Spring AOP的实现⽅式)

①使用execution表达式

语法格式:

execution(<访问修饰符> <返回类型> <包名.类名.⽅法(⽅法参数)> <异常>)

其中: 访问修饰符和异常可以省略

1. * :匹配任意字符,只匹配⼀个元素(返回类型, 包, 类名, ⽅法或者⽅法参数)

        a. 包名使⽤ * 表⽰任意包(⼀层包使⽤⼀个*)

        b. 类名使⽤ * 表⽰任意类

        c. 返回值使⽤ * 表⽰任意返回值类型

        d. ⽅法名使⽤ * 表⽰任意⽅法

        e. 参数使⽤ * 表⽰⼀个任意类型的参数

2. .. :匹配多个连续的任意符号, 可以通配任意层级的包, 或任意类型, 任意个数的参数

        a. 使⽤ .. 配置包名,标识此包以及此包下的所有⼦包

        b. 可以使⽤ .. 配置参数,任意个任意类型的参数

注意:使用execution表达式更适⽤有规则的,如果没有规则则可以使用下面自定义注解的方式。

②使用@annotation注解

第一步:编写自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAspect {
}

对上面两注解的解释

1. @Target 标识了 Annotation 所修饰的对象范围, 即该注解可以⽤在什么地⽅.

        常⽤取值:

        ElementType.TYPE: ⽤于描述类、接⼝(包括注解类型) 或enum声明         ElementType.METHOD: 描述⽅法

        ElementType.PARAMETER: 描述参数

        ElementType.TYPE_USE: 可以标注任意类型

2,@Retention 指Annotation被保留的时间长短,标明注解的生命周期

        @Retention 的取值有三种:

        1.RetentionPolicy.SOURCE:表示注解仅仅存在于源代码中,编译成字节码后会忽略该注解。返回时着 在运行时无法通过反射获取该注解的信息,只能在编译时使用。比如 @SuppressWarnings,以及 lombok提供的注解 @Data,@Slf4j。

        2.RetentionPolicy.CLASS:编译时注解,表示注解存在于字节码文件中,但是在运行时会忽略 该注解。返回时着在编译时和字节码中可以通过通过反射获取到该注解的信息,但在实际运行时无法获取 。通常用手一些框架和工具的具体操作。

        3.RetentionPolicy.RUNTIME:运行时注解,表示注解存在于字节码中,字节码和运行时中都可以 着在编译时,字节码中和运行时都可以通过反射获取到该注解的信息。通常用于一些需要 在运行时处理的具体,如Spring的 @Controller @ResponseBody。

第二步:使⽤ @annotation 表达式来描述切点

@Slf4j
@Component
@Aspect
public class MyAspectDemo {//前置通知@Before("@annotation(com.example.demo.aspect.MyAspect)")public void before(){log.info("MyAspect -> before ...");}//后置通知@After("@annotation(com.example.demo.aspect.MyAspect)")public void after(){log.info("MyAspect -> after ...");}
}

第三步:在连接点的⽅法上添加⾃定义注解

@MyAspect
@RequestMapping("/t1")
public String t1() {return "t1";
}

相关文章:

Spring

一.Ioc&DI 1.类的五种控制反转注解 这五个注解作用都一样&#xff0c;只是意义不一样&#xff0c;用来提高代码的可读性。 Controller&#xff1a;控制层&#xff0c;接收请求&#xff0c;对请求进⾏处理&#xff0c;并进⾏响应。 Servie&#xff1a;业务逻辑层&#xff0…...

基于开源链动2+1模式、AI智能名片与S2B2C商城小程序源码的体验式关系深化与商业转化研究

摘要&#xff1a;本文探讨了通过体验过程中的共同经历强化关系&#xff0c;促使KOC&#xff08;关键意见消费者&#xff09;为品牌背书的机制&#xff0c;并深入分析了开源链动21模式、AI智能名片以及S2B2C商城小程序源码在其中的创新应用。研究发现&#xff0c;这些新模式和技…...

【区块链安全 | 第三十九篇】合约审计之delegatecall(一)

文章目录 外部调用函数calldelegatecall call 与 delegatecall 的区别示例部署后初始状态调用B.testCall()函数调用B.testDelegatecall()函数区别总结 漏洞代码代码审计攻击代码攻击原理解析攻击流程修复建议审计思路 外部调用函数 在 Solidity 中&#xff0c;常见的两种底层外…...

Kingbase 常用运维命令总结

一、数据库连接与基础操作 连接指定服务器数据库 ksql -h 主机IP -p 端口号 -U 用户名 -d 数据库名 -W # 示例&#xff1a;连接 IP 为 192.168.1.100 的数据库 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 断开数据库连接 \q 或 exit 查看数据库列表及详细信息…...

从零开始的C++编程 2(类和对象下)

目录 1.构造函数初始化列表 2.类型转换 3.static成员 4.友元 5.内部类 6.匿名对象 1.构造函数初始化列表 ①之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅式&#xff0c;就是初始化列表&#xff0c;初始化…...

Java---抽象类与接口

抽象类与接口 前言一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特点4.抽象类的操作5.抽象类的作用 二、接口1.接口的概念2.接口语法3.接口的使用与特性4.实现多个接口5.接口之间的继承6.接口的实例(1).对象大小的比较(1).Comparable接口(2).Comparator接口 (2).实现类的克…...

玩转Docker | 使用Docker部署linkding书签管理工具

玩转Docker | 使用Docker部署linkding书签管理工具 前言一、linkding介绍简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署linkding服务下载镜像创建容器检查容器状态检查服务端口设置登录账号与密码安全设置四、访问linkding服务访问linkding…...

K8s 集群网络疑难杂症:解决 CNI 网络接口宕机告警的完整指南

引言 在 Kubernetes 集群运维过程中,网络问题往往是最棘手的故障之一。当你收到一条 [CRITICAL] 网络接口宕机 (172.18.109.55:9100) 的告警,并且告警内容显示 172.18.109.55:9100 的网络接口 cni0 已宕机5分钟 时,这通常意味着你的 Kubernetes 集群中有一个节点的容器网络…...

程序员/运维绘图工具---Mermaid

效果 介绍 Mermaid 是一种基于文本的图表生成工具&#xff0c;通过类似 Markdown 的简洁语法快速创建流程图、甘特图、类图等各类专业图表 应用场景 程序员绘图 系统架构图&代码逻辑可视化 项目管理图 数据可视化 AI辅助生成&#xff1a;LLM生成mermaid代码然后去渲染成…...

《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅

《MATLAB实战训练营&#xff1a;从入门到工业级应用》趣味入门篇-&#x1f339;用MATLAB画一朵会动的3D玫瑰&#xff1a;从零开始的浪漫编程之旅 你是否想过用代码创造一朵永不凋谢的玫瑰&#xff1f;今天&#xff0c;我将带你走进MATLAB的奇妙世界&#xff0c;用数学公式和编…...

激光院董事长龚赤坤到北京研发中心检查指导工作

4月11日&#xff0c;激光院党委书记、董事长龚赤坤到北京研发中心检查指导工作。 龚赤坤详细了解了北京研发中心的建设情况和科研进展&#xff0c;充分肯定所取得的成绩&#xff0c;对发展寄予厚望&#xff0c;龚赤坤指出北京研发中心的成立正处于激光院加速发展与产业进化的关…...

AbortController:让异步操作随时说停就停

AbortController&#xff1a;让异步操作随时说停就停 一、什么是 AbortController&#xff1f; AbortController 是 JavaScript 在浏览器和部分 Node.js 环境中提供的全局类&#xff0c;用来中止正在进行或待完成的异步操作&#xff08;如 fetch() 请求、事件监听、可写流、数…...

leetcode572 另一棵树的子树

1.与100、101解法相同 递归&#xff1a; class Solution { private:bool compare(TreeNode* p, TreeNode* q){if(!p && !q) return true;else if(!p || !q) return false;else if(p->val ! q->val) return false;bool leftside compare(p->left, q->lef…...

再看 MPTCP 时的思考

2022 年夏&#xff0c;居家办公时&#xff0c;第一次接手 mptcp 就觉得它不靠谱&#xff0c;以至于我后来搞了 mpudp for DC&#xff0c;再后来我调研了很多 mptcp-based 方案&#xff0c;发现它们都是向善而来&#xff0c;最终灰头土脸而终。mptcp 实则一个坑&#xff0c;业内…...

将三维非平面点集拆分为平面面片的MATLAB实现

将三维非平面点集拆分为平面面片的MATLAB实现 要将三维空间中不在同一平面上的点集拆分为多个平面面片&#xff0c;可以采用以下几种方法&#xff1a; 1. 三角剖分法 (Delaunay Triangulation) 最简单的方法是将点集进行三角剖分&#xff0c;因为三个点总是共面的&#xff1…...

Python(10.2)Python可变与不可变类型内存机制解密:从底层原理到工程实践

目录 一、类型特性引发的内存现象1.1 电商促销活动事故分析1.2 内存机制核心差异 二、内存地址追踪实验2.1 基础类型验证2.2 复合对象实验 三、深度拷贝内存分析3.1 浅拷贝陷阱3.2 深拷贝实现 四、函数参数传递机制4.1 默认参数陷阱4.2 安全参数模式 五、内存优化最佳实践5.1 字…...

华为hcie证书的有效期怎么判断?

在ICT行业&#xff0c;华为HCIE证书堪称含金量极高的“敲门砖”&#xff0c;拥有它往往意味着在职场上更上一层楼。然而&#xff0c;很多人在辛苦考取HCIE证书后&#xff0c;却对其有效期相关事宜一知半解。今天&#xff0c;咱们就来好好唠唠华为HCIE证书的有效期怎么判断这个关…...

【前端】CSS Grid 布局详解

CSS Grid 布局详解&#xff08;通俗易懂版&#xff09; 一、概述 CSS Grid 是一种二维布局系统&#xff0c;可以同时控制行和列&#xff0c;相比 Flex&#xff08;一维布局&#xff09;&#xff0c;更适合用在整体页面布局或复杂模块结构中。 二、基础概念 Grid 容器&#x…...

物美“外贸转内销”极速绿色通道正式开启

「TMT星球」获悉&#xff0c;在国家“提振消费、扩大内需”及“内外贸一体化”战略指引下&#xff0c;物美集团依托自身零售生态优势&#xff0c;打造“云超绿通”专项通道&#xff0c;助力中国优质外贸企业实现“出口转内销”的高效转型&#xff0c;通过极速绿通、线上线下全渠…...

【说明书#1】Node.js 和 npm安装与使用

系统提示 npm 不是内部或外部命令,也不是可运行的程序或批处理文件,也就是 npm 命令无法识别。这个错误通常是因为 Node.js 和 npm 没有正确安装,或者它们的路径没有添加到系统的环境变量中。 解决方法如下: 1. 安装 Node.js 和 npm: 如果你还没有安装 Node.js,可以从…...

【触想智能】安卓工业平板电脑和普通商业平板电脑的区别

安卓工业平板电脑是基于ARM架构开发的一种工业平板电脑&#xff0c;它在自助终端、智能制造、产线车间、智慧物流、商业金融等诸多领域有着广泛的应用。 触想安卓工业平板电脑TPC-A2系列 安卓工业平板电脑和普通商业平板电脑在一些方面存在一些区别&#xff0c;包括设计、硬件规…...

Java基于SSM的课程答疑微信小程序【附源码、文档说明】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

模板引擎语法-变量

模板引擎语法-变量 文章目录 模板引擎语法-变量&#xff08;一&#xff09;在Django框架模板中使用变量的代码实例&#xff08;二&#xff09;在Django框架模板中使用变量对象属性的代码实例&#xff08;三&#xff09;在Django框架模板中使用变量显示列表 &#xff08;一&…...

1260 最大公约数

1260 最大公约数 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;GCD &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int t …...

Node.js中net模块详解

Node.js 中 net 模块 API 详解 Node.js 的 net 模块提供了基于 TCP/IP 的网络功能&#xff0c;用于创建 TCP 服务器和客户端。以下是 net 模块的所有 API 详解&#xff1a; 1. 创建 TCP 服务器 const net require(net);// 1. 基本服务器 const server net.createServer((s…...

【从零开始学习JVM | 第三篇】虚拟机的垃圾回收学习(一)

堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时&#xff0c;Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域&#xff0c;因此也被称作 GC 堆&#xff08;Garbage Collected Heap&am…...

intellj idea 2024.1

参考资料 激活 https://www.microcharon.com/tech/5.htmlja-netfilter-all下载地址&#xff1a;https://drive.microcharon.com/OneDrive/Software/JetBrains%20ja-netfilter-all%20Build%202024.1.11.zip 步骤及问题 下载后&#xff1a;安全前确保旧版本的idea已经卸载。安…...

redis之缓存击穿

一、前言 本期我们聊一下缓存击穿&#xff0c;其实缓存击穿和缓存穿透很相似&#xff0c;区别就是&#xff0c;缓存穿透是一些黑客故意请求压根不存在的数据从而达到拖垮系统的目的&#xff0c;是恶意的&#xff0c;有针对性的。缓存击穿的情况是&#xff0c;数据确实存在&…...

Node.js中path模块详解

Node.js path 模块全部 API 详解 Node.js 的 path 模块提供了处理文件路径的工具函数&#xff0c;支持跨平台路径操作。以下是 path 模块的所有 API 详解&#xff1a; 1. 路径解析与操作 const path require(path);// 1. 路径连接 const fullPath path.join(__dirname, fi…...

重构艺术 | 内联与查询替代临时变量

重构艺术 | 内联与查询替代临时变量 在代码重构的殿堂里&#xff0c;临时变量常常扮演着双面角色&#xff1a;既是代码清晰的助力器&#xff0c;也可能成为代码腐败的温床。本文将深入探讨两种处理临时变量的重要手法&#xff1a;内联临时变量&#xff08;Inline Temp&#xf…...

数据分析-数据预处理

数据分析-数据预处理 处理重复值 duplicated( )查找重复值 import pandas as pd apd.DataFrame(data[[A,19],[B,19],[C,20],[A,19],[C,20]],columns[name,age]) print(a) print(--------------------------) aa.duplicated() print(a)只判断全局不判断每个 any() import p…...

Java基础 4.12

1.方法的重载&#xff08;OverLoad&#xff09; 基本介绍 Java中允许同一个类&#xff0c;多个同名方法的存在&#xff0c;但要求形参列表不一致&#xff01; 如 System.out.println(); out是PrintStream类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 2.重载的快速入…...

PostgreSQL有类似oracle的move表吗

PostgreSQL有类似oracle的move表吗 PostgreSQL 提供了类似 Oracle MOVE 表功能的重组操作&#xff0c;但实现方式和具体命令有所不同。以下是详细对比和 PostgreSQL 中的实现方案&#xff1a; 一 Oracle MOVE 与 PostgreSQL 对比 特性Oracle MOVEPostgreSQL 等效操作主要用途…...

AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS

Auto-RAG&#xff1a;用于大型语言模型的自主检索增强生成 单位&#xff1a;中科院计算所 代码&#xff1a; https://github.com/ictnlp/Auto-RAG 拟解决问题&#xff1a;通过手动构建规则或者few-shot prompting产生的额外推理开销。 贡献&#xff1a;提出一种以LLM决策为中…...

ABC-CNN-GRU-Attention、CNN-GRU-Attention、ABC-CNN-GRU和CNN-GRU四类对比模型多变量时序预测

人工蜂群算法四模型对比&#xff01;ABC-CNN-GRU-Attention系列四模型多变量时序预测 目录 人工蜂群算法四模型对比&#xff01;ABC-CNN-GRU-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 本研究针对多变量时间序列预测任务&#xf…...

ssh 免密登录服务器(vscode +ssh 免密登录)

每次打开vscode连接服务器都需要输入密码&#xff0c;特别繁琐。 然后自己在网上翻阅了一下教程&#xff0c;发现说的内容比较啰嗦&#xff0c;而且个人感觉非常有误导性倾向。 因此自己直接干脆写一个简便易懂的教程算了。 &#xff08;以经过本人亲测&#xff0c;真实可靠&am…...

Elasticsearch 系列专题 - 第七篇:实战项目

理论学习固然重要,但实战才能真正巩固知识。本篇将通过两个项目,带你从需求分析到实现,体验 Elasticsearch 在真实场景中的应用。 1. 项目一:日志分析系统 1.1 需求分析与架构设计 需求: 实时采集服务器日志。按时间和日志级别(INFO、ERROR)分析。可视化错误趋势。架构…...

C++初阶-类和对象(上)

本章内容相对于之后的类和对象中和下都比较简单&#xff0c;但是整体还是有些难度的。 目录 1.类的定义 1.1类定义格式 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.练习 4.1选择题1 4.2选择题2 5.总结 1.类的定义 1.1类定义格式 &am…...

(十九)安卓开发中的Application类的使用详解

在 Android 开发中&#xff0c;Application 类是一个全局的单例类&#xff0c;代表应用进程本身。它常用于初始化全局资源、维护应用级别的状态和注册全局生命周期回调。以下是详细讲解和代码示例&#xff1a; 一、自定义 Application 类 1. 创建子类 public class MyApplica…...

算法思想之位运算(一)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之位运算(一) 发布时间&#xff1a;2025.4.12 隶属专栏&#xff1a;算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题位1的个数题目链接题目描述算法思路代码实现 比特位计数题目链接题目描述…...

十八、TCP多线程、多进程并发服务器

1、TCP多线程并发服务器 服务端&#xff1a; #include<stdio.h> #include <arpa/inet.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <pthread.h>…...

『生成内容溯源系统』详解

生成内容溯源系统详解 1. 定义与核心目标 生成内容溯源系统&#xff08;Generative Content Provenance System&#xff09;是指能够追踪AI生成内容的来源、生成过程、版权归属及修改历史的技术体系。其核心目标是&#xff1a; 验证真实性&#xff1a;证明内容由特定AI模型生…...

mac 解压 nsz 文件

nsz 地址 下载 nsz PIP 套餐 使用以下命令安装仅限 Console 的版本&#xff1a; pip3 install --upgrade nsz使用以下命令安装 GUI 版本&#xff1a; pip3 install --upgrade nsz[gui]解压 nsz 文件 nsz -D 文件路径...

Python进阶(3):函数(接上篇)

上一篇我们初步介绍python中函数的定义与调用 Python进阶(2):函数-CSDN博客 这里继续: 关键字参数: 形参1实参1,形参2实参2,...... 关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确…...

卒/兵过河前的判断和走法触发器优化

兵(卒)&#xff1a;兵(卒)在未过河前&#xff0c;只能向前一步步走&#xff0c;过河以后&#xff0c;除不能后退外&#xff0c;允许左右移动&#xff0c;但也只能一次一步。 迷你世界地图已上传 优化...

生物信息Rust-01

前言-为什么想学Rust&#xff1f; 一直想多学一门编译语言&#xff0c;主要有几个原因吧&#xff08;1. 看到一位老师实验室要求需要掌握一门编译语言&#xff1b;2. 自己享想试着开发一些实用的生信工具&#xff0c;感觉自己现在相比于数据分析&#xff0c;探索生物学层面的意…...

基于HTML + jQuery + Bootstrap 4实现(Web)地铁票价信息生成系统

地铁票价信息表生成系统 1. 需求分析 1.1 背景 地铁已经成为大多数人出行的首选,北京地铁有多条运营线路, 截至 2019 年 12 月,北京市轨道交通路网运营线路达 23 条、总里程 699.3 公里、车站 405 座。2019 年,北京地铁年乘客量达到 45.3 亿人次,日均客流为 1241.1 万人次…...

智慧水务项目(八)基于Django 5.1 版本PyScada详细安装实战

一、说明 PyScada&#xff0c;一个基于Python和Django框架的开源SCADA&#xff08;数据采集与监视控制系统&#xff09;系统&#xff0c;采用HTML5技术打造人机界面&#xff08;HMI&#xff09;。它兼容多种工业协议&#xff0c;如Modbus TCP/IP、RTU、ASCII等&#xff0c;并具…...

DeepSeek在消防救援领域的应用解决方案

DeepSeek在消防救援领域的应用解决方案 一、火灾风险动态感知与早期预警 火灾风险动态感知与早期预警是智慧消防的关键环节&#xff0c;DeepSeek通过多模态数据分析&#xff0c;融合烟雾传感器、热成像摄像头和气体浓度检测等数据&#xff0c;能够识别传统阈值法难以捕捉的火…...

VSCode CMake调试CPP程序

文章目录 1 安装C与CMake插件2 配置CMakeLists.txt3 使用CMake编译调试3.1 编译3.2 调试 4 自定义构建调试参考 1 安装C与CMake插件 C插件 CMake插件 2 配置CMakeLists.txt 编写测试程序 #include<iostream>int main(int argc, char const *argv[]) {int a 1, b 2;i…...