写点什么

采访 236 位第一批秋招上岸的同学后,我整理了这份 Java 面试手册

作者:收到请回复
  • 2022 年 8 月 27 日
    湖南
  • 本文字数:6235 字

    阅读完需:约 20 分钟

采访236位第一批秋招上岸的同学后,我整理了这份Java面试手册
不知不觉又是一年秋招了,现在已入八月,快的人甚至已经成功上岸了,当然时间还有的是,大部分同学也都还在准备中。

入行这么些年,每年都会有很多读者或者朋友跟我诉苦,无非都是觉得自己技术还不错,就是面试发挥总是不理想云云,其实仔细想想也不奇怪,就跟上学时每个班想必都有一两个同学平时学习扎实,考试时成绩却总是不上不下。

同理,技术好不代表面试表现好,面试表现不好,自然得不到好的工作机会,所以想拿到好的 offer 除了平时夯实基础外一些面试准备也很重要,应广大读者要求,我整理了一下今年各厂面试的一些高频题,希望对大家能有一些帮助。

篇幅所限,这里只贴下题目,完整的权威答案我整理成一份文档了,会放在文末,需要的同学翻到文末直接下载就行

一、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 道


1. finally 块中的代码什么时候被执行?

2. finally 是不是一定会被执行到?

3. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

4. try-catch-finally 中那个部分可以省略?

5. Error 和 Exception 的区别?

6. 运行时异常与受检异常有何异同?

7. throw 和 throws 的区别?

8. 常见的异常类有哪些?

9. 主线程可以捕获到子线程的异常吗?


三、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 道


1. 说一下 Jvm 的主要组成部分?及其作用?

2. 谈谈对运行时数据区的理解?

3. 堆和栈的区别是什么?

4. 堆中存什么?栈中存什么?

5. 为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?

6. Java 中的参数传递时传值呢?还是传引用?

7. Java 对象的大小是怎么计算的?

8. 对象的访问定位的两种方式?

9. 判断垃圾可以回收的方法有哪些?

10. 垃圾回收是从哪里开始的呢?

11. 被标记为垃圾的对象一定会被回收吗?

12. 谈谈对 Java 中引用的了解?

13. 谈谈对内存泄漏的理解?

14. 内存泄露的根本原因是什么?

15. 举几个可能发生内存泄漏的情况?

16. 尽量避免内存泄漏的方法?

17. 常用的垃圾收集算法有哪些?

18. 为什么要采用分代收集算法?

19. 分代收集下的年轻代和老年代应该采用什么样的垃圾回收算法?

20. 什么是浮动垃圾?

21. 什么是内存碎片?如何解决?

22. 常用的垃圾收集器有哪些?

23. 谈谈你对 CMS 垃圾收集器的理解?

24. 谈谈你对 G1 收集器的理解?

25. 说下你对垃圾回收策略的理解/垃圾回收时机?

26. 谈谈你对内存分配的理解?大对象怎么分配?空间分配担保?

27. 说下你用过的 JVM 监控工具?

28. 如何利用监控工具调优?

29. JVM 的一些参数?

30. 谈谈你对类文件结构的理解?有哪些部分组成?

31. 谈谈你对类加载机制的了解?

32. 类加载各阶段的作用分别是什么?

33. 有哪些类加载器?分别有什么作用?

34. 类与类加载器的关系?

35. 谈谈你对双亲委派模型的理解?工作过程?为什么要使用

36. 怎么实现一个自定义的类加载器?需要注意什么?

37. 怎么打破双亲委派模型?

38. 有哪些实际场景是需要打破双亲委派模型的?

39. 谈谈你对编译期优化和运行期优化的理解?

40. 为何 HotSpot 虚拟机要使用解释器与编译器并存的架构?

41. 说下你对 Java 内存模型的理解?

42. 内存间的交互操作有哪些?需要满足什么规则?


六、SSM 框架 37 道


1. 使用 Spring 框架的好处是什么?

2. 解释下什么是 AOP?

3. AOP 的代理有哪几种方式?

4. 怎么实现 JDK 动态代理?

5. AOP 的基本概念:切面、连接点、切入点等?

6. 通知类型(Advice)型(Advice)有哪些?

7. 谈谈你对 IOC 的理解?

8. Bean 的生命周期?

9. Bean 的作用域?

10. Spring 中的单例 Bean 的线程安全问题了解吗?

11. 谈谈你对 Spring 中的事物的理解?

