第一基础知识的扎实掌握,如:字符串的创建过程、字符串常量池的理解、对象的深克隆和浅克隆、各种 IO 操作的区别、反射和动态代理的关系、JDK 自身的动态代理和 CGLIB 的区别等。

第二关于集合的知识也是必问的面试题,如:链表结构、栈结构、队列结构(双端队列、阻塞队列、延迟队列)、HashMap 的存储结构,它是如何解决哈希冲突的?TreeSet 和 HashSet 的区别等。

第三多线程编程也是必问的面试问题,如:死锁、六种线程池的使用和区别、本地线程池的使用和注意事项、synchronized 和 lock 的区别、JUC 的使用、CAS 的特性和 ABA 问题的解决方案等。

第四数据库的掌握,如:MySQL 常用引擎的掌握、MySQL 前缀索引、回表查询、数据存储结构、最左匹配原则、MySQL 问题分析和排除方案、MySQL 读写分离的实现方案、MySQL 的常见优化方案等;Redis 使用场景、缓存雪崩和缓存穿透的解决方案、Redis 过期淘汰策略和主从复制实现方案等。

第五热门框架的掌握,如:Spring、SpringMVC 的运行原理,IOC 和 AOP 的掌握、MyBatis 的运行机制和缓存机制、SpringBoot 解决的问题和如何使用等。

第六分布式编程框架的掌握,如:消息队列的掌握和使用,比较常见的消息队列 RabbitMQ 和 Kafka、Dubbo、Zookeeper、SpringCloud 的使用和了解等。

第七Java 虚拟机的掌握,如:虚拟机的组成、垃圾回收算法、各种垃圾回收器的区别、Java 虚拟机分析工具的掌握、垃圾回收器的常用调优参数等。

第八其他技能的掌握,如:常用算法的掌握、设计模式的理解、网络知识和常见 Linux 命令的掌握等。