一、Java 基础与核心语法篇(高频率:★★★★☆)
1. 数据类型与内存布局
核心知识点
- 基本类型 vs 引用类型(内存存储差异,栈 / 堆分配规则)
- 自动装箱拆箱原理(Integer.valueOf()缓存机制,-128~127 缓存池)
- String/StringBuffer/StringBuilder底层实现对比(不可变性、线程安全、性能差异)
笑傲Java面试 深度剖析大厂面试高频真题让你秒变offer收割机完结--- “夏のke” ---www.---bcwit.---top/1845/
高频真题解析
Q1:String s = new String ("1"); 创建了几个对象?
-
解析:常量池中的 "1" 和堆中的 String 对象,共 2 个
-
扩展:JVM 字符串常量池位置变化(JDK7 后移至堆)
Q2:谈谈对 Java null 的理解?
- 陷阱:null不是对象,不能调用方法,注意 NPE 排查技巧
- 最佳实践:使用Objects.requireNonNull()提前校验参数
2. 面向对象设计
高频真题解析
Q:接口和抽象类的区别?
| 特性 | 接口 | 抽象类 |
|---|---|---|
| 实现 | implements多继承 | extends单继承 |
| 成员 | 全是 public abstract 方法 | 可包含具体方法和字段 |
| 设计目的 | 定义行为契约 | 抽取公共实现逻辑 |
Q:谈谈对里氏替换原则的理解?
- 解析:子类必须能替换父类,结合ArrayList/Vector线程安全差异案例说明
二、集合框架与数据结构篇(高频率:★★★★★)
1. 容器核心原理
高频真题解析
Q:HashMap 的底层数据结构?JDK1.8 做了哪些优化?
-
解析:数组 + 链表 + 红黑树,优化点:链表转红黑树(阈值 8,解决哈希冲突性能问题)头插法改尾插法(避免多线程环链问题)
-
陷阱:HashMap非线程安全,ConcurrentHashMap分段锁进化史(JDK1.7 分段锁→JDK1.8 CAS+Synchronized)
Q:ArrayList 和 LinkedList 如何选择?
- 口诀:查询多选 ArrayList(随机访问 O (1)),增删多选 LinkedList(头尾操作 O (1))
2. 并发集合源码深挖
高频真题解析
Q:ConcurrentHashMap 如何实现线程安全?
- 解析:JDK1.8:CAS+Synchronized + 红黑树,锁粒度细化到节点分段锁(Segment)在 JDK1.7 的实现原理与性能瓶颈
- 扩展:size()方法如何做到弱一致性
三、并发编程与多线程篇(高频率:★★★★★)
1. 线程与锁机制
核心知识点
- 线程生命周期(NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED)
- 锁升级路径:无锁→偏向锁→轻量级锁→重量级锁(结合-XX:BiasedLockingStartupDelay=0参数)
- CAS 三大问题:ABA 问题(AtomicStampedReference解决方案)、循环开销、伪共享(@Contended注解)
高频真题解析
Q:synchronized 和 ReentrantLock 的区别?
| 特性 | synchronized | ReentrantLock |
|---|---|---|
| 锁获取 | 自动释放(JVM 管理) | 手动释放(try-finally) |
| 公平性 | 非公平(默认) | 可设置公平锁 |
| 功能扩展 | 无 | 可中断、超时、 Condition |
Q:线程池核心参数如何配置?
- 公式:corePoolSize=CPU 核心数 ×2(IO 密集型可适当增加)
- 实战:美团外卖订单处理线程池配置案例
四、JVM 原理与性能调优篇(高频率:★★★★★)
1. 内存模型与垃圾回收
高频真题解析
Q:JVM 内存分区?哪些区域会发生 OOM?
- 解析:堆(OOM:对象创建过多)方法区(JDK8 元空间:类加载过多)虚拟机栈(栈溢出:递归过深)
Q:G1 垃圾收集器的特点?为什么适合大内存?
- 解析:分区(Region)设计,支持增量回收可预测的停顿时间(通过-XX:MaxGCPauseMillis控制)
- 对比:CMS 的 "Concurrent Mode Failure" 问题
五、Spring 全家桶篇(高频率:★★★★★)
1. Spring 核心机制
高频真题解析
Q:Spring Bean 的生命周期?
-
流程:实例化→属性注入→BeanPostProcessor→初始化(@PostConstruct)→AOP代理→销毁(@PreDestroy)
-
扩展:@Configuration类的代理机制(@Bean方法调用会走容器)
Q:谈谈对 Spring 事务传播机制的理解?
- 实战:电商订单服务中PROPAGATION_REQUIRED与PROPAGATION_REQUIRES_NEW的选择
六、MySQL 与数据库篇(高频率:★★★★☆)
1. 索引与查询优化
高频真题解析
Q:为什么建议主键使用自增主键?
-
解析:聚簇索引顺序写入,减少页分裂避免 UUID 作为主键的随机 IO 问题
-
陷阱:分布式场景雪花算法(Snowflake)的时间回拨问题
Q:explain 执行计划怎么看?重点关注哪些字段?
- 核心:type(连接类型,system>const>eq_ref>ref>range>index>all)、key(实际使用的索引)
七、分布式与微服务篇(高频率:★★★★★)
1. 分布式核心组件
高频真题解析
Q:分布式系统 CAP 定理如何应用?
- 实战:Redis 集群(AP)vs Zookeeper(CP)的选型场景
Q:谈谈对熔断和限流的理解?
- 对比:Hystrix 熔断(异常比例触发)vs Sentinel 限流(QPS / 并发数控制)
- 扩展:美团点评分布式限流解决方案
八、算法与数据结构篇(高频率:★★★★☆)
1. 经典算法题解析
高频真题解析
Q:如何判断链表是否有环?
- 双指针法(快慢指针):快指针每次走 2 步,慢指针走 1 步,相遇则有环
Q:说说快排的时间复杂度?最坏情况如何优化?
- 解析:平均 O (nlogn),最坏 O (n²),优化:随机选择枢轴、三数取中法
九、面试实战与 Offer 收割策略
1. 简历与项目包装
核心技巧
-
项目亮点提炼:
-
text
-
优化前:负责用户中心开发 优化后:主导用户登录系统重构,引入Redis分布式锁,QPS从500提升至3000,库存超卖率下降99%
-
技术深度体现:在项目经验中加入源码阅读经历(如分析过 Spring 事务源码)
2. 模拟面试与应答策略
高频追问应对
- Q:你提到用了 AOP,那说说动态代理的实现原理? 应答结构:先区分 JDK 动态代理(接口)和 CGLIB(类代理),再讲InvocationHandlerinvoke 方法调用链,最后结合项目中日志监控的应用案例
- Q:如果你的代码上线后出现 OOM,你会怎么排查? 应答步骤:查看 GC 日志(-XX:+HeapDumpOnOutOfMemoryError生成 dump 文件)用 MAT 分析对象占用,定位大对象来源结合业务场景,判断是内存泄漏还是对象创建过多
十、不同层次公司面试策略
1. 大厂 vs 中厂 vs 初创公司
| 公司类型 | 考察重点 | 准备策略 |
|---|---|---|
| 大厂 | 基础原理 + 系统设计 + 源码深度 | 刷 LeetCode 高频题(Top 200),通读 Spring、MyBatis 源码 |
| 中厂 | 项目实战 + 问题解决能力 | 整理项目中的优化点(如 SQL 优化、接口性能提升) |
| 初创公司 | 快速落地 + 全栈能力 | 熟悉主流框架整合(如 Spring Boot+Redis+Kafka) |
2. 反问面试官的黄金问题
- 技术方向:团队目前在做哪些技术优化?(判断是否有成长空间)
- 业务场景:这个岗位面临的最大技术挑战是什么?(针对性展示匹配度)
十一、高频面试题汇总(附答案索引)
| 分类 | 高频问题 | 难度 | 答案位置 |
|---|---|---|---|
| 基础 | Java 为什么是半编译半解释型语言? | ★★☆ | 第一章 |
| 集合 | HashMap 的负载因子为什么是 0.75? | ★★★ | 第二章 |
| 并发 | 如何解决线程安全的单例模式? | ★★★ | 第三章 |
| JVM | 类加载的双亲委派机制如何打破? | ★★★ | 第四章 |
| Spring | @Transactional 如何实现? | ★★★ | 第五章 |
| 分布式 | 如何保证分布式事务的最终一致性? | ★★★★ | 第六章 |