面试常见题之spring

在Java软件工程师面试中,关于Spring的题目是非常常见的。本文准备了20个Spring相关的面试题目及其参考答案,这些题目涵盖了Spring框架的基本概念、核心功能、设计模式、IoC容器、AOP、事务管理等多个方面,旨在全面考察面试者对Spring框架的掌握程度。

1. 什么是Spring框架?

参考答案:
Spring框架是一个为Java应用程序开发提供综合、广泛基础性支持的Java平台。Spring框架的设计目标是解决企业级应用开发的复杂性,通过IoC(控制反转)和AOP(面向切面编程)等核心技术,帮助开发者实现模块间的解耦合,降低开发难度,提高开发效率。

2. Spring框架的设计目标、设计理念和核心是什么?

参考答案:
设计目标:提供一个一站式轻量级应用开发平台。
设计理念:支持POJO和JavaBean开发方式,使应用面向接口开发,通过IoC容器实现对象耦合关系的管理,并实现依赖反转。
核心:IoC容器和AOP模块。IoC容器负责对象的创建、配置和服务加载等;AOP模块则提供面向切面编程的支持,允许开发者将跨多个点的应用程序关注点分离出来形成可重用的功能组件。

3. Spring框架有哪些模块?

参考答案:
Spring框架由多个核心模块组成,主要包括:
Spring Core:提供IoC和依赖注入功能。
Spring Context:提供应用程序上下文,包括对象的创建、管理和销毁等功能。
Spring AOP:提供面向切面编程的支持。
Spring DAO:提供对数据访问对象(DAO)的支持。
Spring JDBC:提供对JDBC的简化访问。
Spring Transaction:提供对事务管理的支持。
Spring Web:提供基于MVC模式的Web开发支持。

4. 解释Spring中的IoC(控制反转)和DI(依赖注入)。

参考答案:
IoC(控制反转):是一种设计原则,用于实现低耦合。在Spring中,对象的依赖关系由Spring容器管理,而不是由对象自己创建或查找。
DI(依赖注入):是实现IoC的具体手段。在Spring中,DI通过构造函数、Setter方法或接口注入等方式,将对象的依赖关系注入到所需的地方。

5. Spring IoC容器的主要接口有哪些?

参考答案:
Spring IoC容器的主要接口有BeanFactory和ApplicationContext。BeanFactory是基础容器接口,提供了基本的Bean管理功能;ApplicationContext是BeanFactory的子接口,增加了更多的高级功能,如国际化处理、事件发布等。

6. Spring中Bean的作用域有哪些?

参考答案:
Spring中Bean的作用域主要包括:
singleton:默认作用域,每个容器一个实例。
prototype:每次请求一个新实例。
request:每次HTTP请求一个新实例(仅适用于Web应用)。
session:每个用户会话一个新实例(仅适用于Web应用)。
application/global-session:全局作用域,整个Web应用共享一个实例(global-session是application的Web特定变体,用于Portlet应用)。

7. Spring的AOP是什么?它有哪些实现方式?

参考答案:
AOP(面向切面编程)是一种编程范式,允许开发人员定义跨多个点的应用程序的关注点。Spring AOP通过动态代理技术实现,主要有两种实现方式:
JDK动态代理:基于接口的代理,要求目标对象必须实现一个接口。
CGLIB动态代理:基于类的代理,通过继承目标类来实现代理。

8. Spring MVC的工作原理是什么?

参考答案:
Spring MVC的工作原理基于MVC(模型-视图-控制器)设计模式,具体流程如下:
用户发送请求到前端控制器(DispatcherServlet)。
DispatcherServlet查询HandlerMapping,找到处理请求的Controller。
DispatcherServlet将请求提交到Controller。
Controller调用业务逻辑处理后,返回ModelAndView。
DispatcherServlet查询ViewResolver,找到ModelAndView指定的视图。
视图渲染,返回给客户端。

