```html
专注于Java后端技术分享与面试指导 | 域名:www.kaoacca.cn

Java 100 道面试题深度解析

从基础语法到分布式架构,全方位梳理Java后端开发核心知识点。
本页面收录了2024年互联网大厂高频面试题,结合源码分析与实战场景,助您构建完整的知识体系。

Java 100 道面试题 - 基础篇

Java基础是后端开发的基石。在面试中,面试官往往通过考察Java基础来判断候选人的代码规范性和底层理解能力。以下精选了10道高频基础题。

面向对象特性
String与内存
集合框架详解

1. 面向对象的三大特性是什么?

封装、继承和多态是Java面向对象的三大核心特性。

  • 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过private修饰符和getter/setter方法实现,提高代码的安全性和复用性。
  • 继承:子类自动共享父类的数据和方法,扩展已有类的功能。Java中只支持单继承,但可以通过接口实现多继承的效果。
  • 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态的实现条件包括继承、方法重写和父类引用指向子类对象。

2. String、StringBuilder、StringBuffer 的区别?

这是Java 100 道面试题中极高频的基础题。主要区别在于可变性和线程安全性:

特性 String StringBuilder StringBuffer
可变性 不可变 可变 可变
线程安全 安全(常量池) 不安全 安全(synchronized)
性能 一般 最高 较低

在实际开发中,如果涉及大量字符串拼接且不在多线程环境下,优先使用StringBuilder以提升性能。

3. HashMap 与 Hashtable 的区别?

HashMap不是线程安全的,允许key或value为null,底层基于数组+链表+红黑树实现(JDK1.8+)。而Hashtable是线程安全的(方法加synchronized),不允许null值,效率较低,现已不推荐使用,推荐使用ConcurrentHashMap。

Java 100 道面试题 - 并发与JVM篇

深入理解并发编程和JVM内存模型,是区分初级与高级Java工程师的关键。本章节涵盖了多线程、线程池及垃圾回收等核心考点。

⚙️ 线程池核心参数

创建线程池时,必须明确7大核心参数:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(空闲存活时间)、unit(时间单位)、workQueue(任务队列)、threadFactory(线程工厂)、handler(拒绝策略)。

⚙️ JVM 内存区域划分

JVM内存主要分为堆内存(Heap)和非堆内存(Non-Heap)。堆内存存储对象实例,分为新生代(Young Gen)和老年代(Old Gen)。非堆内存存储类信息、常量、静态变量等。

⚙️ volatile 关键字

volatile保证了变量的可见性和有序性,但不保证原子性。它禁止指令重排序,常用于单例模式的双重检查锁定(DCL)中。

JVM 垃圾回收算法详解

常见的垃圾回收算法包括标记-清除(Mark-Sweep)、复制(Copying)、标记-整理(Mark-Compact)和分代收集(Generational Collection)。现代JVM通常结合使用这些算法,例如新生代采用复制算法,老年代采用标记-整理算法。

// 示例:简单的线程池使用
ExecutorService executor = new ThreadPoolExecutor(
    5, 10, 60L, TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(100),
    new ThreadPoolExecutor.CallerRunsPolicy()
);

Java 100 道面试题 - 框架与中间件篇

Spring生态和消息队列是Java后端开发的标配。面试官常问Spring Bean生命周期、AOP原理以及RabbitMQ/Kafka的使用场景。

Spring Bean 的生命周期

Spring Bean的生命周期非常复杂,主要步骤包括:

  1. 实例化(Instantiation):Spring容器通过构造器或工厂方法创建Bean实例。
  2. 属性赋值(Populate Bean):填充Bean的属性,完成依赖注入。
  3. 初始化(Initialization):如果Bean实现了InitializingBean接口,调用afterPropertiesSet方法;或者执行自定义的init-method。
  4. 销毁(Destruction):当容器关闭时,如果Bean实现了DisposableBean接口,调用destroy方法。

Redis 常见数据结构与应用

Redis不仅是简单的Key-Value存储,它提供了String、List、Set、ZSet、Hash五种数据结构。在Java 100 道面试题中,Redis的高可用架构(哨兵、集群)也是考察重点。

  • String:用于缓存、计数器、分布式锁。
  • Hash:存储对象信息,如用户资料。
  • ZSet:排行榜、延迟队列。

Java 100 道面试题 - 数据库篇

MySQL是Java后端最常用的关系型数据库。索引优化、事务隔离级别、MVCC机制是面试的重灾区。

考点一:索引底层数据结构

MySQL InnoDB引擎主要使用B+树作为索引结构。B+树相比B树,非叶子节点不存储数据,只存储键值,从而能容纳更多的索引项,降低树的高度,减少IO次数。所有数据都存储在叶子节点,且叶子节点之间有指针相连,适合范围查询。

考点二:事务隔离级别

SQL标准定义了四种隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。MySQL默认级别为可重复读,通过MVCC(多版本并发控制)和锁机制解决了脏读和不可重复读问题,一定程度上解决了幻读。

考点三:SQL优化原则

1. 避免使用SELECT ,只查询需要的字段。
2. 利用覆盖索引减少回表。
3. 避免在索引列上进行计算或函数操作。
4. 使用EXPLAIN分析执行计划,关注type、key、rows等字段。

Java 100 道面试题 - 微服务架构篇

随着Spring Cloud和Dubbo的普及,微服务架构已成为中大型项目的主流。分布式事务、服务治理、网关限流是核心考点。

分布式事务解决方案

在微服务架构下,跨服务的数据一致性难以保证。常见的解决方案包括:

  • 2PC(两阶段提交):强一致性,但性能较差,存在单点故障风险。
  • TCC(尝试-确认-取消):应用层实现的补偿事务,性能较好,但代码侵入性强。
  • 本地消息表/MQ事务消息:最终一致性方案,通过消息队列保证最终数据一致,是目前互联网大厂常用的方案。
```
斌知网
蜀ICP备2026017620号-5