偏向锁、轻量级锁、重量级锁的升级以及区别 https://blog.csdn.net/u012722531/article/details/78244786
代码块同步是使用monitorenter和monitorexit指令实现, monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处, JVM要保证每一个monitorenter必须有对应的monitorexit与之配对。任何对象都有一个 monitor 与之关联,当且一个monitor 被持有后,它将处于锁定状态。线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 monitor 的全部权,即尝试得到对象的锁。html
Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference前端
关于表单重复提交问题:
1. 在第一次显示页面的时候,随机制做一个标记token(如时间戳),而后把token放入session和hidden中;
2. 当点击提交按钮的时候,获取session和的token和hidden中的token,若是session中的token不为null,则比较两个token是否一致;
3. 若是两个token一致,受理请求,并移除session的token属性;
4. 若是不一致,或者session的token为null,则不受理请求
SpringMVC的工做流程
1. 用户发送请求至前端控制器DispatcherServlet
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(若是有则生成)一并返回给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响应用户
接口和抽象类应用场景java
首先 类描述的是 这个东西是什么(强调所属)?包含了静态属性,静态行为 ,属性和行为。sql
而接口 描述的它能作什么事儿(强调行为)? 只是 静态常量属性 和 行为后端
- 若是你拥有一些方法而且想让它们中的一些有默认实现,那么使用抽象类吧。
若是你想实现多重继承,那么你必须使用接口。
因为Java不支持多继承,子类不可以继承多个类,但能够实现多个接口。所以你就可使用接口来解决它。
若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。
-
抽象类表示共有许要实现的方法 接口用来特定类有须要才实现 人都会吃饭 但有的人抽烟api
-
抽象类是用来捕捉子类的通用特性的session
-
抽象类是 is a关系;而接口是has a关系app
-
看看jdk的api会发现大部分接口都是able结尾的,表示一种能力。马士兵曰过:当你不知道用抽象类仍是接口好时就用接口post