news 2026/9/8 10:28:00

程序员面试必备的Java八股文,适合所有的Java求职者!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
程序员面试必备的Java八股文,适合所有的Java求职者!

说明

本文分享Java后端真实高频面试题,有详细答案,保你稳过面试。题目包括:Java基础、多线程、JVM、数据库、Redis、Shiro、Spring、SpringBoot、MyBatis、MQ、ELK、SpringCloud、设计模式等。

包含从简单到困难、从高频到低频的题目,适合所有Java求职者,包括:应届生、转行的、三年以内经验的、三到五年经验的、五到十年经验的等。

你要跳槽时是否遇到过如下问题?

  • 没有题库,不知道如何开始复习
  • 有题库,但题目超级多,根本看不完
  • 背完题库中的面试题了,却发现面试官的问题大部分都不在题库中,导致面试老是挂,拿不到offer

此套面试题的特点

  • 这是一套真实、靠谱的题目。它的特点是:
  • 很强大,面试官的问题基本都在这套题里(看过这套题的朋友都说,面试时85%以上的题目都在这些题目里,成为了offer收割机)
  • 真实、靠谱(这套题是我在几十场面试中被面试官问到的问题)
  • 精选、高频(数量合适,很快就能看完)
  • 有难度和频率的标记(着急跳槽的可以只看频率为三颗星及以上的题目)

看过我这篇文章的几个朋友和同事参加了面试后跟我说,他们面试被问到的问题大部分(85%以上)都在这个文章里。

我在面试时经常会遇到这种情况:95%的题目在本文中,我对答如流,不知道面试官是否会怀疑泄题了 。这些面试也都很稳地拿到了offer

篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记及答案可以在文末获取

难度与频率

面试题采用五角星来评判题目的难度和被问到的频率,最高为五颗星。

如果是三年以上的经验,只看难度为三颗星及以上的题目即可。如果是一两年经验,看个人水平,水平好些的可以看一颗星到五颗星所有题目(我知道有这样的朋友:虽然经验少,但爱学习,一两年的经验拥有普通人四五年的技术能力)

★★★★★★★★★★★★★★
难度初级初中级中级中高级高级
频率很少问到几乎必问

基础(难度:★★★ 频率:★)

String

  • String, StringBuffer, StringBuilder区别(难度:★ 频率:★★★)
  • String对象数目(难度:★★★ 频率:★)
  • intern方法的作用(难度:★★★ 频率:★)
  • 如何修改String对象的数据?(难度:★★★ 频率:★★)

static

  • static的5种用法(难度:★★ 频率:★)
  • 为什么静态方法不能调用非静态方法和变量?(难度:★★★ 频率:★★★)

异常

  • 异常类型(难度:★★ 频率:★★★★)
  • catch里return了,finally是否执行?(难度:★★ 频率:★)

IO

  • 字节流与字符流区别?(难度:★★ 频率:★★)
  • BIO, NIO, AIO 区别?(难度:★★★ 频率:★)

JDK8

  • JDK8新特性(难度:★★ 频率:★★)
  • JDK8接口的default和static(难度:★★ 频率:★)
  • JDK8 Stream API 流操作包括哪些部分?项目中怎么用的Stream?(难度:★★ 频率:★)

语法

  • 项目中对泛型的使用(难度:★★ 频率:★★)
  • 接口与抽象类的区别?(难度:★★ 频率:★)

类库

  • SimpleDateFormat线程安全吗?怎么保证线程安全?(难度:★★★ 频率:★★★)

反射

  1. Java反射:forName和classLoader的区别(难度:★★★ 频率:★)
  2. 反射机制中可以获取private成员的值吗?(难度:★★★ 频率:★)
  • 可以。法1.通过setter和getter获得 法2:通过Field类提供的set()和get()方法
  • 另见《Java开发实战经典 第2版》=> 15.4 Java反射机制的深入应用

其他

  • 拆箱与装箱(难度:★ 频率:★)

集合

