spring常见面试题(2023最新)

article/2025/10/7 10:24:26

目录

  • 前言
  • 1.spring是什么
  • 2.spring的设计核心是什么
  • 3.IOC和AOP面试题
  • 4.spring的优点和缺点
  • 5.spring中bean的作用域
  • 6.spring中bean的注入方式
  • 7.BeanFactory 和 ApplicationContext有什么区别?
  • 8.循环依赖的情况,怎么解决?
  • 9.spring中单例Bean是线程安全的吗?
  • 10.spring如何处理线程的并发问题?
  • 11.spring中bean的生命周期
  • 12.spring Bean的扩展点
  • 13.在 Spring中如何注入一个java集合?
  • 14.bean的自动装配
  • 15.spring用到了那些设计模式
  • 16.spring的常用注解
  • 17.spring 事务实现方式有哪些?
  • 18.spring事务的实现方式和实现原理
  • 19.说一下 spring 的事务隔离?
  • 20.spring事务的传播行为

前言

java最新面试题(java基础、集合、多线程、jvm、锁、算法、CAS、Redis、数据库、mybatis、spring、springMVC、springBoot、微服务)

1.spring是什么

轻量级开发框架,为java提供了基础架构支持,简化了企业级应用开发,让开发者只需要关注业务逻辑。

2.spring的设计核心是什么

IOC和AOP

3.IOC和AOP面试题

谈谈你对IOC和AOP的理解

4.spring的优点和缺点

优点:
①解耦和方便开发:spring容器进行对象的创建和管理。
②AOP的支持:面向切面编程,实现日志和权限拦截等功能。
③声明事务的支持:通过配置进行事务管理,不需要手动编写。
④方便集成各种框架。

缺点:
①使用大量反射机制,占内存,不如直接调用效率高。
②没有做到依赖管理。
③集成的框架耦合度高,不易拆分。

5.spring中bean的作用域

①singleton(单例模式): 默认作用域,在spring容器中一个bean只创建一个实例,所有对bean的请求和引用都会返回这个实例。适用都是无状态的bean。
②prototype(原型模式): 每次请求都会为bean创建一个实例。适用都是有状态的bean。
③request(请求作用域): 为每一个HTTP请求创建一个实例,在请求完成以后,bean会失效,会被垃圾回收器回收。
④session(会话作用域): 为每一个HTTP会话创建一个实例,不同会话使用不同实例,session销毁,bean失效。
⑤global-session(全局作用域): Spring5 已经没有了。

有状态: 有数据存储功能。
无状态: 不会保存数据。

6.spring中bean的注入方式

①构造器注入
②Setter注入
③接口注入(灵活性和易用性差,Spring4已经废弃)

7.BeanFactory 和 ApplicationContext有什么区别?

是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。
ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能。

区别:
① BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。
② BeanFactory需要手动注册,而ApplicationContext则是自动注册。
③ BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。

8.循环依赖的情况,怎么解决?

循环依赖:A依赖B,B依赖C,C依赖A,形成了闭环。

①构造器的循环依赖: 这种依赖spring是处理不了的,直接抛出异常。
②单例模式下的setter循环依赖: 通过"三级缓存"处理循环依赖,能处理。
③多例模式下的setter循环依赖: 不能处理,会一直产生新的Bean,导致OOM。

9.spring中单例Bean是线程安全的吗?

不是,因为所有线程共享一个单例Bean,存在资源的竞争所以是线程不安全的,实际上大部分时间Bean是无状态的,所以说在某种程度上来说Bean其实是安全的。如果是有状态,那就需要开发人员修改bean的作用域。singleton改为prototype。

有状态: 有数据存储功能。
无状态: 不会保存数据。

10.spring如何处理线程的并发问题?

①把成员变量写在方法内。
②使用ThreadLocal,ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。
③修改bean的作用域,singleton改为prototype。(@Scope(“prototype”))
④使用synchronized修饰。

11.spring中bean的生命周期

