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

【Spring】面试题汇总

  • Spring
    • 1. 什么是 Spring 框架?
    • 2. 谈谈你对于 Spring IoC 的了解
    • 3. 什么是依赖注入
    • 4. Spring的依赖注入有几种方式
    • 5. 将一个类声明为 Bean 的注解有哪些?
    • 6. @Component 和 @Bean 的区别是什么?
    • 7. 注入 Bean 的注解有哪些?
    • 8. Bean 的作用域有哪些?
    • 9. Bean 是线程安全的吗?
    • 10. Bean 的生命周期了解么?
    • 11. 什么是AOP,应用场景
    • 11. Spring AOP 和 AspectJ
    • 12. Spring AOP 的实现原理
    • 13. AspectJ 定义的通知类型有哪些?
    • 14. 多个切面的执行顺序如何控制?
    • 15. 什么是SpringMVC
    • 16. SpringMVC 核心组件
    • 17. SpringMVC 工作原理
    • 18. 统一异常处理怎么做?
    • 19. Spring 框架中用到了哪些设计模式?
    • 20. Spring 管理事务的方式有几种?
    • 21. Spring 事务中哪几种事务传播行为?
    • 22. Spring 事务中的隔离级别有哪几种?
    • 23. @Transactional(rollbackFor = Exception.class)注解了解吗?

Spring

1. 什么是 Spring 框架?

答:

  • Spring 是一款开源的轻量级 Java 开发框架。
  • Spring 可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)。
  • 支持IOC、AOP,使用Spring进行开发效率非常高。

2. 谈谈你对于 Spring IoC 的了解

答:

  • 将需要手动创建的对象交给框架去创建。
  • 我们只需要在一个类上添加一个注解,就可以使用该类的对象了。

3. 什么是依赖注入

答:

  • Spring容器在创建bean时,如果发现一个bean的属性是容器中的另一个bean,Spring则会自动的去进行对象关联。

4. Spring的依赖注入有几种方式

答:

  • Setter注入
  • 构造器注入
  • 使用注解: @Autowired@value

5. 将一个类声明为 Bean 的注解有哪些?

答:

  • @Component:最基本的 Bean 注解
  • @Controller:对应控制层
  • @Service:对应服务层
  • @Repository:对应持久层
  • @Configuration + @Bean:通常是在一个配置类里面,将方法的返回结果注入进来。

6. @Component 和 @Bean 的区别是什么?

答:

  • @Component :是一个类级别的注解,通常用于无需编程配置即可创建bean对象的类上。Spring 会扫描对应路径上标有@Component 的类,将该类的对象注入进来。
  • @Bean:是一个方法级别的注解,通常需要进行对象属性的配置,然后配合 @Configuration 注解,将方法的返回结果注入到 IOC 容器中。

7. 注入 Bean 的注解有哪些?

答:

  • @Autowired:根据类型进行注入,如果匹配到多个Bean,则会爆出异常。可以和@Qualifier搭配使用,指定使用哪个名称的Bean
  • @Resource:首先根据名称注入,如果找不到,再根据类型进行查找。可以通过name属性指定Bean的名称。

8. Bean 的作用域有哪些?

答:

  • singleton (单例):IOC容器只会存在唯一的一个Bean。
  • prototype:每次获取都会创建一个新的 bean
  • request:每一次 HTTP 请求都会产生一个新的 bean。该 bean 仅在当前 HTTP request 内有效。
  • session:每一次来自新 session 的 HTTP 请求都会产生一个新的 bean。该 bean 仅在当前 HTTP session 内有效。
  • application:每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
  • 使用 @Scope 注解声明 Spring Bean 的作用域

9. Bean 是线程安全的吗?

答:

  • prototyperequestSession 每次获取都会创建一个新的 bean 实例,所以不需要考虑线程安全。
  • Singleton 是单例的,会被多个线程共享,所以要考虑线程安全的问题。

10. Bean 的生命周期了解么?

答:

  • 实例化: Spring容器在启动时,默认会扫描启动类所在的路径,并为标注为Bean的类创建实例。
  • 属性填充: 为 Bean 设置相关属性和依赖。例如@Autowired 注入的对象
  • 初始化: Spring容器会检测Bean是否实现了特定的生命周期回调接口。如果实现了则会在特定时间调用它们。
  • 销毁: 当Spring容器关闭时,会销毁所有的Bean,如果销毁有回调方法的话,也会执行。