12. Spring 中的事务隔离级别?

13. Spring 中的事物传播行为?

14. Spring 常用的注入方式有哪些?

15. Spring 框架中用到了哪些设计模式?

16. ApplicationContext 通常的实现有哪些?

17. 谈谈你对 MVC 模式的理解?

18. SpringMVC 的工作原理/执行流程?

19. SpringMVC 的核心组件有哪些?

20. SpringMVC 常用的注解有哪些?

21. @RequestMapping 的作用是什么?

22. 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?

23. SpringMVC 的控制器是不是单例模式,如果是会有什么问题,怎么解决?

24. SpringMVC 怎么样设定重定向和转发的?

25. SpringMVC 里面拦截器是怎么写的?

26. SpringMVC 和 Struts2 的区别有哪些?

27. 谈谈你对 MyBatis 的理解?

28. MyBaits 的优缺点有哪些?

29. MyBatis 与 Hibernate 有哪些不同?

30. MyBatis 中 #{} 和 ${}的区别是什么?

31. MyBatis 是如何进行分页的?分页插件的原理是什么?

32. MyBatis 有几种分页方式?

33. MyBatis 逻辑分页和物理分页的区别是什么?

34. MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?

35. 说一下 MyBatis 的一级缓存和二级缓存?

36. Mybatis 有哪些执行器(Executor)?

37. MyBatis 动态 SQL 是做什么的?都有哪些动态 SQL?能简述一下动态 SQL 的执行原理不?



七、MySQL 31 道


1. 请说下你对 MySQL 架构的了解?

2. 一条 SQL 语句在数据库框架中的执行流程?

3. 数据库的三范式是什么?

4. char 和 varchar 的区别?

5. varchar(10) 和 varchar(20) 的区别?

6. 谈谈你对索引的理解?

7. 索引的底层使用的是什么数据结构?

8. 谈谈你对 B+ 树的理解?

9. 为什么 InnoDB 存储引擎选用 B+ 树而不是 B 树呢?

10. 谈谈你对聚簇索引的理解?

11. 谈谈你对哈希索引的理解?

12. 谈谈你对覆盖索引的认识?

13. 索引的分类?

14. 谈谈你对最左前缀原则的理解?

15. 怎么知道创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?

16. 什么情况下索引会失效?即查询不走索引?

17. 查询性能的优化方法?

18. InnoDB 和 MyISAM 的比较?

19. 谈谈你对水平切分和垂直切分的理解?

20. 主从复制中涉及到哪三个线程?

21. 主从同步的延迟原因及解决办法?

22. 谈谈你对数据库读写分离的理解?

23. 请你描述下事务的特性?

24. 谈谈你对事务隔离级别的理解?

25. 解释下什么叫脏读、不可重复读和幻读?

26. MySQL 默认的隔离级别是什么?

27. 谈谈你对 MVCC 的了解?

28. 说一下 MySQL 的行锁和表锁?

29. InnoDB 存储引擎的锁的算法有哪些?

30. MySQL 问题排查都有哪些手段?

31. MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?


八、Redis 12 道


1. 谈下你对 Redis 的了解?

2. Redis 一般都有哪些使用场景?

3. Redis 有哪些常见的功能?

4. Redis 支持的数据类型有哪些?

5. Redis 为什么这么快?

6. 什么是缓存穿透?怎么解决?

7. 什么是缓存雪崩?该如何解决?

8. 怎么保证缓存和数据库数据的一致性?

9. Redis 持久化有几种方式?

10. Redis 怎么实现分布式锁?

11. Redis 淘汰策略有哪些?

12. Redis 常见性能问题和解决方案?


九、计算机网络 45 道


1. 为什么需要三次握手?两次不行?

2. 为什么需要四次挥手?三次不行?

3. TCP 与 UDP 有哪些区别?各自应用场景?

4. HTTP1.0,1.1,2.0 的版本区别

5. POST 和 GET 有哪些区别?各自应用场景?

6. HTTP 哪些常用的状态码及使用场景?

7. HTTP 状态码 301 和 302 的区别,都有哪些用途?

8. 在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?

9. HTTP 如何实现长连接?在什么时候会超时?

10. TCP 如何保证有效传输及拥塞控制原理

11. IP 地址有哪些分类?

12. GET 请求中 URL 编码的意义

13. 什么是 SQL 注入?举个例子?

14. 谈一谈 XSS 攻击,举个例子?

15. 讲一下网络五层模型,每一层的职责?

