springmvc怎么将session作成成员变量_MyBatis+Spring+SpringMVC框架面试题整理

v2-00ff77b59819fe2e73b7e5835d08a02e_1440w.jpg?source=172ae18b

目录

■ Spring 能帮我们做什么

■ 描述一下 Spring 的事务

■ 什么是 Spring IOC 容器,IOC 的优点是什么?

■ 什么是 Spring 的依赖注入 ,注入方式有哪些?

■ Spring 支持的几种 bean 的作用域

■​​​​​​​ 简单解释一下 spring 的 AOP

■​​​​​​​ Mybatis 中#和$的区别?

■​​​​​​​ Mybatis 的使用步骤是什么样的?

■​​​​​​​ 使用 MyBatis 的 mapper 接口调用时有哪些要求

■​​​​​​​ mybatis的缓存机制,一级,二级介绍一下

■​​​​​​​ 视图解析器本质是什么

■​​​​​​​ 统一解决get乱码

■​​​​​​​ Spring 能帮我们做什么

1. 实例化bean,并且管理bean与bean之间的依赖关系

2. Spring面向切面编程能帮助我们无耦合实现日志记录,性能统计,安全控制等功能

3. Spring能非常简单的帮我们管理数据库事务

4. Spring提供了与第三方框架无缝集成,如

第三方数据访问框架(mybatis,hibernate,jpa),自身提供了JDBC访问;

第三方web框架(struts,jsf),自己提供了spring mvc进行web创建;

其他第三方框架(如:java mail,任务调度,缓存框架等)

■​​​​​​​ 描述一下 Spring 的事务

1. 事务的特性ACID

原子性、一致性、隔离性、持久性

2. 事务是一系列操作的最小单元,在Spring中,一个session对应一个事务,要么全部成功要么全部失败,如果中间有一条出现异常,那么回滚之前的所有操作

3. Spring中有自己的事务管理机制,实现方式共有两种:编程式和声明式。

编程式事务:使用TransactionTemplate,重写execute方法实现事务管理

声明式事务:使用AOP面向切面编程实现,本质就是在目标方法执行前后进行拦截。在目标方法执行前加入或创建一个事务,在执行方法执行后,根据实际情况选择提交或是回滚事务。

实现声明式事务管理又有两种方式:

基于XML配置文件;

基于注解,使用@Transactional注解,将事务规则应用到业务逻辑中

4. 事务最重要的两个特性是事务的传播级别(7种)和数据隔离级别(4种)

传播级别定义的是事务的控制范围。

我使用过的是REQUIRED和SUPPORTS

REQUIRED(增删改):在事务中执行,如果没有事务存在,则会重新创建一个。

SUPPORTS(查):使用当前的环境执行,如果当前存在事务,则使用这个事务;如果当前没有事务,则不使用事务

事务隔离级别定义的是事务在数据库读写方面的控制范围。

未授权读取,授权读取,可重复读取,序列化(隔离级别最高)

事务隔离的实现是基于悲观锁和乐观锁

Mysql默认的隔离级别是可重复读

■​​​​​​​ 什么是 Spring IOC 容器,IOC 的优点是什么?

1. IOC容器可以理解为一个创建和管理bean的容器,用于创建bean的实例并且管理bean和bean之间的关系

2. 优点(3点)

1) 以前对象都是应用程序new出来的,对象之间的依赖也是应用程序自己创建的,从而导致类与类之间高耦合,难于测试。现在,由Spring管理bean的生命周期以及bean之间的关系,降低了业务对象替换的复杂性,提高了组件之间的解耦;

2) 对资源进行集中管理,实现了资源的可配置和易管理;

3)隐藏细节,不用自己组装,我们只负责调用。

■​​​​​​​ 什么是 Spring 的依赖注入 ,注入方式有哪些?

1. 依赖注入,是IOC的一方面,是一个通常的概念,它有多种解释。这个概念是说我们不用创建对象,而只需要描述它是如何被创建。我们不用在代码里直接组装组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后由IOC容器负责把他们组装起来。

