Spring面试知识

news/2025/3/4 4:01:15/文章来源:https://www.cnblogs.com/tdsmomo/p/18746425

Spring优点

1.通过控制反转和依赖注入实现低耦合
2.面向切面编程,将业务逻辑和系统功能区分开来(日志记录、事务管理、安全性)
3.切面和模板可以减少板式代码
4.声明式事务的支持(@Translation)可以实现对事务代码的灵活管理,提高代码的质量和效率
5.多种内置的框架(Mybaties)
6.可以进行方便的测试,添加注释就可以进行测试数据

Spring 用到了哪些设计模式

1.简单工厂模式,根据传入的关键词返回一个唯一bean
alt text
alt text

简单工厂模式和工厂方法模式的区别
alt text
alt text
alt text
alt text
工厂方法表现在父类和子类,父类是抽象的,子类是给出具体实现方法的。

什么是AOP

面向切面编程,将一些系统的公共逻辑如日志缓存等操作设置为切面,来实现与业务逻辑的分离。减少了系统的重复代码降低了耦合度,aop就是那些与业务无光,所有业务都可以调用的公共业务逻辑。

AOP有哪些实现方式

1.静态代理
有目标类和代理类,在编译的时候就设置了代理类,是在目标类上的增强。需要和目标类具有相同的接口。
缺点:目标类和代理类之间会有冗余代码,并且更新了接口后需要在目标类和代理类之间同时改动。
缺点:
代理类和目标类的区别
alt text
alt text
alt text
alt text
编译时注入,在编译过程中,目标类多出了一些增强的功能,变成了一个新的代理类。
alt text
2.动态代理
在程序运行中建立,对原有的目标类进行了增强但没有生成新的类。
并非主动的去建立了一个类,代理对象可以在调用前后去执行一些逻辑。。程序要主动执行到那个地方才会生成的新类,在这个类中去定义一些调用前后的逻辑。
介绍动态代理

普通类和实体类区别
普通类没有去实现接口,实现类完成了接口的定义方法

JDK动态代理和CGLIB动态代理的区别

1.如果类实现了接口,通过jdk动态代理生成的代理类,会自动实现接口中的方法。JDK动态代理的核心是InvocationHandler接口和Proxy类。
缺点:目标类必须有实现的接口。如果某个类没有实现接口,那么这个类就不能用JDK动态代理

2.CGLTB动态代理:通过继承实现。如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类
CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。
alt text

Spring AOP相关术语

alt text

Spring通知有哪些类型

在方法执行的某个阶段调用的方法,如执行前后,异常等
alt text

什么是IOC?

IOC:控制反转,由Spring容器管理bean的整个生命周期。通过反射实现对其他对象的控制,包括初始化、创建、销毁等,解放手动创建对象的过程,同时降低类之间的耦合度
不同于传统的对象建立,去new,控制反转将对象的状态管理,交给了spring容器实现

IOC的好处

spring容器就是一个第三方容器,spring就是一个ioc
alt text

什么是依赖注入

在Spring创建对象的过程中,把对象依赖的属性注入到对象中。依赖注入主要有两种方式:构造器注入和属性注入

IOC容器初始化过程

在容器启动加载时,bean对象都会被加载注入到容器中,但懒加载是使用到它时候才去构建
alt text
alt text
alt text

BeanFactory和FactoryBean的区别

alt text

BeanFactory和ApplicationContext有什么区别

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
1.作为子接口,其功能更多,支持国际化,统一的资源文件访问方式
2。加载方方式,一个是懒加载一个是全加载,带来的系统开销压力都不同。
3.创建方式和注册方式。
alt text
alt text

Bean注入容器有哪些方式

1.@Configuation,@Bean
alt text
alt text
alt text
alt text

bean的作用域

因为bean是在内存中,提供了几种方法来管理bean。
alt text
alt text

Spring自动装配的方式有哪些

指定了一个类class
alt text
根据id去寻找,三个都是一体的
alt text
alt text

