这几天去某知名互联网面试,总结下几次的面试题,做一次备忘录。面完之后,都让我怀疑人生了。

(1)多个线程顺序执行,如果有一个线程运行超时了,那么如何保证超时线程不影响其他线程执行?

答:使用Thread.join(超时时长)

(2)mysql的sql如何优化? 如何使用mysql的执行计划?

答:sql优化有很多优化方式,

     在数据库和sql方面看:避免select *;sql使用变量; 使用索引;sql写法优化(like、exists、超长in、not in等)

     在代码层面看:采用预处理方式;避免循环查询;使用批量插入和更新;如果数据量很大,可以使用原生JDBC方式查询

     mysql 的执行计划,使用EXPAIN,SQL好坏关键在于type,

   system > const > eq_ref > ref > fulltext > ref_or_null > index_merge >
unique_subquery > index_subquery > range > index > ALL
    具体可参考:https://blog.csdn.net/q936889811/article/details/72576182

(3)并发集合有哪些?

(4)mysql什么情况下会死锁?

(5)transition关键字是什么,ArrayList如何序列化的?

(6)java提供了哪些线程池,ExecutorService的几个参数是什么意思?第二个参数和第三个参数有什么关系?

(7)平时会用到哪些事务隔离级别?

(8)HashMap数据结构是如何的, equal和hash是什么作用?hash相同,那么equal是否相同? equal相同,那么hash是否相同?

(9)JVM默认gc是哪个?  CMS怎么工作的? 为什么会出现STW(STOP THE WORLD)?什么时候会触发CMS?什么情况下会触发full
GC?如果1G内存,那是否可以使用CMS?

(10)Java8的HashMap为什么要用红黑树? 红黑树的时间复杂度是多少?

(11)Java7的ConcurrentHashMap的数据结构是怎么样的?
Java8的ConcurrentHashMap的数据结构又是怎么样的,为什么要用重量锁synchronized,而不用并发锁?

(11)分表分库上进行分页查询,SQL如何更优化?

(12)linux下,如何定位java的cpu占用率高的代码?

(13)熟悉哪些linux的命令, 如何查找出java的内存占用率高的代码?

(14)如果java有一个方法效率很慢, 请问如何排查?请说出来平时工作上遇到哪些类似情况,如何解决的?

(15)jvm有哪些常用命令?各有什么作用?

(16)描述下Dubbo的工作原理?如果Dubbo提供者、消费者配置都正常无误,但是会出现Dubbo消费者启动时会无法订阅到服务,请问什么情况下出现?

(17)SpringMVC的核心类有哪些? 一个请求参数如何传递到方法中的参数中?如果请求参数a,
那么对应方法中的参数有两个,一个是对象(对象有a属性),另一个是字符串a, 请问这参数a如何传递的?

(18)代理模式和包装模式有什么区别? 静态代理和包装模式从代码上是否很相似,那么什么会要区分这2个模式?

(19)为什么要用负载均衡,负载均衡有哪些?

(20)HashMap是否线程安全,为什么?

(21)Spring的Bean是否单例? 那么如何保证多线程安全?

(22)mybatis的${}和#{}有什么区别?