SpringMVC流程
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
单例模式 枚举
public enum Siglote {
SIGLOTEROBJ;
//创建一个枚举对象,该对象天生为单例
private Sigloe user;
//私有化枚举的构造函数
private Siglote(){
user = new Sigloe();
}
public Sigloe getInstnce(){
return user;
}
}
mybatis 二级缓存
一级缓存只是相对于同一个SqlSession而言,默认开启的缓存。相同sql多次执行查询一次。
二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。返回的POJO必须是可序列化的。 也就是要求实现Serializable接口.
使用方式:只需要在映射XML文件配置就可以开启缓存了<cache/>
默认使用LRU最近最少使用的算法。
多线程synchronized和lock区别:
synchronized是基于jvm底层实现的数据同步,lock是基于Java编写
1.synchronized
优点:实现简单,语义清晰,便于JVM堆栈跟踪,加锁解锁过程由JVM自动控制,提供了多种优化方案,使用更广泛
缺点:悲观的排他锁,不能进行高级功能
2.lock
优点:可定时的、可轮询的与可中断的锁获取操作,提供了读写锁、公平锁和非公平锁
缺点:需手动释放锁unlock,不适合JVM进行堆栈跟踪
3.相同点
都是可重入锁
springcloud分布式事务以及实现原理
RocketMq消息中间件把消息分为两个阶段:Prepared阶段和确认阶段Prepared阶段(预备阶段)
该阶段主要发一个消息到rocketmq,但该消息只储存在commitlog中,但consumeQueue中不可见,也就是消费端(订阅端)无法看到此消息。
该阶段主要是把prepared消息保存到consumeQueue中,即让消费端可以看到此消息,也就是可以消费此消息。
RocketMQ回查,查看本地业务没有执行成功就rollBack,如果执行成功就发送commit消息。
设计一张Transaction表,将业务表和Transaction绑定在同一个本地事务中,如果扣款本地事务成功时,Transaction中应当已经记录该TransactionId的状态为「已完成」。当RocketMq回查时,只需要检查对应的TransactionId的状态是否是「已完成」就好
https://www.jianshu.com/p/286cac4625b6