11. 什么是AOP,应用场景

答:

  • 面向切面编程,把方法中通用的功能抽离出来,比如(鉴权、日志记录等),通过预编译或是动态代理方式在不修改源代码的情况下给程序进行功能增强。
  • 应用场景:日志、鉴权、Spring的事务等

11. Spring AOP 和 AspectJ

答:

Spring AOPAspectJ 都是AOP的具体实现。AspectJ是完全实现了 AOP,功能比 Spring AOP 要强。

Spring AOP中使用了 AspectJ 的切点表达式,注解(通知类型)等

区别:

  • AspectJ 是在编译时增强,使用字节码处理技术。
  • Spring AOP 是在运行时动态生成的,所以性能不如AspectJ
  • AspectJ不仅可以织入方法执行,还可以字段赋值时,构造函数执行时等。完全实现了 AOP 思想。
  • Spring AOP 只支持方法级别的切入点

12. Spring AOP 的实现原理

答:

  • Spring AOP的实现是基于 JDK动态代理CGLIB 实现的。

  • 如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK动态代理,去创建代理对象

  • 而对于没有实现接口的对象,则使用的是 Cglib 生成一个被代理对象的子类来作为代理。

13. AspectJ 定义的通知类型有哪些?

答:

  • Before(前置通知):目标对象的方法调用之前触发
  • After (后置通知):目标对象的方法调用之后触发
  • Around (环绕通知):可以在目标对象的方法调用之前和之后进行操作。

14. 多个切面的执行顺序如何控制?

答:

  • 可以在切面类上使用@Order 注解直接定义切面顺序。值越小优先级越高

15. 什么是SpringMVC

答:

  • SpringMVC 是基于MVC模式设计的 Web 框架。
  • MVC代表Model-View-Controller
  • 通常划分为Controller接口层,Service 业务层,Entity 实体类,dao持久层

16. SpringMVC 核心组件

答:

  • DispatcherServlet中央处理器,负责接收请求、进行分发,客户端响应。
  • HandlerMapping处理器映射器,根据 URL 去查找对应的 Handler
  • HandlerAdapter处理器适配器,指定对应的 Handler
  • Handler请求处理器,负责处理请求
  • ViewResolver视图解析器,视图解析器负责解析 Handler 返回的视图,并将结果返回给DispatcherServlet

17. SpringMVC 工作原理

答:

  • 客户端(浏览器)发送请求, 首先会到达DispatcherServlet
  • DispatcherServlet收到请求后,调用HandlerMapping处理器映射器。
  • 处理器映射器根据请求url找到具体的处理器Handler,并返回给DispatcherServlet
  • DispatcherServlet通过 HandlerAdapter处理器适配器执行找到的处理器。
  • Handler 完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServlet
  • DispatcherServlet再调用 ViewResolver视图解析器,解析出具体的View
  • DispatcherServlet将 Model 填充到 解析出来的View中
  • DispaterServlet 把 View 返回给浏览器

注意:

  • 如果使用@ResponseBody或者@RestController注解,表明方法返回值应该直接在HTTP响应体中写出
  • 所以Spring MVC将直接跳过视图解析器。

18. 统一异常处理怎么做?

答:

  • 可以使用 @ControllerAdvice + @ExceptionHandler 捕获 Controller 层的异常。
  • 如果是业务层的异常,如果自己能处理,就自己处理。
  • 如果处理不了,就抛给 Controller 层。

19. Spring 框架中用到了哪些设计模式?

答:

  • 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
  • 代理设计模式 : Spring AOP 功能的实现。单例设计模式 : Spring 中的 Bean 默认都是单例的。
  • 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  • 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  • 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
  • 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

20. Spring 管理事务的方式有几种?

答:

  • 编程式事务:将事务管理的代码硬编码在业务逻辑中,手动管理事务的开启、提交、回滚等操作。
  • 声明式事务在 XML 配置文件中配置或者基于注解

21. Spring 事务中哪几种事务传播行为?

答:

