当前位置: 首页 > 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网络信息爬…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...