当前位置: 首页 > news >正文

spring常见面试题(2023最新)

目录

  • 前言
  • 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中如何注入一个java集合?
  • 13.bean的自动装配
  • 14.spring用到了那些设计模式
  • 14.spring的常用注解
  • 15.spring 事务实现方式有哪些?
  • 16.spring事务的实现方式和实现原理
  • 17.说一下 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: 默认作用域,单例bean,每个容器中只有一个bean实例。
②prototype: 每次请求都会为bean创建实例。
③request: 为每一个request请求创建一个实例,在请求完成以后,bean会失效,会被垃圾回收器回收。
④session: 同一个session会话共享一个实例,不同会话使用不同实例。
⑤global-session: 全局作用域,所有实例共享一个会话。

6.spring中bean的注入方式

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

7.BeanFactory 和 ApplicationContext有什么区别?

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

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中bean的生命周期分为:实例化Bean->Bean属性填充->初始化Bean->销毁Bean。
销毁的时候,会先执行 DisposableBean.destroy()方法,然后在执行 destroy-Method 方法。
多例模式: spring无法进行管理,所以将生命周期交给用户控制。

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

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

13.bean的自动装配

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

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

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

14.spring的常用注解

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

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

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

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

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

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

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

http://www.lryc.cn/news/23297.html

相关文章:

  • 华为OD机试题,用 Java 解【压缩报文还原】问题
  • 机器学习-BM-FKNCN、BM-FKNN等分类器对比实验
  • ChatGPT火了,对话式人工智能还能干嘛?
  • 十一、操作数栈的特点(Operand Sstack)
  • 拆解瑞幸新用户激活流程,如何让用户“动”起来?
  • tkinter界面的TCP通信/开启线程等待接收数据
  • 华为OD机试题,用 Java 解【任务混部】问题
  • 看linux内核启动流程需要的汇编指令解释
  • 【巨人的肩膀】JAVA面试总结(二)
  • 【网络安全入门】零基础小白必看!!!
  • 字节前端经典面试题(附答案)
  • 数据库管理工具的使用
  • 让马斯克反悔的毫米波雷达,被国产雷达头部厂商木牛科技迭代到了5D时代
  • MaxWell原理概述
  • 电子技术——AB类输出阶
  • Archlinux个人安装流程
  • 【Autoware】2小时安装Autoware1.13(保姆级教程)
  • JVM 堆内存模型
  • linux-中断下半部
  • SpringMVC源码:HandlerMapping加载1
  • 【ArcGIS】12 投影
  • 【微信小程序-原生开发+TDesign】通用功能页封装——地点搜索(含腾讯地图开发key 的申请方法)
  • h5: 打开手机上的某个app
  • Hot Chocolate 构建 GraphQL .Net Core 服务
  • linux shell 入门学习笔记16 流程控制开发
  • 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
  • 给VivoBook扩容重装系统
  • vue 依赖注入使用教程
  • 【再临数据结构】Day1. 稀疏数组
  • 二十四、MongoDB 聚合运算( aggregate )