事务传播行为: 是指当在一个事务中调用另外一个事务方法时,这个被调用的事务方法应该如何进行执行,即事务如何在方法之间进行传播。

  • TransactionDefinition.PROPAGATION_REQUIRED默认的,如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  • TransactionDefinition.PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
  • TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则会再当前事务内嵌套一个事务,如果没有事务,则新建一个事务
  • TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  • TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
  • TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常

22. Spring 事务中的隔离级别有哪几种?

答:

  • TransactionDefinition.ISOLATION_DEFAULT :使用后端数据库默认的隔离级别,MySQL 默认采用的 REPEATABLE_READ 隔离级别 Oracle 默认采用的 READ_COMMITTED 隔离级别.
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED :读未提交,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • TransactionDefinition.ISOLATION_READ_COMMITTED : 读已提交,允许读取事务提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • TransactionDefinition.ISOLATION_REPEATABLE_READ : 可重复读,多次读取结果都是一致的,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • TransactionDefinition.ISOLATION_SERIALIZABLE : 串行化,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

23. @Transactional(rollbackFor = Exception.class)注解了解吗?

答:

  • @Transactional 注解默认回滚策略是只有在遇到RuntimeException(运行时异常) 或者 Error 时才会回滚事务,而不会回滚 Checked Exception(受检查异常)
  • 可以使用 @Transactional 注解的 rollbackFor 指定遇到什么异常回滚。

相关文章:

【Spring】面试题汇总

Spring1. 什么是 Spring 框架?2. 谈谈你对于 Spring IoC 的了解3. 什么是依赖注入4. Spring的依赖注入有几种方式5. 将一个类声明为 Bean 的注解有哪些?6. Component 和 Bean 的区别是什么?7. 注入 Bean 的注解有哪些?8. Bean 的作用域有哪些?9. Bean…...

thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel composer require phpoffice/phpexcel composer update 2. 前端 <form class"forms-sample" action"../../xxxx/xxxx/do_import_users" method"post" enctype"multipart/form-data"><div class"cont…...

【数据结构3-栈和队列】

数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码&#xff1a;4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…...

STL--list双向链表

功能 将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成 结点的组成&#xff1a;一个是存储数据元素的数据域&#xff0…...

ElasticSearch入门篇

简介 ElasticSearch简介&#xff1a;简称为es&#xff0c; es是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。es也使用Java开发并使用Lucene…...

MAXHUB会议解决方案持续进化,以“高效”为核心推动行业发展

4月16日&#xff0c;MAXHUB 2024新品发布会在视源股份&#xff08;002841&#xff09;北京产业园圆满举行。本次发布会以“智会融合 进化不止”为主题&#xff0c;首发MAXHUB高效会议解决方案&#xff0c;以AI智能、开放兼容、场景化交付为方向&#xff0c;为用户提供高效、便捷…...

CentOS 7安装Redis

说明&#xff1a;本文介绍如何在CentOS 7操作系统下安装Redis 下载安装 首先&#xff0c;去官网上下载所需要安装的版本&#xff0c;官网地址&#xff1a;https://download.redis.io/releases/&#xff0c;我这里下载3.2.1版本的 下载完&#xff0c;上传到云服务器上&#xf…...

Kubernetes (K8s) 部署前后端分离项目

要使用Kubernetes (K8s) 部署一个涵盖Django后端、Vue前端、Redis、Nginx、RabbitMQ和MySQL的前后端分离项目,需要遵循以下步骤。这个过程涉及创建和配置多个资源,包括部署(Deployments)、服务(Services)、配置映射(ConfigMaps)、密钥(Secrets)和Ingress规则。 大纲…...

MLT媒体程序框架01:概述

MLT官网 概述 MLT是一个开源的多媒体框架&#xff0c;专为电视广播而设计和开发。它为广播公司、视频编辑器、媒体播放器、转码器、网络流媒体和更多类型的应用程序提供了一个工具包。该系统的功能是通过各种现成的工具、XML创作组件和基于API的可扩展插件提供的。 它是通过…...

9【原型模式】复制一个已存在的对象来创建新的对象

