上一篇文章分享了我的 Java 转行之路,本文主要分享 Java 后端面试高频题目,重要程度按照背景颜色进行区分。由于个人水平有限,如若文章中有错误之处,敬请指正。
本文按照我平时复习的模块进行题目划分,由于题目较多,未贴出答案。如果想要答案版资料,可加我的微信(微信号:pcwl_Java),备注:面试题。
第一篇: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 中的 (-1.5) 等于多少?
-
两个数的异或结果是什么?
-
error 和 exception 的区别?
-
throw 和 throws 的区别?
-
常见的异常类有哪些?
-
运行时异常与受检异常有何异同?
-
主线程可以捕获到子线程的异常吗?
-
Java 的泛型是如何工作的 ? 什么是类型擦除 ?
-
什么是泛型中的限定通配符和非限定通配符 ?
-
List<? extends T> 和 List <? super T> 之间有什么区别 ?
-
如何实现对象的克隆?
-
深克隆和浅克隆的区别?
-
什么是 Java 的序列化,如何实现 Java 的序列化?
-
Java 中的反射是什么意思?有哪些应用场景?
-
反射的优缺点?
-
Java 中的动态代理是什么?有哪些应用?
-
怎么实现动态代理?
-
Java 中的 IO 流的分类?说出几个你熟悉的实现类?
-
字节流和字符流有什么区别?
-
BIO、NIO、AIO 有什么区别?
二、Java集合类
-
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 有什么区别?
三、Java并发
-
并行和并发有什么区别?
-
线程和进程的区别?
-
守护线程是什么?
-
创建线程的几种方式?
-
runnable 和 callable 有什么区别?
-
线程状态及转换?
-
sleep() 和 wait() 的区别?
-
线程的 run() 和 start() 有什么区别?
-
在 Java 程序中怎么保证多线程的运行安全?
-
Java 线程同步的几种方法?
-
() 方法的工作原理是什么?
-
谈谈对 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 的理解?分别有哪些实现类?
四、Java虚拟机
-
说一下 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 中用到了哪些设计模式?
八、MySQL
-
手写/口述场景题的 SQL 语句
-
一条 SQL 语句在数据库框架中的执行流程?
-
数据库的三范式是什么?
-
MySQL 中的数据类型有哪些?
-
char 和 varchar 的区别?
-
谈谈你对索引的理解?底层数据结构?
-
为什么要使用索引?一定要使用索引吗?
-
为什么索引的底层数据结构采用 B+ 树而不是红黑树?
-
索引的类型?
-
什么叫聚簇索引?什么叫联合索引?
-
谈下什么是前缀索引?
-
谈下什么是覆盖索引?
-
什么情况下索引会失效?即查询不走索引?
-
查询性能的优化方法?
-
InnoDB 和 MyISAM 的比较?
-
为什么要分库分表?分库分表后,主键 ID 怎么设置?
-
水平切分和垂直切分该如何选择?存在什么问题?
-
主从复制中涉及到哪三个线程?
-
如何实现 MySQL 的读写分离?
-
MySQL 的主从复制原理是什么?如何解决 MySQL 主从同步延迟问题?
-
谈下你对读写分离的理解?
-
谈下你对数据库事务的理解?不同隔离级别下会产生什么问题?怎么解决?
-
MySQL 默认的隔离级别是什么?
-
MVCC 的实现原理是什么?
-
数据库中常用的锁有哪些?
-
表锁和行锁有什么区别?
-
InnoDB 什么时候使用行级锁?什么时候使用表级锁?
-
InnoDB 存储引擎的锁的 3 种算法?
-
MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?
九、Spring
-
AOP 的代理有哪几种方式?
-
怎么实现 JDK 动态代理?
-
AOP 的基本概念:切面、连接点、切入点等?
-
谈谈你对 IOC 的理解?
-
Bean 的生命周期?
-
Bean 的作用域?
-
Spring 中的单例 Bean 的线程安全问题了解吗?
-
谈谈你对 Spring 中的事物的理解?
-
Spring 中的事务隔离级别?
-
Spring 中的事物传播行为?
-
Spring 常用的注入方式有哪些?
-
Spring 框架中用到了哪些设计模式?
十、SpringMVC
-
谈谈你对 MVC 模式的理解?
-
SpringMVC 的工作原理/执行流程?
-
SpringMVC 的重要组件有哪些?
-
谈谈你对 DispatcherServlet 的源码理解?
-
SpringMVC 常用的注解有哪些?
-
SpringMVC 怎么样设定重定向和转发的?
-
如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
-
SpringMVC 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
-
SpringMVC 里面拦截器是怎么写的?
-
SpringMVC 用什么对象从后台向前台传递数据的?
十一、MyBatis
-
Mybatis 中 #{}和 ${}的区别是什么?
-
Mybatis 有几种分页方式?
-
Mybatis 逻辑分页和物理分页的区别是什么?
-
Mybatis 是否支持延迟加载?延迟加载的原理是什么?
-
说一下 Mybatis 的一级缓存和二级缓存?
-
Mybatis 和 Hibernate 的区别有哪些?
-
Mybatis 有哪些执行器(Executor)?
-
Mybatis 分页插件的实现原理是什么?
十二、Redis
-
Redis 是什么?Redis 有哪些功能?都有哪些使用场景?
-
Redis 为什么是单线程的?
-
Redis 支持的数据类型有哪些?
-
什么是缓存雪崩?该如何解决?
-
什么是缓存穿透?怎么解决?
-
怎么保证缓存和数据库数据的一致性?
-
Redis 持久化有几种方式?
-
Redis 怎么实现分布式锁?Redis 分布式锁有什么缺陷?
-
Redis 淘汰策略有哪些?
-
redis 常见的性能问题有哪些?该如何解决?
十三、消息队列
-
消息队列的主要作用?
-
消息队列的优缺点?
-
如何保证消息队列的高可用?
-
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
-
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
-
如何保证消息的顺序性?
-
如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
-
如果让你写一个消息队列,该如何进行架构设计?说一下你的思路
-
RabbitMQ 有哪些重要的角色?有哪些重要的组件?
-
RabbitMQ 怎么避免消息丢失?
-
要保证消息持久化成功的条件有哪些?
-
RabbitMQ 有几种广播类型?
-
RabbitMQ 怎么实现延迟消息队列?
-
Kafka 可以脱离 zookeeper 单独使用吗?为什么?
-
Kafka 有几种数据保留的策略?
十四、Zookeeper
-
zookeeper 都有哪些功能?
-
zookeeper 有几种部署模式?
-
集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
-
zookeeper 怎么保证主从节点的状态同步?
-
集群中为什么要有主节点?
-
说一下 zookeeper 的通知机制?
-
说一下两阶段提交和三阶段提交的过程?分别有什么问题?
-
你认为几阶段提交可以实现可靠事务?
-
如何使用 zookeeper 实现分布式锁?
十五、Dubbo
-
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、其他
-
二叉搜索树与双向链表:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
-
数据流中的中位数:两个堆实现:最大堆和最小堆
上诉算法题目的详解:/pcwl1206/article/details/97390314
如果想要获取详细的答案版高频面试题可加微信:pcwl_Java,备注:面试题。