一、Java基础
static修饰变量、方法、类的区别; final修饰变量、方法、类的区别; 内部类和静态内部类有什么区别; 内存溢出与内存泄漏的区别; 内存泄漏会造成什么样的影响; OOM的几种常见形式和解决办法; 如何避免内存泄漏; threadLocal会内存泄漏吗; 类加载器的作用,写自定义类加载器的意义是什么; 字符串翻转的几种方式; ArrayList和LinkedList的区别,为什么会有这些区别,分别占用的内存空间是怎么样的; 线程的几种创建和启动方式; 死锁的发生,避免发生死锁的几种方式; synchronized和volatile的作用; 说一下读写锁; 什么时候用synchronized,什么时候用ReentrantLock; 说一下CAS和AQS; 为什么要序列化
二、JVM
锁的升级过程; 说一下偏向锁、自旋锁、轻量级锁、重量级锁; synchronized实现原理; Java内存模型; 内存屏障; JVM运行时数据区; 对象的内存布局; 对象的生命周期; GC算法; CMS垃圾回收器和G1垃圾回收器的工作特点; JIT与逃逸分析(这个绝壁问得超纲了)
三、数据库
事务隔离级别和事务并发问题; 数据库优化[分库分表、建表、SQL优化]; InnoDB和MyISAM引擎的区别; B+树的结构; 查询时用到了某个普通索引,查询的流程是怎么样的[就是我们常说的回表]; 组合索引“带头大哥”不能死的原因[从B+树的索引结构来说]; 期望用到某个索引时,结果没有使用到该怎么处理
四、缓存
缓存穿透、缓存击穿、缓存雪崩; Redis与memcache的区别; 双写不一致问题;Redis分布式锁
五、MQ
为什么使用消息队列、使用场景是什么; 为什么选用XX[即各个MQ间的对比]; 消息重复消费问题; 消息的可靠性; 消息积压问题
六、设计模式
说一下日常开发中常见的设计模式; 说一下你用过的设计模式;
七、架构
画一下你项目的整体架构图; springcloud/dubbo的负载均衡策略、容错方案、使用的协议; 各个组件的选型
八、框架
基本不问