9. Spring中常用的注解有哪些?并简述其作用。

参考答案:
@Controller:用于标记在类上,表示该类是一个Spring MVC的控制器。
@RequestMapping:用于类或方法上,定义请求的URL地址。
@Autowired:用于自动装配Bean,可以装配构造函数、字段或setter方法。
@Resource:作用类似于@Autowired,但它是JSR-250提供的注解,可以指定name属性。
@Service、@Repository、@Component:用于标注业务层、数据访问层和组件层的Bean。
@ModelAttribute:用于将请求参数绑定到Model属性上。
@SessionAttributes:用于将Model中的属性存储到HttpSession中。

10. Spring事务管理的方式有哪些?

参考答案:
Spring事务管理的方式主要有两种:
编程式事务管理:在代码中显式调用开启事务、提交事务、回滚事务的相关方法。
声明式事务管理:底层建立在AOP的基础之上,通过配置方式声明事务的边界和属性,由Spring自动处理事务的提交和回滚。

11. Spring中如何配置声明式事务?

参考答案:
在Spring中配置声明式事务,通常需要在Spring配置文件中使用tx:advice、tx:attributes和aop:config等元素来定义事务通知和切点,然后通过aop:advisor将事务通知和切点关联起来。也可以使用基于注解的配置方式,通过@Transactional注解来声明事务。

12. @Transactional注解的常用属性有哪些?

参考答案:
@Transactional注解的常用属性包括:
propagation:事务的传播行为。
isolation:事务的隔离级别。
timeout:事务的超时时间。
readOnly:是否只读事务。
rollbackFor:指定哪些异常必须回滚事务。
noRollbackFor:指定哪些异常不需要回滚事务。

13. Spring框架是如何实现AOP的?

参考答案:
Spring框架通过动态代理技术实现AOP。对于实现了接口的类,Spring使用JDK动态代理;对于没有实现接口的类,Spring使用CGLIB动态代理。在运行时,Spring会为目标对象创建代理对象,并在代理对象中添加额外的功能(如日志、事务等),从而实现横切关注点的功能。

14. Spring Bean的生命周期是怎样的?

参考答案:
Spring Bean的生命周期经历四个阶段:
实例化:Spring容器根据配置信息实例化Bean对象。
属性注入:通过依赖注入将Bean的依赖关系注入到Bean对象中。
初始化:执行Bean的初始化方法(如init-method指定的方法或实现了InitializingBean接口的afterPropertiesSet方法)。
销毁:在容器关闭时,执行Bean的销毁方法(如destroy-method指定的方法或实现了DisposableBean接口的destroy方法)。

15. 如何理解Spring中的依赖注入?

参考答案:
依赖注入(DI)是实现控制反转(IoC)的具体手段。在Spring中,依赖注入通过构造函数、Setter方法或接口注入等方式,将对象的依赖关系注入到所需的地方。这样,对象的创建和依赖关系的维护就交给了Spring容器,而不是由对象自己负责,从而实现了对象之间的解耦合。

16. Spring中Bean的装配方式有哪些?

参考答案:
Spring中Bean的装配方式主要有两种:
基于XML的配置:在Spring配置文件中通过标签显式声明Bean及其依赖关系。
基于注解的配置:通过@Component、@Service、@Repository等注解来标注Bean,并使用@Autowired、@Resource等注解来实现依赖注入。此外,还可以使用@Configuration和@Bean注解来定义配置类和Bean方法,实现基于Java的配置。

17. Spring的AOP和AspectJ有什么区别?

参考答案:
Spring AOP和AspectJ都是面向切面编程的实现方式,但它们之间存在以下区别:
实现机制:Spring AOP基于动态代理技术实现;AspectJ则是一个完整的AOP框架,它可以在编译时或加载时织入切面。
功能范围:Spring AOP通常用于Spring应用程序中,与Spring框架紧密集成;AspectJ则是一个独立的AOP框架,可以应用于任何Java应用程序。
性能:由于AspectJ可以在编译时或加载时织入切面,因此它通常比Spring AOP具有更好的性能。

