问的问题大致如下:
spring处理请求的流程?
springMVC的执行流程客户端发送一次请求,springMVC都会经过dispatchServlet来进行分发,先根据mapper映射url,找到对应的处理器,然后返回给dispatchServlet,在交给适配器进行适配,并找到对应的控制器,进行业务的执行,最后由视图模型进行渲染,返回给页面。。。
2.spring的bean创建过程?
主要是四个方法, getBean() – 从IOC容器中获取正在创建的bean,如果获取不到,进入bean定义
doCreateBean() – 创建bean
populate() –具体方法名忘记了, 对属性进行注入
add() — 加入到容器中
大致是这个流程。。。
循环依赖?
spring三级缓存
1
2
3
4
5
6
7
8
9
10public 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);redis的持久化方式,已经两种方式的区别。。
正常回答。。。 rdb和aof rdb的持久化频率,在redis.conf中有写到。aof指令追加。。
hashmap的底层以及红黑树的最大高度差,红黑树既然查找和插入效率都为logN为什么还需要链表。
红黑树的特点: 同一路径不允许出现连续红, 从叶子节点出发每一条路径上的黑色节点都必须相同,所以对于一颗高度为k的红黑树,最大高度差是k/2,可能考虑到红黑树需要自旋。但是第二个问题确实答得不好,
当链表节点个数达到8时,就会转换成红黑树,而当节点到6之后,就会转变成链表,链表的平均时间复杂度是N/2, 当节点个数为8时,此时时间复杂度红黑树为3,链表为4, 而当节点为6时,前者为lg6,后者为3,但是考虑到红黑树需要通过自旋来保证左右子树的节点相对平衡,并且为了防止红黑树和链表一直频繁转换