本来有回答思路方便你们看懂为啥这么问,但超字数限制,作罢。有删改问法,否则超字数。面试官很温和甚至温柔,答错了也会引导你,不会也会提示,还不会也不会说什么。1.自我介绍2.ArrayList是线程安全的吗?为什么不是?只要不用锁修饰就不是吗?如果不用CAS或版本号,他也一定不是线程安全的吗?所以ArrayList是否是线程安全的应该怎么说?3.不是线程安全的会带来哪些问题?为什么会丢失修改?(重点:自增不原子)4.线程状态和切换。等待和阻塞状态的区别?(引导回答不同状态之间的切换)5.HashMap是怎么查找的?链表不是O(n)查询吗,为什么哈希表是O(1)?(不知道在问啥)这么问吧,链表有特别多的元素,会O(n)查询吗?扩容因子?计算公式?6. Mysql,基于索引的SQL优化,实际经验?(引导过程:联合索引?索引类型?sql语句?InnoDB引擎的底层数据结构?存储方式?)7. 聚簇非聚簇索引?回表查询?8. 先用链表实现栈,然后再实现线程安全。(实现后)怎么实现线程安全?(我逃避,我直接说加锁,synchronized)对,很简单,我们也不考这个了,你之前说了乐观锁实现,那你能不能用CAS实现一下线程安全(不会)提供个思路来解决试试?(拉扯开始)(完全忘了面试一开始的问题面试官提示了原子操作。)嗯。。。。你知道atomic类吗?那你试着实现一下?(交代没用过)9.嗯,你知道什么是阻塞吧?你用wait方法实现一下?(交代没试过不清楚)(已经55min了)10.时间差不多了,那你项目中还有什么难点吗?(吟唱redlock)(听我吟唱完)那加锁的原理是什么?哦~(面试官想了一下)复现出来过吗?(?没想过这么问)那你怎么解决的?(主从集群存在的问题然后提前避免)嗯,你说的都是极端情况,如果在实际开发中,我们存在这个问题,但我们无法复现出来,那是不是就意味着这个问题即使解决了,也不知道效果如何,就可能会花费很大的人力精力,却得不到成果怎么构造测试用例?(Thread.sleep然后宕机)11.反问:如何复现,测试用例?(一样)看门狗释放了锁呢?(对,控制时间)所以项目的优化一定是建立在能够复现出来的基础上,并能检测优化后的结果吗?(没错)改进?(实习生勉强可以,要求会低,应届生差一些)