阶段复习题

# SSM框架

# 第一部分:Spring

## 1.简述什么是Spring框架

Spring是创建并管理对象的容器,它可以让程序员不用去管理对象的创建过程,只需要拿来使用

## 2.什么是IOC和AOP

IOC是控制反转,指将创建对象、赋值、管理,作用域等交给Spring去管理,而IOC的实现依赖于DI(依赖注入)完成。

AOP是面向切面编程,将程序的一个个连接点看做不同的切面,对各个部分进行隔离,使代码的耦合度降低

## 3.Spring中bean的作用域

Spring中bean的作用域为全局唯一,可以使用@Scope注解改变作用域,在Scope后输入prototype使对象每次创建都是新的对象,Scope默认值为singleton(单例)

## 4.Spring框架中的Bean是线程安全的么?

当使用@Scope(prototype)注解时,线程是安全的,因为每次创建的是不同的对象,当使用@Scope(singleton)注解,或不添加注解时,线程是不安全的

因为此对象全局唯一

## 5.@Autowired和@Resource的区别

@Autowired可以添加在构造方法的声明之前,@Resource不可以

@Resource可以添加在类的声明之前(但不会装配属性的值),@Autowired不可以

## 6.Spring中bean的生命周期

创建bean实例
为bean的属性赋值
调用bean的初始化的方法
bean的使用、当容器关闭时候,调用bean的销毁的方法

## 7.Spring的事务传播机制

**Spring的事务传播机制有7钟:REQUIRED、REQUIRES_NEW、NESTED、SUPPORTS、NOT_SUPPORTED、MANDATORY和NEVER**。

事务的传播机制指在一个方法中调用另一个方法并将事务传递给它

## 8.Spring中的事务隔离级别

Spring中的隔离级别默认为ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED(读取未提交的数据,最不安全的级别)、ISOLATION_READ_COMMITTED(读取已提交的数据)、

ISOLATION_REPEATABLE_READ(可重复读取数据)、ISOLATION_SERIALIZABLE(可串行化读)

# 第二部分:SpringMVC

## 1.什么是MVC,以及简述Springmvc。

SpringMVC是基于Spring框架基础之上的一种设计模式,解决后端服务器接收客户端提交的请求,并给予响应的相关问题。

MVC=Model+View+Controller。

Model:数据模型。由业务逻辑层和数据访问层构成、View:试图、Controller:控制器

## 2.SpringMVC的执行流程?

浏览器提交请求到中央调度器。
中央调度器直接将请求转给处理器映射器。
处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。
中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
处理器适配器调用执行处理器。
处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。
处理器适配器直接将结果返回给中央调度器。
中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。
视图解析器将封装了的视图对象返回给中央调度器。
中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。

中央调度器响应浏览器。


## 3.什么是重定向和转发,在SpringMVC如何实现重定向和转发?

重定向是在服务器处理完请求后不直接响应一个页面,而是给浏览器回复一个路径,浏览器根据这个路径再次发出请求 

转发是在客户端发送请求是,服务器根据请求进行处理和转发,然后找到另一个目标资源,并将资源返回的过程

在SpringMVC中实现重定向:在返回值前加redirect。实现转发:在返回值前面加forward。

## 4.@RestController和 @Controller区别是什么?

RestController相当于将@ResponseBody和@Controller何在一起的注解

@Controller只能返回要跳转的路径,添加了@ResponseBody后才能返回方法中指定的返回类型

## 5.SpringMVC中拦截器如何实现?

实现HandlerInterceptor接口,重写其中的三个方法:preHandle,postHandle,afterCompletion。在配置建中配置拦截器

## 6.拦截器和过滤器的区别?

拦截器基于java的反射机制实现,过滤器基于函数回调。

过滤器实现的是javax.servlet.Filter接口,需要依赖Tomcat等容器,只能在web程序中使用,拦截器是Spring组件,可以单独使用