List

  • List与Set的区别(难度:★ 频率:★)
  • ArrayList与LinkedList异同点?(难度:★ 频率:★★)
  • List与数组的区别?(难度:★ 频率:★)
  • ArrayList是否线程安全?如何线程安全地操作ArrayList?(难度:★★★ 频率:★★★★★)
  • ArrayList扩容机制(难度:★★★ 频率:★★★★)
  • List.subList的坑?(难度:★★ 频率:★)
  • List如何安全删除(难度:★★ 频率:★)
  • List如何去重?(难度:★ 频率:★★)
  • List如何实现排序(难度:★ 频率:★★)
  • 为什么引入迭代器?(难度:★★ 频率:★)
  • List哪种遍历性能好,为什么?(难度:★★ 频率:★)

Map

1.HashMap、TreeMap、LinkedHashMap和区别?(难度:★★ 频率:★★★★★)

2.JDK8的HashMap和ConcurrentHashMap的改变?(难度:★★ 频率:★★★★)

3.HashMap数据结构、哈希冲突解决方法(难度:★★★ 频率:★★★★)

4.HashMap扩容的原理(难度:★★★ 频率:★★★★)

5.HashMap为什么线程不安全?如何线程安全地操作?(难度:★★★ 频率:★★★★★)

6.ConcurrentHashMap原理?(难度:★★★ 频率:★★★★★)

7.String的hashCode怎么实现的?(难度:★★ 频率:★)

8.hash:s[0] * 31^(n-1) + s[1] * 31^(n-2) + ... + s[n-1]

9.HashMap和HashSet的区别及其实现原理?(难度:★★ 频率:★)

  • HashMap:将key.hashCode()作为hash值存放,将value直接作为value。
  • HashSet:调用HashMap的put方法;将key.hashCode()作为hash值存放,将HashSet类的final变量PRESENT作为value。

10.HashMap如果使用对象最为key,要注意什么?(难度:★★ 频率:★)

  • 重写hashCode和equals。

11.对象比较为什么重写hashCode和equals?(难度:★★ 频率:★)

重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用

  • a: Map、Set等集合类型存放的对象必须是唯一的;
  • b: 集合类判断两个对象是否相等,是先判断HashCode是否相等,如果HashCode返回TRUE,还要再判断equals返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。

JVM

运行时数据区

  • 运行时数据区是怎样的?线程安全(即线程私有)的有哪些?(难度:★★ 频率:★★★★)
  • 对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置?(难度:★★ 频率:★★)

类加载

  • Java类加载流程?初始化流程?(难度:★★ 频率:★★★★★)
  • JVM双亲委派模型(难度:★★★ 频率:★)

内存泄露

  • Java内存泄露什么时候会发生?(难度:★★ 频率:★★)
  • 为什么内部类持有外部类可能内存泄露?如何解决?(难度:★★ 频率:★)
  • 为什么ThreadLocal会导致内存泄露?如何解决?(难度:★★★ 频率:★★)

垃圾回收

1.引用类型及其含义(难度:★★ 频率:★★★)

2.finalize方法做什么用的?(难度:★ 频率:★)

  • 垃圾回收时会调用此方法

3.可以作为GC.Roots的对象有哪些?(难度:★★★ 频率:★)

4.调用System.gc()会立刻垃圾回收吗?(难度:★★ 频率:★)

5.Minor GC和Full GC的触发时机。(难度:★★★ 频率:★★)

6.频繁Full GC如何排查(难度:★★★★ 频率:★)

7.JDK默认的垃圾回收器是什么?(难度:★★ 频率:★)

8.CMS垃圾回收器的流程?(难度:★★★ 频率:★★★★)

9.CMS和G1区别(难度:★★★ 频率:★★★)

10.CMS与其他老年代垃圾回收器的区别?(难度:★★★ 频率:★)

JVM调优

  • JVM通常设置哪些参数来调优?(难度:★★ 频率:★★★★)

其他

  • 怎么分配堆外内存(难度:★★ 频率:★)

多线程

