*SpringMVC的流程
- (1)用户发送请求至前端控制器(DispatcherServlet);
- (2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
- (3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
- (4)DispatcherServlet调用HandlerAdapter处理器适配器,请求执行Handler
- (5) HandlerAdapter经过适配调用具体处理器进行处理业务逻辑;
- (6)Handler执行完成返回ModelAndView;
- (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet
- (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析
- (9)ViewResolver解析后返回具体的View;
- (10)DispatcherServlet对View进行渲染视图
- (11)DispatcherServlet响应用户
线程的生命周期包括哪些阶段
(1)新建 (2)就绪 (3)运行 (4)阻塞 (5) 销毁
- 新建:就是刚使用new方法,new出来的线程;
- 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢占的CPU资源,谁开始执行;
- 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能
- 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()、之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态
- 如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源
Servlet的生命周期 - Servlet 初始化后调用init()方法
- Servlet 调用service() 方法来处理客户端的请求
- Servlet 销毁前调用destroy()方法
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。
doPost()方法POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。
destroy() 方法destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
接口和抽象类的区别- 抽象类中可以有抽象方法也可以有非抽象方法,接口中只能有抽象方法。
- 抽象类中可以有成员变量,接口中只能有常量,用public static final 修饰,默认可不写
- 抽象类有构造方法,接口没有构造方法。
- 抽象类中的方法的访问修饰符可以是public,protected,默认;接口中的方法访问修饰符只能是public,并且默认值是public abstract.
- 一个类可以实现多个接口,只能继承一个抽象类。
- 重载是在一个类中,方法名相同,参数列表不同(参数类型和参数个数)的一种现象
- 重载与返回值类型无关
- 重写是在父子类中,子类重写父类的方法,要求方法名与参数列表,返回值类型完全相同。
- 重写的返回值类型可以改,但只能是父子类
- 重写的访问修饰符得大于等于原来的
- 不能重写私有方法
- 参数列表的顺序与类型必须一样,变量名可不同
- synchronized是关键字;lock是接口
- synchronized在发生异常后会自动释放锁,lock不会
- lock有trylock方法看是否获得锁;synchronized没有
- synchronized是修饰代码块、方法获得锁的;Lock是通过ReetrantLock类加锁的
- synchronized是悲观锁;Lock是乐观锁



