Java 高频面试题解析
精心整理了最新的面试资料和简历模板,有需要的可以自行获取
点击前往百度网盘获取
点击前往夸克网盘获取
一、Java基础
1. Java基本数据类型 vs 包装类
- 问题:
int
和Integer
的区别?自动装箱与拆箱原理? - 答:
- 基本类型直接存储值,包装类存储对象引用
- 自动装箱:
Integer.valueOf()
(注意缓存-128~127) - 拆箱:
Integer.intValue()
2. String不可变性
- 问题:为什么String设计为不可变类?
- 答:
- 安全性:防止参数被意外修改(如网络连接参数)
- 哈希值缓存:提升HashMap等集合性能
- 字符串常量池优化(intern方法)
3. ==
与equals()
区别
- 答:
==
比较对象内存地址equals()
默认比较地址,需重写实现值比较(如String)
二、集合框架
1. ArrayList vs LinkedList
- 答:
- ArrayList:数组实现,随机访问O(1),增删效率低
- LinkedList:双向链表,增删O(1),随机访问O(n)
2. HashMap工作原理
- 问题:HashMap如何解决哈希冲突?
- 答:
- JDK8前:数组+链表
- JDK8+:链表长度>8转红黑树
- 扩容机制:负载因子0.75,2倍扩容
3. ConcurrentHashMap线程安全实现
- 答:
- JDK7:分段锁(Segment)
- JDK8+:CAS + synchronized锁单个桶
三、多线程
1. 创建线程的3种方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(可获取返回值)
2. synchronized与ReentrantLock
- 区别:
- synchronized是JVM级别锁,自动释放
- ReentrantLock支持公平锁、条件变量、可中断
3. 线程池参数
- 核心参数:
- corePoolSize
- maximumPoolSize
- keepAliveTime
- 阻塞队列(ArrayBlockingQueue等)
- 拒绝策略(AbortPolicy默认抛异常)
四、JVM
1. 内存区域划分
- 堆(对象实例)
- 方法区(类信息)
- 虚拟机栈(方法调用)
- 程序计数器
- 本地方法栈
2. 垃圾回收算法
- 标记-清除
- 复制算法(新生代)
- 标记-整理(老年代)
3. 类加载过程
- 加载 → 验证 → 准备 → 解析 → 初始化
五、新特性
1. Java8 Stream API
- 示例:
list.stream().filter(s -> s.length() >3).map(String::toUpperCase).collect(Collectors.toList());
2. Lambda表达式
- 替代匿名内部类,如
(a, b) -> a + b
六、框架相关(加分项)
1. Spring IoC原理
- 通过反射创建对象,依赖注入实现控制反转
2. Spring AOP实现
- JDK动态代理(接口) vs CGLIB(类)
七、设计模式
1. 单例模式实现
- 双重检查锁:
private volatile static Singleton instance; public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance; }
高频追问:
- 深拷贝 vs 浅拷贝
- fail-fast机制原理
- volatile关键字作用(可见性、禁止指令重排)
- JVM调优参数(-Xmx, -Xss等)
建议结合具体代码示例理解原理,并准备项目中的实际应用场景说明。建议使用JVisualVM等工具实践内存分析。