2025年最新Java面试题(场景题➕八股文)及答案汇总(精选100w字,赶紧刷起来!)

此套Java高频面试题合集整合了历年来高频出现的八股文与场景题!
适合人群:【需要求职面试、跳槽涨薪、冲击大厂央国企以及日常学习】
优势:言简意赅、通俗易懂 、内容全面、答案完整、高频常问
这套课程总共有13个技术章节 涉及java的方方面面,不仅包括Java基础知识、并发编程基础、JVM、spring、分布式消息队列等等核心知识点,还涵盖了常见算法面试题以及各种实战场景下的问题和解决方案。 非常适合正在准备面试的小伙伴临阵磨枪,以及日常刷题去查漏补缺!。 

由于篇幅限制,只能给大家展示小部分内容。核心面试笔记包括:业务场景题、技术场景题、线上问题排查案例、Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题等

全套面试笔记及答案【点击此处】即可免费获取!

一、技术场景题系列

1.如何在生产环境不停服情况下进行数据迁移,从原来的16张表迁移到64张表中?

目标:

迁移应该是在线的迁移,也就是在迁移的同时还会有数据的写入;

数据应该保证完整性,也就是说在迁移之后需要保证新的库和旧的库的数据是一致的;

迁移的过程需要做到可以回滚,这样一旦迁移的过程中出现问题,可以立刻回滚到源库,不会对系统的可用性造成影响。

如果你使用 Binlog 同步的方式,在同步完成后再修改代码,将主库修改为新的数据库,这样就不满足可回滚的要求,一旦迁移后发现问题,由于已经有增量的数据写入了新库而没有写入旧库,不可能再将数据库改成旧库。

2.订单到期关单如何实现

通过定时任务关闭订单,是一种成本很低,实现也很容易的方案。通过简单的几行代码,写一个定时任务,定期扫描数据库中的订单,如果时间过期,就将其状态更新为关闭即可。

优点:实现容易,成本低,基本不依赖其他组件。

3.Redis的zset实现排行榜,实现分数相同按照时间顺序排序,怎么做?

关键关注点

  • 分数设计:如何将分数和时间编码到ZSET的score中
  • 排序保证:确保Redis能正确按照复合条件排序
  • 数据解析:从存储的数据中正确解析原始信息
  • 性能影响:方案对内存和计算的影响
  • 扩展性:方案对其他排序需求的适应性

4. Kafka,单分区单消费者实例,如何提高吞吐量

生产者提升吞吐量的优化手段有以下几个:

  1. 消息批量发送:增加 batch.size(批量消息数量设置)和适当调整 linger.ms(批次逗留时间),以允许生产者累积更多消息后再发送,减少网络请求次数。
  2. 消息压缩:设置 compression.type(默认值为 none,不压缩),该参数为生产者发送数据的压缩方式,包括 gzip、snappy、lz4、zstd 等。启用消息压缩(如 Snappy、LZ4),减少网络传输的数据量,尽管这会增加 CPU 负担。
  3. 增大缓冲区大小:通过增加 buffer.memory 配置(生产者内存缓冲区大小),允许生产者在等待发送时缓存更多消息。

5. 一个接口3000QPS,接口RT为200MS,预估需要几台机器?

系统接口优化的目的是为了缩短响应时间 RT(reponse time)。 那么优化的目标是多少呢?

一般比较良好的反应时间是100-200ms, 为什么呢?

基于2,5,8 理论, 2s以内渲染出页面用户是满意的,5s内是可以接受的, 8s 用户就会产生烦躁的心理,

前端页面还有加载渲染的工作,所以200ms的接口返回比较优秀。

你们系统中的QPS是多少呢?

……

二、业务场景题系列

1.字节二面:如何设计一个支持10万QPS的会员系统

会员系统是一种基础系统,跟公司所有业务线的下单主流程密切相关。如果会员系统出故障,会导致用户无法下单,影响范围是全公司所有业务线。所以,会员系统必须保证高性能、高可用,提供稳定、高效的基础服务。

随着同程和艺龙两家公司的合并,越来越多的系统需要打通同程 APP、艺龙 APP、同程微信小程序、艺龙微信小程序等多平台会员体系。

例如微信小程序的交叉营销,用户买了一张火车票,此时想给他发酒店红包,这就需要查询该用户的统一会员关系。

