Java面经4


前言

记录收集到的常用Java面试题(系列4)


面经4

说说Spring Boot常用的注解

@SpringBootApplication:它是SpringBoot的核心注解,用于开启自动配置,准确的说是通过该注解内的@EnablAutoConfiguration注解实现的自动配置。
@EnableAutoConfiguration:自动配置注解,在启动Spring应用程序上下文时进行自动配置,自动配置通常是基于项目classpath中引入的类和已定义的bean来实现的。
@Import:@EnableAutoConfiguration的关键功能是通过@Import注解导入的ImportSelector来完成的。
@Congiguration:配置类注解,根据一些特定条件来控制bean的实例化的行为。
@ComponentScan:位置在SpringBoot的启动类上,Spring包扫描。

MyBatis 与 Hibernate 有哪些不同?

MyBatis 和 Hibernate不同,它不完全是一个 ORM 框架,因为 MyBatis 需要程序员自己编写 SQL 语句;Hibernate 对象/ 关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用 Hibernate 开发可以节省很多代码,提高效率;

MyBatis 直接编写原生态 SQL,可以严格控制 SQL 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是 MyBatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套 SQL 映射文件,工作量大。

MyBatis使用过程?生命周期?

1)创建SqlSessionFactory 2)通过SqlSessionFactory创建SqlSession 3)通过sqlsession执行数据库操作 4)调用session.commit()提交事务 5)调用session.close()关闭会话

SqlSessionFactoryBuilder
一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的生命周期只存在于方法的内部。

SqlSessionFactory
SqlSessionFactory 是用来创建SqlSession的,相当于一个数据库连接池,每次创建SqlSessionFactory都会使用数据库资源,多次创建和销毁是对资源的浪费。所以SqlSessionFactory是应用 级的生命周期,而且应该是单例的。

SqlSession
SqlSession相当于JDBC中的Connection,SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的生命周期是一次请求或一个方法。

Mapper
映射器是一些绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的,它的生命周期在sqlsession事务方法之内,一般会控制在方法级。

MyBatis 动态 SQL 是做什么的?都有哪些动态 SQL?能简述一下动态 SQL的执行原理不?

MyBatis 动态 SQL 可以让我们在 XML 映射文件内,以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能;

MyBatis 提供了 9 种动态 SQL 标签:trim、where、set、foreach、if、choose、when、otherwise、bind;

执行原理:使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能

MyBatis 是如何进行分页的?分页插件的原理是什么?

MyBatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 SQL 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,根据 dialect 方言,添加对应的物理分页语句和物理分页参数

MyBatis 有几种分页方式?

数组分页

SQL 分页

拦截器分页

RowBounds 分页

Mybatis都有哪些Executor执行器?

Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

拦截器与过滤器的区别?

①:拦截器是基于java的反射机制的,而过滤器是基于函数的回调。
②:拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
③:拦截器只对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④:拦截器可以访问action上下文、值、栈里面的对象,而过滤器不可以。
⑤:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥:拦截器可以获取IOC容器中的各个bean,而过滤器不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。


全部系列

面经1:https://blog.csdn.net/Oliver__Twist/article/details/125459141?spm=1001.2014.3001.5501
面经2:https://blog.csdn.net/Oliver__Twist/article/details/125461522?spm=1001.2014.3001.5501
面经3:https://blog.csdn.net/Oliver__Twist/article/details/125461610?spm=1001.2014.3001.5501
面经4:https://blog.csdn.net/Oliver__Twist/article/details/125461632?spm=1001.2014.3001.5501
面经5:https://blog.csdn.net/Oliver__Twist/article/details/125461655?spm=1001.2014.3001.5501

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值