Java技术300+面试题

2022-06-20 20:14:14 浏览数 (3)

一年一度的面试高峰期又来了,技术学习群的很多朋友问我有没有关于Java基础面试题,网上各种面试题没有分类很混乱,无法系统性参考学习。

于是,我就把之前整理的以及我面试过的真题和答案都整理了一份分享给大家。《2022年JAVA面试题大纲(290题)_合集》PDF,  以及9大类Java面试PDF,共计300 面试题!持续更新中.....

后续也会持续根据技术群反馈不端更新,将涵盖内容包括: Java设计模式、Spring系列、MyBatis、Dubbo、Elasticsearch、MySQL等技术栈。


一、Java基础

1、何为编程?

2、什么是Java?

3、jdk1.5之后的三大版本都有哪些?

4、JVM、JRE和JDK的关系

5、什么是跨平台性?原理是什么?

6、Java语言有哪些特点 

7、什么是字节码?采用字节码的最大好处是什么? 

8、什么是Java程序的主类?应用程序和小程序的主类有何不同? 

9、Java应用程序与小程序之间有那些差别? 

10、Java和C 的区别

11、Oracle JDK 和 OpenJDK 的对比 

12、数据类型

13、编码

14、注释

15、访问修饰符

16、运算符

17、关键字

18、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 

19、JDK和JRE的区别是什么? 

20、”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? 

21、是否可以在static环境中访问非static变量? 

22、Java支持的数据类型有哪些?什么是自动拆装箱? 

23、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 

24、Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数? 

25、Java支持多继承么?

26、接口和抽象类的区别是什么?

27、什么是值传递和引用传递? 

28、假设把实例化的数组的变量当成方法参数,当方法执行的时候改变了数组内的元素,那么在方法外,数组元素有发生改变吗? 

29、接口与抽象类有什么区别?

30、我能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗?

31、说出几条 Java 中方法重载的最佳实践?

32、Java 程序是怎样运行的?

33、什么是“依赖注入”和“控制反转”?为什么有人使用?

34、Java 中,Maven 和 ANT 有什么区别?

35、方法区的作用是什么?

36、接口和抽象类有什么区别?

37、原型模式的应用场景

38、Java语言采用何种编码方案?有何特点? 

39、Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)? 

40、Java会存在内存泄漏吗?请简单描述。

41、生产环境服务器变慢,如何诊断处理?

42、解释如何使用WAR文件部署web应用程序?

43、常用的并发工具类有哪些?

44、JDK 和 JRE 有什么区别?

45、你所知道的web服务器有哪些?

46、Java中如何实现序列化,有什么意义?

47、单例模式使用注意事项:

48、请解释Tomcat的默认端口是什么?

49、什么是OOP?

50、为什么HashMap中String、Integer这样的包装类适合作为K?

51、常见的计算机网络协议有那些?

52、一个线程运行时发生异常会怎样?

53、遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么? 

54、StringBuffer,Stringbuilder有什么区别?

55、说一下 JVM 调优的工具?

56、JVM 提供的常用工具

57、SynchronizedMap和ConcurrentHashMap有什么区别?

58、Java有没有goto?

59、JVM怎么判断一个对象是不是要回收?

60、String s = new String(“xyz”);创建了几个字符串对象? 

61、什么是过滤器?怎么创建一个过滤器

62、java 中 IO 流分为几种?

63、你都有哪些手段用来排查内存溢出?

64、JVM 类加载机制

65、怎么打破双亲委派模型?

66、聚集索引与非聚集索引有什么区别?

67、说一下 ArrayList 的优缺点 

68、请解释StackOverflowError和OutOfMemeryError的区别? 

69、什么是方法内联?

70、你对线程优先级的理解是什么? 

71、Java是否需要开发人员回收内存垃圾吗?

72、说说Java 垃圾回收机制

73、volatile 变量和 atomic 变量有什么不同?

74、JVM 内存区域

75、JVM 有哪些运行时内存区域?

76、Spring中Bean的作用域有哪些?

77、String str=”aaa”,与String str=new String(“aaa”)一样吗? 

78、什么是建造者模式

79、你能解释一下里氏替换原则吗? 

80、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?

二、集合

1、Java集合类框架的基本接口有哪些? 

2、为什么集合类没有实现Cloneable和Serializable接口?

3、什么是迭代器(Iterator)?

