时间:2023年6月12日
内容:
1. JDK里面的ServiceLoader的存在哪些问题?(简历上写了重构ServiceLoader)
2. JDK里面的ServiceLoader会在哪里出现线程安全问题,出现线程安全问题的场景是什么,举个例子。
3. 是如何发现ServiceLoader存在线程安全问题?
4. `i++`是存在线程安全问题的,所以如何解决这个问题的?
5. Sync关键字的实现。(一面也问到了,因为是C相关实现的,所以一直没去看)
6. AtomicInteger的底层实现。
7. ReentrantLock的工作原理(当时回答的时候,从如何阻塞线程到唤醒线程整个流程去讲)。
8. 为什么ReentrantLock的非公平锁比公平锁的效率更高?
9. ReentrantLock的可重入锁是如何实现的?
10. table(id,a,b,c),现在有一个索引(a,b,c),执行语句:select * from table where a = 1 and c = 2; 讲出Mysql查询的整个过程。(除了讲到索引树,还需要讲到回表与索引下推等等内容)
11. 承接10.的条件,select * from table where c = 2 and a = 1;是否可以使用索引,为什么?
12. 承接10.的条件,增加一个索引(c,b,a),此时会使用哪一个索引?(我答了差别不大,面试官说需要看数据的结构,比如说,a=1的只有一条数据,c=2的有1000条数据,这个时候就会选择(a,b,c)索引)。
13. 开始聊项目,让我选一个,我选了简历上的一个rpc框架。
14. 为什么这个rpc会去使用SPI?
15. rpc项目中,需要配置文件与注册中心记录了哪些东西?
16. 上游增加了一个B服务,下游的A服务是如何通过这个rpc去调用B服务,讲出整个运转过程。
17. 如果Zookeeper(我那个rpc项目默认的注册中心)的主节点在写入数据的时候宕机了,写入的数据会丢失吗?其他节点是怎么反应的?
18. 开始聊一些日常。问我,我是怎么学习写这些项目的啥的。
19. 算法题:手写一个快速排序。