Spring面试题(基础篇)

news2025/2/22 13:28:18

目录

一、Spring框架概述

1、什么是Spring?

2、spring优点有哪些?

二、IOC与DI

3、你知道getBean方法的有几种重载方式吗?

4、Spring有几种依赖注入方式?

三、Spring创建对象

5、Spring创建对象有几种方式?

6、你简单说说Bean有哪些作用域?

7、Bean的生命周期?

四、注解

8、你使用过哪些Spring注解?

9、那@Controller、@Service、@Repository和@Component有什么区别?

10、@Resource与@Autowired的区别?

五、面向切面编程(AOP)

11、什么是AOP?

12、AOP如何手动实现?

13、你在项目中是如何实现的?用过AspectJ吗?

14、有哪些通知类型?

六、JdbcTemplate

15、用过Spring自带的JDBC API技术JdbcTemplate吗?随便说几个常用的方法

七、事务

16、列举spring 支持的事务管理类型

17、你在项目中是如何实现事务的?

18、@Transactional注解都有哪些属性?

19、什么是事务的传播行为?

20、有几种传播行为?

21、有几种隔离级别?

22、你刚才提到@Transactional注解有一个属性timeout,你是怎么理解的?

23、那属性readOnly你是如何理解并使用的?


一、Spring框架概述

1、什么是Spring?

答:spring的核心实现思想IOC,由spring来负责控制对象的生命周期和对象间的关系。注意以前对于一个类型(类),手动的使用new来实例化这个对象变量,现在不用你new了,交给spring控制。

在传统的开发中,在一个类定义另一个类的实例,这样的话,互相依赖,耦合在一起。spring的思想是两个类是独立的,用的时候在往里放,即轻松解耦。

2、spring优点有哪些?

答:可以从四个方面来答,解耦、切面、方便集成各种优秀框架、一站式

一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上spring自身也提供了展现层的springmvc和持久层的spring JDBC),也就是说完全可以用一个spring技术就可以搭建一个web项目。

二、IOC与DI

3、你知道getBean方法的有几种重载方式吗?

答:三种

//第一种getBean(id):通过id去spring容器中找对象
Person person01 = (Person) ac.getBean("personOne");


//第二种getBean(类型):通过类型去spring容器中找对象
Person person02 = ac.getBean(Person.class);


//第三种getBean(id,类型):通过id + 类型去spring容器中找对象
Person person03 = ac.getBean("personTwo",Person.class);

4、Spring有几种依赖注入方式?

答:三种

分别是setter方式、构造器方式和P命名空间方式。

三、Spring创建对象

5、Spring创建对象有几种方式?

答:三种

分别是无参构造、静态工厂、实例工厂方式。

6、你简单说说Bean有哪些作用域?

答:Bean有四种作用域,分别是Singleton(默认的)、Prototype、Request、Session。

7、Bean的生命周期?

答:

Spring 容器根据配置中的 bean 定义中实例化 bean。

Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()。

如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。

如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法。

如果为 bean 指定了 init 方法( <bean> 的 init-method 属性),那么将调用它。

最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。

如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

如果为 bean 指定了 destroy 方法( <bean> 的 destroy-method 属性),那么将调用它。

四、注解

8、你使用过哪些Spring注解?

答:

  • @Controller:一般用在控制层
  • @Service:一般用在业务层
  • @Repository:一般用在数据层
  • @Component:可以用在各种类上
  • @Resource:根据名称注入类,但注意此类是JDK的注解,并不是Spring的,只不过我们通常拿它和@Autowired一起比较
  • @Autowired:用于在 spring bean 中自动装配,是根据类型注入类。
  • @Scope:用于配置 spring bean 的作用域。
  • @Aspect,@Before,@After,@Around,@Pointcut 用于切面编程(AOP)。

9、那@Controller、@Service、@Repository和@Component有什么区别?

答:虽然都用在各自的层(控制层、业务层、数据层)上,但其实本质没什么区别,哪怕你@Controller用在业务层,@Service用在数据层也不会出错,Spring是不会校验这个的,只不过我们这么写是为了让我们自己知道这个类是干什么的,哪个层,真正的意图是什么。

