logo

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种基本数据类型:byteshortintlongfloatdoublecharboolean。这些类型在内存中占用固定大小,直接存储值而非引用。

问题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的生命周期?

  1. 实例化
  2. 属性赋值
  3. 初始化(InitializingBean、init-method)
  4. 使用
  5. 销毁(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开发的核心领域,从基础语法到分布式架构,帮助开发者构建完整的知识体系。建议读者结合实践,深入理解底层原理,而不仅仅是背诵答案。持续学习和思考,是技术成长的不二法门。

相关文章推荐

发表评论