@Autowired和@Resource的区别

alt text
alt text
alt text
同一类型可以存在多个bean吗(可以)
alt text
alt text
alt text
alt text

@Qualifier 注解有什么作用

相同类型bena很多,通过唯一的name从中获得正确的bean。
当需要创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个 bean 来消除歧义

@Bean和@Component有什么区别

都是使用注解定义 Bean。@Bean 是使用 Java 代码装配 Bean,@Component 是自动装配 Bean

  • @Component用于类上,表明一个类会作为组件类,并告知Spring要为这个类创建bean,每个类对应一个 Bean。
  • @Bean 注解用在方法上,表示这个方法会返回一个 Bean。@Bean 需要在配置类中使用,即类上需要加上@Configuration注解。
    alt text

@Component、@Controller、@Repositor和@Service 的区别?

alt text

Spring 事务实现方式有哪些

事务定义就是原子操作,不可分隔。
编程式就是自己写逻辑,声明式就是用注解
alt text
alt text

有哪些事务传播行为

在TransactionDefinition接口中定义了七个事务传播
1.存在,则去添加,如果是嵌套了多次。对于不同线程要开启不同的事务。相同线程则只需要一个
2.存在则执行,不存在在不作为事务执行。
3.存在则执行,不存在则抛出异常
4.不论是否存在,开启新的事务。
5.总是非事务执行,挂起任何存在事务。
6.总是非事务执行,如果挂起任何存在的事务,抛出异常
7.如果一个存在事务,则进行其那套,不存在则进行1.
alt text
alt text

Spring事务什么时候会失效

1.访问权限:访问权限必须设置为public(源码来看,如果值不是public则返回null)
2.方法被final修饰,因为spring要用aop生成代理类,如果方法被修饰就无法被重写
3.对象没有被Spring进行管理,没有在controller,service和component这样的
4.表无法被管理,如果MySQL使用的存储引擎是myisam,这样的话是不支持事务的。因为myisam存储引擎不支持事务
5.方法内部调用(因为发生事务回滚需要),经过spring代理类发起的才会进入到管理中
alt text
使用代理对象调用类则可以进入到事务
alt text
事务没有发现到异常,而是通过trycatch结束,之前的事务就不会进行一个回滚。
alt text

Spring怎么解决循环依赖的问题

非单列对象指的是bean才全局中不是唯一的,有可能是@scope定义的每次请求多出一个的。
alt text
三级缓存
alt text
构造器注入解决方法
1.使用@Lazy注解@Lazy注解会延迟Bean的初始化,直到第一次使用时才初始化
alt text
2.不将bean设置为final要求去尝试注入一个,而是通过传值来进行初始化
alt text
非单列
final体现在
alt text
解决
alt text
alt text
alt text

Spring的启动过程

1.读取web.xml
2.创建 ServletContext,为 ioc 容器提供宿主环境
3。触发容器初始化事件,contextLoaderListener.contextInitialized()方法,在这个方法会初始化一个应用上下文WebApplicationContext
即ioc容器,ioc容器初始化完成后,会加入到servletcontext中
4.初始化web.xml中配置的servlet,如DispatcherServlet,用于匹配、处理每个servlet请求

Spring 的单例 Bean 是否有并发安全问题

spring的请求会开启一个独立的线程,但这些线程会可能共同的使用同一个bean
alt text

Spring Bean如何保证并发安全

1.改变bean的策略,对 web 项目,可以 Controller 类上加注解 @Scope("prototype") 或 @Scope("request"),对非 web 项目,在 Component 类上添加注解 @Scope("prototype")
每次请求处理的都是独立的bean,但是这种方法会导致系统的开销变大
2.尽量避免使用成员变量
使用redis等分布式共享信息
alt text

@Async注解的原理

alt text
alt text
alt text

为什么 Spring和IDEA 都不推荐使用 @Autowired 注解

alt text

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892286.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GVIM环境配置记录

