万字知识篇(2):SpringBoot的常用注解(上)
SpringBoot的常用注解非常的多,一篇文章根本讲不完,将分为上下两章,通过本章你将会系统的学习到:
- 1. 注解在
SpringBoot
中的作用 - 2.
SpringBoot
常用注解速查表 - 3. 核心启动类注解
- 4. @Configuration
- 5. @Bean
- 6. @PropertySource
- 7. @Value
- 8. @ConfigurationProperties
- 9. @Import
- 10. @Autowired
- 11. @Qualifier
- 12. @Primary
- 13. @Lazy
文章目录
- 一、SpringBoot的注解
- 1.1 注解在SpringBoot中的作用
- 1.2 SpringBoot 常用注解速查表
- 二、核心启动类注解
- 三、配置类注解
- 3.1 @Configuration
- 3.2 @Bean
- 3.3 @PropertySource
- 3.4 @Value(依赖注入注解)
- 3.5 @ConfigurationProperties
- 3.6 @Import
- 四、依赖注入注解
- 4.1 @Autowired
- 4.2 @Qualifier
- 4.3 @Primary
- 4.4 @Lazy
一、SpringBoot的注解
1.1 注解在SpringBoot中的作用
说到SpringBoo
t的注解,那我们先来说一下注解在SpringBoot
中起到了什么作用。SpringBoot
采用 “约定优于配置” 的理念,使用注解替代传统的 XML
配置,使代码更简洁、易读。例如我们可以使用@Configuration
它的作用是声明一个类为配置类,他会替代 XML配置文件
。
1.2 SpringBoot 常用注解速查表
我们先来快速的了解一下常用的注解,然后再详细的讲解这些。
分类 | 注解 | 功能说明 |
---|---|---|
核心启动类 | @SpringBootApplication | 核心启动注解,整合了 @Configuration 、@EnableAutoConfiguration 和 @ComponentScan ,启用自动配置和组件扫描 |
核心启动类 | @EnableAutoConfiguration | 启用 Spring Boot 的自动配置机制,根据依赖自动配置 Spring 应用 |
核心启动类 | @ComponentScan | 自动扫描指定包及其子包下的 Spring 组件(@Component 、@Service 等) |
核心启动类 | @SpringBootConfiguration | 标记当前类为 Spring Boot 的配置类,等价于传统的 @Configuration 注解 |
配置类 | @Configuration | 标记类为 Spring 配置类,替代 XML 配置文件 |
配置类 | @Bean | 声明方法返回的对象由 Spring IoC 容器管理,支持单例/原型作用域 |
配置类 | @PropertySource | 加载指定的 properties/yml 配置文件,支持多文件加载和编码设置 |
配置类 | @ConfigurationProperties | 将配置文件中的属性批量绑定到 Java 对象,支持嵌套属性和松散绑定 |
配置类 | @Import | 导入其他配置类或普通类到当前 Spring 上下文 |
依赖注入 | @Autowired | 自动按类型注入依赖,支持构造器/Setter/字段注入,优先按类型匹配 |
依赖注入 | @Qualifier | 配合 @Autowired 使用,按指定名称注入 Bean,解决类型冲突 |
依赖注入 | @Primary | 标记优先注入的 Bean,当存在多个同类型 Bean 时生效 |
依赖注入 | @Value | 注入属性值,支持 SpEL 表达式和默认值(${key:default} ) |
依赖注入 | @Lazy | 延迟初始化 Bean,首次请求时才会创建 |
Web 开发 | @RestController | 组合注解,包含 @Controller 和 @ResponseBody ,直接返回 JSON/XML 响应 |
Web 开发 | @RequestMapping | 定义请求映射路径,可通过 method 指定 HTTP 方法(GET/POST 等) |
Web 开发 | @GetMapping | 专用于处理 GET 请求的简写形式,等同于 @RequestMapping(method=GET) |
Web 开发 | @PostMapping | 专用于处理 POST 请求的简写形式 |
Web 开发 | @PathVariable | 从 URI 模板中提取变量值,支持 required 和默认值设置 |
Web 开发 | @RequestParam | 获取查询参数或表单数据,支持参数名映射、必填校验和默认值 |
Web 开发 | @RequestBody | 将请求体内容(JSON/XML)反序列化为 Java 对象,支持校验 |
Web 开发 | @ResponseBody | 将方法返回值序列化为响应体(JSON/XML) |
Web 开发 | @ResponseStatus | 自定义 HTTP 响应状态码,可用于类或方法上 |
Web 开发 | @ExceptionHandler | 声明异常处理方法,处理特定异常并返回自定义响应 |
Web 开发 | @ControllerAdvice | 全局控制器增强,结合 @ExceptionHandler 实现统一异常处理 |
Web 开发 | @CrossOrigin | 启用跨域请求支持,可配置 origins、methods 等参数 |
Web 开发 | @CookieValue | 获取 Cookie 中的值,支持 required 和默认值 |
Web 开发 | @RequestHeader | 获取请求头中的值,支持 header 名映射和必填校验 |
Web 开发 | @SessionAttribute | 访问 session 中的属性 |
数据校验 | @Valid | 触发 JSR-303 校验,可级联校验嵌套对象 |
数据校验 | @Validated | Spring 的校验注解,支持分组校验 |
数据校验 | @NotNull | 校验字段不为 null |
数据校验 | @NotBlank | 校验字符串不为空且至少包含一个非空白字符 |
数据校验 | @Size | 校验集合/数组/字符串的大小在指定范围内 |
数据校验 | @Pattern | 校验字符串匹配正则表达式 |
数据校验 | @Email | 校验字符串为合法的邮箱格式 |
数据访问-JPA | @Entity | 标记类为 JPA 实体,对应数据库表 |
数据访问-JPA | @Table | 指定实体对应的数据库表名,默认使用类名 |
数据访问-JPA | @Id | 声明主键字段 |
数据访问-JPA | @GeneratedValue | 配置主键生成策略(IDENTITY/SEQUENCE/TABLE/AUTO) |
数据访问-JPA | @Column | 配置字段与数据库列的映射关系(name/length/unique 等) |
数据访问-JPA | @Transient | 标记字段不持久化到数据库 |
数据访问-JPA | @OneToMany | 定义一对多关联关系,可配置级联操作和加载策略 |
数据访问-JPA | @ManyToOne | 定义多对一关联关系 |
数据访问-JPA | @JoinColumn | 配置关联关系的数据库外键列 |
数据访问-MyBatis | @Mapper | 标记接口为 MyBatis Mapper,由 MyBatis 动态实现 |
数据访问-MyBatis | @Select | 声明 SQL 查询语句 |
数据访问-MyBatis | @Insert | 声明 SQL 插入语句 |
数据访问-MyBatis | @Update | 声明 SQL 更新语句 |
数据访问-MyBatis | @Delete | 声明 SQL 删除语句 |
数据访问-MyBatis | @Param | 指定 MyBatis 方法参数的名称 |
事务管理 | @Transactional | 声明事务,可配置隔离级别、传播行为、超时和只读属性 |
事务管理 | @EnableTransactionManagement | 启用声明式事务管理 |
定时任务 | @EnableScheduling | 启用定时任务支持 |
定时任务 | @Scheduled | 声明定时任务,支持 cron/fixedDelay/fixedRate 表达式 |
Spring Security | @EnableWebSecurity | 启用 Spring Security 配置 |
Spring Security | @PreAuthorize | 方法级权限控制,支持 SpEL 表达式(如 hasRole('ADMIN') ) |
Spring Security | @PostAuthorize | 方法执行后进行权限校验 |
Spring Security | @Secured | 基于角色列表的权限控制(需启用 @EnableGlobalMethodSecurity ) |
Spring Security | @EnableGlobalMethodSecurity | 启用方法级安全控制 |
测试 | @SpringBootTest | 标记 Spring Boot 集成测试类,加载完整应用上下文 |
测试 | @DataJpaTest | 仅加载 JPA 相关配置的切片测试 |
测试 | @WebMvcTest | 仅加载 Web MVC 相关配置的切片测试 |
测试 | @MockBean | 向 Spring 上下文注入 Mock 对象,替代真实 Bean |
测试 | @SpyBean | 向 Spring 上下文注入 Spy 对象,部分 Mock 真实 Bean |
测试 | @TestConfiguration | 定义测试专用的配置类,不会影响主配置 |
二、核心启动类注解
在 SpringBoot
中,核心启动类是整个应用的入口,而 @SpringBootApplication
是启动类的核心注解。它的作用远不止标记一个类为启动类,而是通过组合多个关键注解实现自动化配置和组件扫描。
- 作用目标:类(必须标注在主类上)
- 核心功能:这是 SpringBoot 应用的核心入口注解,本质上是三个关键注解的组合。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication { ... }
(1) @SpringBootConfiguration
功能:
- 标记当前类为 Spring Boot 的配置类,等价于传统的 @Configuration 注解。
- 表明该类中可能包含通过 @Bean 注解定义的 Spring 容器管理的对象。
(2) @EnableAutoConfiguration
功能:
- 启用
SpringBoot
的自动配置机制,根据项目的依赖(如spring-boot-starter-web、spring-boot-starter-data-jpa
)自动配置Spring
应用。 - 自动加载文件中定义的配置类(如
DataSourceAutoConfiguration
、WebMvcAutoConfiguration
)。
工作原理:
- 扫描类路径下的
JAR
包,检测是否有预定义的配置类(如发现HikariDataSource
则自动配置数据源)。 - 根据条件注解(如
@ConditionalOnClass
、@ConditionalOnMissingBean
)动态决定是否启用配置。
(3) @ComponentScan
功能:
- 自动扫描当前包及其子包下的组件,包括
@Component
、@Service
、@Repository
、@Controller
等注解标记的类。 - 将这些组件注册为
SpringBean
,无需手动在XML
或JavaConfig
中定义。
默认扫描路径:
- 主启动类所在的包作为根包。
- 若主类在
com.example.demo
包下,则自动扫描com.example.demo
及其子包。
三、配置类注解
3.1 @Configuration
作用:标记一个类为配置类,告诉Spring容器
这个类是用来定义Bean
的。
想象你要开一家奶茶店,@Configuration 就像是你的 “开店指导手册”,用来告诉 Spring(你的开店助手)两件事:
1.“这个类很重要!”
- 就像在手册封面写上《XX奶茶店操作指南》,告诉助手:“这是我们的核心配置”。
2.“这里有制作奶茶的配方!”
- 手册里的每个方法(用 @Bean 标记)都是一个具体配方,比如:
- “珍珠奶茶配方”
- “芝士奶盖配方”
当 Spring 看到 @Configuration 时:
- 会把这个类 当作特殊说明书 加载
- 执行里面所有带
@Bean
的方法,把返回的对象 存入"原料仓库"(Spring 容器
) - 其他类需要时,直接问仓库要(通过
@Autowired
)
和普通类的区别
普通类 | @Configuration 类 |
---|---|
Spring 当它是路人甲 | Spring 当它是 VIP 说明书 |
里面的方法随便写 | 带 @Bean 的方法会被特殊处理 |
不会被自动调用 | Spring 会主动执行所有 @Bean 方法 |
3.2 @Bean
作用:用于声明一个Bean
。被@Bean
注解标记的方法会被Spring容器
调用,并将返回的对象纳入管理。
@Bean 是 Spring 中的一个重要注解,它的作用就是 告诉 Spring:这个方法会返回一个对象,你要把这个对象管理起来!
简单来说,@Bean 就是 手工造零件,然后交给 Spring 的“零件仓库”(IoC 容器)去管理,其他类要用的时候,Spring 会自动提供。
@Configuration // 这是一本开店手册
public class TeaShopConfig {@Bean // 这是"珍珠奶茶"的配方public MilkTea pearlMilkTea() {MilkTea tea = new MilkTea();tea.addIngredient("珍珠");tea.addIngredient("红茶");return tea;}@Bean // 这是"芝士奶盖"的配方public CheeseFoam cheeseFoam() {return new CheeseFoam();}
}
虽然 @Bean
不一定必须用在 @Configuration
类中,但为了代码的可读性和维护性,建议将@Bean
方法集中放在 @Configuration
类中。
3.3 @PropertySource
作用:用于加载指定的属性文件到 Spring
的环境中,从而可以在应用中使用这些属性值。
功能:
- 加载指定的
.properties
或.yml
文件 - 将文件中的属性添加到
Spring
的Environment
中 - 支持通过
@Value
或Environment
对象获取属性值
路径可以是类路径下的资源文件(使用 classpath: 前缀)。在 Spring 框架中,使用 classpath: 前缀时,Spring 会自动在应用程序的 类路径(Classpath) 中查找资源文件类路径通常包括以下几个部分:
- 项目的 src/main/resources 目录:在 Maven 或 Gradle 项目中,src/main/resources 是存放资源文件的标准目录。
- 这些文件在构建过程中会被复制到目标输出目录(如 target/classes 或 build/classes)。
- 如果资源文件位于类路径下的某个子目录中,可以通过路径来指定。例如:
@PropertySource("classpath:config/my.properties")
@Configuration
@PropertySource("classpath:application.yml")
public class TestConfigure {
}
springBoot中属性加载优先级:
- application.properties (最高优先级)
- @PropertySource 指定的文件
- 系统环境变量
- 命令行参数
同时还能加载多个配置文件
@Configuration
@PropertySources({@PropertySource("classpath:default.properties"),@PropertySource("classpath:env-specific.properties")
})
public class AppConfig { ... }
避免加载 application.properties
不推荐使用@PropertySource
加载以 application
为前缀的配置文件(如 application-dev.properties
),因为这些文件通常会被 SpringBoot
自动加载,可能导致配置值被覆盖。
不支持直接加载 YAML 格式的配置文件
@PropertySource
注解本身不支持直接加载 YAML
格式的配置文件。@PropertySource
主要用于加载 .properties
文件,而不是 .yml
文件。如果你尝试使用 @PropertySource
加载 .yml
文件,Spring
会抛出错误,因为 @PropertySource
默认只支持 .properties
格式的文件。
3.4 @Value(依赖注入注解)
@Value
是 Spring
中一个非常常用的注解,主要用于将配置文件中的值注入到 Spring
管理的 Bean
中。它可以从配置文件(如 application.properties
或 application.yml
)中读取属性值,也可配合上述讲过的注解@PropertySource
指定的文件的文件读入属性,并将其注入到字段、构造函数或方法参数中。
功能:
- 从配置文件读取值(比如 application.properties)
- 注入系统环境变量
- 直接赋固定值
- 支持 SpEL 表达式(可以算数学题、调用方法等)
看一个小例子:
在配置类中使用value注入属性
没有问题,成功注入,Spring 会主动执行所有 @Bean 方法,而且application.yml是spring自动导入的一个注解文件,不用我们在显示的引入这个文件。
那如果我们需要的值在Value.properties下面呢?
服务器报错了
我们需要用@PropertySource注入value.properties
没问题
3.5 @ConfigurationProperties
作用:
将配置文件(如 application.properties
或 application.yml
)中的属性值绑定到一个 Java
对象的字段上。它支持松散绑定,即配置文件中的属性名可以与 Java
字段名不完全一致,但可以通过一定的规则进行匹配。
假设你的 application.yml 里有这样一段配置:
如果用 @Value,你要写很多重复代码:
而用 @ConfigurationProperties,你可以:
✅ 自动绑定整个配置段到一个 Java 对象
✅ 支持嵌套属性
✅ 自动类型转换(String → int/boolean 等)
✅ 提供 IDE 自动提示(配合 spring-boot-configuration-processor)
之后就可以在别的地方使用了
成功注入,没有问题
3.6 @Import
作用:
将一个或多个配置类引入到当前配置类中,从而实现模块化的配置管理。
主要功能:
- 引入其他配置类:可以将其他
@Configuration
类导入到当前配置类中 - 引入普通类:可以将普通类作为
bean
定义导入到Spring
容器中 - 引入
ImportSelector
实现:可以动态选择要导入的配置 - 引入
ImportBeanDefinitionRegistrar
实现:可以编程式地注册bean
定义
@Configuration
class DatabaseConfig {@Beanpublic DataSource dataSource() {// 数据源配置}
}@Configuration
@Import(DatabaseConfig.class)
class AppConfig {// 现在可以使用DatabaseConfig中定义的bean
}
public class Service {// 业务逻辑
}@Configuration
@Import(Service.class)
class AppConfig {// Service类将被注册为Spring bean
}
四、依赖注入注解
4.1 @Autowired
@Autowired
是 Spring
框架中最核心的注解之一,用于实现依赖注入DI
。
基本作用
@Autowired
的主要功能是自动装配 Spring
容器中的 bean
:
- 自动为类成员(字段、构造器、方法)注入依赖对象
- 消除显式的
getter/setter
和手动装配代码 - 是
Spring
依赖注入的核心实现方式
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;
}
上述这种方式是Spring
不推荐的方式,Spring
推荐的方式是通过构造函数注入
@RestController
@RequestMapping("/dept")
@Tag(name = "组织结构管理")
@Slf4j
public class DepartmentController {private final DepartmentService departmentService;private final UserService userService;@Autowired // 构造函数注入public DepartmentController(DepartmentService departmentService, UserService userService) {this.departmentService = departmentService;this.userService = userService;}
}
在Spring 4.3+
后,如果一个类里面只有一个构造函数,可省略 @Autowired
@RestController
@RequestMapping("/dept")
@Tag(name = "组织结构管理")
@Slf4j
public class DepartmentController {private final DepartmentService departmentService;private final UserService userService;public DepartmentController(DepartmentService departmentService, UserService userService) {this.departmentService = departmentService;this.userService = userService;}
}
同时也是可选依赖
@Autowired(required = false)
private OptionalDependency dependency; // 找不到bean时不报错
4.2 @Qualifier
@Qualifier
是 Spring
框架中用于解决依赖注入歧义性的重要注解,通常与 @Autowired
配合使用。下面我将全面讲解这个注解的用法和工作原理。
基本作用
@Qualifier 的主要功能是:
- 当存在多个相同类型的 Bean 时,明确指定要注入哪一个
- 为自动装配过程提供额外的筛选条件
- 实现更精确的依赖注入控制
@Configuration
public class AppConfig {@Beanpublic DataSource masterDataSource() {return new MasterDataSource();}@Beanpublic DataSource slaveDataSource() {return new SlaveDataSource();}
}@Service
public class UserService {@Autowired@Qualifier("masterDataSource") // 明确指定bean名称private DataSource dataSource;
}
4.3 @Primary
@Primary
是 Spring
框架中用于标记首选的 Bean
的注解,当存在多个相同类型的 Bean
时,被标记为 @Primary
的 Bean
会被优先选择。
基本作用:
@Primary
的主要功能是:
- 当存在多个相同类型的
Bean
时,指定默认注入的候选者 - 解决自动装配时的歧义性问题
- 作为隐式的、默认的选择机制
@Configuration
public class DataSourceConfig {@Bean@Primary // 被标记为首选Beanpublic DataSource primaryDataSource() {return new PrimaryDataSource();}@Beanpublic DataSource secondaryDataSource() {return new SecondaryDataSource();}
}@Service
public class UserService {@Autowiredprivate DataSource dataSource; // 会自动注入primaryDataSource
}
当然,它还可以在类(组件)上面使用,达到优先级的目的
@Primary
@Service
public class PrimaryPaymentService implements PaymentService {// 实现代码
}@Service
public class SecondaryPaymentService implements PaymentService {// 实现代码
}
与 @Qualifier 的优先级
- 当同时存在
@Primary
和@Qualifier
时,@Qualifier
的优先级更高 @Primary
是一种"默认"机制,而@Qualifier
是"显式指定"机制
4.4 @Lazy
@Lazy
是 Spring
框架中用于延迟初始化的重要注解,它可以控制 Bean
的加载时机,优化应用启动性能并解决某些特殊依赖问题。
基本作用
@Lazy
的主要功能是:
- 延迟
Bean
的初始化(推迟到第一次被使用时才创建) - 解决循环依赖问题
- 优化应用启动性能(减少启动时加载的
Bean
数量)
@Configuration
public class AppConfig {@Bean@Lazy // 延迟初始化public ExpensiveService expensiveService() {return new ExpensiveService(); // 耗时的初始化操作}
}
相关文章:
万字知识篇(2):SpringBoot的常用注解(上)
SpringBoot的常用注解非常的多,一篇文章根本讲不完,将分为上下两章,通过本章你将会系统的学习到: 1. 注解在SpringBoot中的作用 2. SpringBoot 常用注解速查表 3. 核心启动类注解 4. Configuration 5. Bean 6. PropertySource 7. …...
Postman —— postman实现参数化
什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数每…...
Docker学习--容器生命周期管理相关命令--docker create 命令
docker create 命令作用: 会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。 语法: docker create[参数] IMAGE(要执行的镜像) [COMMAND](在容器内部…...
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
算法基础_基础算法【高精度 前缀和 差分 双指针】 ---------------高精度---------------791.高精度加法题目介绍方法一:代码片段解释片段一: 解题思路分析 792. 高精度减法题目介绍方法一:代码片段解释片段一: 解题思路分析 7…...
C语言深度解析:从零到系统级开发的完整指南
一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性,成为系统级开发的首选语言。例如,Linux内核通过C语言直接操作内存和硬件寄存器,实现高效进程调度。 关键点: malloc/free直接管理内存&#…...
Axure疑难杂症:完美解决中继器筛选问题(时间条件筛选、任性筛选)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器筛选专题 主要内容:时间条件筛选、多条件组合筛选、多个单一条件混合筛选 应用场景:各类数据表的多条件筛选均可使用…...
汇编学习之《扩展指令指针寄存器》
什么是指令指针寄存器? EIP (Extended Instruction Pointer): 保存cpu 下一次将要执行的代码的地址。 通过OllyGbd可以看到CPU即将执行指令的地址和EIP 内部放入的地址一致,多次F8依然是这样。 这里要区分下,之前比如EAX,ECX我…...
oracle-blob导出,在ob导入失败
导出: [oraclelncs dmp]$ /home/oracle/sqluldr2 gistar/res#pwd192.168.205.58:1521/lndb query"select * from an_odn_picture where length(PIC_CONTENT)<25000" filean_odn_picture.csv Charsetutf8 textCSV 0 rows exported at 2025-…...
【Linux笔记】进程间通信——匿名管道||进程池
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux笔记】动态库与静态库的理解与加载 🔖流水不争,争的是滔滔不 一、Linux进程间通…...
Spring Boot 3.4.3 基于 Caffeine 实现本地缓存
在现代企业级应用中,缓存是提升系统性能和响应速度的关键技术。通过减少数据库查询或复杂计算的频率,缓存可以显著优化用户体验。Spring Boot 3.4.3 提供了强大的缓存抽象支持,而 Caffeine 作为一款高性能的本地缓存库,因其优异的…...
windows使用nvm管理node版本
1.下载地址:https://github.com/coreybutler/nvm-windows/releases 选择nvm-setup.exe 2.安装,下载完成后,以管理员身份运行 nvm-setup.exe,选择默认安装,一路next 3.使用,安装完成后会打开一个命令行窗口࿰…...
vscode集成deepseek实现辅助编程(银河麒麟系统)【详细自用版】
针对开发者用户,可在Visual Studio Code中接入DeepSeek,实现辅助编程。 可参考我往期文章在银河麒麟系统环境下部署DeepSeek:基于银河麒麟桌面&&服务器操作系统的 DeepSeek本地化部署方法【详细自用版】 一、前期准备 (…...
智谱大模型(ChatGLM3)PyCharm的调试指南
前言 最近在看一本《ChatGLM3大模型本地化部署、应用开发和微调》,本文就是讨论ChatGLM3在本地的初步布设。(模型文件来自魔塔社区) 1、建立Pycharm工程 采用的Python版本为3.11 2、安装对应的包 2.1、安装modelscope包 pip install model…...
MySQL GROUP BY分组获取非聚合列值方法
在使用MySQL进行数据库查询时,如果你需要对数据按照某个或某些列进行分组(GROUP BY),并且希望在结果中包含非聚合列的值,你可以通过以下几种方法来实现: 1. 使用聚合函数 虽然这不是直接获取非聚合列值的…...
多路径 TCP 调度的另一面
参考前面的文章 一个原教旨的多路径 TCP 和 MP-BBR 公平性推演,一直都破而不立,不能光说怎样不好,还得说说现状情况下,该如何是好。 如果 receiver 乱序重排的能力有限(拜 TCP 所赐),如果非要在多路径上传输 TCP&…...
在Qt中判断输入的js脚本是否只包含函数
目前在使用QtScriptEngine,在利用evaluate注册子函数时,要求用户输入的js文件中的内容仅仅是函数,函数体外不能出现一些变量的声明、函数的调用等其他代码。 反复咨询DeepSeek后,终于给出了一个目前测试可用的代码: b…...
【Easylive】MySQL中LEFT JOIN与INNER JOIN的使用场景对比
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 在MySQL数据库查询中,JOIN操作是最常用的操作之一,而LEFT JOIN和INNER JOIN是两种最基础的JOIN类型。理解它们的区别和适用场景对于编写高效、准确的SQL查询至关重要…...
Boost库中的谓词函数
Boost库中的谓词函数 谓词函数基础概念 在编程中,谓词函数(Predicate Function)是指返回布尔值(true或false)的函数,用于检测输入是否满足特定条件。谓词函数在STL算法和Boost库中被广泛使用,…...
人工智能之数学基础:基于初等反射矩阵完成矩阵的QR分解
本文重点 QR分解是矩阵分解中的一种重要方法,它将一个矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=QR。这种分解在求解线性方程组、最小二乘问题、特征值计算等领域有着广泛应用。 QR分解的定义 QR分解就是应用了初等反射矩阵,不断的通过初等反射矩阵,然后将A变…...
AI应用案例(1)——智能工牌和会话质检
今天开辟一个新的模块,自己平时也搜集一些典型的行业应用案例,不如就记录到C站,同时和大家也是个分享好了。 今天分享的企业和产品,是循环智能的智能工牌。 这个产品应用场景清晰,针对的行业痛点合理,解决…...
碰一碰发视频系统--基于H5场景开发
碰一碰发视频#碰一碰发视频#开发基于H5的"碰一碰发视频"交互系统(类似华为/苹果的NFC碰传但通过移动端网页实现),需要结合近场通信(NFC/H5 API)和媒体传输技术。以下是具体实现方案 #碰一碰营销系统# #碰一…...
kotlin扩展函数的实现原理
1. 编译时转换 在编译时,Kotlin 扩展函数会被转换为静态函数。这个静态函数的第一个参数是接收者类型(也就是被扩展的类),而调用扩展函数时,实际上是调用这个静态函数,并将接收者对象作为第一个参数传入。…...
激活函数学习笔记
Sigmoid:梯度消失、指数计算复杂运行慢、输出不是以0为中心,梯度平滑便于求导tanh:以0为中心,其他与sigmoid相似ReLu:transformer常用,解决了梯度消失问题、计算复杂度低,存在神经元死亡问题和梯…...
【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…...
基于 Swoole 的高性能 RPC 解决方案
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
# 实时人脸识别系统:基于 OpenCV 和 Python 的实现
实时人脸识别系统:基于 OpenCV 和 Python 的实现 在当今数字化时代,人脸识别技术已经广泛应用于各种场景,从手机解锁到安防监控,再到智能门禁系统。今天,我将通过一个完整的代码示例,详细讲解如何使用 Pyt…...
python的global在编译层面的进阶理解
目录 报错情况 编译执行过程 (1)源代码(.py 文件) (2)编译阶段:解析 & 生成字节码 (3)解释执行:Python 虚拟机(PVM) 字节码…...
OpenCV、YOLO与大模型的区别与关系
OpenCV、YOLO 和大模型的区别与关系 1. OpenCV(Open Source Computer Vision Library) 定位:开源的计算机视觉基础库。功能:提供传统的图像处理算法(如图像滤波、边缘检测、特征提取)和基础工具ÿ…...
Buzz1.2.0视频语音转成TXT、SRT、VTT工具
buzz0.9.0.exe下载 https://download.csdn.net/download/u011000529/90551347 特征 导入音频和视频文件并导出文本到 TXT、SRT 和 VTT从您计算机的麦克风转录和翻译成文本(资源密集型且可能不是实时的,Demo)支持Whisper、 Whisper.cpp、Fast…...
Vue 2 和 Vue 3 中的钩子函数
Vue 钩子函数也被叫做生命周期钩子函数,它是 Vue 实例在其生命周期的不同阶段自动调用的函数。可以利用这些钩子函数在特定阶段执行自定义代码。 Vue 2 生命周期钩子函数 在 Vue 2 里,生命周期钩子函数可以在组件选项对象中定义。下面是一个简单的 Vue…...
零基础如何学会Appium自动化测试?
前言 appium是一款移动自动化测试工具,经常被用于实现UI自动化测试,其可支持安卓和IOS两大平台,还支持多种编程,因而得到了广泛的应用。此处便是立足于安卓平台,借助appium工具,使用python语言实现简单的自…...
用Python实现TCP代理
依旧是Python黑帽子这本书 先附上代码,我在原书代码上加了注释,更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string类型的输入…...
SQL复杂查询与性能优化:医药行业ERP系统实战指南
SQL复杂查询与性能优化:医药行业ERP系统实战指南 一、医药行业数据库特性分析 在医药ERP系统中,数据库通常包含以下核心表结构: -- 药品主数据 CREATE TABLE drug_master (drug_id INT PRIMARY KEY,drug_name VARCHAR(255),specification …...
问题大集10-git使用commit提交中文显示乱码
(1)问题 (2)解决步骤 1) 设置全局编码为 UTF-8 git config --global core.quotepath false git config --global i18n.commitEncoding utf-8 git config --global i18n.logOutputEncoding utf-8 2) 显示或设…...
vue前端项目技术架构(第二版)
vue技术架构介绍 如下图所示,展示了项目系统的软件层次架构。该系统采用基于SOA(面向服务架构)思想的分层架构,分为四个主要层次:视图层、编译层、代码层和数据层。 视图层 浏览器:核心职责是解析并展示…...
Java 开发中的 AI 黑科技:如何用 AI 工具自动生成 Spring Boot 项目脚手架?
在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展&#x…...
计算机网络知识点汇总与复习——(一)计算机网络体系结构
Preface 计算机网络是考研408基础综合中的一门课程,它的重要性不言而喻。然而,计算机网络的知识体系庞大且复杂,各类概念、协议和技术相互关联,让人在学习时容易迷失方向。在进行复习时,面对庞杂的的知识点,…...
Copilot完全指南:AI编程助手的革命性实践
一、智能编程新时代:从代码补全到AI结对编程 1.1 Copilot的进化历程 2021年GitHub Copilot的诞生标志着编程辅助工具进入新纪元。与传统IDE补全工具相比,Copilot展现出三大革命性特征: 语义理解:基于GPT模型理解代码上下文跨文…...
Redis 梳理汇总目录
Redis 哨兵集群(Sentinel)与 Cluster 集群对比-CSDN博客 如何快速将大规模数据保存到Redis集群-CSDN博客 Redis的一些高级指令-CSDN博客 Redis 篇-CSDN博客...
5、无线通信基站的FPGA实现架构
基站(Base Station,BS),也称为公用移动通信基站,是无线电台站的一种形式,具体则指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间的信息传递的无线电收发信电台。…...
MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略
文章目录 引言一、BTree索引核心原理1.1 索引数据结构演化1.2 BTree的存储结构通过主键查询(主键索引)商品数据的过程通过非主键(辅助索引)查询商品数据的过程 MySQL InnoDB 的索引原理 二、执行计划深度解析三、索引失效的六大陷…...
2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载
原文链接:https://tecdat.cn/?p41286 在数字技术与实体经济深度融合的当下,数智化产业带正成为经济发展的关键引擎。 从云南鲜花产业带的直播热销到深圳3C数码的智能转型,数智化正重塑产业格局。2023年数字经济规模突破53.9万亿元ÿ…...
html实现手势密码
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>手势密码</title><style>body {font-fam…...
机器学习(八):K-Means聚类原理与实战
声明:未经允许禁止转载与抄袭。 前言 k k k均值( k k k-means)聚类算法是一种经典的无监督聚类算法,本文将深入解析其理论原理,并在真是数据集上进行算法实践,话不多说,请看下文。 算法原理 …...
从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换
从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换 前言一、环境准备二、核心代码实现1. 将 Word 转换为 HTML 文件流2. 优化超链接样式 三、测试效果四、总结 前言 在日常开发中,我们经常需要将 Word 文档转换为 HTML,用于…...
SQLMesh调度系统深度解析:内置调度与Airflow集成实践
本文系统解析SQLMesh的两种核心调度方案:内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程,为企业构建可靠的数据分析流水线提供技术参考。重点内容包括: 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…...
【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)
1. Grok过去两周的进展一览 根据公开信息,Grok在过去两周的主要进展如下: Grok 3正式上线并开放 xAI于2025年3月30日宣布Grok 3正式向所有Premium+订阅用户开放,并同步将X平台的Premium+订阅费用上涨至月费近50美元、年费350美元。这是继Grok 2之后的重大升级,其推理能力和…...
Vue表单数据回显失败技术解析与修复指南!!!
Vue表单数据回显失败技术解析与修复指南 🚀 在Vue.js应用开发中,「父子组件通信」「动态弹窗」是经典功能组合。但当遇到关键场景表单数据无法回显时,你是否也在深夜加班改bug?本文通过完整案例分析,揭秘该问题背后深层…...
【Office办公】【Excel】VLOOKUP函数-高速查找指定匹配数据,可合并2个表格
VLOOKUP 是 Excel 中常用的查找函数,用于在表格或区域中按列查找特定值并返回对应行的其他列数据。以下是详细使用方法及注意事项: 函数语法 VLOOKUP(查找值, 表格范围, 列索引号, [匹配方式])查找值:要查找的值(如单元格引用或…...
Java基础-21-基本语法-封装
封装(Encapsulation) 1. 什么是封装? 封装(Encapsulation)是面向对象编程(OOP)中的一个重要特性。它指的是将对象的属性和行为封装在一个类中,并提供访问控制机制,防止…...