Java面试会问哪些?
对于具备一年Java开发经验的求职者,以下是从技术要求和面试高频问题两个维度的系统总结:
一、技术能力硬性要求
(一)核心基础
语法基础
- 数据类型:掌握int(-2^31~2^31-1)、String(不可变性原理)等类型底层实现
- 流程控制:熟练编写嵌套循环(如二维数组遍历)
- 面向对象:能举例说明多态应用场景(如支付接口的不同实现类)
集合框架
- 掌握ArrayList扩容机制(初始容量10,1.5倍扩容)
- 理解HashMap冲突解决(链表转红黑树的阈值=8)
- 会使用Collections.synchronizedMap实现线程安全
多线程
- 实现线程的三种方式:继承Thread、实现Runnable、使用Callable
- 同步机制:掌握synchronized锁升级过程(无锁→偏向锁→轻量锁→重量锁)
- 线程池:能配置ThreadPoolExecutor核心参数(corePoolSize、workQueue等)
(二)扩展能力
JVM基础
- 内存结构:能画出堆(新生代/老年代)、方法区、栈的关系图
- 垃圾回收:了解CMS和G1收集器的触发条件
数据库
- 事务隔离级别:能解释「可重复读」如何解决幻读问题
- SQL优化:会通过EXPLAIN分析索引失效场景(如LIKE '%xx')
- Redis应用:掌握缓存穿透解决方案(布隆过滤器+空值缓存)
开发框架
- Spring:理解IoC容器初始化流程(BeanDefinition加载→实例化→依赖注入)
- MyBatis:能手写#{}和${}防SQL注入的对比示例
二、面试高频问题分类
(一)原理类
集合
- 问题:ConcurrentHashMap如何保证线程安全?
- 回答要点:分段锁(JDK7)→ CAS+synchronized(JDK8)
并发
- 问题:volatile关键字作用?
- 回答模板:内存可见性(MESI协议) + 禁止指令重排序(内存屏障)
JVM
- 问题:什么情况会触发Full GC?
- 标准答案:老年代空间不足、方法区满、System.gc()调用等
(二)场景类
数据库
- 问题:订单表查询缓慢如何优化?
- 解决路径:慢SQL定位→执行计划分析→索引优化→分库分表
项目经验
- 问题:你解决过最复杂的技术问题?
- 回答策略:STAR法则(背景→任务→行动→结果)+ 数据量化(如QPS从500提升到2000)
(三)陷阱类
源码细节
- 问题:String.substring()在JDK6和JDK7有何区别?
- 避坑指南:JDK6共享原数组可能导致内存泄漏,JDK7后创建新数组
设计模式
- 问题:Spring中用到了哪些设计模式?
- 典型答案:工厂模式(BeanFactory)、代理模式(AOP)、模板方法(JdbcTemplate)
三、能力提升策略
1、知识转化:将《深入理解Java虚拟机》中的分代回收理论,通过jstat -gcutil命令观察实际GC日志
2、项目包装:在小体量项目中植入技术亮点
3、面试引导:当被问及知识点时,可主动延伸,但是不可拖沓