面试时遇到的一些问题

一、大概说下SpringMVC的流程

面试时遇到的一些问题

Disptacher为核心处理器,基本所有操作都围绕它转

  • 1、用户发起请求,请求抵达DispatcherServlet,dispatcherServlet调用doService方法中的如图所示代码
    面试时遇到的一些问题
  • 2、代码执行到940行,调用getHandler方法获取HandlerExecutionChain,而它是由2部分组成,用户写的handler(即controller)与对应请求上的拦截器链
    面试时遇到的一些问题
    面试时遇到的一些问题
    面试时遇到的一些问题
    面试时遇到的一些问题
  • 3、用户根据mappedHandler获取HandlerAdaper,之后调用拦截器perHandle方法,只有全部通过了之后才会调用用户写的controller逻辑,返回modelAndView对象
    面试时遇到的一些问题
  • 4、dispatcherServlet获取到modelAndView对象之后设置视图名称,并执行拦截器postHandle方法
  • 5、dispathcerServlet根据viewName将modelAndView传给具体ViewReslover解析器,ViewReslover解析后返回具体View
  • 6、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  • 7、DispatcherServlet对用户进行响应

二、Spring事务的传播行为有几种,分别是啥?

spring事务的事务传播行为一共有七种,分别为

  • REQUIRED:支持当前事务,如果没有事务,则新建事务
    面试时遇到的一些问题
  • SUPPORTS:支持当前事务,如果没有事务,则以非事务方式运行
    面试时遇到的一些问题
  • MANDATORY:支持当前事务,如果没有事务,则抛出异常
    面试时遇到的一些问题
  • REQUIRES_NEW:创建新事务,如果当前事务存在,则挂起当前事务
    面试时遇到的一些问题
  • NOT_SUPPORTED:以非事务方式运行,如果当前存在事务则挂起
    面试时遇到的一些问题
  • NEVER:以非事务方式运行,如果当前存在事务则抛出异常
    面试时遇到的一些问题
  • NESTED:新建事务,如果当前存在事务,则挂起当前事务,与requireNew不同的是requireNew的事务之前互不影响,而nested之间的事务会互相影响
    面试时遇到的一些问题

三、rabbitmq原理

  • 消息交换机(Exchange):接受消息提供者(生产者)的消息,并根据消息的RoutingKey和Exchange绑定的BindingKey分配消息
  • 消息队列(Queue):存储消息接收者(消费者)的消息
  • RoutingKey:指定当前消息被谁接受
  • BindingKey:指定当前Exchange下,什么样的– RoutingKey会被下派到当前绑定的Queue中

四、redis的数据结构?redis的存储策略?

  • 有String、Hash、List、Set 、Sort Set5种;
  • 2种策略:1直接保存内存快照、2保存命令日志文件

五、synchronized为什么是重量级锁?Lock为啥是轻量级锁?

  • 实现原理不同:synchronized是锁对象,如果当前线程检查到别的线程已经锁住该对象,则当前线程阻塞。而线程阻塞后再重新开始执行的cpu开销较大。而lock是一直查看锁是否释放来实现的。

六、java的内存空间

  • 堆:每个线程包含一个栈区,只保存基础数据类型和自定义对象引用
  • 栈:存放对象本身
  • 静态区或方法区:存放class和static变量

暂时先写这么多,明天面试回来以后再补充