2.如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求拆解
  • 要配置券,会涉及到券批次(券模板)创建,券模板的有效期以及券的库存信息
  • 要发券,会涉及到券记录的创建和管理(过期时间,状态)

因此,我们可以将需求先简单拆解为两部分:

同时,无论是券模板还是券记录,都需要开放查询接口,支持券模板/券记录的查询。

3. 设计一个支持敏感数据存储和传输安全的加解密平台

敏感信息必须进行加密处理,也就是把敏感数据以密文的形式存储、传输。这样即使被黑客攻击,发生数据泄露,被窃取的数据也是密文,获取数据的人无法得到真实的明文内容,敏感数据依然被保护着。而当应用程序需要访问这些密文的时候,只需要进行数据解密,即可还原得到原始明文数据。加解密处理既保证了数据的安全,又保证了数据的正常访问。

4.如何提升RocketMQ顺序消费性能?

我们先来了解一下 RocketMQ 顺序消费的实现原理。RocketMQ 支持局部顺序消息消费,可以保证同一个消费队列上的消息顺序消费。例如,消息发送者向主题为 ORDER_TOPIC 的 4 个队列共发送 12 条消息, RocketMQ 可以保证 1、4、8 这三条按顺序消费,但无法保证消息 4 和消息 2 的先后顺序。

5.如何设计支持50万QPS的站内未读消息系统?

当有人 @你、评论你、给你的博文点赞或者给你发送私信的时候,你会收到相应的未读提醒;

在早期的微博版本中有系统通知的功能,也就是系统会给全部用户发送消息,通知用户有新的版本或者有一些好玩的运营活动,如果用户没有看,系统就会给他展示有多少条未读的提醒。

……

三、Java并发编程面试专题

1.什么是并发,什么是并行?

  • 基本概念区分:能否清晰说明并发与并行的区别
  • 实际应用场景:能否举例说明哪些场景适合并发,哪些适合并行
  • 技术实现:了解多线程、多进程、协程等技术如何实现并发/并行
  • 问题解决:如何处理并发/并行编程中的常见问题(如竞态条件、死锁等)
  • 性能考量:如何评估和优化并发/并行程序的性能

2. 线程有几种状态,状态之间的流转是怎样的?

  1. NEW(新建)
    • 线程刚被创建,但尚未调用start()方法
    • 此时线程对象已存在,但还没有分配系统资源
  2. RUNNABLE(可运行)
    • 调用start()方法后的状态
    • 包括正在运行和就绪两种子状态
    • 在JVM层面视为运行中,但操作系统可能还未分配CPU时间片
  3. BLOCKED(阻塞)
    • 线程等待获取监视器锁(synchronized)
    • 只有进入同步代码块/方法时可能进入此状态
    • 获得锁后转回RUNNABLE
  4. WAITING(等待)
    • 无限期等待其他线程显式唤醒
    • 触发方式:
      • Object.wait()
      • Thread.join()
      • LockSupport.park()
    • 需要其他线程调用notify()/notifyAll()或unpark()唤醒

3. 什么是守护线程,和普通线程有什么区别?

守护线程(Daemon Thread)定义

守护线程是一种支持性线程,主要用于在后台为其他线程提供服务。当所有非守护线程结束时,JVM会自动退出,而不管守护线程是否还在运行。

4.创建线程有几种方式?

1. 继承Thread类

实现方式

class MyThread extends Thread {
    @Override
    public void run() {
        // 线程执行逻辑
    }
}

// 使用方式
MyThread thread = new MyThread();
thread.start();

特点

  • 最简单直观的创建方式
  • Java单继承限制,继承Thread后不能再继承其他类
  • 不符合"组合优于继承"的设计原则
  • 线程与任务耦合在一起

 5.wait/sleep、notify/notifyAll区别?

基本区别

特性

wait()

sleep()

所属类

Object类的方法

Thread类的静态方法

调用要求

必须在同步代码块(synchronized)中

可以在任何地方调用

锁释放

会释放持有的锁

不会释放任何锁

唤醒方式

需要notify()/notifyAll()

超时自动唤醒或interrupt()

使用场景

线程间通信

单纯暂停当前线程

异常

抛出InterruptedException

抛出InterruptedException

状态变化

WAITING/TIMED_WAITING

TIMED_WAITING

 ……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值