10、@Resource与@Autowired的区别?

答:

(1)来源不同:@Autowired 和 @Resource 来自不同的“父类”,其中 @Autowired 是 Spring 定义的注解,而 @Resource 是 Java 定义的注解,它来自于 JSR-250(Java 250 规范提案)。

(2)查找顺序不同:@Autowired 是先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)进行查找。而@Resource 是先根据名称查找,如果(根据名称)查找不到,再根据类型进行查找。

五、面向切面编程(AOP)

11、什么是AOP?

答:AOP把重复的功能拿出来放到类中,让应用对象只关注于自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理。

举例:我们公司想要请明星做代言,明星跟我们洽谈工资、合同、以及租场地、演出,这些都是明星自己一个人干,那么这就不是切面编程。切面编程是让明星只关注于自己的业务领域(演出),其它的活可以交给经纪人(代理对象)去做。

12、AOP如何手动实现?

答:有两种方式,JDK动态代理和CGLIB,JDK动态代理必须是接口,而CGLIB没有接口,只有实现类。采用字节码增强框架cglib,在运行时创建目标类的子类,从而对目标类进行增强。

13、你在项目中是如何实现的?用过AspectJ吗?

答:用过

AspectJ是一个基于Java语言的AOP框架。

spring2.0以后新增了对AspectJ切点表达式的支持。

@AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面。

新版本spring框架,建议使用AspectJ方式来开发AOP。

主要用途:自定义开发。

14、有哪些通知类型?

答:我知道有5种通知类型,分别是:

before:前置通知,应用于各种校验,在方法执行前执行,如果通知抛出异常,阻止方法运行。

afterReturning:后置通知,应用于常规数据处理,方法正常返回后执行,如果方法中抛出异常,通知无法执行。必须在方法执行后才执行,所以可以获得方法的返回值。

around:环绕通知,十分强大,可以做任何事情,方法执行前后分别执行,可以阻止方法的执行。必须手动执行目标方法。

afterThrowing:抛出异常通知,一般应用包装异常信息,方法抛出异常后执行,如果方法没有抛出异常,无法执行。

after:最终通知,一般用于清理现场环节,方法执行完毕后执行,无论方法中是否出现异常。相当于在finally代码块中。

六、JdbcTemplate

15、用过Spring自带的JDBC API技术JdbcTemplate吗?随便说几个常用的方法

答:当然用过,常用的方法有这几种:

增 update方法
删 update方法
改 update方法
批量增删改 batchupdate方法
查询实体 Bean  queryForObject方法
查询 List  query方法
查询 Map  queryForMap方法
查询 List<Map<String,Object>  queryForList方法

七、事务

16、列举spring 支持的事务管理类型

答:支持编程式事务管理和声明式事务管理。

使用原生的JDBC API进行事务管理类似于这样:

① 获取数据库连接Connection对象。

② 取消事务的自动提交。

③ 执行操作。

④ 正常完成操作时手动提交事务。

⑤ 执行失败时回滚事务。

⑥ 关闭相关资源。

使用原生的JDBC API实现事务管理是所有事务管理方式的基石,同时也是最典型的编程式事务管理。编程式事务管理需要将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在使用编程的方式管理事务时,必须在每个事务操作中包含额外的事务管理代码。相对于核心业务而言,事务管理的代码显然属于非核心业务,如果多个模块都使用同样模式的代码进行事务管理,显然会造成较大程度的代码冗余。

17、你在项目中是如何实现事务的?

答:使用@Transactional注解实现事务,可以作用在类和方法上。

18、@Transactional注解都有哪些属性?

答:常用的共有四种,分别是propagation(传播行为)、isolation(隔离级别)、timeout(超时操作)、readOnly(是否只读)。


19、什么是事务的传播行为?

答:A方法和B方法都有事务,当A在调用B时,会将A中的事务传播给B方法,B方法对于事务的处理方式就是事务的传播行为。

20、有几种传播行为?

答:七种,分别是required(默认)、supports、mandatory、requires_new、not_supported、never、nested。


21、有几种隔离级别?

答:读未提交、读已提交、可重复读、串行化。
 

22、你刚才提到@Transactional注解有一个属性timeout,你是怎么理解的?