背景 GVIM只用自带安装的软件,可以完成文本编辑的功能,不过很多开发者编写了很多插件,配合这些插件来做文字代码编辑,能很好地提高速度与效率 GVIM的配置环境,装机后只配置一次,很容易忘记,下次重装系统或者配新机时,又要重新查找相关资料 这里做一次记录,方便后续重新…

VIM环境配置记录

背景 VIM只用自带安装的软件,可以完成文本编辑的功能,不过很多开发者编写了很多插件,配合这些插件来做文字代码编辑,能很好地提高速度与效率 VIM的配置环境,装机后只配置一次,很容易忘记,下次重装系统或者配新机时,又要重新查找相关资料 这里做一次记录,方便后续重新配…

endnote 基础使用

因为工作的原因,综述格式统一使用endnote。一小时速成,可以满足基础的综述引用。 安装 安装的是endnote 21,这个界面感觉比较简洁。 EndNote 21 的安装包中有汉化补丁 "D:\Program Files (x86)\EndNote 21\安装包\Crack\汉化补丁.exe" 2024-11-18 Endnote21更新-…

Day1-Markdown学习笔记

MarkDown学习 标题 一个#然后空格加内容是一级标题,两个是二级标题,三个是三级标题 字体 hello world hello world *** hello world*** hello world 一对*加上内容是斜体,两对是加粗,三对是既加粗又斜体, 一对~是加横线,就是废弃的意思 引用引用别人的内容一个> 加…

2025-03-02 闲话

2025-03-02 闲话走进这里时,求是园欢迎您。离开时,它会说,再见。昨天十一点,从这里走上蒋墩路,过了马路,是夜晚的学军。周末不再灯火通明,只剩下校门口的主灯,照亮着蓝色匾额的威严。昨天发了点牢骚,2023 年时进这个校园,不需要预约,刷脸时能发现不只一个我在这里的…

Semantic Kernel:接入azure中的deepseek-r1

SemanticKernel已经支持deepseek-r1了,官方的Blog地址是https://devblogs.microsoft.com/semantic-kernel/using-deepseek-models-in-semantic-kernel,同时给出了接入的Demo,遗憾的是deepseek不支持API的充值,没有办法测试。办法总比困难多,正好微软现在支持在Azure部署de…

C#中的Channel

在 .NET 的异步编程中,System.Threading.Channels 提供了一种强大的方式来处理生产者-消费者模式,尤其是当我们要在不同的任务或服务之间传递数据时。这篇文章我们就来聊聊 UnboundedChannelOptions 和 BoundedChannelOptions 这两个类,以及它们的使用场景和区别。代码背景介…

Kimi/DeepSeek最新论文MoBA与NSA阅读

From:https://www.big-yellow-j.top/posts/2025/02/21/Kimi-DS-Paper.html DeepSeek最新论文:Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention以及 Kimi最新论文MOBA: MIXTURE OF BLOCK ATTENTION FOR LONG-CONTEXT LLMS这几篇文章都是针…

Windows 剪贴板 编程原理引入

前言 不得不说上三休四的生活就是舒服,我都有精力提升自己了。 本文将基于自己在生活中遇到的现象进行探索,因此问题引入对自己较为重要,读者可以跳过。 文章主要探讨剪贴板格式问题,即下面的链接。https://learn.microsoft.com/zh-cn/windows/win32/dataxchg/standard-cli…

.NET9中基于策略角色验证的包冲突

今天在.NET项目中,使用基于策略角色的鉴权时,遇到一个401的问题,场景如下:Program.cs代码如下:using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; usin…

yolov5预处理

1.yolov5预处理流程1.等比缩放与填充:将输入图像等比缩放到目标尺寸(如640640),并在多余部分填充灰条,保持图像的宽高比不变。这一过程也被称为“letterbox”。  2.颜色空间转换:将图像从BGR格式转换为RGB格式(OpenCV默认读取为BGR)。  3.归一化:将像素值从[0, 25…