面试题(SSM+SpringBoot)

本文详细探讨了Spring家族中的核心组件,包括Mybatis的优缺点、#{}和${}的区别、Mybatis缓存机制以及Spring的IOC理解。此外,还深入讲解了Spring中的单例Bean、Bean的作用域、事务管理、SpringMVC的工作原理和Spring Boot的常用注解,旨在帮助开发者更好地理解和掌握Spring生态的关键知识点。
摘要由CSDN通过智能技术生成

目录

1、Mybatis的优缺点

2、#{}和${}的区别是什么?

3、什么情况下必须用${}

4、Mybatis缓存

5、MyBatis缓存查询的顺序

6、谈谈你对IOC的理解

7、单例Bean和单例模式

8、Bean的作用域

9、Spring中的Bean创建的⽣命周期有哪些步骤(简单步骤)

10、Spring中Bean是线程安全的吗

11、ApplicationContext和BeanFactory有什么区别

12、Spring的常用注解

13、谈谈你对AOP的理解

14、如何在Spring中进行事务操作

15、Spring事务传播机制(行为)

16、声明式事务管理常用参数

17、Spring事务什么时候会失效

18、Spring中什么时候@Transactional会失效

19、什么是springMVC

20、springMVC的工作原理(流程)

21、springMVC优点

22、Spring和SpringBoot的区别

23、Spring Boot中常⽤注解及其底层实现

24、Spring Boot是如何启动Tomcat的


1、Mybatis的优缺点

优点:

  1. 基于 SQL 语句编程,相当灵活,不会对应⽤程序或者数据库的现有设计造成任何影响,SQL 写在 XML ⾥,解除 sql 与程序代码的耦合,便于统⼀管理;提供 XML 标签, ⽀持编写动态 SQL 语 句, 并可重⽤。

  2. 与 JDBC 相⽐,减少了 50%以上的代码量,消除了 JDBC ⼤量冗余的代码,不需要⼿动开关连 接;

  3. 很好的与各种数据库兼容( 因为 MyBatis 使⽤ JDBC 来连接数据库,所以只要JDBC ⽀持的数据 库 MyBatis 都⽀持)。

  4. 能够与 Spring 很好的集成;

  5. 提供映射标签, ⽀持对象与数据库的 ORM 字段关系映射; 提供对象关系映射标签, ⽀持对象关 系组件维护。 ‘

缺点:

  1. SQL 语句的编写⼯作量较⼤, 尤其当字段多、关联表多时, 对开发⼈员编写SQL 语句的功底有⼀ 定要求。

  2. SQL 语句依赖于数据库, 导致数据库移植性差, 不能随意更换数据库。

2、#{}和${}的区别是什么?

  • ${}的本质就是字符串拼接,#{}的本质就是占位符赋值

  • ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

  • Mybatis在处理#{}时,会将sql中的#{}替换为?号,调⽤ PreparedStatement 来赋值;

  • Mybatis在处理${}时,会将sql中的${}替换成变量的值,调⽤ Statement 来赋值;

  • 使⽤#{}可以有效的防⽌ SQL 注⼊, 提⾼系统安全性。

3、什么情况下必须用${}

1.当参数不需要字符串包裹起来的时候

2.当sql中表名是从参数中取的情况 (动态拼接表名的时候)

3.order by排序语句中,因为order by 后边必须跟字段名,这个字段名不能带引号,如果带引号会被识别会字符串,而不是字段

4、Mybatis缓存

  • 没有关闭或者提交SqlSession时,查询的数据会保存在一级缓存中,当我们关闭或者提交了SqlSession时,数据才会保存在二级缓存中

  • MyBatis的一级缓存,一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问

一级缓存失效的四种情况

​ 1、不同的SqlSession对应不同的一级缓存

​ 2、同一个SqlSession但是查询条件不同

3、同一个SqlSession两次查询期间执行了任何一次增删改操作,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

​ 4、同一个SqlSession两次查询期间手动清空了缓存

  • MyBatis的二级缓存,二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取。

二级缓存开启的条件

​ 1)在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置

​ 2)在映射文件中设置<cache> 标签表示当前这个 mapper 映射将使用二级缓存,区分的标准就看mappernamespace值。

​ 3)二级缓存必须在SqlSession关闭或提交之后才有效

​ 4)查询的数据所转换的实体类类型必须实现序列化的接口

使二级缓存失效的情况

​ 两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效

5、MyBatis缓存查询的顺序

  • 先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用

  • 如果二级缓存没有命中,再查询一级缓存

  • 如果一级缓存也没有命中,则查询数据库

  • SqlSession关闭之后,一级缓存中的数据会写入二级缓存

6、谈谈你对IOC的理解

  • 控制反转,把对象创建和对象内属性的赋值 ,交给Spring进行管理,

  • 我们可以把控制反转拆开理解,所谓控制就是控制对象的创建 、对象内属性的赋值,

  • 如果我们不⽤Spring,那我们得⾃⼰来做这两件事,反过来,我们⽤Spring,这两件事情就不⽤我们做 了,

  • 我们要做的仅仅是定义类,以及定义哪些属性需要Spring来赋值(⽐如某个属性上加 @Autowired),

  • ⽽这其实就是第⼆个问题的答案,这就是反转表示⼀种对象控制权的转移

总结

IOC表示控制反转,表示如果⽤Spring,那么Spring会负责来创建对象,以及给对象内的属性赋值,也就是如果⽤Spring,那么对象的控制权会转交给Spring。

7、单例Bean和单例模式

  • 单例模式表示JVM中某个类的对象只会存在唯⼀⼀个。

  • ⽽单例Bean并不表示JVM中只能存在唯⼀的某个类的Bean对象。

8、Bean的作用域

  • Spring里面,设置创建bean实例是单实例(只有一个对象,对象地址是一样的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值