答:情景:假如说京东秒杀活动,有1万个请求同时执行,这时有1000个请求在某个步骤上卡住了,那么你如果没有设置超时时间,请求会一直卡在那。因为我们知道一个连接对象要么提交要么回滚才算一个事务执行完毕。如果设置了超时时间假如说是5秒,那么就会等待5秒后还没有提交事务的话就直接强制回滚。这样的话也就释放连接了。

23、那属性readOnly你是如何理解并使用的?

答:指定当前事务中的一系列的操作是否为只读。若设置为只读,mysql就会在请求访问数据的时候不加锁,提高性能。

问题:如果一个事务内既有读也有修改操作,那么可以设置readOnly="true"吗?

可以设置,但是没什么用,反而变麻烦了,假如你设置了true,并且事务中有了修改操作。那么就会让所有的操作都不加锁,这样的话会造成脏读、幻读、不可重复读都来了。所以只有你这个事务内全部都是读的操作,才能加上readOnly="true"。

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

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

相关文章

SciencePub学术 | 可再生能源类重点SCIEI征稿中

SciencePub学术刊源推荐: 可再生能源类重点SCI&EI征稿中&#xff01;2区闭源正刊&#xff0c;进展顺利&#xff0c;稳定检索40年以上。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 可再生能源类重点SCI&EI 【期刊简介】IF&#xff1a;4.0-4.…

Win安装kafka

Win安装kafka 安装zookeeper修改zookeeper 配置文件 安装kafka启动kafka创建topic查看topic命令 用命令发布消息消费命令 安装zookeeper https://zookeeper.apache.org/releases.html 解压到文件夹 同时在解压目录中拆创建 data和 log文件夹 修改zookeeper 配置文件 - 复制 …

小程序多选框问题

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;前端小程序记录错误bug 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;前端循环数组时页面数据无法显示 <checkbox-group bindchange"…

【greenplum 性能优化】greenplum 数据库集群 如何释放占用内存

无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。人工智能教程 在Greenplum数据…

想从事UE4开发相关工作,C++学到什么程度可以开始学习针对虚幻4的编程开发呢?

想从事UE4开发相关工作&#xff0c;C学到什么程度可以开始学习针对虚幻4的编程开发呢&#xff1f; 想从事UE4开发相关工作&#xff0c;C是一个必须要熟练掌握的语言。在学习C过程中&#xff0c;需要掌握语法、面向对象编程、数据结构和算法等内容&#xff0c;这些都是开发UE4所…

nginx修改配置文件不生效

1、问题描述 由于需要向其他公司的数据库中推送数据&#xff0c;但是对方公司的服务器只针对某一台服务器开放了端口&#xff0c;公司的datax部署在另外一台服务器中&#xff0c;导致不能正常连接数据库。因此做了nginx&#xff0c;进行两次代理&#xff0c;但是对方服务器突然…

企业——配置两条静态路由

要求1&#xff1a;按照图中要求配置IP地址&#xff0c;使用静态路由实现要求1、2 要求2&#xff1a;pc1访问pc2走下面 要求3&#xff1a;pc2访问pc1走上面&#xff0c;且两条线路互为备份 1.配置接口IP int g0/0/~ ip address ~ 2.配置静态路由&#xff0c;每个路由两条&a…

Vue3优雅地监听localStorage变化

目录 &#x1f4a1;前言 &#x1f4a1; 为什么要这样做&#xff1f; &#x1f48e; 思路 &#x1f48e; 实现 &#x1f697; 实现中介者模式 &#x1f697; 重写localStorage &#x1f697; 实现useStorage hook &#x1f48e; 测试 &#x1f697; 使用localStorage …

「大模型微调」使用 DDP 实现程序单机多卡并行指南

最近在大趋势的影响下&#xff0c;开始染指大模型。由于实验室计算资源的限制&#xff0c;需要使用单机多卡并行的方式运行程序&#xff0c;这里以 BLOOM-560m 模型为例&#xff0c;演示如何通过单机多卡DDP并行的方式微调完成下游任务。 目录 0. 基础篇- 两种分布式训练方式- …

网络安全自学笔记

