五天前在BOSS直聘上投了阿里巴巴深圳电商国际的简历,说经过简历筛选后会进行一次电话面试,刚睡醒就接到那边的电话,下面把电话面试的内容总结一下。今晚的电话面试大概进行了十五分钟,回答得不好,感觉挂了。
1. 简单自我介绍
2. MyBatis是否支持延迟加载,如何做的?
MyBatis支持延迟加载,默认不支持,需要通过配置lazyLoadingEnabled=true来实现懒加载。
MyBatis支持缓存,包括一级缓存和二级缓存,
(1)一级缓存是指sqlSession缓存,默认开启,同个session是可以共享,但不同的session是相互隔离的,实现方式是将查询方法和参数生成KEY,放入一个Map中;
(2)二级缓存是sessionFactory缓存,不同的session是可以共享的,二级缓存有全局开关和分开关, 全局开关, 在 mybatis-config.xml 中如下配置cacheEnabled=true,默认是为 true, 即默认开启总开关,分开关就是说在 *Mapper.xml 中开启或关闭二级缓存, 默认是不开启的。
https://blog.csdn.net/weixin_37139197/article/details/82908377
3. Dubbo是如何支持软负载的?
Dubbo的负载均衡算法包括
(1)随机轮询
(2)配权重
(3)相同的ip指向同个机器
(4)最快响应时间优先
4. Spring中对象之间的依赖是如何做的?
https://www.cnblogs.com/myseries/p/11801097.html
Spring中有单例模式才支持循环依赖,原型模型式不允许,循环依赖的方式有以下两种
(1)构造方法循环依赖
A的构造方法依赖B,B的构造方法依赖A
(2)属性循环依赖
A里面包含属性B
解决循环依赖的方法是,这里以构造方法的初始化为例
(1)只初实例化对象A,放入Map earlySingletonObjects,不需要初始化构造方法和属性
(2)A的构造方法调用到B,则B进行实例化
(3)只实例化对象B,不初始化B的属性,放入Map earlySingletonObjects
(4)初始化B的构造方法中的A,从earlySingletonObjects这个Map中获取对象A,注入B的构造方法中。
(5)返回初始化好的B,赋给对象A的构造方法
(6)对象A初始化完成。
5. Zookeeper的选举机制是如何做的?
部署数量是2N+1,可用是N台。从N台机器中选举一个Master
https://www.cnblogs.com/liuqijia/p/11456106.html
服务器启动时期的Leader选举,即初次选举:
在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,
两台机器此时可以相互通信,每台机器都试图找到Leader,于是进入选举过程。
选举过程如下:
(1)每个Server发出一个投票,由于是初始情况,Server1和server2都会将自己作为Leader服务器来进行投票。
每台服务器会往其他服务器发送投票信息,这个投票信息包括了SID和ZXID,其中SID就是该台机器的唯一标识(myid);
ZXID是事务id,该ID是64位的,分为高32位和低32位。
(2)由于是初次投票,此时的ZXID相同,所以比较的就是SID,SID越大,获得的Leader的可能越大(为了严谨,
本文针对任何情况都只说可能,不说绝对)。
(3)两台服务器发出自己的投票信息后,再根据自己收到的其他服务器的投票信息决定自己的投票信息是否变更,第一台服务器SID为1,第二台服务器SID为2,所以Server2的投票变更为2,
即有两票,由于一共三台服务器,此时Server2已经处于半数以上,所以决定出来的Leader为Server2;(半数投票)即使Server3启动,
由于Leader已经决定出来,所以不需要在进行投票,Server3只需要与Leader建立连接并进行状态同步即可。
6. Kafka是如何实现按顺序读取消息?
打到同一分区。
7. 你还有什么要问的?
后续会有人通知你面试结果。