上一篇文章分享了我的 Java 转行之路,本文主要分享 Java 后端面试高频题目,重要程度按照背景颜色进行区分。由于个人水平有限,如若文章中有错误之处,敬请指正。
本文按照我平时复习的模块进行题目划分,由于题目较多,未贴出答案。如果想要答案版资料,可加我的微信(微信号:pcwl_Java),备注:面试题。
第一篇:Java 转行之路
第二篇:Java 面试必备知识点
第三篇:秋招面经集合
解释下什么是面向对象?面向对象和面向过程的区别?
面向对象的三大特性?分别解释下?
JDK、JRE、JVM 三者之间的关系?
重载和重写的区别?
Java 中是否可以重写一个 private 或者 static 方法?
构造器是否可以被重写?
构造方法有哪些特性?
在 Java 中定义一个不做事且没有参数的构造方法有什么作用?
Java 中创建对象的几种方式?
抽象类和接口有什么区别?
静态变量和实例变量的区别?
成员变量和局部变量的区别?
short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
Integer 和 int 的区别?
装箱和拆箱
switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?
字节和字符的区别?
String 为什么要设计为不可变类?
String、StringBuilder、StringBuffer 的区别?
String str = "i" 与 String str = new String("i") 一样吗?
String 类的常用方法都有那些?
final 修饰 StringBuffer 后还可以 append 吗?
Object 的常用方法有哪些?
为什么 wait/notify 方法放在 Object 类中而不是 Thread 类中?
final、finally、finalize 的区别?
finally 块中的代码什么时候被执行?finally 是不是一定会被执行到?
try-catch-finally 中哪个部分可以省略?
try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
static 关键字的作用?
super 关键字的作用?
transient关键字的作用?
== 和 equals 的区别?
两个对象的 hashCode() 相同,则 equals() 也一定为 true 吗?
为什么重写 equals() 就一定要重写 hashCode() 方法?
& 和 && 的区别?
Java 中的参数传递时传值呢?还是传引用?
Java 中的 Math.round(-1.5) 等于多少?
两个数的异或结果是什么?
error 和 exception 的区别?
throw 和 throws 的区别?
常见的异常类有哪些?
运行时异常与受检异常有何异同?
主线程可以捕获到子线程的异常吗?
Java 的泛型是如何工作的 ? 什么是类型擦除 ?
什么是泛型中的限定通配符和非限定通配符 ?
List extends T> 和 List super T> 之间有什么区别 ?
如何实现对象的克隆?
深克隆和浅克隆的区别?
什么是 Java 的序列化,如何实现 Java 的序列化?
Java 中的反射是什么意思?有哪些应用场景?
反射的优缺点?
Java 中的动态代理是什么?有哪些应用?
怎么实现动态代理?
Java 中的 IO 流的分类?说出几个你熟悉的实现类?
字节流和字符流有什么区别?
BIO、NIO、AIO 有什么区别?
Java 中常用的容器有哪些?
ArrayList 和 LinkedList 的区别?
ArrayList 的扩容机制?
Array 和 ArrayList 有何区别?什么时候更适合用 Array?
HashMap 的实现原理/底层数据结构?JDK1.7 和 JDK1.8
HashMap 的 get、put、resize 方法的过程?
HashMap 的 size 为什么必须是 2 的整数次方?
HashMap 多线程死循环问题?
HashMap 的 get 方法能否判断某个元素是否在 Map 中?
HashMap 与 HashTable/ConcurrentHashMap 的区别是什么?
HashTable 和 ConcurrentHashMap 的区别是什么?
ConcurrentHashMap 的实现原理是什么?
HashSet 的实现原理?怎么保证元素不重复的?
LinkedHashMap 的实现原理?
Iterator 怎么使用?有什么特点?
Iterator 和 Enumeration 接口的区别?
fail-fast 与 fail-safe 有什么区别?
Collection 和 Collections 有什么区别?
并行和并发有什么区别?
线程和进程的区别?
守护线程是什么?
创建线程的几种方式?
runnable 和 callable 有什么区别?
线程状态及转换?
sleep() 和 wait() 的区别?
线程的 run() 和 start() 有什么区别?
在 Java 程序中怎么保证多线程的运行安全?
Java 线程同步的几种方法?
Thread.interrupt() 方法的工作原理是什么?
谈谈对 ThreadLocal 的理解?
多线程并行运行,主线程怎么收集子线程的信息?
说一说自己对于 synchronized 关键字的了解?项目中怎么使用的?
说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗?
谈谈 synchronized 和 ReenTrantLock 的区别?
synchronized 和 volatile 的区别是什么?
简单介绍下 volatile?volatile 的底层原理是什么?内存屏障是如何实现的?
说下对 ReentrantReadWriteLock 的理解?
说下对悲观锁和乐观锁的理解?
乐观锁常见的两种实现方式是什么?分别有什么问题?
CAS 和 synchronized 的使用场景?
什么是 CAS,内部怎么实现的?
简单说下对 Java 中的原子类的理解?atomic 的原理是什么?
说下对同步器 AQS 的理解?
说下对信号量 Semaphore 的理解?
CountDownLatch 和 CyclicBarrier 有什么区别?
说下对线程池的理解?为什么要使用线程池?
实现 Runnable 接口和 Callable 接口的区别?
执行 execute() 方法和 submit() 方法的区别是什么呢?
如何创建线程池?
创建线程池的参数有哪些?
线程池中的的线程数一般怎么设置?需要考虑哪些问题?
说下对 Fork/Join 并行计算框架的理解?
JDK 中提供了哪些并发容器?
谈谈对 CopyOnWriteArrayList 的理解?
谈谈对 ConcurrentLinkedQueue 的理解?
谈谈对 ConcurrentSkipListMap 的理解?
谈谈对 BlockingQueue 的理解?分别有哪些实现类?
说一下 Jvm 的主要组成部分?及其作用?
谈谈对运行时数据区的理解?
谈谈对堆和栈的理解?堆中存什么?栈中存什么?
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
Java 中的参数传递时传值呢?还是传引用?
Java 对象的大小是怎么计算的?
对象的访问定位的两种方式?
判断垃圾可以回收的方法有哪些?有什么优缺点?
被标记为垃圾的对象一定会被回收吗?
谈谈对 Java 中引用的了解?
谈谈对内存泄漏的理解?举几个内存泄漏的案例?
常用的垃圾收集算法有哪些?各自的优缺点是什么?
为什么要采用分代收集算法?
什么是浮动垃圾?
常用的垃圾收集器有哪些?
谈谈 CMS 和 G1 的区别?
谈谈对 G1 收集器的理解?
详细说下垃圾回收策略?
谈谈你对内存分配的理解?大对象怎么分配?空间分配担保?
说下你用过的 JVM 监控工具?
谈谈你对 JVM 调优的理解?有过工程调优经验吗?
JVM 设置最大堆的参数是什么?
谈谈你对类文件结构的理解?有哪些部分组成?
谈谈你对类加载机制的了解?
类加载各阶段的作用分别是什么?
有哪些类加载器?分别有什么作用?
怎么实现一个自定义的类加载器?需要注意什么?
谈谈你对双亲委派模型的理解?工作过程?为什么要使用?
怎么打破双亲委派模型?有哪些实际场景是需要打破双亲委派模型的?
谈谈你对编译期优化和运行期优化的理解?
谈谈你对词法分析和语法分析的理解?
为何 HotSpot 虚拟机要使用解释器与编译器并存的架构?
编译优化技术有哪些?
说下你对 Java 内存模型的理解?
内存间的交互操作有哪些?需要满足什么规则?
谈谈你对五层网络协议的理解?每一层的作用是什么?每一层的数据单元是什么?
简单说下每一层对应的网络协议有哪些?
ARP 协议的工作原理?
谈下你对 IP 地址分类的理解?
TCP 和 UDP 的区别?
TCP 和 UDP 分别对应的常见应用层协议有哪些?
详细说下 TCP 三次握手的过程?
为什么两次握手不可以?为什么不需要四次握手?
为什么要回传 SYN? 为什么要传 ACK?
详细说下 TCP 四次挥手的过程?
为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?
保活计时器的作用?
TCP 协议是如何保证可靠传输的?
谈谈你对停止等待协议的理解?
谈谈你对 ARQ 协议的理解?
滑动窗口有什么作用?
谈下你对 TCP 拥塞控制的理解?四种算法?
TCP 黏包是怎么产生的?怎么解决?
说几个你知道的 HTTP 状态码?
HTTP 状态码 301 和 302 代表的是什么?有什么区别?
forward 和 redirect 的区别?
HTTP 方法有哪些?
说下 GET 和 POST 的区别?
HTTP 的首部字段有哪些?
在浏览器中输入 URL 地址到显示主页的过程?
说下 DNS 解析的过程?
谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
谈下 HTTP1.0 和 1.1、1.2 的主要变化?
HTTPS 的工作过程?
HTTP 和 HTTPS 的区别?
HTTPS 的优缺点?
什么是数字签名?什么是证书?
什么是对称加密和非对称加密?
常用的加密算法有哪些?
Session 和 Cookie 的区别?
什么是 CAS 单点登录?
如何设计一个 CAS 单点登录系统?
Socket 两个典型的接收方式方式?
Socket 在 OSI七 层模型中的哪一层?
Java 如何实现无阻塞方式的 Socket 编程?
说下你知道你知道的攻击手段有哪些?
跨站脚本攻击的原理、危害和防范手段?
跨站请求伪造的原理、危害和防范手段?
SQL 注入攻击的原理、危害和防范手段?
拒绝服务攻击 DOS 的原理、危害和防范手段?
进程与线程的区别?
进程的状态及其转换?
进程间的通信方式有哪些?
进程(或作业)的调度算法有哪些?
同步和互斥的区别?
同步、异步、阻塞、非阻塞的区别?
线程/进程同步的方式有哪些?
什么是缓冲区溢出,有什么危害,原因是什么?
什么是死锁?
死锁产生的必要条件?
死锁的检测和消除?
怎么处理死锁?
怎么预防死锁?
怎么避免死锁?
固定分区、动态分区、分段式存储管理和分页式存储管理的区别?
页面置换算法有哪些?
什么是虚拟内存技术?
动态链接库和静态链接库的区别?
说下你对磁盘结构的认识?
磁盘调度算法?
中断的类型有哪些?
简单说下常用的设计模式有哪些?
工厂方法模式和抽象工厂模式有什么区别?
实际开发中用过设计模式吗?怎么用的?
解释器、迭代器、观察者、适配器、组合、外观、代理等模式的原理是什么?
文件目录采用的是哪种设计模式?
JDK 中用到了哪些设计模式?
Spring 中用到了哪些设计模式?
手写/口述场景题的 SQL 语句
一条 SQL 语句在数据库框架中的执行流程?
数据库的三范式是什么?
MySQL 中的数据类型有哪些?
char 和 varchar 的区别?
谈谈你对索引的理解?底层数据结构?
为什么要使用索引?一定要使用索引吗?
为什么索引的底层数据结构采用 B+ 树而不是红黑树?
索引的类型?
什么叫聚簇索引?什么叫联合索引?
谈下什么是前缀索引?
谈下什么是覆盖索引?
什么情况下索引会失效?即查询不走索引?
查询性能的优化方法?
InnoDB 和 MyISAM 的比较?
为什么要分库分表?分库分表后,主键 ID 怎么设置?
水平切分和垂直切分该如何选择?存在什么问题?
主从复制中涉及到哪三个线程?
如何实现 MySQL 的读写分离?
MySQL 的主从复制原理是什么?如何解决 MySQL 主从同步延迟问题?
谈下你对读写分离的理解?
谈下你对数据库事务的理解?不同隔离级别下会产生什么问题?怎么解决?
MySQL 默认的隔离级别是什么?
MVCC 的实现原理是什么?
数据库中常用的锁有哪些?
表锁和行锁有什么区别?
InnoDB 什么时候使用行级锁?什么时候使用表级锁?
InnoDB 存储引擎的锁的 3 种算法?
MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?
AOP 的代理有哪几种方式?
怎么实现 JDK 动态代理?
AOP 的基本概念:切面、连接点、切入点等?
谈谈你对 IOC 的理解?
Bean 的生命周期?
Bean 的作用域?
Spring 中的单例 Bean 的线程安全问题了解吗?
谈谈你对 Spring 中的事物的理解?
Spring 中的事务隔离级别?
Spring 中的事物传播行为?
Spring 常用的注入方式有哪些?
Spring 框架中用到了哪些设计模式?
谈谈你对 MVC 模式的理解?
SpringMVC 的工作原理/执行流程?
SpringMVC 的重要组件有哪些?
谈谈你对 DispatcherServlet 的源码理解?
SpringMVC 常用的注解有哪些?
SpringMVC 怎么样设定重定向和转发的?
如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
SpringMVC 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
SpringMVC 里面拦截器是怎么写的?
SpringMVC 用什么对象从后台向前台传递数据的?
Mybatis 中 #{}和 ${}的区别是什么?
Mybatis 有几种分页方式?
Mybatis 逻辑分页和物理分页的区别是什么?
Mybatis 是否支持延迟加载?延迟加载的原理是什么?
说一下 Mybatis 的一级缓存和二级缓存?
Mybatis 和 Hibernate 的区别有哪些?
Mybatis 有哪些执行器(Executor)?
Mybatis 分页插件的实现原理是什么?
Redis 是什么?Redis 有哪些功能?都有哪些使用场景?
Redis 为什么是单线程的?
Redis 支持的数据类型有哪些?
什么是缓存雪崩?该如何解决?
什么是缓存穿透?怎么解决?
怎么保证缓存和数据库数据的一致性?
Redis 持久化有几种方式?
Redis 怎么实现分布式锁?Redis 分布式锁有什么缺陷?
Redis 淘汰策略有哪些?
redis 常见的性能问题有哪些?该如何解决?
消息队列的主要作用?
消息队列的优缺点?
如何保证消息队列的高可用?
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
如何保证消息的顺序性?
如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
如果让你写一个消息队列,该如何进行架构设计?说一下你的思路
RabbitMQ 有哪些重要的角色?有哪些重要的组件?
RabbitMQ 怎么避免消息丢失?
要保证消息持久化成功的条件有哪些?
RabbitMQ 有几种广播类型?
RabbitMQ 怎么实现延迟消息队列?
Kafka 可以脱离 zookeeper 单独使用吗?为什么?
Kafka 有几种数据保留的策略?
zookeeper 都有哪些功能?
zookeeper 有几种部署模式?
集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
zookeeper 怎么保证主从节点的状态同步?
集群中为什么要有主节点?
说一下 zookeeper 的通知机制?
说一下两阶段提交和三阶段提交的过程?分别有什么问题?
你认为几阶段提交可以实现可靠事务?
如何使用 zookeeper 实现分布式锁?
Dubbo 的组件有哪些?作用是什么?
Dubbo 的集群容错模式有哪些?
Dubbo 中 zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?
Dubbo 连接注册中心和直连的区别?
Dubbo 协议为什么要消费者比提供者个数多?
Dubbo 协议为什么不能传大包?
Dubbo 协议为什么采用异步单一长连接?
Dubbo 支持哪些序列化协议?说一下 Hession 的数据结构?
分布式服务接口的幂等性如何设计?
分布式服务接口请求的顺序性如何保证?
谈一下你对 CAP 的认识?
什么是 Base 理论?
两阶段提交和三阶段提交的过程?两阶段提交有什么问题?三阶段提交有什么问题?
分布式事务常用的解决方案有哪些?
说一下你对 TCC 模式的理解?
Paxos 算法
说一下你对 ZAB 协议的理解?
什么是分布式锁?
分布式锁应该具备哪些功能?
分布式锁的实现方式有哪些?
1、数组
找出数组中出现次数大于数组长度一半和 N / K 的数
数组的奇偶位置问题:给定一个整型数组,请在原地调整这个数组,保证要么偶数位置上都是偶数,或者奇数位置上都是奇数。
调整数组顺序使奇数位于偶数前面
数组的度
求一个数组中的第 K 小 / 大的数
将一个整数数组划分为 K 个相等的子集问题
旋转数组中的最小数字
在二维数组中查找一个数
找出数组中重复的数字
找出数组中只出现一次的那个数,其他都出现两次
子数组最大累乘积:给定一个 double 类型的数组 arr,其中的元素可正、可负、可 0,返回子数组累乘的最大乘积。
需要排序的最短子数组长度
最长的可整合子数组的长度
最短无序连续子数组
连续子数组的最大和
2、字符串
字符串的排列与组合
最长回文子串
正则表达式匹配:实现一个函数用来匹配包括'.'和'*'的正则表达式
替换空格
字符串的翻转和旋转及其应用
字符串解码
无重复字符的最长子串
字符串的最长公共子串和最长公共子序列
请实现一个函数用来判断字符串是否表示数值
判断一个字符串是否是一个合法的
3、哈希表
手写一个简单的 HashMap
和为 K 的子数组:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数
一种接收消息并按顺序打印的结构设计
哈希表增加 setAll 功能
4、栈
用固定大小的数组实现栈
如何仅用队列实现栈
最小值栈:能够返回栈中最小元素的栈
栈的压入、弹出序列:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序
单调栈结构的实现
直方图中的最大矩形面积
求最大子矩阵的大小
可见山峰问题
5、队列
用固定大小的数组实现队列
如何仅用栈结构实现队列
6、链表
反转单向链表
反转双向链表
K 个一组翻转链表
合并两个排序的链表
链表中倒数第 K 个节点
O(1) 时间内删除一个节点
删除链表中重复的节点
从尾到头打印链表
判断一个链表是否为回文结构
给出两个有序链表的头结点,打印出两个链表中相同的元素
将单向链表按某值划分成左边小、中间相等、右边大的形式
复制含有随机指针节点的链表
两个单链表相交的一系列问题
链表中环的入口节点
复杂链表的复制
7、树
二叉树的前序、中序、后序遍历的递归实现
二叉树的前序、中序、后序遍历的非递归实现
二叉树的层序遍历
Morris 遍历二叉树:前序、中序、后序
输入一个数组,判断是不是二叉搜索树的后序遍历序列
二叉树的序列化:前序、层序
反序列化:怎么序列化的就怎么反序列化
在二叉树中找一个节点的后继节点
判断一棵树是否是完全二叉树
判断一棵树是否是搜索二叉树
判断一棵树是否是平衡二叉树
判断一棵树是否是对称的二叉树
二叉树的镜像
树的子结构:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构
合并二叉树
二叉树中和为某一值的路径
重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树
求一棵完全二叉树的节点个数,时间复杂度低于O(N)
找二叉树左下角的值
把二叉搜索树转换为累加树
舞会的最大活跃度
求一棵二叉树中最大二叉搜索子树的节点个数
求一个二叉树的最远距离
二叉树的最大路径和
8、图
深度优先搜索
广度优先搜索
拓扑排序
9、数字与位运算
两数之和、三数之和
大数问题:大数相加和大数相乘问题 + Karatsuba 算法
打印从 1 到最大的 n 位数:需要考虑大数问题
数值的整数次方
二进制中 1 的个数
10、排序的应用
求一个数组中的第 K 小 / 大的数
最小的 K 个数
求一个数组中的逆序对数问题
小和问题:把数组中每一个数左边比当前数小的累加起来,叫着这个数组的小和
11、矩阵问题
顺时针打印矩阵
将一个正方形旋转90度
之字型打印矩阵
在一个行和列都有序的 m 行 n 列的矩阵中查找一个数是否存在
12、递归
求 n! 的结果
汉诺塔问题
打印一个字符串的全部子序列,包括空字符串
打印一个字符串的全排列
母牛问题:母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设不会死。求 N 年后,母牛的数量
机器人走路问题
给定一个数字组成的字符串,返回有多少种合法的 IPV4 组合
13、动态规划
机器人走路问题
给定一个数字组成的字符串,返回有多少种合法的 IPV4 组合
矩阵最小路径问题:二维数组从左上角走到右下角的最短距离
剪绳子:剪成 m 段,最大乘积问题
数组中任意数累加得到目标值
14、贪心算法
按最低字典序拼接字符串
切分金条总代价最小
最多做 K 个项目的最大利润
安排最多的宣讲场次
15、回溯算法
机器人的运动范围
16、经典结构
单调栈结构
滑动窗口结构
滑动窗口结构的实现
生成窗口最大值数组
求一个数组中最大值减去最小值小于或等于 num 的子数组数量(要求O(N))
17、经典算法
蓄水池算法:解决等概率问题
Manacher 算法:解决回文串问题
KMP 算法:解决字符串匹配问题
BRPRT 算法:解决第 k 大数问题
单例模式:懒汉+恶汉+静态内部类+双重校验锁
生产者消费者模式:wait/notify 、BlockingQueue 实现
多个线程交替打印:锁、信号量 Semaphore 实现
18、其他
二叉搜索树与双向链表:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
数据流中的中位数:两个堆实现:最大堆和最小堆
上诉算法题目的详解:https://blog.csdn.net/pcwl1206/article/details/97390314
如果想要获取详细的答案版高频面试题可加微信:pcwl_Java,备注:面试题。