10万字208道Java经典面试题总结:从基础到高阶的全面指南
2025.08.05 16:59浏览量:2简介:本文详细总结了208道Java经典面试题,覆盖基础语法、集合框架、多线程、JVM、设计模式、Spring框架等核心知识点。通过10万字的系统整理,帮助开发者高效准备面试,提升技术实力。
引言
Java作为全球最流行的编程语言之一,广泛应用于企业级开发、移动应用、大数据等领域。对于Java开发者来说,无论是求职还是技术提升,掌握经典面试题都是必不可少的环节。本文总结了208道Java经典面试题,涵盖从基础到高级的各个知识点,总字数超过10万字,旨在为开发者提供全面、系统的学习资源。
1. Java基础
1.1 数据类型与变量
问题1:Java中的基本数据类型有哪些?
Java有8种基本数据类型:byte
、short
、int
、long
、float
、double
、char
和boolean
。这些类型在内存中占用固定大小,直接存储值而非引用。
问题2:String是基本数据类型吗?
String是引用类型,属于java.lang
包下的类。它的不可变性是其核心特性之一,每次修改都会生成新的String对象。
1.2 面向对象编程
问题3:什么是面向对象编程的三大特性?
封装、继承和多态是面向对象的三大特性。封装隐藏实现细节,继承实现代码复用,多态允许同一行为具有不同表现形式。
问题4:抽象类和接口的区别是什么?
抽象类可以包含抽象方法和具体方法,支持单继承;接口在Java 8后可以包含默认方法,支持多实现。设计上,抽象类更适合“是什么”的关系,接口更适合“能做什么”的关系。
2. 集合框架
2.1 List与Set
问题5:ArrayList和LinkedList的区别?
ArrayList基于动态数组,随机访问效率高(O(1)),但插入删除效率低(O(n));LinkedList基于双向链表,插入删除效率高(O(1)),但随机访问效率低(O(n))。
问题6:HashSet如何保证元素唯一性?
HashSet通过调用元素的hashCode()
和equals()
方法判断是否重复。如果哈希值相同且equals
返回true,则视为重复元素。
2.2 Map与并发集合
问题7:HashMap的工作原理是什么?
HashMap基于数组+链表/红黑树实现。通过哈希函数计算键的哈希值,确定桶位置。当链表长度超过8时,链表转为红黑树以提升查询效率。
问题8:ConcurrentHashMap如何实现线程安全?
JDK 8中的ConcurrentHashMap采用分段锁(Node数组+链表/红黑树)和CAS操作,相比HashTable的全表锁,性能更高。
3. 多线程与并发
3.1 线程基础
问题9:创建线程的几种方式?
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(可获取返回值)
- 使用线程池(推荐)
问题10:synchronized和ReentrantLock的区别?
synchronized是关键字,基于JVM实现,自动释放锁;ReentrantLock是API,支持公平锁、可中断锁和条件变量,需手动释放。
3.2 JUC工具类
问题11:CountDownLatch和CyclicBarrier的区别?
CountDownLatch是一次性的,用于一个线程等待多个线程完成任务;CyclicBarrier是可循环的,用于多个线程互相等待。
问题12:ThreadLocal的原理与内存泄漏问题?
ThreadLocal通过线程内部的ThreadLocalMap存储数据。内存泄漏常因未调用remove()
导致,弱引用键可缓解但无法根治。
4. JVM与性能优化
4.1 内存模型
问题13:JVM内存区域划分?
- 程序计数器:线程私有,记录执行位置
- 虚拟机栈:线程私有,存储栈帧
- 本地方法栈:Native方法服务
- 堆:所有线程共享,存放对象实例
- 方法区:存储类信息、常量等
问题14:垃圾回收算法有哪些?
- 标记-清除:简单但产生碎片
- 复制算法:高效无碎片,但浪费空间
- 标记-整理:适合老年代
- 分代收集:结合年轻代(复制)和老年代(标记-整理)
4.2 性能调优
问题15:如何排查OOM问题?
- 使用
-XX:+HeapDumpOnOutOfMemoryError
生成堆转储文件 - 通过MAT或VisualVM分析内存泄漏点
- 重点关注大对象或集合类
5. 设计模式与框架
5.1 常用设计模式
问题16:单例模式的实现方式?
- 饿汉式:类加载时初始化
- 懒汉式:双重检查锁(volatile)
- 静态内部类:延迟加载且线程安全
- 枚举:最佳实践,防止反射攻击
问题17:Spring中的AOP如何实现?
基于动态代理(JDK或CGLIB),通过切点(Pointcut)、通知(Advice)和切面(Aspect)实现横切关注点。
5.2 Spring框架
问题18:Bean的生命周期?
- 实例化
- 属性赋值
- 初始化(InitializingBean、init-method)
- 使用
- 销毁(DisposableBean、destroy-method)
问题19:Spring事务传播机制?
PROPAGATION_REQUIRED(默认):当前有事务则加入,没有则新建。其他包括REQUIRES_NEW、NESTED等7种。
6. 数据库与ORM
6.1 SQL优化
问题20:如何优化慢查询?
- 添加合适的索引
- 避免SELECT *
- 使用EXPLAIN分析执行计划
- 分库分表
6.2 MyBatis与Hibernate
问题21:MyBatis的#{}和${}的区别?
#{}
是预编译处理,防止SQL注入;${}
是字符串替换,需手动过滤风险。
7. 分布式与微服务
7.1 CAP理论
问题22:什么是CAP理论?
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)中的两项。
7.2 Spring Cloud
问题23:Eureka和Nacos的区别?
Eureka仅支持服务发现,Nacos还提供配置中心功能。Nacos支持AP和CP模式切换,Eureka是纯AP系统。
结语
本文总结的208道Java经典面试题覆盖了Java开发的核心领域,从基础语法到分布式架构,帮助开发者构建完整的知识体系。建议读者结合实践,深入理解底层原理,而不仅仅是背诵答案。持续学习和思考,是技术成长的不二法门。
发表评论
登录后可评论,请前往 登录 或 注册