前言:

很多人都在紧张的准备着2021的跳槽面试,今天笔者也给大家分享一些高频面试题,希望可以帮助到有需要的人,不会做不要着急哦,文末本文有答案领取,按照我平时复习的模块进行题目划分,由于题目较多,文未贴出答案。

一、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集合类

  • 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 线程同步的几种方法?
  • 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 的理解?分别有哪些实现类?

四、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)
  • 找二叉树左下角的值
  • 把二叉搜索树转换为累加树
  • 舞会的最大活跃度
  • 求一棵二叉树中最大二叉搜索子树的节点个数
  • 求一个二叉树的最远距离
  • 二叉树的最大路径和

读者福利:

不会做没关系哦,整理了一份带详细答案的面试文档资料,pdf可分享给大家,希望各位需要面试跳槽的朋友都可以顺利面上自己想去的公司

需要获取得话麻烦一键三连之后看下图小助理的微信:(bjmsb10)添加即可免费获取到哦