面试题3(20220518)

1>MyBatis中的#{}和 ${}的区别是什么

同:

都是动态传递参数的方式

异:

1)#{}是占位符,作用sql预编译,变量替换为?,替换后,变量自动加引号

2)${}是拼接符,作用字符串替换,即sql拼接

3)#{}能防止sql注入,提高系统安全性

2>在Mapper中如何传递多个参数

1)dao层的函数  #{0}或者#{arg0}代表接收的是dao层第一个参数,以此类推

2)使用@param注解

3)在mapper中多个参数封装成map集合或者实体

3>项目中常用的MyBatis标签有哪些

1)增删改查 insert delete update select

2)foreach

3)set

4)if

5)where

4>讲讲MyBatis的一级 二级缓存

mybatis系统当中默认定义了两级缓存:一级缓存和二级缓存

1)一级缓存:是HashMap本地缓存,存储作用域是session,默认开启,与数据库同一次会话期间查询到的数据会放入的本地缓存当中

2)二级缓存:与一级缓存机制相同,HashMap存储,但存储作用域是Mapper(Namespaces),需要手动配置,实现Serializable序列化接口

3)对于缓存数据更新机制,当某一个作用域(一级Session/二级Namespaces)的进行了CUD操作后,默认该作用域下所有select中的缓存将被clear

5>MyBatis是否支持延迟加载,如果支持,它的实现原理是什么?

支持  但只支持association关联对象和collection关联集合对象的延迟加载,在配置文件配置是否启用

实现原理:

使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.get(B).getName(),拦截器invoke()方法发现a.get(B)是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询出来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.get(B).getName()方法的调用,这就是延迟加载的基本原理.

6>Spring的AOP理解,应用场景有哪些

事务管理,记录日志,缓存优化,权限控制,监控性能

7>SpringMVC怎么样设定重定向和转发的

1)转发:在返回值前加"forward"

2)重定向:在返回值前加"redirect"

8>罗列一下SpringMVC中Web层的常用注解

@EnableWebMvc

@Controller

@RequestMapping

@ResponseBody

@RestController

@ControllerAdvice

9>我们要接收前端传入的JSON字符串,我们需要在参数上贴什么注解

@RequestBody

10>SpringMVC的执行流程

1)用户发送请求到前端控制器dispatcherServlet

2)dispatcherServlet收到请求后,调用handlerMapping处理器映射器,请求获取Handle

3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器,一并返回给dispatcherServlet

4)dispatcherServlet调用handlerAdapter处理器适配器

5)处理器适配器经过适配调用后端控制器handler

6)后端控制器执行完成返回ModelAndView

7)处理器适配器handler执行结果ModelAndView返回给dispatcherServlet

8)dispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析

9)视图解析器解析后返回具体View

10)dispatcherServlet对View进行渲染视图

11)dispatcherServlet响应用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值