18. Spring MVC中的DispatcherServlet是如何工作的?

参考答案:
DispatcherServlet是Spring MVC的前端控制器,它负责接收客户端发送的请求,并根据请求URL找到对应的Controller和HandlerMethod进行处理。具体工作流程如下:
客户端发送请求到DispatcherServlet。
DispatcherServlet查询HandlerMapping,找到处理请求的Controller和HandlerMethod。
DispatcherServlet将请求提交到Controller。
Controller调用业务逻辑处理请求,并返回ModelAndView对象。

19. Spring Bean的生命周期是怎样的?

答案概述:Spring Bean的生命周期包括:实例化Bean、设置Bean的属性(依赖注入)、BeanNameAware的setBeanName()、BeanFactoryAware的setBeanFactory()、ApplicationContextAware的setApplicationContext()、BeanPostProcessor的postProcessBeforeInitialization()、初始化(实现InitializingBean接口的afterPropertiesSet()或自定义的init-method)、BeanPostProcessor的postProcessAfterInitialization()、使用Bean、销毁Bean(实现DisposableBean接口的destroy()或自定义的destroy-method)。

20. @Autowired和@Resource的区别是什么?

答案概述:@Autowired是Spring的注解,用于自动装配bean,默认按类型装配。如果容器中存在多个相同类型的bean,则可以通过@Qualifier指定名称来装配。@Resource是JSR-250提供的注解,默认按名称装配,如果找不到名称匹配的bean,则按类型装配。@Resource可以指定name和type属性,而@Autowired只能指定required属性。

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

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

相关文章

LeetCode_sql_day26(184,1549,1532,1831)

描述 184.部门工资最高的员工 表: Employee ----------------------- | 列名 | 类型 | ----------------------- | id | int | | name | varchar | | salary | int | | departmentId | int | -----------------…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数( (constructor)) 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…

FastAdmin CMS 操作手册

FastAdmin CMS 操作手册 概述: 安装: 配置: 模板: 模板目录: 标签: 全局: 文章: 专题: 栏目: 公共参数: 单页: 特殊标签:…

138_Java基础_常用类搭建教程java部署mysql5.5

安装: yum -y install build-essential QQ1594457675 安装:更多依赖包 yum -y install gcc automake autoconf libtool make 安装:数据库 这里需要注意数据库密码记得修改 数据库账号QQ 数据库密码1594457675 yum -y install gcc …

Linux 文件 IO 管理(第一讲)

Linux 文件 IO 管理(第一讲) 回顾 C 语言文件操作,提炼理解新创建的文件为什么被放在可执行文件的同级目录下?上述 log.txt 何时被创建?又是谁在打开它?那文件没有被打开的时候在哪里?一个进程可…

电脑的固态硬盘

常见种类 1.SATA接口:一般由一个铁盒子,里面装着控制芯片,以及内存颗粒组成的SSD硬盘。 比机械硬盘读写速度快,比M.2读写速度慢。目前常用的是3.0 2.M.2 PCI-E接口:无机械零件设计,相当于没有噪音。速度比…

Chrome谷歌浏览器登录账号next无反应

文章目录 问题描述 我们的Chrome浏览器在更新之后,会出现登录谷歌账号的时候,当你输入你的谷歌邮箱之后,点击 n e x t next next,也就是下一步的时候,页面没有反应,也就是没有跳转到输入密码的页面。 分析 根据logs里…

#ifndef PROJ_EXTEND_KALMAN_HPP_#define PROJ_EXTEND_KALMAN_HPP_ c++ 语句解释

