spring常见面试题(2024最新)

10 篇文章 230 订阅
订阅专栏

前言

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;
 
    @Override
    public void setBeanName(String name) {
        this.beanName = name;
    }
}

(2) InitializingBean 和 DisposableBean 接口

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

public class Xinxin implements InitializingBean, DisposableBean {
 
    @Override
    public void afterPropertiesSet() {
    // do some initialization work
    }
 
    @Override
    public 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{
 
    @PostConstruct
    public void init() {
        // do some initialization work
    }
 
    @PreDestroy
    public void destroy() {
        // do some destruction work
    }
}

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

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

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

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

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

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

@Component
public class BeanDestroyProcessor implements DestructionAwareBeanPostProcessor {
 
    @Override
    public 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:就是以非事务的方式来执行,如果存在事务则抛出一个异常。

2021全网最全最详细的Spring面试题精选合集
Java烂猪皮
02-03 6239
1. Spring基础 1.1 什么是 spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。 Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。 Spring可以做很多事情,
Spring面试必备八股文
01-30
Spring面试必备八股文,包含Spring相关基础知识以及高级用法,适用于要面试Java开发岗位的同学,可以在面试前复习一下Spring相关的知识点
Spring常见面试题
10-21
Spring框架常见面试题Java面试必备,Spring声明周期
Spring 面试题汇总
最新发布
m0_57836225的博客
09-21 967
Spring AOP 的底层实现是基于代理模式实现的。Spring 通过生成代理对象,在代理对象中拦截目标方法的执行,并在目标方法执行前后添加切面逻辑。Spring AOP 支持两种代理方式:JDK 动态代理和 CGLIB 动态代理。如果目标对象实现了接口,则使用 JDK 动态代理;如果目标对象没有实现接口,则使用 CGLIB 动态代理。
spring全套面试题(全网最全)
07-21
spring全套面试题(全网最全)
Spring系列面试题129道(附答案解析)
04-20
Spring系列面试题129道(附答案解析)
Spring面试题
t0404的博客
07-18 3572
f-sp-1. Springaop你怎样实现? 用动态代理和cglib实现,有接口的用动态代理,无接口的用cglib f-sp-2. Spring在SSH起什么作用 整合作用 f-sp-3. Spring容器内部怎么实现的 内部用Map实现,或者说HashMap f-sp-4. 怎么样理解IOCAOP IOC是一种控制反转的思想,降低了对象的耦合度,AOP是面向切面
Spring常见面试题总结(超详细回答)
weixin_37327955的博客
09-18 9477
[原文地址]:https://blog.csdn.net/a745233700/article/details/80959716 1、Spring是什么? Spring是一个轻量级的IoCAOP容器框架。目的是解决企业应用开发的复杂性,使用基本的JavaBean来完成以前只可能由EJB完成的事情,并提供了更多的企业应用功能,Spring的用途不仅限于服务器端的开发,从简单性、可测试性和松...
Spring常见面试题(13个面试题,回答超详细)
热门推荐
红目香薰
01-02 1万+
马上开春了面试前必备技能啊,就算不背下来也得知道一些。免得尴尬。 目录 面试题一:Spring是什么? 面试题二:说说Spring 的优点? 面试题三:谈谈你对SpringIOC理解? 面试题四:说说你对SpringAOP理解? 面试题五:Spring AOP里面常用名词的概念: 面试题六:Spring容器的启动流程? 面试题七:Spring Bean的生命周期? 面试题八:说一下Spring中bean的作用域? 面试题九:说一下Spring基于xml注入bean的几种方式? 面试
spring 面试题大全
my_name_nb的博客
12-10 734
要准备面试了 把老师总结的spring面试题来给大家分享一下 *  Spring的优点有什么? 1. Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分 2. Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高 3. 依赖注入和IoC使得JDBC操作简单化 4. Spring是开源的免费的 5. Spring使得对象管理集中化合
Spring常见面试题.pdf
05-12
Spring框架是Java开发中不可或缺的一部分,它以其轻量级、高度模块化的设计赢得了广大开发者的心。...深入理解并熟练掌握Spring,对于Java开发者来说至关重要,无论是面试还是实际开发工作,都能从中受益匪浅。
Spring常见面试题pdf.pdf.zip
07-25
spring
Spring 常见面试题
10-15
Spring 常见面试题 Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷...
Spring常见面试题(35道)
08-21
面试常见Spring问题涉及到这些模块及其概念,例如: - **Spring Bean的生命周期**:从初始化、使用到销毁的过程,包括Bean的构造、初始化方法调用、属性设置、后处理器调用、销毁方法等阶段。 - **自动装配**:...
面试Spring框架面试题
雨下一整晚real的博客
09-25 1696
一、谈谈你理解的 Spring 是什么? Spring是一个生态,包含了23个开源框架,可以构建Java应用所需的一切基础设施 Spring通常指Spring Framework 核心解释 Spring是一个开源的、轻量级的容器(包含并管理对象的生命周期)框架 Spring是为了解决企业级开发中业务逻辑层中对象之间的耦合问题 Spring的核心是IoCAOP 二、Spring的优缺点有哪些? 从IoCAOP、事务管理、JDBC、模板集成(简化开发)、源码方面进行解释 IoC:集中管理Bean对
Spring面试题大全
shuo_Java的博客
06-22 411
什么是Spring IOC 容器控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。对于 IOC 来说,最重要的就是容器。容器管理着 Bean 的生命周期,控制着 Bean 的依赖注入。
【必看】Spring系列面试题
O_C_E_A_N_的博客
05-13 952
一款开源的轻量级Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 支持IoC(Inversion of Control:控制反转) 和AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持应用程序的开发。不重新造轮子,开箱即用,提高开发效率。:(平台)事务管理器,Spring 事务策略的核心。:事务定义。
SpringBoot (面试篇)
qq_53573029的博客
08-24 1867
yaml是一个可读性高,用来表达数序列化的格式。yaml参考了其他多种语言,包括:C语言、Python、Perl。根据结构性。Spring Java Config是Spring社区的产品,Spring3.0引入了他,它提供了配置SpringIOC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。
spring 常见面试题
05-13
以下是一些 Spring 常见面试题: 1. 什么是 Spring 框架? 2. Spring 框架有哪些核心模块? 3. SpringIOC 是什么? 4. Spring 的 DI 是什么? 5. SpringAOP 是什么? 6. Spring MVC 是什么? 7. Spring Boot 是什么? 8. Spring Cloud 是什么? 9. Spring 的事务管理是如何实现的? 10. Spring 的 Bean 生命周期是怎样的? 11. Spring 的 Bean 作用域有哪些? 12. Spring 中的注解有哪些? 13. Spring 中的 XML 配置有哪些? 14. Spring 如何集成其他框架? 15. Spring 如何处理异常? 以上是一些常见Spring 面试题面试官可能会根据你的回答来深入提问,希望能对你有所帮助。
写文章

热门文章

