1.Spring MVC运行顺序
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响应用户。
说明:
Handler: 也就是处理器,直接对应着MVC中的C也就是控制层。SpringMVC中用@RequestMapping标注的方法都可以看成一个Handler。也就是只要可以实际处理的请求就是Handleer。
HandlerMapping: 用来查找Handler。
HandlerAdapter: 适配器。因为SpringMVC中的Handler可以是任意形式,只要能处理请求就可以,但是Servlet需要的处理方法的结构是固定的,都是用request和response为参数的方法(比如doService方法)。如何让固定的Servlet处理方法调用灵活的Handler来进行处理?这就是HandlerAdapter所做的事情。
View: 用来展示数据。
ViewResolver: 用来查找View。
2.Spring IOC 反射
正常方式:通过完整的类名—>通过new实例化—>取得实例化对象
反射方式:实例化对象—>getClass()方法—>通过完整的类名
3.JDK 动态代理与cglib代理有什么区别:
JDK是实现接口的方式来进行代理,cglib通过继承的方式来进行代理。
jdk动态代理实际上是将定义一个InvocationHandler的实现类,在通过构造函数将代理类注入。再实现invoke方法(在方法中写入代理方法之前和之后的加入的通知),在实际使用中,通过Proxy.newProxyInstance()来产生一个代理对象,通过代理对象调用各种方法。
4.java8 新特性
lambda 表达式,函数式编程,流式操作
流式操作,对集合来说方便了我们的对集合过滤、排序、映射的操作。相当于一个高级版的迭代器,普通的只能串行,流式操作可是实现并行,放在多个线程中实现,通过join等方式。
比如说stream.filter 对集合中元素的过滤、sorted对集合中元素进行排序(默认升序),map按照相应的规则变成相应的元素
5.JVM是如何加载GC的?
GC是后台守护进程,在初始化饿时候就会存在,但是优先级比较低,但会随着JVM可用内存低到一定限制就会提升优先级自行启动。(GC也是也是进程也会消耗CPU的资源)
6.进程间的通信方式:
管道(pipe)、信号、消息队列、共享内存