触发时机不同过滤器是请求进入容器后但在进入servlet之前进行处理,拦截器是在请求进入servlet后在进入Controller之前进行处理

拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

## 7.什么是RESTFUL?

是一种架构的规范与约束,符合这种规范的架构就是RESTFUL架构。它是一种设计风格,不是一种标准,是一种思想。

# 第三部分:MyBatis

## 1.什么是MyBatis?

它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

## 2. #{} 和 ${} 的区别?

#{}是预编译处理,是占位符。${}是字符串替换,是拼接符在Mybatis处理#{}的时候会将sql语句中的#{}替换成?号调用 PreparedStatement 的set 方法来赋值;Mybatis 在处理时 , 就 是 把 {}时, 就是把时,就是把{}替换成变量的值。使用#{}可以有效的防止 SQL 注入, 提高系统安全性。

## 3.简述MyBatis一级和二级缓存?

第一次查询之后,会缓存数据,不需要再查一遍
MyBatis一级缓存: 在一个 SqlSession 对象中创建一个本地缓存(local cache),对于同一个SqlSession 
每一次查询,都会尝试根据查询的条件去本地缓存中查找是否在缓存中,
如果在,就直接从缓存中取出,然后返回给用户,一级缓存默认开启;否则,从数据库读取数据,
将查询结果存入缓存并返回给用户。
二级缓存称为全局缓存或者SqlSessionFactory级别,需要手动开启,可以实现跨SqlSession 的缓存,
也可以针对某个命名空间开启。

## 4.如何获取自增的主键?

可以设置 useGeneratedKeys=“true”,表明使用自增主键获取主键值策略,然后再利用 keyProperty 属性指定对应的主键属性,也就是 Mybatis 获取到主键值后,将这个值封装给 JavaBean 的哪个属性

## 5. resultType 和 resultMap的区别?

 1、resultType直接表示返回类型,包括基础数据类型和复杂数据类型
  2、resultMap是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果到哪一个resultMap上。它的应用场景一般是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询,以便自由控制映射结果。
  3、在MyBatis进行查询映射的时候,查询出来的每个字段值都放在一个对应的Map里面,其中键是字段名,值则是其对应的值。当select元素提供的返回类型属性是resultType的时候,MyBatis会将 Map里面的键值对取出赋给resultType所指定的对象对应的属性(即调用对应的对象里的属性的setter方法进行填充)。正因为如此,当使用resultType的时候,直接在后台就能接收到其相应的对象属性值。由此可看出,其实MyBatis的每个查询映射的返回类型都是 resultMap,只是当我们提供的返回类型属性是resultType 的时候,MyBatis 会自动把对应的值赋给resultType所指定对象的属性;而当我们提供的返回类型属性是 resultMap 的时候,因为 Map不能很好地表示领域模型,就需要通过进一步的定义把它转化为对应的实体对象。

## 6.当实体类属性名和表中字段名不一致时如何处理?

  第 1 种: 通过在查询的 sql 语句中定义字段名的别名, 让字段名的别名和实体类的属性名一致。
   第 2 种:  通过映射字段名和实体类属性名的对应的关系。即:用id属性来映射主键字段<id property="id"  column="order_id/>
     用 result 属性来映射非主键字段,property 为实体类属性名,column 为数据表中的属性<result property =  “orderno" column="order_no"/>

## 7.接口中传递多个参数时如何处理?

  第一种: DAO 层的函数
public UserselectUser(String name,String area);
对应的 xml,#{0}代表接收的是 dao 层中的第一个参数,#{1}代表 dao 层中第二参数,更多参数一致往后加即可。
  第二种: 使用 @param 注解:
  第三种: 多个参数封装成 map

## 8.写出你知道的动态sql标签?

1、if 标签       
2、where标签
3、 trim 标签(自定义 trim 元素)
4、set标签
5、choose (when, otherwise)标签
6、foreach标签
7、bind标签

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值