16. 简单说下 HTTPS 和 HTTP 的区别

17. 对称加密与非对称加密的区别

18. 简单说下每一层对应的网络协议有哪些?

19. ARP 协议的工作原理?

20. TCP 的主要特点是什么?

21. UDP 的主要特点是什么?

22. TCP 和 UDP 分别对应的常见应用层协议有哪些?

23. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

24. 保活计时器的作用?

25. TCP 协议是如何保证可靠传输的?

26. 谈谈你对停止等待协议的理解?

27. 谈谈你对 ARQ 协议的理解?

28. 谈谈你对滑动窗口的了解?

29. 谈下你对流量控制的理解?

30. 谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

31. 什么是粘包?

32. TCP 黏包是怎么产生的?

33. 怎么解决拆包和粘包?

34. forward 和 redirect 的区别?

35. HTTP 方法有哪些?

36. 在浏览器中输入 URL 地址到显示主页的过程?

37. DNS 的解析过程?

38. 谈谈你对域名缓存的了解?

39. 谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?

40. HTTPS 的工作过程?

41. HTTP 和 HTTPS 的区别?

42. HTTPS 的优缺点?

43. 什么是数字签名?

44. 什么是数字证书?

45. Cookie 和 Session 有什么区别?


十、操作系统 32 道


1. 简单说下你对并发和并行的理解?

2. 同步、异步、阻塞、非阻塞的概念

3. 进程和线程的基本概念

4. 进程与线程的区别?

5. 为什么有了进程,还要有线程呢?

6. 进程的状态转换

7. 进程间的通信方式有哪些?

8. 进程的调度算法有哪些?

9. 什么是死锁?

10. 产生死锁的原因?

11. 死锁产生的必要条件?

12. 解决死锁的基本方法?

13. 怎么预防死锁?

14. 怎么避免死锁?

15. 怎么解除死锁?

16. 什么是缓冲区溢出?有什么危害?

17. 分页与分段的区别?

18. 物理地址、逻辑地址、虚拟内存的概念

19. 页面置换算法有哪些?

20. 谈谈你对动态链接库和静态链接库的理解?

21. 外中断和异常有什么区别?

22. 一个程序从开始运行到结束的完整过程,你能说出来多少?

23. 什么是用户态和内核态

24. 用户态和内核态是如何切换的?

25. 进程终止的方式

26. 守护进程、僵尸进程和孤儿进程

27. 如何避免僵尸进程?

28. 介绍一下几种典型的锁?

29. 常见内存分配内存错误

30. 内存交换中,被换出的进程保存在哪里?

31. 原子操作的是如何实现的

32. 抖动你知道是什么吗?它也叫颠簸现象


十一、消息队列与分布式 26 道


1. 消息队列的基本作用?

2. 消息队列的优缺点有哪些?

3. 如何保证消息队列的高可用?

4. 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

5. 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

6. 如何保证消息的顺序性?

7. 大量消息在 MQ 里长时间积压,该如何解决?

8. MQ 中的消息过期失效了怎么办?

9. RabbitMQ 有哪些重要的角色?

10. RabbitMQ 有哪些重要的组件?

11. RabbitMQ 有几种广播类型?

12. Kafka 可以脱离 zookeeper 单独使用吗?为什么?

13. Kafka 有几种数据保留的策略?

14. Kafka 的分区策略有哪些?

15. 谈下你对 Zookeeper 的认识?

16. Zookeeper 都有哪些功能?

17. 谈下你对 ZAB 协议的了解?

18. Zookeeper 怎么保证主从节点的状态同步?

19. Zookeeper 有几种部署模式?

20. 说一下 Zookeeper 的通知机制?

21. 集群中为什么要有主节点?

22. 集群中有 3 台服务器,其中一个节点宕机,这个时候 Zookeeper 还可以使用吗?

23. 说一下两阶段提交和三阶段提交的过程?分别有什么问题?

24. Zookeeper 宕机如何处理?

25. 说下四种类型的数据节点 Znode?

26. Zookeeper 和 Dubbo 的关系?



好了,本文就写到这了,上述所有题目的答案我都整理成 PDF 了


需要的同学【戳此处】即可下载!

用户头像

加V:mxj94670 获取文中Java文档和面试资料 2021.06.08 加入

还未添加个人简介

评论

发布
暂无评论
采访236位第一批秋招上岸的同学后,我整理了这份Java面试手册_Java_收到请回复_InfoQ写作社区