4、Iterator和ListIterator的区别是什么? 

5、快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? 

6、Java中的HashMap的工作原理是什么? 

7、hashCode()和equals()方法的重要性体现在什么地方? 

8、HashMap和Hashtable有什么区别? 

9、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList? 

10、快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? 

11、ArrayList和LinkedList有什么区别? 

12、Comparable和Comparator接口是干什么的?列出它们的区别。 

13、什么是Java优先级队列(Priority Queue)?

14、你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么? 

15、如何权衡是使用无序的数组还是有序的数组? 

16、Java集合类框架的最佳实践有哪些? 

17、Enumeration接口和Iterator接口的区别有哪些? 

18、HashSet和TreeSet有什么区别?

19、ArrayList 和 LinkedList 的区别是什么? 

20、观察者模式应用场景 

21、Array与ArrayList有什么不一样? 

22、实例化数组后,能不能改变数组长度呢? 

23、ConcurrentHashMap 和 Hashtable 的区别? 

24、什么是TreeMap 

25、HashMap的扩容操作是怎么实现的? 

26、能否使用任何类作为 Map 的 key?

三、多线程

1、什么是ThreadPoolExecutor? 

2、invokedynamic 指令是干什么的? 

3、synchronized、volatile、CAS 比较 

4、Iterator 怎么使用?有什么特点? 

5、被引用的对象就一定能存活吗? 

6、列出一些你常见的运行时异常? 

7、Servlet生命周期内调用的方法过程? 

8、阐述静态变量和实例变量的区别。 

9、类加载器双亲委派模型机制?

10、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰? 

11、Parallel Old 收集器(多线程标记整理算法)

12、对象分配内存是否线程安全? 13、当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?

14、Serial 与 Parallel GC 之间的不同之处?

15、为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里? 

16、redux异步中间件之间的优劣? 

17、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 

18、Hibernate中Session的load和get方法的区别是什么?

19、说一下堆内存中对象的分配的基本策略

20、Java 中如何将字符串转换为整数?

21、Thread 类中的 yield 方法有什么作用?

22、如何在两个线程间共享数据?

23、在一个静态方法内调用一个非静态成员为什么是非法的?

24、设计模式分类

25、为什么wait和notify方法要在同步块中调用?

26、线程和进程区别

27、如何停止一个正在运行的线程?

28、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

29、Java 中你怎样唤醒一个阻塞的线程?

30、多线程同步有哪几种方法?

31、什么是自旋

32、并行和并发有什么区别?

33、哪些集合类是线程安全的?

34、简述synchronized 和java.util.concurrent.locks.Lock的异同? 

35、什么是线程组,为什么在Java中不推荐使用?

36、创建线程的有哪些方式?

37、什么是线程池?

38、线程池的执行原理?

39、假设数组内有5个元素,如果对数组进行反序,该如何做?

40、GC 是什么?为什么要有 GC? 41、你说你做过JVM参数调优和参数配置,请问如何查看JVM系统默认值

42、Java 中怎样将 bytes 转换为 long 类型?

43、如何避免线程死锁

44、生产环境 CPU 占用过高,你如何解决?

45、同步方法和同步块,哪个是更好的选择?

46、自动装箱与拆箱

47、详细介绍一下JVM内存模型

48、监听器有哪些作用和用法?

49、HashSet与HashMap的区别

50、列举一些你知道的打破双亲委派机制的例子。为什么要打破?

51、CopyOnWriteArrayList可以用于什么应用场景?

52、我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象? 

53、成员变量与局部变量的区别有那些?

54、哪些是 GC Roots?

55、为什么Thread类的sleep()和yield ()方法是静态的? 

56、在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步? 

57、线程与进程的区别

58、什么是策略模式

59、什么是游标?

60、单例模式了解吗?给我解释一下双重检验锁方式实现单例模式!”

61、怎么获取 Java 程序使用的内存?堆使用的百分比?

62、在java中守护线程和本地线程区别?

63、线程之间是如何通信的?

64、说一下 runnable 和 callable 有什么区别

65、.进程和线程的区别是什么?

66、创建线程有几种不同的方式?你喜欢哪一种?为什么?

67、概括的解释下线程的几种可用状态。

68、同步方法和同步代码块的区别是什么?

69、什么是死锁(deadlock)?

70、如何确保N个线程可以访问N个资源同时又不导致死锁?

0 人点赞