综合

1.项目中哪些地方用到了多线程?(难度:★★★ 频率:★★★★★)

  • 处理定时的任务。 比如:定时器定时处理数据进行统计等
  • 异步处理。 比如:发邮件, 记录日志, 发短信等。比如注册成功后发激活邮件
  • 批量处理,缩短响应时间。比如:SpringBoot--多线程处理

2.线程的安全性问题体现在哪些方面?(难度:★★ 频率:★)

3.死锁产生的条件?(难度:★★ 频率:★)

4.i++是否线程安全?(难度:★ 频率:★)

  • 不是线程安全的。要线程安全可以用java.util.concurrent.atomic

5.JMM内存结构(难度:★★★ 频率:★★)

synchronized

  • synchronized用于静态方法与普通方法有区别吗?(难度:★★ 频率:★★)
  • synchronized锁的升级是怎样的?(难度:★★★ 频率:★)

线程池

  • 线程池缺点(难度:★★ 频率:★★)
  • BlockingQueue:线程池fixed, single, scheduled, cached对应的队列(难度:★★ 频率:★★★)
  • ThreadPoolExecutor有哪些参数?(难度:★★ 频率:★★★★★)
  • CPU密集与IO密集的场景如何设置线程池参数?(难度:★★★ 频率:★★★)
  • 什么时候触发最大线程条件?(难度:★★ 频率:★★★★★)
  • 线程池拒绝策略有哪些?默认是哪个?(难度:★★ 频率:★★★★)
  • 线程池里的异常时如何处理的?(难度:★★ 频率:★)

JUC

  • ReentrantLock显著缺点?(难度:★★★ 频率:★★)
  • CAS和AQS了解吗?原理是什么(难度:★★★ 频率:★★)
  • synchronized与ReentrantLock区别?(难度:★★ 频率:★★)
  • 有哪些原子类?用过哪个?(难度:★★★ 频率:★)
  • 项目里用了哪些锁?(难度:★★★ 频率:★★★)

  1. 单体项目里用到了ReentrantLock、synchronized;
  2. 单例模式里用到了synchronized
  • JDK8新增的异步编程了解吗?(难度:★★★ 频率:★)
  • 多线程顺序交替执行的方法(有三个线程A,B,C,依次打印出A,B,C)(难度:★★★ 频率:★)

方案1:Java多线程-使用堵塞队列实现顺序消费

方案2:模拟阻塞队列

  • 使用Object的wait(), notify(),使用一个互斥锁。

MySQL

综合问题

  • MyISAM与InnoDB区别(难度:★ 频率:★★★★)
  • sql注入怎么解决?(难度:★★★ 频率:★★)
  • 三大范式(难度:★★ 频率:★)
  • 怎么样幂等(难度:★★★ 频率:★★)
  • 一条SQL查询语句的执行流程(难度:★★ 频率:★★)
  • 大表分页的优化方法?(难度:★★★★ 频率:★)
  • 为什么不要用外键?(难度:★★★ 频率:★)
  • 批量往数据库导入1000万条数据方法?(难度:★★ 频率:★)

存储过程

  • 数据库优化方式(难度:★★★ 频率:★)

建立索引、字段冗余(减少联表查询)、使用缓存、读写分离、分库分表

  • 怎么调试存储过程(难度:★★ 频率:★)
  • MySQL的三种驱动类型 难度:★★ 频率:★)

事务

  • 隔离级别是怎样的?脏读、幻读是什么意思?(难度:★★★ 频率:★★★★★)
  • 隔离级别如何选用?(难度:★★ 频率:★★)
  • ACID(难度:★★ 频率:★)
  • 隔离级别是如何实现的?(MVCC)(难度:★★★★ 频率:★★)
  • 快照读与当前读 是怎样的?(难度:★★★★ 频率:★★)