  • java高频面试题(2024最新) 113866
  • 关于java.nio.charset.MalformedInputException: Input length = 1和Input length = 2的异常解决 86358
  • MySQL常见面试题(2024年最新) 55711
  • springcloud常见面试题(2024最新) 50955
  • 【JVM】JVM内存模型(详细) 50065

分类专栏

  • java面试大全(2023年最新) 10篇
  • 缓存 5篇
  • 性能测试 2篇
  • Elasticsearch从入门到精通实战 3篇
  • springCloud系列 9篇

最新评论

  • 【算法】排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、基数排序、堆排序)

    菜鸟998号: 后面的好抽象

  • 面试必问的CAS,你懂多少?

    w185428: 为什么要定义个E呢,完全没必要啊

  • html表白代码

    2401_84798845: 大佬你好求第一个源码,谢谢

  • html表白代码

    m0_62795529: 大佬你好求第一个源码,谢谢

  • 【java】java集合框架

    fongyon: hashmap无序,treemap有序

最新文章

  • 缓存之SpringCache整合redis(五)
  • redis之分布式锁(四)
  • redis之缓存击穿、雪崩、穿透(三)
2024年2篇
2023年44篇
2022年52篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱穿背带裤的馫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家抽象玻璃钢骆驼雕塑玻璃钢卡通人物雕塑哪家有江苏商场装饰美陈梅州玻璃钢动物雕塑代理商玻璃钢铜锈雕塑玻璃钢滑板人物雕塑制作云南肖像玻璃钢景观雕塑潮州玻璃钢海豚雕塑廊坊玻璃钢广场雕塑定制玻璃钢雕塑服务热线玻璃钢玉米雕塑玻璃钢雕塑工艺工厂大型玻璃钢雕塑造型江苏玻璃钢雕塑设计玻璃钢雕塑的品牌是什么内蒙古玻璃钢雕塑设计复原福建玻璃钢卡通公仔雕塑厂家浅黄色水印玻璃钢花盆新乡不锈钢玻璃钢彩绘雕塑制作青岛树箱玻璃钢雕塑加工消防员玻璃钢雕塑厂兰州商场美陈费用陕西人物玻璃钢雕塑制作平湖玻璃钢雕塑订做河南通道商场美陈哪里有葫芦岛玻璃钢雕塑多少钱玻璃钢雕塑造型定做高州玻璃钢花盆花器烟台玻璃钢雕塑哪家好郑州特色玻璃钢雕塑哪家便宜香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化