bean: 是由 Spring IoC 容器实例化、组装和管理的对象。
正常情况: 当bean不在被使用,就会被回收。
单例模式: spring中bean的生命周期分为:实例化Bean->Bean属性填充->初始化Bean->销毁Bean。
多例模式: spring无法进行管理,所以将生命周期交给用户控制。

12.spring Bean的扩展点

1.专用拓展点:用于单个 Bean 的扩展,定义 Bean 类时实现接口来扩展功能

(1) Aware 接口及子接口:属性填充的时候注入 Bean 信息或上下文等信息

使用 BeanNameAware接口 将当前 Bean 的名称注入到类中
public class Xinxin implements BeanNameAware {private String beanName;@Overridepublic void setBeanName(String name) {this.beanName = name;}
}

(2) InitializingBean 和 DisposableBean 接口

InitializingBean:在 Bean 初始化时添加自定义逻辑
DisposableBean :在 Bean 销毁时添加自定义逻辑

public class Xinxin implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() {// do some initialization work}@Overridepublic void destroy() {// do some destruction work}
}

(3) 使用@Bean注解在Bean初始化时和Bean销毁时自定义逻辑

public class Xinxin{public void init() {// do some initialization work}public void destroy() {// do some destruction work}
}@Configuration
public class AppConfig {//initMethod 属性指定 Bean 初始化方法,destroyMethod 属性指定 Bean 销毁方法。@Bean(initMethod = "init", destroyMethod = "destroy")public Xinxin xinxin() {return new Xinxin();}
}

(4) 使用注解@PostConstruct(修饰的方法为Bean初始化时执行的方法)和@PreDestroy(修饰的方法为Bean销毁时执行的方法)

public class Xinxin{@PostConstructpublic void init() {// do some initialization work}@PreDestroypublic void destroy() {// do some destruction work}
}

2. 通用扩展点:用于所有 Bean 的扩展,单独定义类实现接口来扩展功能

(1) BeanPostProcessor 接口:实现该接口可以在 Bean 初始化前后添加自定义逻辑。

@Component
public class XinxinInitProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// before initialization workreturn bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// after initialization workreturn bean;}
}

(2)InstantiationAwareBeanPostProcessor 接口:实现该接口可以在 Bean 实例化前后添加自定义逻辑。

@Component
public class XinxinInstanceProcessor implements InstantiationAwareBeanPostProcessor {@Overridepublic Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {// before instantiation workreturn null;}@Overridepublic boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {// after instantiation workreturn true;}
}

(3) DestructionAwareBeanPostProcessor 接口:实现该接口可以在 Bean 销毁前添加自定义逻辑。

@Component
public class BeanDestroyProcessor implements DestructionAwareBeanPostProcessor {@Overridepublic void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException {// before destruction work}
}

在这里插入图片描述

13.在 Spring中如何注入一个java集合?

Spring提供以下几种集合的配置元素:
想要注入java集合,就是注入集合类。
list: 类型用于注入一列值,允许有相同的值。
set: 类型用于注入一组值,不允许有相同的值。
map: 类型用于注入一组键值对,键和值都可以为任意类型。
props: 类型用于注入一组键值对,键和值都只能为String类型。

14.bean的自动装配

spring会在上下文中自动寻找,并自动给bean装配属性。之前属性需要我们手动注入。

15.spring用到了那些设计模式

工厂模式: beanFactory就用到了简单工厂模式。
单例模式: Bean默认为单例模式。
代理模式: AOP用到了JDK的动态代理模式。
模板模式: 减少代码冗余,Jdbc模板等。
观察者模式: 定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。spring监听器的实现就用了观察者模式。

16.spring的常用注解

@Component(任何层)、@Controller(表现层)、@Service(逻辑层)、@Repository(持久层): 被修饰的类,会被spring扫描到并注入到bean容器中(实例化对象)。
@Scope: 设置spring的作用域。
@Bean: 用于将方法返回值对象放入容器。
@Import: 在一个配置类中导入其它配置类的内容。
@AutoWired: 按照类型匹配注入。
@Qualifier: 和AutoWired联合使用,在按照类型匹配的基础上,在按照名称匹配。
@Resource: 按照名称匹配依赖注入。
@Configuration: 被此注解标注的类,会被 Spring 认为是配置类。
@ComponentScan: 用于对组件(Component)进行扫描。
@Transactional: 可以用于类和方法上,具有事务管理的功能
@Value: 将外部的值动态注入到 Bean 中。
       @Value(“${}”):可以获取配置文件的值。
        @Value(“#{}”):表示SpEl(Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。)表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。

17.spring 事务实现方式有哪些?

编程式: beginTransaction()、commit()、rollback()等事务管理相关的方法,灵活度高,但是维护性差。
声明式: 利用注解或者xml配置,将业务和事务分离出来。

18.spring事务的实现方式和实现原理

spring事务就是对数据库事务的支持,没有数据库的事务支持,spring是无法提供事务
功能的。

19.说一下 spring 的事务隔离?

五大隔离级别。
ISOLATION_DEFAULT: 默认值,使用数据库的隔离级别。
ISOLATION_READ_UNCOMMITTED: 读未提交。
ISOLATION_READ_COMMITTED: 读已提交。
ISOLATION_REPEATABLE_READ: 可重复读。
ISOLATION_SERIALIZABLE: 序列化。

20.spring事务的传播行为

REQUIRED(默认):默认事务传播行为,存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
REQUIRE_NEW:它不管是否存在事务,它都会新开启一个事务来执行,新老事务相互独立的,外部事务抛出异常,并不会影响内部事务的一个正常提交。
NESTED:如果当前存在事务,就嵌套当前事务中去执行,如果当前没有事务,那么就新建一个事务,类似 REQUIRE_NEW这个样一个传播行为。
SUPPORTS:表示支持当前当前的事务,如果当前不存在事务,就以非事务的方式去执行。
NOT_SUPPORT: 总是非事务地执行,并挂起任何存在的事务。
MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
NEVER:就是以非事务的方式来执行,如果存在事务则抛出一个异常。


http://chatgpt.dhexx.cn/article/JWEFFtsN.shtml

相关文章

spring面试题及答案

关注公众号&#xff0c;获取更多面试题及答案。 69道Spring面试题 1.什么是spring? Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发&#xff0c;并通过…

【2022版】Spring面试题整理(含答案解析)

1、不同版本的 Spring Framework 有哪些主要功能&#xff1f; 2、什么是 Spring Framework&#xff1f; Spring 是一个开源应用框架&#xff0c;旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构&#xff0c;允许用户选择组件&#xff0c;同时还为 …

Spring面试题大全含答案共79题(2022最全spring超级葵花宝典)

1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的…

2022最新Spring面试题附完整答案

Spring面试题 一、单选题 1.Spring是年发布的( ) A.2022 B.2004 C.2006 D.2008 2.Spring中的对象的作用域不包括( ) A.session B.servletContext C.singleton D.proptotype 3.在Spring的配置文件中定义了如下代码&#xff0c;说法正确的是( ) <bean id”studen…

Spring面试题(2020最新版)

Java面试总结&#xff08;2021优化版&#xff09;已发布在个人微信公众号【技术人成长之路】&#xff0c;优化版首先修正了读者反馈的部分答案存在的错误&#xff0c;同时根据最新面试总结&#xff0c;删除了低频问题&#xff0c;添加了一些常见面试题&#xff0c;对文章进行了…

Spring面试题(2022版)

序列号内容链接1Java基础知识面试题&#xff08;2022版&#xff09;https://blog.csdn.net/qq_43061290/article/details/1240237972Java集合容器面试题&#xff08;2022版&#xff09;https://blog.csdn.net/qq_43061290/article/details/1240433633Java异常面试题&#xff08…

springIOC面试题

1.什么是spring Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架&#xff0c;以 IoC和AOP为内核。含有七大核心模块 2. 简单描述spring的七大模块 (1)Spring Core&#xff1a;核心容器提供了Spring的基本功能。核心容器的核心功能是用Ioc容器来管理类的依赖关系&am…

77道Spring面试题以及参考答案(2021年最新版)

77道Spring面试题以及参考答案&#xff08;2021年最新版&#xff09;&#xff0c;分享给大家~ 一、Spring概述 1. 什么是spring&#xff1f; Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各…

Spring面试题汇总

1、 简述Spring框架 概念 Spring致力于Java EE应用的各种解决方案&#xff0c;是一款轻量级框架&#xff0c;大大简化了Java企业级开发&#xff0c;提供了强大、稳定的功能。 Spring主要有两个目标&#xff1a;一是让先有技术更易于使用&#xff0c;二是促进良好的编程习惯(或者…

最新整理Spring面试题2023

Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 有些同学可能会抢答&#xff0c;不熟悉!!! 好了&#xff0c;不开玩笑&#xff0c;面对这个问题我们应该怎么来回答呢&#xff1f;我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍…

Spring面试题及答案(2021年Spring面试题大全带答案)

最近梳理2021最新 Spring 面试题 全家桶【附答案解析】&#xff0c;包含了 Java基础、Spring、SpringMVC、Redis、SpringCloud、设计模式、等多个类型。 今天这篇是关于 Spring 全家桶面试题&#xff0c;总结了 110 道经典问题。 这套Spring面试题大全&#xff0c;希望对大家…

spring的15个经典面试题

总结Spring框架的15个经典面试题。 什么是Spring框架&#xff1f; Spring是一种轻量级框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块可以很方便地协…

Spring常见面试题汇总(超详细回答)

1.什么是Spring框架&#xff1f; Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组…

Spring常见的77道面试题及答案(2022版)

一、Spring概述 1. 什么是spring&#xff1f; 2. Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么&#xff1f; 3. Spring的优缺点是什么&#xff1f; 4. Spring有哪些应用场景 5. Spring由哪些模块组成&#xff1f; 6. Spring 框架中都用到了哪些设计模式&…

Spring常见面试题55道(附答案2023最新版)

1、什么是 Spring 框架&#xff0c;它的优点是什么&#xff1f;它的主要功能是什么&#xff1f; Spring 框架是一个开源的 Java 框架&#xff0c;主要用于开发企业级 Java 应用程序。它提供了一组强大的功能和工具&#xff0c;使得开发者能够更加容易地构建高效、可维护和可扩…

【2022最新Java面试宝典】—— Spring面试题(75道含答案)

目录 1. Spring概述1.1 什么是spring?1.2 Spring的俩大核心概念1.3 Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么1.4 Spring的优缺点是什么&#xff1f;1.5 Spring有哪些应用场景1.6 Spring由哪些模块组成&#xff1f;1.7 Spring 框架中都用到了哪些设计…

uint8_t

什么是*_t https://blog.csdn.net/qq_19784349/article/details/82927169 以下内容引用自上边链接&#xff1a; *_t是typedef定义的表示标志&#xff0c;是结构的一种标注。即我们所看到的 uint8_t、uint16_t、uint32_t都不是新的数据类型&#xff0c;而是通过typedef给类型起得…

C++ uint8_t

问题&#xff1a;uint8_t是什么数据类型&#xff1f; 解决&#xff1a;C的主要数据类型&#xff0c;主要分为三类&#xff1a;布尔型&#xff0c;整型&#xff0c;浮点型。 按照posix标准&#xff0c;一般整型对应的*_t类型为&#xff1a; 1字节 uint8_t 2字节 uint16…

【C语言】uint8_t、uint16_t、uint32_t、uint64_t是什么?

文章目录 一、uint8_t 是什么&#xff1f;二、如何定义&#xff1f;三、为什么&#xff1f;四、基本数据类型有哪些&#xff1f;总结 一、uint8_t 是什么&#xff1f; uint8_t 是一个数据类型&#xff0c;也是别名&#xff0c;它是无符号8位整数类型的缩写。 uint 表示无符号…

Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑

参考林子雨教程Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0_厦大数据库实验室博客 但是版本过低&#xff0c;还是centos6.4的和Hadoop2.x的 Hadoop安装教程 Centos7 JDK1.8 Hadoop3.3.1(高版本的Hadoop使用JDK1.7不行) 创建hadoop用户 [rootlocalhost luoyang]#…