0%

总结

​ 问的问题大致如下:

  1. spring处理请求的流程?

    springMVC的执行流程客户端发送一次请求,springMVC都会经过dispatchServlet来进行分发,先根据mapper映射url,找到对应的处理器,然后返回给dispatchServlet,在交给适配器进行适配,并找到对应的控制器,进行业务的执行,最后由视图模型进行渲染,返回给页面。。。

​ 2.spring的bean创建过程?

​ 主要是四个方法, getBean() – 从IOC容器中获取正在创建的bean,如果获取不到,进入bean定义

​ doCreateBean() – 创建bean

​ populate() –具体方法名忘记了, 对属性进行注入

​ add() — 加入到容器中

​ 大致是这个流程。。。

  1. 循环依赖?

    spring三级缓存

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {

    /** 一级缓存,bean初始化完成存放*/
    private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

    /** 三级缓存,bean实例化完成存放 */
    private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

    /** 二级缓存 */
    private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);
    1. redis的持久化方式,已经两种方式的区别。。

      正常回答。。。 rdb和aof rdb的持久化频率,在redis.conf中有写到。aof指令追加。。

    2. hashmap的底层以及红黑树的最大高度差,红黑树既然查找和插入效率都为logN为什么还需要链表。

      红黑树的特点: 同一路径不允许出现连续红, 从叶子节点出发每一条路径上的黑色节点都必须相同,所以对于一颗高度为k的红黑树,最大高度差是k/2,可能考虑到红黑树需要自旋。但是第二个问题确实答得不好,

      当链表节点个数达到8时,就会转换成红黑树,而当节点到6之后,就会转变成链表,链表的平均时间复杂度是N/2, 当节点个数为8时,此时时间复杂度红黑树为3,链表为4, 而当节点为6时,前者为lg6,后者为3,但是考虑到红黑树需要通过自旋来保证左右子树的节点相对平衡,并且为了防止红黑树和链表一直频繁转换

-------------本文结束感谢您的阅读-------------