索引

  • 索引的种类(难度:★★ 频率:★★★)
  • 数据库使用索引的缺点?(难度:★★ 频率:★★★)
  • 创建索引的原则(难度:★★ 频率:★★★★)
  • 索引什么时候会失效(难度:★★ 频率:★★★★★)
  • 创建了A, B, C联合索引,使用B,C能否索引(难度:★★★ 频率:★★★★★)
  • LIKE什么时候走索引,什么时候不走索引?(难度:★★★ 频率:★★★)
  • ORDER BY是否走索引?(难度:★★★ 频率:★★)
  • 聚集索引是什么?什么是回表?(难度:★★★★ 频率:★★★★)
  • 索引原理;为什么采用B+树?(难度:★★★★ 频率:★)

  • 共享锁与独占锁的区别?(难度:★★ 频率:★)
  • 什么时候会死锁?(难度:★★★★ 频率:★)

分库分表

  • 什么时候考虑分库分表?分库分表要考虑什么问题?(难度:★★★ 频率:★)
  • 原来没分库分表,后期如何分库分表?(难度:★★★★ 频率:★★)
  • 分库分表的中间件(难度:★★ 频率:★★)

Sharding-JDBC、Mycat

  • 水平分表,有哪些规则?(难度:★★★ 频率:★★★★★)
  • 如何维护全局的id(难度:★★★ 频率:★★★★★)

语句

语句类笔试题(难度:★★★ 频率:★)

OR与IN的效率?(难度:★★★ 频率:★)

内联结,全(外)联结,左联结,右联结,的含义?(难度:★★ 频率:★)

Redis

基本问题

  • Redis数据类型及其使用场景(难度:★★★ 频率:★★★★★)
  • Redis的数据类型对应的底层结构是怎样的?(难度:★★★★ 频率:★★★)
  • Redis为什么很快?(难度:★★ 频率:★★★★★)
  • Redis是单线程为什么速度依然快?(难度:★★ 频率:★★)
  • Redis持久化AOF,RDB区别(难度:★★ 频率:★★★★)
  • 持久化:长久下来AOF文件会很大怎么办?(难度:★★★ 频率:★★)
  • Redis有哪些原子命令?(难度:★★★ 频率:★)

Redis所有单个命令都是原子性的。

  • 穿透、无底洞、雪崩、击穿 解决方案?(难度:★★★ 频率:★★★★★)
  • Redis的发布订阅机制及其使用场景(难度:★★★★ 频率:★★)
  • 内存回收机制是怎样的?(或者说:淘汰策略)(难度:★★★ 频率:★★★★)
  • 给一个key怎么知道是用的哪种数据类型?(难度:★ 频率:★)

用type命令。例如:type key1

  • 为什么使用Redis,不用Memcache和MongoDB?(难度:★★ 频率:★★)
  • Redis与数据库如何同步?各个方式的缺点是什么?(难度:★★★ 频率:★★★)
  • Redis很慢,如何排查及解决?(难度:★★★★ 频率:★★)
  • 多线程操作同一个Key如何保证一致性?(微服务部署多个实例时如何保证一致性?)(难度:★★★★ 频率:★)
  • 秒杀的时候怎么使用Redis?(难度:★★★★ 频率:★★★)
  • 布隆过滤器原理?什么时候会误判?(难度:★★★★ 频率:★★★)
  • 用Redis如何实现延迟队列?(难度:★★★★ 频率:★)

分布式锁

  • Redis做分布式锁如何处理超时时间?比如:超时时间是5秒,但要执行20秒,相当于没锁住;超时时间是20秒,但只需执行5秒(浪费)(难度:★★★★ 频率:★★★)

设置中等长度的时间,线程执行完删除这个值;另起线程,定期去刷新这个值。Redisson的分布式锁就是这个方案

  • Redis实现分布式锁,集群环境如何处理主节点宕机这种情况?(难度:★★★★★ 频率:★)

使用RedLock红锁算法:若过半的Redis节点能够setnx成功则表示获取锁成功,类似于zk实现分布式锁方式

集群

  • 多节点有哪些部署方式?(难度:★★ 频率:★)