#ifndef, #define, 和 #endif 是 C 中用于防止头文件被多次包含的预处理指令。它们共同构成了一个叫做 include guards 的机制。下面是这些指令的详细解释: 1. #ifndef(如果没有定义) #ifndef 是 #if(如果)指令的变体…

借助大模型将文档转换为视频

利用传统手段将文档内容转换为视频,比如根据文档内容录制一个视频,不仅需要投入大量的时间和精力,而且往往需要具备专业的视频编辑技能。使用大模型技术可以更加有效且智能化地解决上述问题。本实践方案旨在依托大语言模型(Large …

3D GS 测试自己的数据

环境配置 win11 vs2019cuda11.8driver522.06python3.10pytorch 2.4.0colmap3.8(可选,用于将图像生成点云) 安装 1 minicodagit 略 2 vs2019 在装cuda前安装, 选择c桌面开发即可, 环境变量path中配置C:\Program…

[数据集][目标检测]疟疾恶性疟原虫物种目标检测数据集VOC+YOLO格式948张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):948 标注数量(xml文件个数):948 标注数量(txt文件个数):948 标注类别…

【C++】——继承详解

目录 1、继承的概念与意义 2、继承的使用 2.1继承的定义及语法 2.2基类与派生类间的转换 2.3继承中的作用域 2.4派生类的默认成员函数 <1>构造函数 <2>拷贝构造函数 <3>赋值重载函数 <4析构函数 <5>总结 3、继承与友元 4、继承与静态变…

蓝桥杯—STM32G431RBT6按键的多方式使用(包含软件消抖方法精讲)从原理层面到实际应用(一)

新建工程教程见http://t.csdnimg.cn/JySLg 点亮LED教程见http://t.csdnimg.cn/Urlj5 末尾含所有代码 目录 按键原理图 一、按键使用需要解决的问题 1.抖动 1.什么是抖动 2.抖动类型 3.如何去消除抖动 FIRST.延时函数消抖&#xff08;缺点&#xff1a;浪费CPU资源&#xff…

Python(TensorFlow和PyTorch)及C++注意力网络导图

&#x1f3af;要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…

深度学习Day-33:Semi-Supervised GAN理论与实战

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 一、 基础配置 语言环境&#xff1a;Python3.8编译器选择&#xff1a;Pycharm深度学习环境&#xff1a; torch1.12.1c…

3 种自然语言处理(NLP)技术:RNN、Transformers、BERT

自然语言处理 (NLP) 是人工智能的一个领域&#xff0c;旨在使机器能够理解文本数据。NLP 研究由来已久&#xff0c;但直到最近&#xff0c;随着大数据和更高计算处理能力的引入&#xff0c;它才变得更加突出。 随着 NLP 领域的规模越来越大&#xff0c;许多研究人员都试图提高…

【 html+css 绚丽Loading 】000051 方寸轮回矩

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f…

python压缩图片的代码

从网上复制的&#xff0c;不知道对不对 def compress_image(infile, outfile, mb1500, step10, quality80):"""不改变图片尺寸压缩到指定大小:param infile: 压缩源文件:param outfile: 压缩文件保存地址:param mb: 压缩目标&#xff0c;KB:param step: 每次调…

蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)

目录 一、页面切换内容详解 1.逻辑解释 2.代码详解 code.c&#xff08;内含详细讲解&#xff09; code.h main.c 3.效果图片展示 ​编辑 二、页面选项高亮内容详解 1.逻辑解释 2.读入数据 FIRST.第一种高亮类型 code.c&#xff08;内含代码详解&#xff09; code.…

[000-01-008].第05节:OpenFeign特性-重试机制

我的后端学习大纲 SpringCloud学习大纲 1.1.重试机制的默认值&#xff1a; 1.重试机制默认是关闭的&#xff0c;给了默认值 1.2.测试重试机制的默认值&#xff1a; 1.3.开启Retryer功能&#xff1a; 1.修改配置文件YML的配置&#xff1a; 2.新增配置类&#xff1a; packa…