一、怎么入门&#xff1f; 这个 Web 安全学习路线&#xff0c;整体大概半年左右&#xff0c;具体视每个人的情况而定。 &#xff08;上传一直很模糊&#xff0c;所以就没有展开了&#xff0c;需要高清版的可以在下面领取&#xff09; &#x1f449; 【一学习路线高清版一】&a…

Java操作mongodb(含分页,精确查询,模糊查询,时间区间,排序)进行查询

mongodb是常用的非关系型数据库&#xff0c;他经常用来存储文本数据&#xff0c;也就是JSON格式的数据。 不废话&#xff0c;直接上代码。注释写的很详细。&#xff08;有问题留言秒回&#xff09; public Page<Product> listProducts(ProductCond cond) {//如前端没传&a…

赛效:如何自动拼图在线实现多图合一

1&#xff1a;在电脑上打开改图鸭网页版&#xff0c;登录账号后在特色功能里点击“模板拼图”。 2&#xff1a;根据需要图片数量和特点选择对应的拼图模板&#xff0c;然后点击右侧模板里的上传图片。 3&#xff1a;图片添加完成后&#xff0c;除了可以直接在模板里拖动图片进行…

第六章 Electron|Node 实现license激活机制

一、license是什么 ✨ ⭐️ &#x1f31f; license许可证&#xff0c;一般用于软件的授权&#xff0c;我个人的理解就和我们平时的登录差不多。只是说登录时需要我们输入用户名和密码&#xff0c;license一般是开发方提供给你一串加密后的文本&#xff0c;通过这个文本进行一…

Linux5.1 LVS负载均衡群集

文章目录 计算机系统5G云计算第一章 LINUX LVS负载均衡群集一、LVS概述1.群集的含义2.群集的特点3.扩展服务器的方式4.群集的类型5.负载均衡的结构6.负载均衡集群工作模式分析 二、LVS-NAT 的部署1.关于 LVS 虚拟服务器2.LVS的负载调度算法3.使用 ipvsadm 工具 三、NAT模式 LVS…

ChatGPT助力码上行动:零基础学会Python编程

摘要&#xff1a; Python编程作为一种简洁、易学且功能强大的编程语言&#xff0c;正逐渐成为初学者进入编程领域的首选。然而&#xff0c;对于零基础的学习者来说&#xff0c;学习编程仍然存在一定的挑战。本文将介绍如何利用ChatGPT的强大语言生成能力&#xff0c;助力零基础…

元宇宙应用领域-社交

社交是一个古老的话题&#xff0c;人类从最开始的结群&#xff0c;到后来的部落&#xff0c;再到如今的网络社交&#xff0c;可以说人类的社交方式经历了漫长的演化过程。 随着互联网的普及和网络社交方式的不断发展&#xff0c;社交对于人类而言越来越重要。人们在网上不仅可…

SQL语句之DQL语言(二)(多表查询)

准备工作&#xff1a;创建表&#xff0c;添加数据 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime…

新招了个从腾讯拿38K离职的测试大佬,让我见识到了什么才是测试界的天花板

现在招个会几年工作经验还会自动化测试的测试工程师真是难呀&#xff0c;10个里面有8个写了会自动化&#xff0c;但一问就是三不知 5年测试工作经验&#xff0c;技术应该是能达到资深测试的水准&#xff0c;即不仅能熟练地开发业务&#xff0c;而且还能熟悉项目的开发&#xff…

【数据结构每日一题】栈——中心对称链

[数据结构习题]栈——中心对称链 &#x1f449;知识点导航&#x1f48e;&#xff1a;【数据结构】栈和队列 &#x1f449;[王道数据结构]习题导航&#x1f48e;&#xff1a; p a g e 70.4 page70.4 page70.4 本节为栈和链表综合练习题 题目描述&#xff1a; &#x1f387;思路…

【论文阅读】dreambooth

简介 目标&#xff1a;subject-driven generation&#xff0c;针对特定物体的图像生成&#xff0c;仅使用少量目标主体图像&#xff0c;dreambooth可以在prompt的指导下生成大量目标主体在不同场景下的图像。例如下图中小狗&#xff0c;我们给定的set就是左侧的input images&a…