主从、哨兵、集群(Cluster)

  • 集群不支持事务,如何解决?(难度:★★★★ 频率:★)
  • 主从集群中主节点死了以后,是否还能使用?如何解决?(难度:★★★ 频率:★)

可以使用哨兵部署,自动故障转移。

  • 读写分离时读写分别在哪个节点(难度:★★ 频率:★)

在主节点上写,在从节点上读。

集群(Cluster)

  • 集群(Cluster)如何进行节点通信?(难度:★★★★ 频率:★★)
  • 集群(Cluster)如何进行扩展(伸缩)?(难度:★★★ 频率:★★)
  • 集群(Cluster)如何进行故障转移?(难度:★★★★ 频率:★★)

设计模式

  • 项目里用到了哪些设计模式,怎么用的?(难度:★★★ 频率:★★★★★)
  • 设计模式的原则(难度:★★ 频率:★)、
  • 设计模式的类别(难度:★★ 频率:★)
  • 单例模式的写法?(难度:★★ 频率:★★★★)
  • 手写双重检验单例(为什么用volatile,为什么两次if判断)(难度:★★★ 频率:★★★)
  • 静态代理与动态代理区别?(难度:★★★ 频率:★★★★★)

框架

Spring

IOC

  • Spring循环依赖解决方法及原理(难度:★★★★ 频率:★★★★)
  • Spring的循环依赖用的是三级缓存,为什么不是两级?(难度:★★★★ 频率:★★)
  • FactoryBean和BeanFactory区别(难度:★★★★ 频率:★★)
  • BeanFactory和ApplicationContext区别?(难度:★★★★ 频率:★)
  • bean的生命周期是怎样的(难度:★★★ 频率:★)
  • Spring几种scope区别(难度:★★★ 频率:★)
  • Spring容器的生命周期是怎样的?(难度:★★★ 频率:★)
  • SpringAOP解决了什么问题?(难度:★★★ 频率:★★)
  • SpringAOP实际开发过什么功能?(难度:★★★ 频率:★★★)
  • AOP原理?(难度:★★★★ 频率:★★★★★)

AOP

  • AOP有哪几种通知,如果方法执行报异常,哪个通知不会执行?(难度:★★★★ 频率:★)

前置,后置,环绕,返回,异常。若报异常,返回不会执行。

事务

  • Spring默认数据里隔离级别是什么?项目里用的哪个?(难度:★★★ 频率:★★)

默认采用数据库的隔离级别。项目里就是用的默认的

  • Spring事务失效场景?(难度:★★★★ 频率:★★★★)
  • Spring事务传播机制?(难度:★★★★ 频率:★★)

其他

  • SpringBoot如何热部署?yml配置文件修改后是否也能及时更新?(难度:★★★ 频率:★)
  • SpringBoot自动配置原理?(难度:★★★★★ 频率:★)

SpringMVC

  • SpringMVC流程(难度:★★★★ 频率:★★★)
  • servlet的过滤器、拦截器、AOP的执行顺序 (难度:★★★ 频率:★★)

SpringBoot

  • SpringBoot的启动流程?(难度:★★★★ 频率:★★★★)
  • SpringBoot的动态代理默认用的哪个(cglib还是JDK)?(难度:★★★★ 频率:★★★★)

SpringBoot 1.5.x:默认使用JDK代理,SpringBoot 2.x:默认使用CGLIB代理。

  • 怎么自己写SpringBootStarter(难度:★★★★ 频率:★)

MyBatis

  • MyBatis的#与$有什么区别?(难度:★★ 频率:★★★★)
  • MyBatis的原理?(Mapper是个接口,它的实现类在哪?)(难度:★★★★ 频率:★★)
  • 为什么MyBatis与Spring整合二级缓存会失效 ?(难度:★★★★ 频率:★)

中间件

MQ

综合

  • RabbitMQ,RocketMQ和Kafka区别(难度:★★ 频率:★★★★★)

