背完这套 Java 面试八股文,自动解锁面试牛逼症被动技能
haoteby 2025-07-08 18:11 23 浏览
前言
国内的互联网面试,恐怕是现存的、最接近科举考试的制度。很多人对八股文都嗤之以鼻,认为无法衡量出一个程序员的真是水平。还有一部分人则是深恶痛绝,因为实在太难背了。
但是国内大环境如此,互联网 IT 行业的求职者太多了,如果考察的是清一溜的算法题和设计题,那么会要求面试官有极高的技术水平,还要花大量的时间成本和精力。
所以,也许现行的八股文面试不是最优的解法,但也是最符合当前国内 IT 环境的做法。
话又说回来,现在的 Java 面试真就老八股文了。我光是整理题目就理了半天,答案背也背不完,在肝了几天,跟一些资深面试官交流之后,我总结出了这套还算切实可行的八股文,尽力的去进行了精简,每一个知识点都只取一些最具有代表性的题,要不然肯定得往一千道题跑了,希望对正在秋招或者跳槽的朋友有些帮助。
Java 基础(33 道)
- 面向对象
- JDK、JRE、JVM 之间的区别
- ==和 equals方法之前的区别
- hashCode()与 equals()之间的关系
- final 关键字的作用是什么?
- String、StringBuffer、StringBuilder 的区别
- 重载和重写的区别
- 接口和抽象类的区别
- List 和 Set 的区别
- ArrayList 和 LinkedList 区别
- HashMap 和 HashTable 有什么区别?其底层实现是什么?
- 谈谈 ConcurrentHashMap 的扩容机制
- Jdk.到 Jdk.
- HashMap 发生了什么变化(底层)?
- 说一下 HashMap 的 Put方法
- 泛型中 extends 和 super 的区别
- 深拷和浅拷
- HashMap 的扩容机制原理
- CopyOnWriteArrayList 的底层原理是怎样的
- 什么是字节码?采用字节码的好处是什么?
- Java 中的异常体系是怎样的
- Java 中有哪些类加载器
- 说说类加载器双亲委派模型
- GC 如何判断对象可以被回收
- JVM 中哪些是线程共享区
- 你们项目如何排查 JVM 问题
- 一个对象从加载到 JVM,再到被 GC 清除,都经历了什么过程?
- 怎么确定一个对象到底是不是垃圾?
- JVM 有哪些垃圾回收算法?
- 什么是 STW?
- JVM 有哪些垃圾回收器?
- 垃圾回收分为哪些阶段
- 什么是三色标记?
- JVM 参数有哪些?
Java 并发(20 道)
- 线程的生命周期?线程有几种状态
- sleep()、wait()、join()、yield()之间的的区别
- 对线程安全的理解
- Thread 和 Runable 的区别
- 对守护线程的理解
- ThreadLocal 的底层原理
- 并发、并行、串行之间的区别
- 并发的三大特性
- Java 死锁如何避免?
- 如何理解 volatile 关键字
- 为什么用线程池?解释下线程池参数?
- 线程池的底层工作原理
- 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?
- 线程池中线程复用原理
- ReentrantLock 中的公平锁和非公平锁的底层实现
- ReentrantLock 中 tryLock()和 lock()方法的区别
- CountDownLatch 和 Semaphore 的区别和底层原理
- Sychronized 的偏向锁、轻量级锁、重量级锁
- Sychronized 和 ReentrantLock 的区别
- 谈谈你对 AQS 的理解,AQS 如何实现可重入锁?
开发框架(28 道)
- Spring 是什么?
- 谈谈你对 AOP 的理解
- 谈谈你对 IOC 的理解
- 解释下 Spring支持的几种 bean 的作用域。
- Spring 事务的实现方式和原理以及隔离级别?
- Spring 事务传播机制
- Spring 事务什么时候会失效?
- 什么是 bean 的自动装配,有哪些方式?
- Spring 中的 Bean 创建的生命周期有哪些步骤
- Spring 中 Bean 是线程安全的吗
- ApplicationContext 和 BeanFactory 有什么区别
- Spring 中的事务是如何实现的
- Spring 中什么时候 @Transactional 会失效
- Spring 容器启动流程是怎样的
- Spring用到了哪些设计模式
- Spring Boot、Spring MVC 和 Spring 有什么区别
- Spring MVC 工作流程
- Spring MVC 的主要组件?
- Spring Boot 自动配置原理?
- 如何理解 Spring Boot 中的 Starter
- 什么是嵌入式服务器?为什么要使用嵌入式服务器?
- Spring Boot 中常用注解及其底层实现
- Spring Boot 是如何启动 Tomcat 的
- Spring Boot 中配置文件的加载顺序是怎样的?
- Mybatis 的优缺点
- MyBatis 与 Hibernate 有哪些不同?
- #{}和 ${}的区别是什么?
- 简述 Mybatis 的插件运行原理,如何编写一个插件。
Mysql(20 道)
- 索引的基本原理
- Mysql 聚簇和非聚簇索引的区别
- Mysql 索引的数据结构,各自优劣
- 索引设计的原则?
- InnoDB 存储引擎的锁的算法
- 关心过业务系统里面的 sql 耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
- 事务的基本特性和隔离级别
- ACID 靠什么保证的?
- 什么是 MVCC
- 分表后非sharding_key 的查询怎么处理,分表后的排序?
- Mysql 主从同步原理
- 简述 MyISAM 和 InnoDB 的区别
- 简述 Mysql 中索引类型及对数据库的性能的影响
- Explain 语句结果中各个字段分表表示什么
- 索引覆盖是什么
- 最左前缀原则是什么
- Innodb 是如何实现事务的
- B 树和 B+树的区别,为什么 Mysql 使用B+树
- Mysql 锁有哪些,如何理解
- Mysql 慢查询该如何优化?
Redis(14 道)
- 什么是 RDB 和 AOF
- Redis 的过期键的删除策略
- Redis 线程模型、单线程快的原因
- 简述 Redis 事务实现
- Redis 主从复制的核心原理
- Redis 有哪些数据结构?分别有哪些典型的应用场景?
- Redis 分布式锁底层是如何实现的?
- Redis 主从复制的核心原理
- Redis 集群策略
- 缓存穿透、缓存击穿、缓存雪崩分别是什么
- Redis 和 Mysql 如何保证数据一致
- Redis 的持久化机制
- Redis 单线程为什么这么快
- 简述 Redis 事务实现
分布式与微服务(46 道)
- 什么是 CAP 理论
- 什么是 BASE 理论
- 什么是 RPC
- 数据一致性模型有哪些
- 分布式 ID 是什么?有哪些解决方案?
- 分布式锁的使用场景是什么?有哪些实现方案?
- 什么是分布式事务?有哪些实现方案?
- 什么是 ZAB 协议
- 简述 paxos 算法
- 简述 raft 算法
- 为什么 Zookeeper 可以用来作为注册中心
- Zookeeper 中的领导者选举的流程是怎样的?
- Zookeeper 集群中节点之间数据是如何同步的
- Dubbo 支持哪些负载均衡策略
- Dubbo 是如何完成服务导出的?
- Dubbo 是如何完成服务引入的?
- Dubbo 的架构设计是怎样的?
- 负载均衡算法有哪些
- 分布式架构下,Session 共享有什么方案
- 简述你对 RPC、RMI 的理解
- 如何实现接口的幂等性
- Zookeeper 的数据模型和节点类型
- 简述 zk 的命名服务、配置管理、集群管理
- 讲下 Zookeeper 中的 watch 机制
- Zookeeper 和 Eureka 的区别
- 如何实现分库分表
- 存储拆分后如何解决唯一主键问题
- 雪花算法原理
- 如何解决不使用分区键的查询问题
- Spring Cloud 有哪些常用组件,作用是什么?
- 如何避免缓存穿透、缓存击穿、缓存雪崩?
- 分布式系统中常用的缓存方案有哪些
- 缓存过期都有哪些策略?
- 常见的缓存淘汰算法布隆过滤器原理,优缺点
- 分布式缓存寻址算法
- 什么是 Hystrix?简述实现机制
- Spring Cloud 和 Dubbo 有哪些区别?
- 什么是服务雪崩?什么是服务限流?
- 什么是服务熔断?什么是服务降级?区别是什么?
- SOA、分布式、微服务之间有什么关系和区别?
- 怎么拆分微服务?
- 怎样设计出高内聚、低耦合的微服务?
- 有没有了解过 DDD 领域驱动设计?
- 什么是中台?
- 你的项目中是怎么保证微服务敏捷开发的?
消息队列(28 道)
- 如何进行产品选型?
- 简述 RabbitMQ 的架构设计
- RabbitMQ 如何确保消息发送?消息接收?
- RabbitMQ 事务消息
- RabbitMQ 死信队列、延时队列
- RabbitMQ 镜像队列机制
- Kafka 是什么
- Kafka 为什么吞吐量高
- Kafka 的 Pull 和 Push 分别有什么优缺点
- 为什么要使用 kafka,为什么要使用消息队列?
- Kafka 中的 ISR、AR 又代表什么?ISR 的伸缩又指什么
- Kafka 高效文件存储设计特点:
- Kafka 与传统消息系统之间有三个关键区别
- Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中
- Kafka 的消费者如何消费数据
- Kafka 消费者负载均衡策略
- kafaka 生产数据时数据的分组策略
- Kafka 中是怎么体现消息顺序性的?
- Kafka 如何实现延迟队列?
- RocketMQ 的事务消息是如何实现的
- 为什么 RocketMQ 不使用 Zookeeper 作为注册中心呢?
- RocketMQ 的实现原理
- RocketMQ 为什么速度快
- 消息队列如何保证消息可靠传输
- 消息队列有哪些作用
- 死信队列是什么?延时队列是什么?
- 如何保证消息的高效读写?
- 让你设计一个 MQ,你会如何设计?
网络(11 道)
- 什么是认证和授权?如何设计一个权限认证框架?
- 如果没有 Cookie,Session 还能进行身份验证吗?
- 什么是 CSRF 攻击?如何防止?
- 什么是 OAuth2.0 协议?有哪几种认证方式?
- 什么是 SSO? 与 OAuth2.0 有什么关系?如何设计一个开放授权平台?
- epoll 和 poll 的区别
- TCP 的三次握手和四次挥手
- 浏览器发出一个请求到收到响应经历了哪些步骤?
- 跨域请求是什么?有什么问题?怎么解决?
- 零拷贝是什么
Leetcode 算法(10 道)
- 反转链表
- 统计 N 以内的素数
- 寻找数组的中心索引
- 删除排序数组中的重复项
- x 的平方根
- 三个数的最大乘积
- 两数之和
- 斐波那契数列
- 环形链表
- 排列硬币
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。
我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【07】即可免费获取
原文出处:
xie.infoq.cn/article/28138bd00e0e394dd36ba5a42
相关推荐
- 一日一技:用Python程序将十进制转换为二进制
-
用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...
- 十进制转化成二进制你会吗?#数学思维
-
六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...
- 二进制、十进制、八进制和十六进制,它们之间是如何转换的?
-
在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...
- c语言-2进制转10进制_c语言 二进制转十进制
-
#include<stdio.h>intmain(){charch;inta=0;...
- 二进制、八进制、十进制和十六进制数制转换
-
一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...
- 二进制、十进制、八进制、十六进制间的相互转换函数
-
二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...
- 二进制、八进制、十进制和十六进制等常用数制及其相互转换
-
从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...
- 二进制如何转换成十进制?_二进制如何转换成十进制例子图解
-
随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...
- 二进制与十进制的相互转换_二进制和十进制之间转换
-
很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...
- 十进制如何转换为二进制,二进制如何转换为十进制
-
用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...
- 十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明
-
我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...
- 二进制转化为十进制,你会做吗?一起来试试吧
-
今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...
- Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译
-
Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...
- 怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定
-
想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...
- 6个mp4格式转换器测评:转换速度与质量并存!
-
MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...