一、大概说下SpringMVC的流程
Disptacher为核心处理器,基本所有操作都围绕它转
- 1、用户发起请求,请求抵达DispatcherServlet,dispatcherServlet调用doService方法中的如图所示代码
- 2、代码执行到940行,调用getHandler方法获取HandlerExecutionChain,而它是由2部分组成,用户写的handler(即controller)与对应请求上的拦截器链
- 3、用户根据mappedHandler获取HandlerAdaper,之后调用拦截器perHandle方法,只有全部通过了之后才会调用用户写的controller逻辑,返回modelAndView对象
- 4、dispatcherServlet获取到modelAndView对象之后设置视图名称,并执行拦截器postHandle方法
- 5、dispathcerServlet根据viewName将modelAndView传给具体ViewReslover解析器,ViewReslover解析后返回具体View
- 6、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
- 7、DispatcherServlet对用户进行响应
二、Spring事务的传播行为有几种,分别是啥?
spring事务的事务传播行为一共有七种,分别为
- REQUIRED:支持当前事务,如果没有事务,则新建事务
- SUPPORTS:支持当前事务,如果没有事务,则以非事务方式运行
- MANDATORY:支持当前事务,如果没有事务,则抛出异常
- REQUIRES_NEW:创建新事务,如果当前事务存在,则挂起当前事务
- NOT_SUPPORTED:以非事务方式运行,如果当前存在事务则挂起
- NEVER:以非事务方式运行,如果当前存在事务则抛出异常
- NESTED:新建事务,如果当前存在事务,则挂起当前事务,与requireNew不同的是requireNew的事务之前互不影响,而nested之间的事务会互相影响
三、rabbitmq原理
- 消息交换机(Exchange):接受消息提供者(生产者)的消息,并根据消息的RoutingKey和Exchange绑定的BindingKey分配消息
- 消息队列(Queue):存储消息接收者(消费者)的消息
- RoutingKey:指定当前消息被谁接受
- BindingKey:指定当前Exchange下,什么样的– RoutingKey会被下派到当前绑定的Queue中
四、redis的数据结构?redis的存储策略?
- 有String、Hash、List、Set 、Sort Set5种;
- 2种策略:1直接保存内存快照、2保存命令日志文件
五、synchronized为什么是重量级锁?Lock为啥是轻量级锁?
- 实现原理不同:synchronized是锁对象,如果当前线程检查到别的线程已经锁住该对象,则当前线程阻塞。而线程阻塞后再重新开始执行的cpu开销较大。而lock是一直查看锁是否释放来实现的。
六、java的内存空间
- 堆:每个线程包含一个栈区,只保存基础数据类型和自定义对象引用
- 栈:存放对象本身
- 静态区或方法区:存放class和static变量
暂时先写这么多,明天面试回来以后再补充