RabbitMQ

  • RabbitMQ有哪些交换器?RabbitMQ的交换器与队列的关系?(难度:★★ 频率:★★★)
  • RabbitMQ的消息异常(丢失、重复、顺序、堆积)如何处理?(难度:★★★ 频率:★★★★★)
  • RabbitMQ消息是否会过期?(难度:★★★ 频率:★★)
  • RabbitMQ的消息什么时候会放到死信队列?(难度:★★★ 频率:★)
  • RabbitMQ的延迟队列是怎样的?(难度:★★★ 频率:★★)
  • RabbitMQ的集群有哪几种部署方式?(难度:★★ 频率:★)

多机多节点,单机多节点

Kafka

  • 为什么Kafka性能很高(难度:★★★ 频率:★★★)
  • Kafka的消息异常(丢失、重复)如何处理?(难度:★★★ 频率:★★★★)
  • Kafka不支持延迟队列,如果用到延迟队列,该如何实现?(难度:★★★★★ 频率:★★★)

Shiro

  • Shiro怎么根据url对应权限,流程是什么?(难度:★★★ 频率:★★★)
  • session存放在哪里?(难度:★★ 频率:★)

分布式

综合

分布式

  • CAP理论是什么?Zookeeper和Eureka分别放弃了什么?(难度:★★★ 频率:★★★)
  • 分布式锁实现方式(难度:★★★ 频率:★★★★★)
  • 2PC、3PC、TCC的区别及使用场景?(难度:★★★★ 频率:★★)
  • 分布式session共享解决方案(难度:★★★ 频率:★★)
  • 为什么微服务一定要有网关?(难度:★★★ 频率:★)

配置中心

  • 如何把微服务的公共配置给拿出来?(难度:★★ 频率:★)
  1. 用spring.profiles.include,将公共的配置包含进去。
  2. 使用Nacos,Nacos支持公共配置

Nacos

  • Nacos如何续期?(难度:★★★ 频率:★★)
  • Nacos支持AP还是CP?(难度:★★★ 频率:★★)

两者都支持,选一种即可。(默认是AP)

Zookeeper

Zookeeper注册中心挂了,服务还能否调用?(难度:★★★ 频率:★★)

  • 可以,因为客户端还有缓存

ZK分布式锁,leader节点宕机了,会发生什么?(难度:★★★★ 频率:★)

  • 进行选举(过半选举)

Ps:由于篇幅限制,PDF笔记无法全部为大家展示出来,就以截图主要内容的形式让大家参考啦,需要完整版的小伙伴关注老猿的公众号【清朝程序猿】回复“666”即可免费领取到了!
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 10:19:03

AI智能体:完整课程(初级)

如果你在2025年关注过AI,你可能已经注意到,每个人都在谈论智能体。这是有充分理由的。AI智能体可以处理从简单的日常任务到企业级复杂的多智能体工作流程的所有事务。而这仅仅是个开始。我们即将见证这个领域涌现更多创新。如果您是初次来到这里&#xf…

作者头像 李华
网站建设 2026/9/8 6:23:46

GSE宏编译器:魔兽世界玩家的技能循环自动化神器

GSE宏编译器:魔兽世界玩家的技能循环自动化神器 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and the Cur…

作者头像 李华
网站建设 2026/9/8 3:59:37

DeeplxFile:突破文件翻译限制的终极解决方案

还在为文档翻译发愁吗?😩 当其他翻译工具告诉你"文件太大"或"不支持Excel"时,DeeplxFile正在默默打破这些限制!这款基于Deeplx和Playwright的开源工具,让免费、无限制的文件翻译成为现实。 【免费…

作者头像 李华
网站建设 2026/9/7 18:27:23

针对机械设备行业一体化项目制管理解决方案

对于机械设备工厂,管理中的挑战主要体现在内部流程的协调与效率、成本的控制,以及对定制化生产的管理上。机械设备行业专业的管理软件,正是为了针对性解决这些问题而设计的。机械设备工厂的管理痛点机械设备工厂的管理挑战复杂且具体&#xf…

作者头像 李华