你好&#xff0c;我是程序员雪球。 今天我们来学习23种设计模式之原型模式&#xff0c;在平时开发过程中比较少见。我带你了解什么是原型模式&#xff0c;使用场景有哪些&#xff1f;有什么注意事项&#xff1f;深拷贝与浅拷贝的区别&#xff0c;最后用代码实现一个简单的示例…...

谷粒商城实战(013 业务-认证服务-短信验证)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第211p-第p219的内容 介绍 认证中心要集成 社交登录、OAuth2.0、单点登录 等功能 OAuth 2.0&#xff1a; 问题解决&#xff1a; OAuth 2.0 主要…...

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面&#xff1a; 选择合适的字体&#xff1a;在Unity中&#xff0c;确保使用支持泰文字符的字体是至关重要的。例如&#xff0c;可以选择使用Noto Serif Thai字体&#xff0c;这是一个支持泰语的字体2。 处理Unity版本问题&#xff1a;某些…...

C语言传统垃圾收集器的缺陷以及我的思路

传统的比如Boehm回收器&#xff0c;都是在malloc/realloc/free上做文章&#xff0c;参考这篇文章【How the Boehm Garbage Collector Works】的解释&#xff0c;因为C数据结构是无法预料的&#xff0c;内存里面并没有特殊标记&#xff0c;很难判断哪些是指针哪些是数据&#xf…...

数据交换格式

一、什么是数据交换格式 在计算机的不同程序之间&#xff0c;或者不同的编程语言之间进行交换数据&#xff0c;也需要一种大家都能听得懂得‘语言’&#xff0c;这就是数据交换格式&#xff0c;它通过文本以特定的形式来进行描述数据。 二、常用的几种数据交换格式 客户端常…...

电力系统卫星授时信号安全隔离装置防护方案

电力系统是国家关键基础设施&#xff0c; 电力安全关系国计民生&#xff0c; 是国家安全的重要保障&#xff0c; 与政治安全、经济安全、 网络安全、社会安全等诸多领域密切关联。电网运行情况瞬息万变&#xff0c;为了在其发生事故时能够及时得到处理&#xff0c;需要统一的时…...

【编程TOOL】VC++6.0下载安装配置使用保姆式教程

目录 ​编辑 1.软件介绍 2.软件下载 3.软件安装 3.1.下载得到可执行文件并双击进行安装 3.2. 点击下一步 3.3. 选择安装位置 3.4. 勾选“创建桌面快捷方式”并点击下一步 5. 点击安装并等待 3.6. 先取消运行&#xff0c;后点击完成&#xff0c;软件即安装完毕 4.兼容性配置 4.1…...

组织机构代码是哪几位?营业执照怎么看组织机构代码?

组织机构代码是哪几位? 组织机构代码通常指的是组织机构代码证上的一组特定数字&#xff0c;它用于唯一标识一个组织或机构。在中国&#xff0c;组织机构代码由9位数字组成&#xff0c;前8位是本体代码&#xff0c;最后1位是校验码。这组代码是按照国家有关标准编制的&#x…...

nginx禁止ip访问,只允许域名访问

无论ip直接访问&#xff0c;还是通过域名访问&#xff0c;最终都是通过ip访问到服务器浏览器访问时会携带Host参数&#xff0c;通过ip访问时携带的是ip&#xff0c;通过域名访问时携带的是域名nginx收到请求后判断host的值&#xff0c;如果判断出不是通过域名访问的则拒绝&…...

10组Python面试高频问题与详尽解答指南

大家好&#xff0c;你们准备好了吗&#xff1f;面试官们总喜欢出其不意地问些让人头大的问题。别担心&#xff0c;今天我来帮你们梳理10个Python面试中的热门难题&#xff0c;让你的回答既专业又有趣&#xff01;让我们一起变身Python高手吧&#xff01; 1. 问题: 什么是Pytho…...

使用SpringBoot将中国地震台网数据保存PostGIS数据库实践

目录 前言 一、数据转换 1、Json转JavaBean 2、JavaBean与数据库字段映射 二、空间数据表设计 1、表结构设计 三、PostGIS数据保存 1、Mapper接口定义 2、Service逻辑层实现 3、数据入库 4、运行实例及结果 总结 前言 在上一篇博客中基于Java的XxlCrawler网络信息爬…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...