2. 注入方式,实现方式分为两类,基于配置文件和基于注解

属性注入

构造器注入

数组注入

集合注入

List注入

Map注入

■​​​​​​​ Spring 支持的几种 bean 的作用域

1. Singleton,单例,每个bean在Spring IOC容器中只有一个实例,缺省作用域

2. Prototype,原型,每次使用的使用,都会创建一个新的实例

3. Session,在一个HttpSession中,一个bean定义对应一个实例

4. Request,每次http请求都会创建一个bean

5. GlobalSession,在一个全局的HttpSession中,一个bean定义对应一个实例

6. Application

7. Socket

■​​​​​​​ 简单解释一下 spring 的 AOP

利用一种称为“横切”的技术,支持将公共业务提取出来(例如:安全/事务/日志)进行集中管理,面向核心业务编程,只需要关注业务本身,而不用去关注公共业务。使用AOP可以将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

Spring中实现AOP的方式有三种,分别为,基于AspectJ注解方式实现、基于Schema的xml配置、基于ProxyFactoryBean代理实现,但是底层都是基于动态代理实现的,动态代理有JDK动态代理和CGLIB动态代理,AOP默认使用的是JDK动态代理,当目标类没有接口时,使用CGLIB动态代理,也可以在配置文件中配置proxy-target-class=true,只使用CGLIB动态代理。

Spring切面可以应用五种类型的通知

1. 前置通知

2. 后置通知

3. 环绕通知

4. 返回后通知

5. 异常通知

AOP术语

1. 切面(Aspect):公共功能、交叉功能的描述

2. 通知(Advice):实现切面功能的类,真正做事情的地方

3. 连接点(Joinpoint):静态概念,通知执行的地方

4. 切入点(PointCut):动态概念,运行时执行通知的地方,实现切面功能时,连接点变为切入点

5. 目标对象(Target):被通知的对象,核心关注点对象

6. 代理对象(Proxy):代理的是目标对象,通过代理目标对象就增加了切面功能

7. 引入(Introductions):静态概念,将切面与目标对象关联起来

8. 织入(Weaving):将切面应用到代理对象,是一个过程

■​​​​​​​ Mybatis 中#和$的区别?

1. #{}是预编译处理,${}是字符串替换。

2. Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

3. Mybatis在处理${}时,就是把${}替换成变量的值,相当于字符串拼接

4. 使用#{}可以有效的防止SQL注入,提高系统安全性。

■​​​​​​​ Mybatis 的使用步骤是什么样的?

1. 读取配置文件

2. 创建SqlSessionFactoty

3. 创建SqlSession

4. 操作数据库

5. 提交事务(增删改)

6. 关闭session

■​​​​​​​ 使用 MyBatis 的 mapper 接口调用时有哪些要求

1. namespace命名空间指向一个特定的dao接口(全路径)

2. 每一个sql中的id,唯一标识接口中的一个方法

3. parameterType对应接口方法中的输入参数类型

4. resultType对应接口方法的返回类型

5. 参数多个怎么做

map,索引,注解@Param

■​​​​​​​ mybatis的缓存机制,一级,二级介绍一下

1. 一级缓存

默认开启

SqlSession级别的缓存,实现在同一个会话中数据的共享

一级缓存的生命周期和SqlSession一致

当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。

2.二级缓存

默认不开启,需手动开启

SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量

可自定义存储源,如Ehcache

当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库

不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率

实现

实体类实现序列化

在mapper文件中开启<cache>

在配置文件中设置cacheEnabled为true

■​​​​​​​ 视图解析器本质是什么

转发,隐藏细节

■​​​​​​​ 统一解决get乱码

传参之前,将数据序列化

我这儿整理了比较全面的JAVA相关的面试资料,

v2-0ffa7cfa28c78a8f5a873241dd15053d_b.jpg

需要领取面试资料的同学,请加群:473984645

v2-adaf529c96dcf1bc4d120e4d9a26ac4f_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值