前言: 用极致的具体化压垮你的竞争对手 !
一.springmvc的工作流程
1.用户的请求先到达调度控制器DispatchServlet,DispatchServlet去找处理器映射器handlerMapping
2.处理器映射器再去找处理器适配器handlerAdaper,处理器适配器根据请求的url适配具体的处理器对象和拦截器对象,处理具体的业务逻辑返回ModelAndView
3.dispatchServlet拿着ModelAndView去找ViewResolver视图解析器,返回view
4.dispatchServlet对view进行渲染,数据填充,返回给前端
二.springmvc的控制器是不是单例的,如果是 会有什么问题,如何解决的
是单例的,在单例中的类变量会有线程安全问题,如果需要写可以使用ThreadLocal
三. ThreadLocal详解
1.ThreadLocal是如何实现线程安全的
用锁实现线程安全是阻塞内存,ThreadLocal是数据隔离,避免共享数据,每个线程都有一个ThreadLocalMap
2.ThreadLocal中的弱引用了解吗
ThreadLocalMap中的entity节点的key是弱引用,要注意内存泄漏的问题
3.如何处理内存泄漏的问题
先说答案:及时remove().
1.entity强引用导致的内存泄漏.
2.entity的key的弱引用被回收,但是value没有被回收导致的内存泄漏.