面试系列之常见问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GKTDSR/article/details/79501375

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)、信号、消息队列、共享内存

展开阅读全文

没有更多推荐了,返回首页