不知不觉又是一年秋招了,现在已入八月,快的人甚至已经成功上岸了,当然时间还有的是,大部分同学也都还在准备中。
入行这么些年,每年都会有很多读者或者朋友跟我诉苦,无非都是觉得自己技术还不错,就是面试发挥总是不理想云云,其实仔细想想也不奇怪,就跟上学时每个班想必都有一两个同学平时学习扎实,考试时成绩却总是不上不下。
同理,技术好不代表面试表现好,面试表现不好,自然得不到好的工作机会,所以想拿到好的offer除了平时夯实基础外一些面试准备也很重要,应广大读者要求,我整理了一下今年各厂面试的一些高频题,希望对大家能有一些帮助。
今天给大家分享的就是这本《国内大厂最牛的Java面试八股文合集(全彩版)》,由于内容篇幅过多,下面会给大家展示一下其中的部分内容!
一、Java基础 44 道
- 八种基本数据类型的大小,以及他们的封装类
- 引用数据类型
- Switch能否用string做参数
- equals与==的区别
- 自动装箱,常量池
- Object有哪些公用方法
- Java的四种引用,强弱软虚,用到的场景
- Hashcode的作用
- HashMap的hashcode的作用
- 为什么重载hashCode方法?
- ArrayList、LinkedList、Vector的区别
- String、StringBuffer与StringBuilder的区别
- Map、Set、List、Queue、Stack的特点与用法
- HashMap和HashTable的区别
- JDK7与JDK8中HashMap的实现
- HashMap和ConcurrentHashMap的区别,HashMap的底层源码
- ConcurrentHashMap能完全替代HashTable吗
- 为什么HashMap是线程不安全的
- 如何线程安全的使用HashMap
- 多并发情况下HashMap是否还会产生死循环
- TreeMap、HashMap、LindedHashMap的区别
- Collection包结构,与Collections的区别
- try?catch?finally,try里有return,finally还执行么
- Excption与Error包结构,OOM你遇到过哪些情况,SOF你遇到过哪些情况
- Java(OOP)面向对象的三个特征与含义
- Override和Overload的含义去区别
- Interface与abstract类的区别
- Static?class?与non?static?class的区别
- java多态的实现原理
- foreach与正常for循环效率对比
- Java?IO与NIO
- java反射的作用于原理
- 泛型常用特点
- 解析XML的几种方式的原理与特点:DOM、SAX
- Java1.7与1.8,1.9,10 新特性
- 设计模式:单例、工厂、适配器、责任链、观察者等等
- JNI的使用
- AOP是什么
- OOP是什么
- AOP与OOP的区别
二、Java异常 9 道
-
finally 块中的代码什么时候被执行?
-
finally 是不是一定会被执行到?
-
try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
-
try-catch-finally 中那个部分可以省略?
-
Error 和 Exception 的区别?
-
运行时异常与受检异常有何异同?
-
throw 和 throws 的区别?
-
常见的异常类有哪些?
-
主线程可以捕获到子线程的异常吗?
三、Java集合 30 道
1.说说Java中常用的容器有哪些?
2.详细说说 Arraylist 和 LinkedList的区别?
3.ArrayList实现 RandomAccess接口有何作用?
4.说一说Vector 和 ArrayList 的区别?
5.说说ArrayList 的扩容机制?
6.Array和ArrayList有何区别?
7.遍历一个List有哪些不同的方式?
8.comparable和comparator的区别?
9.Collection和Collections有什么区别?
10.说一下PriorityQueue?
11.说一下HashSet的实现原理?
12.HashMap的实现原理/底层数据结构?
13.HashMap 的长度为什么是 2 的幂次方?
14.说说HashMap的put方法执行流程?
15.说说HashMap的get方法执行流程?
16.说说HashMap的resize方法执行过程?
17.HashMap什么时候会树化?
18.HashMap底层为什么选择红黑树而不用其他树,比如二叉查找树?
19.HashMap扩容(加载)因子为何默认是 0.75f?
20.HashMap怎么计算 key 的 hash 值的?
21.HashMap是怎么解决哈希冲突的?
22.HashMap多线程操作导致死循环问题知道吗?
23.说说LinkedHashMap 的实现原理?
24.说说HashMap 和 HashSet 区别?
25.说下HashMap 和 Hashtable 的区别?
26.说一下HashMap 和 TreeMap 区别?
27.为什么HashMap中String、Integer这样的包装类适合作为Key?
28.说一下Queue 与 Deque 的区别?
29.说说ArrayDeque 与 LinkedList 的区别?
30.说一下 HashSet、LinkedHashSet 和 TreeSet 三者的异同?
四、Java并发 48 道
1、并发编程三要素?
2、实现可见性的方法有哪些?
3、多线程的价值?
4、创建线程的有哪些方式?
5、创建线程的三种方式的对比?
6、线程的状态流转图
7、Java 线程具有五中基本状态
8、什么是线程池?有哪几种创建方式?
9、四种线程池的创建:
10、线程池的优点?
11、常用的并发工具类有哪些?
12、CyclicBarrier 和 CountDownLatch 的区别
13、synchronized 的作用?
14、volatile 关键字的作用
15、什么是 CAS
16、CAS 的问题
17、什么是 Future?
18、什么是 AQS
19、AQS 支持两种同步方式:
20、ReadWriteLock 是什么
21、FutureTask 是什么
22、synchronized 和 ReentrantLock 的区别
23、什么是乐观锁和悲观锁
24、线程 B 怎么知道线程 A 修改了变量
25、synchronized、volatile、CAS 比较
26、sleep 方法和 wait 方法有什么区别?
27、ThreadLocal 是什么?有什么用?
28、为什么 wait()方法和 notify()/notifyAll()方法要在同步块中被调用
29、多线程同步有哪几种方法?
30、线程的调度策略
31、ConcurrentHashMap 的并发度是什么
32、Linux 环境下如何查找哪个线程使用 CPU 最长
33、Java 死锁以及如何避免?
34、死锁的原因
35、怎么唤醒一个阻塞的线程
36、不可变对象对多线程有什么帮助
37、什么是多线程的上下文切换
38、如果你提交任务时,线程池队列已满,这时会发生什么
39、Java 中用到的线程调度算法是什么
40 、 什 么 是 线 程 调 度 器 (Thread Scheduler) 和 时 间 分 片 (TimeSlicing)?
41、什么是自旋
42、Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
43、单例模式的线程安全性
44、Semaphore 有什么作用
45、Executors 类是什么?
46、线程类的构造方法、静态块是被哪个线程调用的
47、同步方法和同步块,哪个是更好的选择?
48、Java 线程数过多会造成什么异常?
五、Java JVM 42 道
-
说一下 Jvm 的主要组成部分?及其作用?
-
谈谈对运行时数据区的理解?
-
堆和栈的区别是什么?
-
堆中存什么?栈中存什么?
-
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
-
Java 中的参数传递时传值呢?还是传引用?
-
Java 对象的大小是怎么计算的?
-
对象的访问定位的两种方式?
-
判断垃圾可以回收的方法有哪些?
-
垃圾回收是从哪里开始的呢?
-
被标记为垃圾的对象一定会被回收吗?
-
谈谈对 Java 中引用的了解?
-
谈谈对内存泄漏的理解?
-
内存泄露的根本原因是什么?
-
举几个可能发生内存泄漏的情况?
-
尽量避免内存泄漏的方法?
-
常用的垃圾收集算法有哪些?
-
为什么要采用分代收集算法?
-
分代收集下的年轻代和老年代应该采用什么样的垃圾回收算法?
-
什么是浮动垃圾?
-
什么是内存碎片?如何解决?
-
常用的垃圾收集器有哪些?
-
谈谈你对 CMS 垃圾收集器的理解?
-
谈谈你对 G1 收集器的理解?
-
说下你对垃圾回收策略的理解/垃圾回收时机?
-
谈谈你对内存分配的理解?大对象怎么分配?空间分配担保?
-
说下你用过的 JVM 监控工具?
-
如何利用监控工具调优?
-
JVM 的一些参数?
-
谈谈你对类文件结构的理解?有哪些部分组成?
-
谈谈你对类加载机制的了解?
-
类加载各阶段的作用分别是什么?
-
有哪些类加载器?分别有什么作用?
-
类与类加载器的关系?
-
谈谈你对双亲委派模型的理解?工作过程?为什么要使用
-
怎么实现一个自定义的类加载器?需要注意什么?
-
怎么打破双亲委派模型?
-
有哪些实际场景是需要打破双亲委派模型的?
-
谈谈你对编译期优化和运行期优化的理解?
-
为何 HotSpot 虚拟机要使用解释器与编译器并存的架构?
-
说下你对 Java 内存模型的理解?
-
内存间的交互操作有哪些?需要满足什么规则?
六、SSM框架 37 道
-
使用 Spring 框架的好处是什么?
-
解释下什么是 AOP?
-
AOP 的代理有哪几种方式?
-
怎么实现 JDK 动态代理?
-
AOP 的基本概念:切面、连接点、切入点等?
-
通知类型(Advice)型(Advice)有哪些?
-
谈谈你对 IOC 的理解?
-
Bean 的生命周期?
-
Bean 的作用域?
-
Spring 中的单例 Bean 的线程安全问题了解吗?
-
谈谈你对 Spring 中的事物的理解?
-
Spring 中的事务隔离级别?
-
Spring 中的事物传播行为?
-
Spring 常用的注入方式有哪些?
-
Spring 框架中用到了哪些设计模式?
-
ApplicationContext 通常的实现有哪些?
-
谈谈你对 MVC 模式的理解?
-
SpringMVC 的工作原理/执行流程?
-
SpringMVC 的核心组件有哪些?
-
SpringMVC 常用的注解有哪些?
-
@RequestMapping 的作用是什么?
-
如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
-
SpringMVC 的控制器是不是单例模式,如果是会有什么问题,怎么解决?
-
SpringMVC 怎么样设定重定向和转发的?
-
SpringMVC 里面拦截器是怎么写的?
-
SpringMVC 和 Struts2 的区别有哪些?
-
谈谈你对 MyBatis 的理解?
-
MyBaits 的优缺点有哪些?
-
MyBatis 与 Hibernate 有哪些不同?
-
MyBatis 中 #{} 和 ${}的区别是什么?
-
MyBatis 是如何进行分页的?分页插件的原理是什么?
-
MyBatis 有几种分页方式?
-
MyBatis 逻辑分页和物理分页的区别是什么?
-
MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?
-
说一下 MyBatis 的一级缓存和二级缓存?
-
Mybatis 有哪些执行器(Executor)?
-
MyBatis 动态 SQL 是做什么的?都有哪些动态 SQL?能简述一下动态 SQL的执行原理不?
七、MySQL 31 道
-
请说下你对 MySQL 架构的了解?
-
一条 SQL 语句在数据库框架中的执行流程?
-
数据库的三范式是什么?
-
char 和 varchar 的区别?
-
varchar(10) 和 varchar(20) 的区别?
-
谈谈你对索引的理解?
-
索引的底层使用的是什么数据结构?
-
谈谈你对 B+ 树的理解?
-
为什么 InnoDB 存储引擎选用 B+ 树而不是 B 树呢?
-
谈谈你对聚簇索引的理解?
-
谈谈你对哈希索引的理解?
-
谈谈你对覆盖索引的认识?
-
索引的分类?
-
谈谈你对最左前缀原则的理解?
-
怎么知道创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
-
什么情况下索引会失效?即查询不走索引?
-
查询性能的优化方法?
-
InnoDB 和 MyISAM 的比较?
-
谈谈你对水平切分和垂直切分的理解?
-
主从复制中涉及到哪三个线程?
-
主从同步的延迟原因及解决办法?
-
谈谈你对数据库读写分离的理解?
-
请你描述下事务的特性?
-
谈谈你对事务隔离级别的理解?
-
解释下什么叫脏读、不可重复读和幻读?
-
MySQL 默认的隔离级别是什么?
-
谈谈你对MVCC 的了解?
-
说一下 MySQL 的行锁和表锁?
-
InnoDB 存储引擎的锁的算法有哪些?
-
MySQL 问题排查都有哪些手段?
-
MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?
八、Redis 12 道
-
谈下你对 Redis 的了解?
-
Redis 一般都有哪些使用场景?
-
Redis 有哪些常见的功能?
-
Redis 支持的数据类型有哪些?
-
Redis 为什么这么快?
-
什么是缓存穿透?怎么解决?
-
什么是缓存雪崩?该如何解决?
-
怎么保证缓存和数据库数据的一致性?
-
Redis 持久化有几种方式?
-
Redis 怎么实现分布式锁?
-
Redis 淘汰策略有哪些?
-
Redis 常见性能问题和解决方案?
九、计算机网络 45 道
-
为什么需要三次握手?两次不行?
-
为什么需要四次挥手?三次不行?
-
TCP与UDP有哪些区别?各自应用场景?
-
HTTP1.0,1.1,2.0 的版本区别
-
POST和GET有哪些区别?各自应用场景?
-
HTTP 哪些常用的状态码及使用场景?
-
HTTP状态码301和302的区别,都有哪些用途?
-
在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
-
HTTP 如何实现长连接?在什么时候会超时?
-
TCP 如何保证有效传输及拥塞控制原理
-
IP地址有哪些分类?
-
GET请求中URL编码的意义
-
什么是SQL 注入?举个例子?
-
谈一谈 XSS 攻击,举个例子?
-
讲一下网络五层模型,每一层的职责?
-
简单说下 HTTPS 和 HTTP 的区别
-
对称加密与非对称加密的区别
-
简单说下每一层对应的网络协议有哪些?
-
ARP 协议的工作原理?
-
TCP 的主要特点是什么?
-
UDP 的主要特点是什么?
-
TCP 和 UDP 分别对应的常见应用层协议有哪些?
-
为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
-
保活计时器的作用?
-
TCP 协议是如何保证可靠传输的?
-
谈谈你对停止等待协议的理解?
-
谈谈你对 ARQ 协议的理解?
-
谈谈你对滑动窗口的了解?
-
谈下你对流量控制的理解?
-
谈下你对 TCP 拥塞控制的理解?使用了哪些算法?
-
什么是粘包?
-
TCP 黏包是怎么产生的?
-
怎么解决拆包和粘包?
-
forward 和 redirect 的区别?
-
HTTP 方法有哪些?
-
在浏览器中输入 URL 地址到显示主页的过程?
-
DNS 的解析过程?
-
谈谈你对域名缓存的了解?
-
谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
-
HTTPS 的工作过程?
-
HTTP 和 HTTPS 的区别?
-
HTTPS 的优缺点?
-
什么是数字签名?
-
什么是数字证书?
-
Cookie 和 Session 有什么区别?
十、操作系统 32 道
-
简单说下你对并发和并行的理解?
-
同步、异步、阻塞、非阻塞的概念
-
进程和线程的基本概念
-
进程与线程的区别?
-
为什么有了进程,还要有线程呢?
-
进程的状态转换
-
进程间的通信方式有哪些?
-
进程的调度算法有哪些?
-
什么是死锁?
-
产生死锁的原因?
-
死锁产生的必要条件?
-
解决死锁的基本方法?
-
怎么预防死锁?
-
怎么避免死锁?
-
怎么解除死锁?
-
什么是缓冲区溢出?有什么危害?
-
分页与分段的区别?
-
物理地址、逻辑地址、虚拟内存的概念
-
页面置换算法有哪些?
-
谈谈你对动态链接库和静态链接库的理解?
-
外中断和异常有什么区别?
-
一个程序从开始运行到结束的完整过程,你能说出来多少?
-
什么是用户态和内核态
-
用户态和内核态是如何切换的?
-
进程终止的方式
-
守护进程、僵尸进程和孤儿进程
-
如何避免僵尸进程?
-
介绍一下几种典型的锁?
-
常见内存分配内存错误
-
内存交换中,被换出的进程保存在哪里?
-
原子操作的是如何实现的
-
抖动你知道是什么吗?它也叫颠簸现象
十一、消息队列与分布式 26 道
-
消息队列的基本作用?
-
消息队列的优缺点有哪些?
-
如何保证消息队列的高可用?
-
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
-
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
-
如何保证消息的顺序性?
-
大量消息在 MQ 里长时间积压,该如何解决?
-
MQ 中的消息过期失效了怎么办?
-
RabbitMQ 有哪些重要的角色?
-
RabbitMQ 有哪些重要的组件?
-
RabbitMQ 有几种广播类型?
-
Kafka 可以脱离 zookeeper 单独使用吗?为什么?
-
Kafka 有几种数据保留的策略?
-
Kafka 的分区策略有哪些?
-
谈下你对 Zookeeper 的认识?
-
Zookeeper 都有哪些功能?
-
谈下你对 ZAB 协议的了解?
-
Zookeeper 怎么保证主从节点的状态同步?
-
Zookeeper 有几种部署模式?
-
说一下 Zookeeper 的通知机制?
-
集群中为什么要有主节点?
-
集群中有 3 台服务器,其中一个节点宕机,这个时候 Zookeeper 还可以使用吗?
-
说一下两阶段提交和三阶段提交的过程?分别有什么问题?
-
Zookeeper 宕机如何处理?
-
说下四种类型的数据节点 Znode?
-
Zookeeper 和 Dubbo 的关系?
好了,本文就写到这了,上述所有题目的答案我都整理成PDF了
以下提及到的所有的笔记内容、面试题、简历等资料,均可以在公众号【退休程序猿】上免费分享给大家学习