SpringBoot--Bean管理详解
Bean管理
Bean扫描
回顾spring:
在XML配置文件中,可以借助
<context:component-scan base-package = "com.lyc">
或者注解
@ComponentScan(basePackages="com.lyc")
再springboot项目中,既没有标签,也没有写注解,但他仍然可以扫描到我们写的业务代码。这是为什么呢?
原因如下:
在springboot启动类中的@springBootApplication是一个组合注解。
@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {
其中就组合了@ComponentScan注解,因此可以扫描Bean对象。
注意事项:这相当于在启动类上添加了@ComponentScan注解,所以默认只能扫描启动类所在的包及其子包,而其他包扫描不到。如果想扫描其他包,需要手动添加@ComponentScan注解。
Bean注册
回顾spring:
在spring项目中,我们可以添加以下注解来进行Bean的注册
注解 | 说明 | 位置 |
---|---|---|
@Component | 声明bean的基础注解 | 不属于以下三类时,用此注解 |
@Service | @Component的衍生注解 | 标注在业务类上 |
@Controller | @Component的衍生注解 | 标注在控制类上 |
@Repository | @Component的衍生注解 | 标注在数据访问类上(由于与MyBatis整合,用得少) |
问题:在spring项目中,如果将三方jar包中的Bean对象注入到IOC容器中,这些注解还能使用吗?
解答:不能,在spring项目中这些jar包被设为只读,不能修改,因此:
如果要注册的Bean对象来自第三方(不是自定义),是无法使用@Component及衍生注解的声明Bean的
如何解决?
spring为我们提供了两个注解解决问题:
-
@Bean
-
@Import
前置知识:
如何将第三方jar包通过Maven坐标引入?
先使用maven命令将第三方jar包安装在本地仓库
mvn install:install-file -Dfile=jar包所在本地磁盘的路径-DgroupId=组织名称-DartifactId=项目名称-Dversion=版本号-Dpackaging=打包方式
再在pom依赖中导入坐标即可。
<dependency><groupId>组织名称</groupId><artifactId>项目名称</artifactId><version>版本号</version>
</dependency>
@Bean的使用
(@Bean只写在方法上,返回的是一个对象,但一般不获取已经在容器中的对象)
使用@Bean注解将第三方的Bean对象注入到IOC容器中,可以在启动类里面去声明一个方法,这个方法里去创建一个对象
再在这个方法上声明一个@Bean注解(将方法返回值交给IOC容器管理,成为IOC容器的Bean对象)。
public class Myconfig {@Bean("User")//相当于XML中的<bean id="user" class="com.lyc.pojo.User"/>//这个方法的名字,就相当于bean标签中的id值//这个方法的返回值,就相当于bean标签中的class属性的值public User getUser(){return new User();//返回要注入到bean的对象}
}
如何证明注入IOC容器成功呢? 将对应类型的对象拿出来就好了。
在springboot项目中的启动方法(run()方法),run()方法会将spring初始化好的容器返回。通过容器来调用getBean方法拿到对应类想的Bean对象。
ConfigurableApplicationContext context = SpringApplication.run(SpringbootMybatisApplication.class, args);
User user = context.getBean(User.class);
System.out.plintln(user)
但是这种方式并不推荐使用。因为在Java代码中类的设计遵循一个单一职责原则,一个类只负责一个功能,启动类就应该只负责启动,不应该再加一个注册的功能。
如果说要配置一个第三方的Bean,建议在配置类中集中注册。就比如:在新增一个config包,里面专门来写配置类。
@Configuration//这个也被spring容器托管,注册到容器中,因为它本身也是一个@Component,表明这是一个配置类,相当于XML当中的 <beans>
@ComponentScan("com.lyc.pojo")//@ComponmentScan是扫描主程序同级的包,所以分层包放在其他地方,就会发生错误
@Import(MyConfig2.class)
public class Myconfig {@Bean("User")//相当于XML中的<bean id="user" class="com.lyc.pojo.User"/>//这个方法的名字,就相当于bean标签中的id值//这个方法的返回值,就相当于bean标签中的class属性的值public User getUser(){return new User();//返回要注入到bean的对象}
}
@Configuration
-
作用:
@Configuration
注解用于定义一个配置类,表示该类中有一个或多个@Bean
方法。@Configuration
是一个特化版的@Component
,它会告诉 Spring 该类是一个配置类,能够包含 Bean 定义方法,并且支持代理机制。 -
使用场景:用于配置类的定义,通常与
@Bean
一起使用,用来显式声明 Bean。在 Spring Boot 项目中,它常用于设置应用的配置,或者在传统的 Spring 项目中配置一些自定义 Bean。
@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}
与 @Component
不同,@Configuration
表明这是一个配置类,其中可以定义多个 @Bean
方法,而这些 Bean 会以一种更为严格和优化的方式加载到 Spring 容器中(通过代理机制)。
注意事项:
-
@Bean只能声明方法。
-
@Bean("名称")//相当于XML中的< bean id="名称" class="对象实体类路径"/ >
-
这个方法的名字,就相当于bean标签中的id值
-
这个方法的返回对象,就相当于bean标签中的class属性的值。
-
如果方法的内部需要使用IOC容器中的Bean对象,只需要在方法上声明即可,spring会自动注入
@Import的使用
常用方式
-
导入配置类(手动扫描)
-
导入ImportSelector 接口实现类
-
@EnableXxxx注解,用于封装@Import注解
举例说明:
当我们的配置类不在启动类的包名下时,启动类是无法扫描到我们的配置类的,我们可以在启动类上添加@Import(配置类的字节码文件),这样就spring就会把配置类文件中对应的Bean对象注入到IOC容器中。
但我们需要导入的配置类过多时,我们可以使用数组的形式,来注入配置类文件,@Import为我们提供了方法。
package org.springframework.context.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Import {Class<?>[] value();} //以数组的方式进行注入
但当我们的配置类文件过多时,以数组形式注入,也会显得代码冗余,如此便用到了我们的第二个方式:导入ImportSelector 接口实现类
-
首先定义一个类去实现ImportSelector接口。
-
重写selectImports方法,在方法中只需要返回一个字符串的数组。而数组中里面的每一个字符串就是要注入到IOC容器中的Bean对象的全类名。
注意事项:springboot会自动调用selectImports方法得到里面数组的内容,然后将这些类的Bean对象自动注入到IOC容器中
代码展示:
public class CommonImportSelector implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata){List<String> imports = new ArrayList<>();return new String[]{"com.lyc.config.CommonConfig"};
}
}
这时只需要在启动类上声明@Import(CommonImportSelector.class)即可。
注意事项:在实际开发中,数组的内容一般不会写死,,基本上都是从配置文件中读取出来的。这样就降低了代码的耦合性,是代码之间更加灵活,程序员只需要将全类名,写入到配置文件中即可。
代码展示:
common.imports
# 一行写一个全类名即可
com.lyc.config.CommonConfig
CommonImportSelector.java
public class CommonImportSelector implements ImportSelector{@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata){//读取配置文件内容List<String> imports = new ArrayList<>(); //初始化数组Inputstream is = CommonImportSelector.class.getClassLoader().getResourceAsStream("common.imports");//通过反射拿到class对象在调用方法将配置文件转换为字节流,字节流不适合文本文件的读取,需要将其转换为字符流BufferedReader br = new BufferedReader(new InputStreamReader(is));//将字节流通过转换流装换成字符流,在使用字符缓冲流提高读写性能,String line = null; // 定义String类型的变量try{while((line = br.readLine())!=null){ //逐行读取数据,只要数据不为空,则放在imports数组中imports.add(line);}}catch(Exception e){throw new RuntimeException(e);}finally{if(br != null){try{br.close();//关闭流}catch (Exception e){throw new RuntimeException(e);}}}return imports.toArray(new String[0]);//new String[0] 只起到一个提供类型的作用}}
如何在进一步,让代码显得更简洁呢?
在启动类中定义一个组合注解,将@Import注解组合一下,在启动类中添加组合注解即可
package com.lyc.springbootmybatis.annotation;import org.springframework.context.annotation.Import;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Import(CommonImportSelector.class)public @interface EnableCommonConfig {}
然后再在启动类上声明@EnableCommonConfig即可,这样的优点是提高了代码的安全性,缺点就是别人不好维护。
在springboot中的源码就有很多这样的EnableXxxx注解,说明在实际开发中这种方法被大众所接受
注册条件
注入到IOC容器中的Bean对象如何插入数据?
-
可以在新建对象时为对象赋值,之后再进行注入。
这种方法是可以插入数据,但是又是和Java代码高度耦合,修改代码是极其繁琐,因此不建议这样做。
-
也可以将对象属性值写入配置文件,再通过@Value导入配置文件,实现与Java代码的解耦。
代码展示:
application.yml
User: name: nihaoage: 19
public class Myconfig {@Bean("User")public User getUser(@Value("${User.name}") String name,@Value("${User.age}") int age){User user = new User();user.setName(name);user.setAge(age);return new User();//返回要注入到bean的对象}}
当我们将配置文件注释之后,再次运行,结果发现,程序报错,和我们的设想不一致,我们设想,有配置文件则选择注入,没有配置文件,就不去注入即可,那么如何去实现?
解析:
springboot提供了设置注册生效条件的注解@Conditional
可以借助这个注解来设置并注册条件,该注解使用较为繁琐,因此springboot官方提供了不少衍生注解来使用,
常用衍生注解:
注解 | 说明 |
---|---|
@ConditionalOnProperty() | 配置而文件中存在对应的属性时,该注解声明下的Bean才会被注册 |
@ConditionalOnMissingBean() | 当不存在当前类型的Bean时,该注解声明下的Bean才会被注册 |
@ConditionalOnClass() | 当前环境存在指定的类时,该注解声明下的Bean才会被注册 |
这个注解如何解决我们刚才的问题呢?
我们的要求:如果配置文件中配置了指定的信息,则注入,否则不注入。
代码展示:
public class Myconfig {@ConditionalOnProperty(prefix = "User",name = {"name,age"})@Bean("User")public User getUser(@Value("${User.name}") String name,@Value("${User.age}") int age){User user = new User();user.setName(name);user.setAge(age);return new User();//返回要注入到bean的对象}}
测试结果:当将配置文件注释之后,User对象并没有被注入到IOC容器中
当配置文件没有被注释时,User Bean对象被注入到IOC容器中
需求:如果IOC容器不存在User,则注入Employee对象,否则不注入
public class Myconfig {@ConditionalOnProperty(prefix = "User",name = {"name,age"})@Bean("User")public User getUser(@Value("${User.name}") String name,@Value("${User.age}") int age){User user = new User();user.setName(name);user.setAge(age);return new User();//返回要注入到bean的对象}@Bean("employee")@ConditionalOnMissingBean(User.class)public Employee getEmployee(){return new Employee();}}
测试结果:当将配置文件注释之后, @ConditionalOnProperty(prefix = "User",name = {"name,age"})注解检测不到属性,则不将User对象注入到IOC容器中,又 @ConditionalOnMissingBean(User.class) 注解检测到User对象在IOC容器中不存在,则将employee对象注入IOC容器。
当配置文件没有被注释时,@ConditionalOnProperty(prefix = "User",name = {"name,age"})注解检测到属性,则将User对象注入到IOC容器中,又 @ConditionalOnMissingBean(User.class) 注解检测到User对象存在与IOC容器,则不将employee对象注入IOC容器。
案例需求:
如果当前环境中存在DispatcherServlet类,则注入Employee,否则不注入。(如果项目中引入了web依赖,则环境中存在DispatcherServlet,否则没有)
@ConditionalOnClass(name = "org.springframework.web.servlet.DispatcherServlet")public Employee getEmployee(){return new Employee();}
当存在DispatcherServlet 类时,则将Employee对象注入到IOC容器中。如果不存在,则不注入。
以上就是Bean管理的详细内容,希望对大家有所帮助!
相关文章:
SpringBoot--Bean管理详解
Bean管理 Bean扫描 回顾spring: 在XML配置文件中,可以借助 <context:component-scan base-package "com.lyc"> 或者注解 ComponentScan(basePackages"com.lyc") 再springboot项目中,既没有标签,也…...
python爬虫实战训练
前言:哇,今天终于能访问豆瓣了,前几天爬太多次了,网页都不让我访问了(要登录)。 先来个小练习试试手吧! 爬取豆瓣第一页(多页同上篇文章)所有电影的排名、电影名称、星…...
探索大型语言模型(LLM)的开源学习路径:mlabonne/llm-course 深度解析
引言:为什么LLM学习需要系统化课程? 近年来,大型语言模型(Large Language Models, LLMs)彻底改变了自然语言处理领域。从GPT系列到Llama、Mistral等开源模型,掌握LLM的开发和应用能力已成为技术人员的核心竞争力。然而,LLM技术栈涵盖从理论基础到工程实践的复杂内容,如…...
IDEA怎么汉化idea中文改回英文版
第一步:点击左上角的File,然后选择Setting 第二步:Setting页面选择 Appearance & Behavior,然后展开System Settings,然后选择 Language and Region,进行修改 我操作的是2024年的版本 File->Settings -> Ap…...
Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
目录 1. 创建Flutter项目 1.1使用Android Studio创建Flutter项目 1.2 使用命令行创建Flutter项目 2. Flutter项目介绍 2.1所有代码都在lib目录下编写 2.1 pubspec.yaml 依赖库/图片的引用 编辑 3. 运行项目 4. 编写mian.dart文件 4.1 使用MaterialApp 和 Scaffold两个组件…...
C++23 中的 ranges::fold_left:范围折叠算法
文章目录 1. **ranges::fold_left 的基本概念**2. **使用示例**示例 1:计算整数范围的和示例 2:计算字符串范围的连接示例 3:使用自定义函数 3. **与其他折叠算法的比较**4. **为什么需要 ranges::fold_left**5. **总结** 随着 C23 的到来&am…...
Vue2项目created不执行
Vue2项目created不执行 设置唯一值 name在 created 调用方法在 watch 中监听路由完整代码示例 设置唯一值 name 在 Vue 组件中,name 属性用于标识组件。确保每个组件的 name 属性是唯一的,这有助于在调试和开发过程中更好地识别组件。 export default …...
mysql的not exists走索引吗
在MySQL中,NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下是关键点总结: 索引的作用: 当子查询的关联字段(例如B.a_id)存在索引(如普通B-tree索引)时&…...
红黑树实现
1.红黑树的概念 红黑树是一棵二叉搜索树,他的每个节点增加一个存储位来表示节点的颜色,可以是红丝或者黑色。通过对任何一条从根到叶子的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平…...
将已打包好的aar文件,上传到 Coding 的 Maven 仓库
将已打包好的aar文件,上传到 Coding 的 Maven 仓库。 在android stuio项目的build.gradle 进行上传。 编写代码 plugins {id maven-publish }// 配置要上传的本地 AAR 文件 def aarFile file(D:\\mylibrary-1.0.0.aar)publishing {publications {mavenAar(MavenP…...
海康相机连接测试-极简版
文章目录 1、下载客户端 1、下载客户端 海康机器人官网下载软件 软件下载地址 先下载客户端测试连接 按照你的相机的类型选择客户端 安装完毕后,确保USB线插的是3.0的端口 软件会自动识别相机型号 在上方有播放按钮,可以采集图像信息显示...
深入探索:Core Web Vitals 进阶优化与新兴指标
一、INP(Interaction to Next Paint)深度解析 INP 与 FID 的核心差异 • 响应范围:FID仅测量首次输入延迟,而INP跟踪页面生命周期中所有关键交互 • 测量维度:INP综合考虑输入延迟、处理时间和下一帧渲染时间 • 评…...
AI与产品架构设计系列(2):Agent系统的应用架构与落地实
什么是AI Agent?其在架构中的独特定位 AI Agent(人工智能代理)是一种模拟人类智能行为的自主系统,通常以大型语言模型(LLM)作为核心引擎。简单来说,Agent能够像人一样感知环境信息、规划行动方…...
OpenAI与微软洽谈新融资及IPO,Instagram因TikTok流失四成用户
OpenAI与微软洽谈新融资及IPO 据悉,OpenAI 正与微软洽谈新融资及筹备 IPO,关键问题是微软在 OpenAI 重组后的股权比例。微软已投资超 130 亿美元,双方修订 2019 年合同,微软拟弃部分股权换新技术访问权。OpenAI 上周放弃了有争议转…...
架构篇、第五章_05Jenkins的部署与构建
Linux_架构篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:Jenkins的部署与构建 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.15 适用环境: Centos7 文档说明 本文档围绕 Jenkins 的部署与构建展开&a…...
`ParameterizedType` 和 `TypeVariable` 的区别
在 Java 的泛型系统中,ParameterizedType 和 TypeVariable 是两个不同的类型表示,它们都属于 java.lang.reflect.Type 接口的子接口。两者都在反射(Reflection)中用于描述泛型信息,但用途和含义不同。 🌟 一…...
HTML 中的 input 标签详解
HTML 中的 input 标签详解 一、基础概念 1. 定义与作用 HTML 中的 <input> 标签是表单元素的核心组件,用于创建各种用户输入字段。作为一个空标签(没有闭合标签),它通过 type 属性来决定呈现何种输入控件,是实…...
从 Vue3 回望 Vue2:性能优化内建化——从黑盒优化到可控编译
文章目录 从 Vue3 回望 Vue2:性能优化内建化——从黑盒优化到可控编译1. 引言2. Vue2 的性能优化机制解析3. Vue3 的编译期优化能力拆解3.1 静态提升(Static Hoisting)3.2 Patch Flag 精确标记3.3 Block Tree (块级更新边界&#…...
HOW - React NextJS 的同构机制
文章目录 一、什么是 Next.js 的同构?二、核心目录结构三、关键函数:如何实现不同渲染方式?1. getServerSideProps —— 实现 SSR(每次请求动态获取数据)2. getStaticProps getStaticPaths —— 实现 SSG(…...
电动汽车直流快充充电桩AEV200-DC240M4的详细介绍
电动汽车直流快充充电桩AEV200-DC240M4产品简介 AEV系列为全新一代分体式电动汽车直流恒功率快速充电机。系统内置 30/40kW 恒功率充电模块,最高输出电压1000V,满足各类车辆充电需求。模块采用隔离风道灌胶设 计 ,可靠性高 ,可应…...
YOLOv7训练时4个类别只出2个类别
正常是4个类别: 但是YOLOv7训练完后预测总是只有两个类别: 而且都是LFM和SFM 我一开始检查了下特征图大小,如果输入是640*640的话,三个尺度特征图是80*80,40*40,20*20;如果输入是416*416的话,三个尺度特征…...
数据赋能(224)——数据与业务协同——数据动态调整原则
概述 数据动态调整原则不仅能帮助组织迅速响应业务需求和技术环境的变化,还能确保数据应用始终与最新的数据处理技术、算法和工具保持同步。通过实施数据动态调整,企业能够更准确地捕捉业务趋势,优化数据质量,以及提高资源利用效…...
Vulfocus靶场-文件上传-3
WSO2 文件上传 (CVE-2022-29464) WSO2是一家成立于 2005 年的开源技术提供商。它提供了一个企业平台,用于在本地和整个 Internet 上 集成应用程序编程接口(API)、应用程序和 Web 服务。 某些 WSO2 产品允许无限制的文件上传和远程代码执行。…...
(for 循环) VS (LINQ) 性能比拼 ——c#
在大多数情况下,for 循环的原始性能会优于 LINQ,尤其是在处理简单遍历、数据筛选或属性提取等场景时。这是由两者的实现机制和抽象层次决定的。以下是具体分析: 一、for 循环与 LINQ 的性能差异原因 1. 抽象层次与执行机制 for 循环&#…...
自学嵌入式 day19-数据结构 链表
二、线性表的链式存储 1.特点: (1)线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。 (2)所以…...
一发入魂:极简解决 SwiftUI 复杂视图未能正确刷新的问题(中)
概述 各位似秃非秃小码农们都知道,在 SwiftUI 中视图是状态的函数,这意味着状态的改变会导致界面被刷新。 但是,对于有些复杂布局的 SwiftUI 视图来说,它们的界面并不能直接映射到对应的状态上去。这就会造成一个问题:状态的改变并没有及时的引起 UI 的变化。 如上图所示…...
UI自动化测试详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、about自动化测试 定义:把人为驱动的测试转化为机器执行的一种过程,重点在于持续集成这个概念; 优势:节约人力…...
数学复习笔记 14
前言 和家里人交流了一下,他们还是希望我全力以赴初试,我确实也得放开了干,不要束手束脚的。好好加油。感觉公共课都没有啥压力,主要是专业课要好好加油,真不能过不了线,要是过不了线,啥都白搭…...
单元化架构
目录 编辑 单元化 逻辑单元 单元化 多地多机房部署,是互联网系统的必然发展方向,一个系统要走到这一步,也就必然要解决上面提到的问题:流量调配、数据拆分、延时等。业界有很多技术方案可以用来解决这些问题&…...
硬件厂商的MIB文档详解 | 如何查询OID? | MIB Browser实战指南-优雅草卓伊凡
硬件厂商的MIB文档详解 | 如何查询OID? | MIB Browser实战指南-优雅草卓伊凡 一、硬件厂商的MIB文档是什么? 1. MIB的本质:设备的”数据字典” MIB(Management Information Base) 是SNMP协议的核心数据库,定义了设备…...
遥感图像露天矿区检测数据集VOC+YOLO格式1542张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1542 标注数量(xml文件个数):1542 标注数量(txt文件个数):1542 …...
【python基础知识】Day 27 函数专题2:装饰器
知识点: 装饰器的思想:进一步复用函数的装饰器写法注意内部函数的返回值 装饰器教程 作业: 编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值) def logger(func):def wrapper(*ar…...
游戏站的几种形式
游戏站点的主要形式:单品游戏站、游戏盒子站与单类型游戏盒子站 随着互联网的普及和游戏产业的快速发展,游戏站点作为玩家获取游戏资源和信息的重要平台,呈现出多种形式。本文将分析三种常见的游戏站点形式:单品游戏站、游戏盒子站…...
动态IP赋能业务增效:技术解构与实战应用指南
在数字化转型加速的今天,IP地址作为网络通信的基础设施,其技术特性正深刻影响着企业业务架构的效率与安全性。动态IP(Dynamic IP)作为互联网资源分配的核心机制,早已突破传统认知中的"临时地址"定位…...
Redis 五种类型基础操作(redis-cli + Spring Data Redis)
目录 一、什么是 Redis? 二、Redis 的特点 三、Redis 常见的数据类型 四、Redis 的典型应用场景 五、redis-cli(命令行工具)练习命令 1.1、String 类型(最基本的数据类型) 1.2、List 类型(链表结构&a…...
Gitee DevOps:中国企业数字化转型的加速引擎
随着中国数字经济规模突破50万亿元大关,研发效能已成为企业数字化转型的核心竞争力指标。在2025年这个关键节点,中国企业面临的不再是是否采用DevOps的选择题,而是如何选择最适合本土环境的DevOps平台的战略决策。Gitee DevOps平台凭借其独特…...
【数据仓库面试题合集①】数据建模高频面试题及解析
🧠 面试官爱问什么?——核心考察点 数据建模作为数仓岗位面试的重头戏,考察的不只是模型知识,更是对业务理解、抽象能力和工程落地经验的综合评估。常见题型可分为三类: 概念类:模型类型、建模方法论(如维度建模、范式建模) 场景类:给定一个业务场景进行模型设计(如…...
华为云Flexus+DeepSeek征文|SpringBoot开发实战:基于ModelArts Studio高效集成DeepSeek大模型服务
目录 一、前言 二、ModelArts Studio(MaaS)介绍与使用 2.1ModelArts Studio(MaaS)介绍 2.2 ModelArts Studio(MaaS)使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、MaaS模型服务接口测试 3.1 …...
【C++】类与对象
C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构中,用C语言方式实现的栈,结构体中只能定义变量;现在以C方式实现,会发现struct中也可以定义函数。 struct Stack {// 成员函数void Init(int defaultCapacity 4){a (int*)mall…...
mac M芯片运行docker-desktop异常问题
虽然mac已经迭代到m4了,但官方的docker-desktop运行仍然有问题,包括但不限于: 命令行docker找不到docker-desk打不开docker-desktop闪退容器起不来 尝试不同版本后,看到了其他可以在mac跑docker的开源方法,更简单、轻…...
5G 技术在智能制造中的应用:加速工业革命的新引擎
5G 技术在智能制造中的应用:加速工业革命的新引擎 在过去几十年里,制造业经历了从机械化到自动化,再到如今的智能化变革。而 5G 技术的出现,不仅是一次通信技术的升级,更是为 智能制造 注入了新的动力。从 智能工厂、工业物联网(IIoT) 到 远程控制与数据智能分析,5G 正…...
数据治理域——数据同步设计
摘要 本文主要介绍了数据同步的多种方式,包括直连同步、数据文件同步和数据库日志解析同步。每种方式都有其适用场景、技术特点、优缺点以及适用的数据类型和实时性要求。文章还详细探讨了数据直连同步的特点、工作原理、优点、缺点、适用场景等,并对数…...
系统架构设计师案例分析题——web篇
软考高项系统架构设计师,其中的科二案例分析题为5选3,总分75达到45分即合格。本贴来归纳web设计题目中常见的知识点即细节: 目录 一.核心知识 1.常见英文名词 2.私有云 3.面向对象三模型 4.计网相关——TCP和UDP的差异 5.MQTT和AMQP协…...
FC7300 SPI MCAL配置引导
一、MCU 组件 - 配置SPI时钟 MCU中配置的SPI输入时钟频率至少应大于2倍的SPI组件中配置的外设波特率。SPI时钟配置为30MHz 二、SPI 组件 - General Spi Level Delivered: 0 级:仅简单同步行为1 级:基本异步行为,通过中断实现2 级:增强型行为,通过轮询实现根据AUTOSAR SPI…...
【记录】Windows|竖屏怎么调整分辨率使横竖双屏互动鼠标丝滑
本文版本:Windows11,记录一下,我最后调整的比较舒适的分辨率是800*1280。 文章目录 第一步 回到桌面第二步 右键桌面第三步 设置横屏为主显示器第四步 调整分辨率使之符合你的需求第五步 勾选轻松在显示器之间移动光标第六步 拖动屏幕符合物理…...
hghac和hgproxy版本升级相关操作和注意事项
文章目录 环境文档用途详细信息 环境 系统平台:N/A 版本:4.5.6,4.5.7,4.5.8 文档用途 本文档用于高可用集群环境中hghac组件和hgproxy组件替换和升级操作 详细信息 1.关闭服务 所有数据节点都执行 1、关闭hgproxy服务 [roothgdb01 tools]# system…...
【超分辨率专题】一种考量视频编码比特率优化能力的超分辨率基准
这是一个Benchmark,超分辨率视频编码(2024) 专题介绍一、研究背景二、相关工作2.1 SR的发展2.2 SR benchmark的发展 三、Benchmark细节3.1 数据集制作3.2 模型选择3.3 编解码器和压缩标准选择3.4 Benchmark pipeline3.5 质量评估和主观评价研…...
操作系统之进程和线程听课笔记
计算机的上电运行就是构建进程树,进程调度就是在进程树节点进程进行切换 进程间通信的好处 经典模型 生产者和消费者 进程和线程的区别 线程引入带来的问题线程的优势 由于unix70年代产生,90年代有线程,当时数据库系统操作需要线程,操作系统没有来得及重造,出现了用户态线…...
Mac安装Navicat16
我的电脑用的是M3芯片,然后在安装的时候也踩了很多的坑 先分享一下链接 通过网盘分享的文件:Navicat Premium v16.2.dmg 链接: https://pan.baidu.com/s/1ENLtU7VLCvzntLKqSyFiqg?pwd1234 提取码: 1234 其实按理说用navicat17也是可以的 首先下载完成后…...
表的设计、聚合函数
目录 1、表的设计 1.1、一对一 1.2、一对多 1.3、多对多 2、插入查询结果 3、聚合查询 3.1、聚合函数 3.2、GROUP BY子句 1、表的设计 根据实际的需求场景,明确当前要创建几个表,每个表什么样子,这些表之间是否存在一定联系 1. 梳理…...