Java面试复盘(3.12)

找工作这段时间,我复盘了数十场面试,发现无论大厂还是中小厂,Java 面试的考察范围其实是有迹可循的。面试官并不指望你背下所有 API,但他们非常看重你对底层原理、并发安全、性能调优的理解。

一、Java 基础
基础不牢,地动山摇。这部分通常作为“热身”,但答不好会直接挂掉。
核心考点
集合框架 (Collections)
HashMap:底层结构(数组+链表+红黑树)、扩容机制、Hash 冲突解决、为什么线程不安全?
ConcurrentHashMap:JDK 1.7 vs 1.8 的区别(分段锁 vs CAS+Synchronized)。
ArrayList vs LinkedList:底层实现、适用场景、扩容机制。
面向对象
多态:编译时多态 vs 运行时多态。
接口 vs 抽象类:设计层面的区别,Java 8 默认方法。
深拷贝 vs 浅拷贝。
异常处理
Checked vs Unchecked 异常。
try-catch-finally 的执行顺序(特别是 return 在 finally 中的陷阱)。
新特性
Lambda 表达式、Stream 流操作、Optional 用法。
回答技巧:不要只背定义,要结合源码或场景。例如问 HashMap,可以主动提到“在多线程环境下推荐使用 ConcurrentHashMap,因为……”

二、并发编程 (JUC)
这是区分初级和中高级开发者的关键。面试官喜欢问场景题:“如何保证线程安全?”
核心考点
线程基础
线程状态转换(NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED)。
start() vs run()。
锁机制
Synchronized:锁升级过程(偏向锁 -> 轻量级锁 -> 重量级锁)。
ReentrantLock:AQS (AbstractQueuedSynchronizer) 原理、公平锁 vs 非公平锁。
CAS (Compare-And-Swap):ABA 问题及解决(版本号)。
线程池 (ThreadPoolExecutor)
7 大参数:corePoolSize, maximumPoolSize, keepAliveTime, workQueue, threadFactory, handler。
工作流程:任务提交后的执行顺序(核心线程 -> 队列 -> 最大线程 -> 拒绝策略)。
拒绝策略:Abort, CallerRuns, Discard, DiscardOldest。
并发工具类
CountDownLatch, CyclicBarrier, Semaphore。
ThreadLocal:内存泄漏问题(弱引用 Key)。
避坑:千万别在生产环境用 Executors.newFixedThreadPool,理由是队列无界可能导致 OOM,要手动创建线程池。

三、JVM
JVM 部分通常考察你对内存模型和垃圾回收的理解,以及排查问题的能力。
核心考点
内存模型 (JMM)
堆、栈、方法区(元空间)、程序计数器、本地方法栈的作用。
可见性、原子性、有序性。
垃圾回收 (GC)
判断对象存活:引用计数法 vs 可达性分析(GC Roots)。
垃圾回收算法:标记 - 清除、复制、标记 - 整理。
垃圾收集器:CMS vs G1 vs ZGC 的区别与选型。
类加载机制
双亲委派模型及其破坏场景(Tomcat, JDBC)。
调优与排查
OOM 常见场景及排查步骤(dump 文件分析)。
CPU 100% 怎么排查?(top -H -p -> jstack)。
常用命令:jstat, jmap, jstack。

四、数据库 (MySQL)
后端开发离不开数据库,索引优化和事务隔离是必考题。
核心考点
索引
B+ 树结构 vs B 树 vs Hash。
聚簇索引 vs 非聚簇索引(回表)。
索引失效场景(最左前缀、函数计算、类型隐式转换等)。
覆盖索引、索引下推。
事务与锁
ACID 特性。
隔离级别(读未提交、读已提交、可重复读、串行化)。
MVCC (多版本并发控制) 原理(Read View + Undo Log)。
行锁、间隙锁 (Gap Lock)、临键锁。
日志
Redo Log (物理日志,保持久性) vs Binlog (逻辑日志,主从复制)。
Two-Phase Commit (2PC)。
SQL 优化
Explain 执行计划分析(type, key, rows, extra)。

五、主流框架 (Spring 全家桶)
考察你对框架原理的理解,而不仅仅是会用注解。
核心考点
Spring Core
IOC:控制反转、Bean 的生命周期(非常重要!)、循环依赖如何解决(三级缓存)。
AOP:动态代理(JDK vs CGLIB)、切面执行顺序。
Spring Boot
自动配置原理(@EnableAutoConfiguration, spring.factories)。
Starter 机制。
Spring MVC
请求处理流程(DispatcherServlet -> HandlerMapping -> Controller -> ViewResolver)。
MyBatis

{} vs ${} (预编译防注入)。

一级缓存 vs 二级缓存。

六、分布式与中间件
如果你面的是中高级岗位,这部分是重灾区。
核心考点
Redis
5 种基本数据类型及应用场景。
三大问题:缓存穿透、缓存击穿、缓存雪崩(解决方案)。
持久化:RDB vs AOF。
分布式锁:Redisson 看门狗机制。
消息队列 (Kafka/RocketMQ)
解耦、削峰、异步。
如何保证消息不丢失?(生产端确认、Broker 持久化、消费端 ACK)。
如何保证消息顺序性?
消息积压怎么处理?
微服务 (Spring Cloud)
注册中心 (Nacos/Eureka)、配置中心、网关 (Gateway)。
熔断降级 (Sentinel/Hystrix)。
分布式事务解决方案 (Seata, TCC, 最终一致性)。

最后的建议:面试不仅是背书
复习完这些知识点,最后再分享三点心得:
串联知识点:面试官喜欢问综合题。比如:“用户下单后,如何保证库存扣减和数据一致性?”这需要你串联 Redis 锁 + MySQL 事务 + MQ 异步通知。
诚实但有策略:遇到不会的,不要硬编。可以说:“这个细节我目前了解不多,但我推测可能是基于 XXX 原理,您可以给我一点提示吗?”展示你的思考过程。
准备项目亮点:把上述技术点融入到你自己的项目中。例如:“我在项目中通过调整线程池参数,解决了高并发下的超时问题。”

求职是一场持久战,技术积累是唯一的捷径。
希望这份总结能帮你理清思路,查漏补缺。
祝大家都能拿到心仪的 Offer,我们顶峰相见!

posted @ 2026-03-12 20:01  萌新求职记录  阅读(9)  评论(0)    收藏  举报