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

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...