【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 指定遇到什么异常回滚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测YOLO实战应用案例100讲-【目标检测】缺陷检测(三)

目录 瓷砖缺陷检测 印刷缺陷的视觉检测原理 检测原理 针对型检测算法 通用型检测算法

OpenHarmony4.0分布式任务调度浅析

1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制,包括服务发现、同步、注册和调用等环节,实现了对跨设备的应用进行远程启动、远程调用、…

ChatGPT 论文必备:探索ChatGPT如何助力您的论文写作

ChatGPT无限次数:点击直达 ChatGPT 论文必备:探索ChatGPT如何助力您的论文写作 在写作论文的过程中,如何高效地整理思路、拓展观点以及提高写作效率是每位研究者都面临的挑战。随着人工智能技术的不断发展,ChatGPT作为一款强大的自然语言处理…

物联网在工业中的应用是什么?——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网在工业中的应用已经日益广泛,它为企业带来了前所未有的机会和挑战。物联网技术通过连接各种设备和系统,实现了数据的实时采集、分析和优化,从而提高了生产效率、降低了成本并提升了企业的竞争力。…

基于WEB的水库水情自动测报系统的研究与设计(论文+源码)_kaic

摘要 水情信息是水利管理最重要的基础信息,是水文预报、水资源管理、防汛抗旱决策的主要依据。水情自动测报系统是一个自动采集、传输、处理水情信息的实时测报系统,可对水库流域内的水情、水文和气象数据,如雨量、流量、水位等,实…

动态规划-入门三道题

1137. 第 N 个泰波那契数 题目描述: 状态表示: dp[i]表示第i个泰波那契数。 状态转移方程: dp[i]dp[i-3]dp[i-2]dp[i-1]。 初始化: 动态规划问题的初始化就是为了去避免初始情况下的越界问题。这里就对dp[0]0,dp[1]1,dp[2]1这样进行初始化即可&#xf…

[2024最新]PyCharm专业版安装与破解

1、下载pyCharm专业版安装包和破解包 下载链接:https://pan.baidu.com/s/1h-DN3G-LCpj0Wnk5HPNhqQ?pwdyyds 提取码:yyds 2、选择版本,这里我以2023.1.4专业版举例 3、开始安装 选择下一步 配置安装选项(建议全部勾上&#xff…

PostgreSQL强势崛起,选择它还是MySQL

大家好,关系型数据库(RDBMS)作为数据管理的基石,自数据仓库兴起之初便扮演着核心角色,并在数据科学的发展浪潮中持续发挥着价值。即便在人工智能和大型语言模型(LLM)日益成熟的今天,…

docker+jekins+gitlab cicd

Gitlab的搭建流程-CSDN博客 1.安装gitlab curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |sudo bashcurl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bashsudo yum install gitl…

嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验

一、实验目的 了解AAC音频格式,掌握AAC音频解码的原理,并实现将AAC格式的音频解码为PCM 二、实验原理 音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算…

云计算:Linux 部署 OVS 集群(服务端)实现VXLAN

目录 一、实验 1.环境 2.Linux 部署 OVS 集群(服务端) 3.Linux 部署VXLAN 一、实验 1.环境 (1) 主机 表1 宿主机 主机架构软件IP备注ovs_controller控制端192.168.204.63 1个NAT网卡 (204网段) ovs_server01服务端 Openv…

用于扩展Qt本身的插件(上)

Qt自身插件 引言示例插件与应用插件的程序作为整体插件和应用插件的程序单独存在实现插件编写测试插件的程序应用插件运行结果引言 用于扩展qt自身的插件按照我的理解分为两种: 1. 直接扩展Qt自身,无需在QtCreator的设计器中加载; 2. 扩展Qt自身,同时需要在QtCreator的设计…

视频基础学习六——视频编码基础三(h264框架配合图文+具体抓包分析 万字)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式(RGB与YUV) 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一(冗余信息) 视频基础学习五——视频编码基础…

Unity笔记之Spine动画使用

前言:unity中使用spine动画 1、首先要下载一个unity-spine运行时环境 官网 其实很多内容在官网上都有的,自己看一下就知道咋搞了。 2、上面下载的导入unity 把这个包导入unity 3、正片了 美术给过来是这样的,我试过给过来的是二进制文件…

flutter跑通腾讯云直播Demo

运行示例 前提条件 要求java jdk 11版本 并且配置到了环境变量 重要 要求flutter 版本 2.8.0 并且配置到了环境变量 重要 要求dart-sdk版本2.15 并且配置到了环境变量 重要 您已 注册腾讯云 账号,并完成 实名认证。 申请 SDKAPPID 和 SECRETKEY 登录实时音视频控…

【方法】PDF密码如何取消?

对于重要的PDF文件,很多人会设置密码保护,那后续不需要保护了,如何取消密码呢? 今天我们来看看,PDF的两种密码,即“限制密码”和“打开密码”,是如何取消的,以及忘记密码的情况要怎…

最新消息:在美国销售含纽扣电池商品需要做UL4200A:2023安全标准测试

纽扣电池由于体积小,容易被小孩吞入,因此各国对安装在带电产品上面的纽扣电池都有要求。 2023年9月美国消费品安全委员会(CPSC)发出最终法规文件,决定采用UL4200A:2023作为含纽扣强制安全标准,同时编入16C…

前端docker jenkins nginx CI/CD持续集成持续部署-实战

最近用go react ts开发了一个todolist后端基本开发完了,前端采用CI/CD方式去部署。 步骤总结 先安装docker 和 docker-compose。安装jenkins镜像,跑容器的时候要配好数据卷。配置gitee或github(我这里使用gitee)在服务器上一定要创建好dokcer的数据卷,以便持久保存jenkin…

React + three.js 3D模型面部表情控制

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 示例项目(github):https://github.com/couchette/simple-react-three-facial-expression-demo 示例项目(gitcode)&#xff…

云上配置Hadoop环境

Hadoop概述 Hadoop技术主要是由下面这三个组件组合而成的: HDFS是一个典型的主从模式架构。 HDFS的基础架构 HDFS的集群搭建 一点准备工作 其实这一块没啥内容,就是将Hadoop官网下载下来的Hadoop的tar包上传到我们服务器上的文件目录下: …