您的位置:首页 > 编程语言 > Java开发

史上最全106道Java高频面试合集,九大专题,命中率高达95%

2020-04-28 18:53 1246 查看

有关Java的一般问题

1. 什么是JVM? 为什么称Java为跨平台的编程语言?

Java虚拟机(Java Virtual Machine)是可以执行Java字节码的虚拟机,每个Java源文件将被编译成字节码文件,然后在JVM中执行。Java之所以被设计成可以在任意的平台运行,而不需要重写或者在不同的平台下重新编译,这些都要归功于Java虚拟机(JVM),因为JVM非常了解特定的指令的长度以及底层硬件平台的特殊性。

2. JDK和JRE之间的差异是什么?

Java运行环境(Java Runtime Enviroment) 是运行Java程序的基本的Java虚拟机,包括执行applet的浏览器插件。JDK (Java Development Kit) 是为了开发,编译和执行Java应用程序,针对Java的全功能的软件开发包,包含了JRE,编译器和工具(比如说 JavaDoc 和Java Debugger)。

3. “static” 关键字是什么意思?

在Java里可以 override private 或 static 的方法吗? keyword mean ? Can you override private or static method in Java ?

static 关键字表示,访问这个成员变量或方法时,不必获取它属于的类的实例。

Java 里的 static 方法不能被 override,因为 override 的机制是运行时(runtime)的动态绑定,而 static 方法是在编译时静态绑定的。static 方法并不与任何类的具体实例有关,因此无法应用继承的概念。

4. 在静态方法里可以访问非静态变量吗?

Java 中的 static 变量归相应的类所有,它的值对于类的所有实例都是相同的。static 变量是在 JVM 加载类的时候初始化的。如果代码试图访问非静态的变量,而且不是通过类的实例去访问,编译器会报错,因为这些非静态变量还没有被创建呢,并且它们没有与实例相关联。

5. Java 支持哪些数据类型?

什么是 Autoboxing 和 Unboxing?
Java语言支持的8个基本数据类型如下:

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

Autoboxing 是指在基本数据类型和对应的包装(wrapper)类之间Java 编译器所做的自动转换。例如,编译器将 int 转换为 Integer,将 double 转换为 Double ,等等。逆向的转换称为 unboxing。

6. 在Java中什么是方法的 Override(覆盖) 和 Overload(重载)?
Java中方法的 overload 发生的条件是,同一个类里,有两个或以上的方法名称完全相同,但参数列表不同。另一方面,方法的 override 是指,子类重定义了父类里的同一个方法。Override 的方法必须方法名、参数列表和返回类型都完全相同。Override 的方法不会限制原方法的访问权限。

7.Java中构造函数、构造函数重载的概念和拷贝构造函数
8.Java支持多继承吗?
9.接口和抽象类有什么不同?
10.传引用和传值

Java 线程

11. 进程与线程的区别 ?
进程是一个程序的执行(即正在运行的程序), 然而线程是在进程中独立的执行序列. 一个进程可以包含很多线程. 线程有时被称为轻量级的进程.

12. 说下创建线程的不同方式. 你倾向于哪种方式并说明原因 ?
有三种创建线程的方式:

  • 继承Thread类.
  • 实现Runnable接口.
  • 通过Executor框架创建线程池.

首选方式是实现Runnable接口, 因为它不需要继承Thread类. 当你的程序设计需要多继承时, 使用接口会有所帮助. 另外, 线程池效率是很高的, 并且实施起来也很简单.

13. 解释下可用的线程状态.
14. 同步方法与同步块的区别 ?
15. 在监视器中的线程同步是怎样发生的? 你可以使用哪些级别的同步 ?
16. 什么是死锁 ?
17. 怎样确保N个线程访问N个资源时不会发生死锁 ?

Java Collections

18. Java Collections框架的基本接口 ?
Java Collections 框架 提供了一系列支持对象集合操作的设计良好的接口和类. Java Collections框架中最基础的接口是:

  • Collection, 表示一组对象(元素).
  • Set, 包含非重复元素的集合.
  • List, 包含非重复元素的有序集合.
  • Map, 包含非重复键的键值对的对象.

19. 为什么Collection没有继承Cloneable和Serializable接口 ?

Collection接口描述的是由元素组成的对象组. Collection的每一个具体实现可以选择自己的方式来管理元素. 一些集合允许存在重复键, 另一些则不允许.

当处理实际实现时复制和序列化的语义和效果才会起作用. 因此, 集合类的具体实现应该决定它们将怎样被复制和序列化.

20. 什么是Iterator(叠代器) ?

Iterator接口提供了许多能够叠代集合的方法.每个java集合(Collection)都含有一个返回Iterator实例的iterator方法. 叠代器在叠代过程中能够移除底层集合中的元素.

21. Iterator 和ListIterator之间的不同 ?
22. fail-fast与fail-safe的区别?
23. Java中的 HashMap 是怎么工作的?
24. hashCode() 和 equals() 方法重要性何在 ?
25.HashMap与HashTable之间有哪些不同?
26.Array与ArrayList间有什么不同?与ArrayList相比你什么时候会用Array?
27.ArrayList与LinkedList间有什么不同?
28. Comparable 和 Comparator 接口分别是什么 ? 列出它们的区别。
29.Java Priority Queue是什么?
30. 关于Big-O符号你了解些什么?你能针对不同数据结构举些例子吗?
31. 如何权衡有序数组和无序数组 ?
32. 有哪些关于 Java 集合框架的最佳实践?
33. Enumeration 和 Iterator 接口有什么不同 ?
34. HashSet 和TreeSet 有什么不同?

垃圾回收器

35. Java中垃圾回收的目的是什么, 它什么时候被使用 ?

垃圾回收用于识别和丢弃程序不再需要的对象, 以便回收和复用资源.

36. System.gc() 和Runtime.gc()方法用途?

这些方法用于提醒JVM开始垃圾回收. 然而开始垃圾回收的时机是由JVM决定的.

37. finalize()什么时候被调用 ? 它的目的是什么 ?

finallize方法是在释放该对象内存前由gc(垃圾回收器)调用. 通常建议在这个方法中释放该对象持有的资源.

38.如果一个对象的引用被设置为null, gc会立即释放该对象的内存么?
39. Java堆的结构是什么 ? 堆中的Perm Gen(全称是Permanent Generation)空间是什么 ?
40. Serial 垃圾回收器与 Throughput 垃圾回收器区别 ?
41. 什么时候对象会被回收 ?
42. 垃圾回收发生在指定的JVM区域 ?

异常处理

43. Java中的两种异常是什么?它们之间的区别?
Java有两种类型的异常:checked与unchecked(检查与未检查) 异常. 如果unchecked异常可能会在方法或构造函数的执行时被抛出从而蔓延到方法或构造函数的外部, 它们也不需要要在方法或构造函数中声明throws子句. 然而, checked异常必须通过方法或构造函数的throws子句声明. 关于java异常处理的建议请参考这里Java exception handling.

44. Java中异常与错误的区别?

Exception和Error都是Throwable类的子类. Exception用于用户程序需要捕获的异常条件. Error定义了用户程序不可预见的异常

45. throw与throws的区别 ?
关键字throw用于在程序中显式地抛出一个异常. 相反, throws子句用于指出在该方法中没有处理的异常. 每个方法必须显式指明哪些异常没有处理, 以便该方法的调用者可以预防可能发生的异常. 最后, 多个异常用逗号分隔.

45. 异常处理中finally语句块的重要性?
46. 异常被处理后异常对象会发生什么?
47. 怎样区分finally语句块与finalize()方法?

Java Applets

48. 什么是 Applet ?
一个 Java Applet 可以包含在 HTML 页面中并且可以在启用 Java 客户端的浏览器中运行。Applets 可以用来创建动态和交互式的 web 应用程序。

49. Applet 生命周期的说明
一个 Applet 可能会经历以下的几个状态:

  • Init: 每次加载的时候都进行初始化
  • Start: 开始执行一个 applet
  • Stop: 停止执行一个 applet
  • Destroy: 卸载 applet 之前执行最后的清理

50. 当 applet 加载的时候会发生什么?
首先,会创建一个 applet 的控制类的实例。然后,applet 初始化,最后 applet 开始运行。

51. Applet和Java应用程序有什么不同?
Applets需要一个支持Java的浏览器, 但是Java应用程序可以被单独执行。但是,他们都需要一个Java虚拟机,JVM。

还有, 一个Java应用程序需要一个main方法与特定的签名,来确保启动. Java applets并不需要这样一些东西。

最后, Java Applet通常使用严格的安全策略,而Java应用程序通常使用较宽松的安全策略。

52.什么是强加给Java Applet限制?
53. 什么是不可信的Applet ?
54. 通过文件系统加载的小程序在加载了互联网和Applet之间的区别是什么 ?
55. 什么是applet类加载器,它提供了什么?
56. 什么是applet安全管理,它提供什么? applet安全管理是对Java applet做了限制的机制。浏览器只能有一个安全管理器。安全管理器在启动的时候建立,之后它不能被取代,重载,重写或者延长。

Swing

57. Choice和List之间的区别是什么?
Choice是一种紧凑的方式展示,必须要拉下,是为了让用户能够看到所有的可选选项列表。Choice只能选中一个选项。List是以几个List选项是可见的方式展示的。List支持选中一个或多个List选项。

58. 什么是布局管理器?
布局管理器是用来组织容器内的组件。

59. Scrollbar和JScrollPane 的区别是什么?
Scrollbar是一个组件, 但不是一个容器,而ScrollPane是一个容器。 ScrollPane处理它自身的事件并执行它自己的滑动。

60. 哪些Swing方法是线程安全?
61. 说出3个支持绘图的子类。
62. 什么是裁剪?
63. MenuItem和CheckboxMenuItem的区别是什么?
64. BorderLayout的元素是怎样组织的?
65. GridBagLayout的元素是怎样组织的?
66. Window和Frame有什么区别?
67. 裁剪和重画之间的关系?
68. 事件监听器接口和事件适配器类之间是什么关系?
69. 一个GUI组件怎么处理自己的事件?
70. Java布局管理器提供超过传统的窗口系统的什么样的优势?
71. Java为所有Swing组件使用的设计模式是什么?

JDBC

72. 什么是 JDBC ?
JDBC是一个抽象层,允许用户在不同数据库间进行选择。JDBC使开发人员能够在Java中编写数据库应用程序,而不必让自己关心一个特定的数据库的底层细节。

73. 解释JDBC中驱动的作用。
JDBC驱动提供了 对 JDBC API 所提供的抽象类 的 数据库供应商的特定实现。每个驱动必须提供java.sql包的以下的类实现:Connection,Statement,PreparedStatement,CallableStatement,ResultSet 和 Driver。

74.Class.forName 方法的目的是什么?
此方法用于加载驱动程序,以建立与数据库的连接。

75.与Statement相比PreparedStatement的优点?
76. CallableStatement的用途 ? 指出用于创建CallableStatement的方法.
77. 连接池是什么 ?

远程方法调用 (RMI)

78. 什么是RMI ?
Java远程方法调用(RMI)是一个Java API,它执行的面向对象的等价远程过程调用(RPC)的方法,包括了直接传输序列化的Java类和分布式垃圾收集的支持。 远程方法调用(RMI),也可以看作是一个远程运行的对象上激活的方法的过程。RMI提供位置透明性,因为用户认为一个方法是在本地运行的对象上执行。 RMI Tips here.

79. 什么是RMI的体系结构的基本原理?
RMI的架构最重要的原则是将行为的定义和行为的实施分别对待。 RMI允许定义的行为和实现行为保持独立,并在独立的JVM中运行的代码。

80. RMI的体系结构层是什么?
RMI的结构主要分为以下几层:

  • 桩(Stub)和框架(Skeleton)层:该层位于开发者视图的下面。该层是负责拦截客户端请求接口的方法并重定向这些请求到远程RMI服务上。
  • 远程引用层:架构的第二层是处理从客户端到服务器的远程对象引用的解析。该层解析并管理从客户端到远程服务对象的引用。该连接是一对一(单播)连接的。
  • 传输层:该层主要负责连接参与服务的两个JVM。它基于通过网络连接的机子的TCP/IP,提供了基本的连通性,以及一些防火墙的渗透策略。

81. 在RMI中远程接口的作用是什么?
82. java.rmi.Naming 类扮演的角色 ?
83. RMI中的绑定是什么意思 ?
84. Naming 类中的bind与rebind方法的区别 ?
85. 运行RMI 程序的步骤?
86.RMI中stub的角色 ?
87. 什么是DGC?它是如何工作的?
88. 在RMI中使用RMISecurityManager的目的是什么?
89. 解释编组和解组。
90. 解释序列化和反序列化。

Servlets

91. 什么是Servlet?
servlet是用来处理客户端请求并生成动态web内容的Java程序语言类。Servlets大多是用来处理或者存储HTML表单提交的数据,提供动态内容和管理那些不在HTTP无状态协议中的状态信息。

92. 解释一个Servlet的架构.
核心抽象概念肯定是所有servlet必须实现 javax.servlet.Servlet 接口。 每个 servlet 必须直接或者间接实现这个接口, 也可以继承于 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最后想提的是,每个 servlet 能够使用多线程服务多个请求。

93. 一个 Applet 和 一个 Servlet 区别是什么 ?
一个 Applet 是一个跑在客户机器的 网页浏览器 里面的 客户端java程序。相反,一个 servlet 是跑在网页服务器的服务的容器。一个 applet 能使用用户界面class, 而一个 servlet 不能够有一个用户界面。相反,一个servlet 等待客户端的 HTTP 请求并为每一个请求生成一个响应。

94. GenericServlet 和 HttpServlet 的区别是什么 ?
GenericServlet 是一个实现了Servlet 和 ServletConfig 接口的通用的协议无关的 servlet . 那些继承于GenericServlet 类的 servlet 将重写 service 方法 。最后想提的是,为了给Web用户开发一个使用HTTP协议服务的HTTP servlet, 你的 servlet 必须改为继承于 HttpServlet 。查看Servlet的示例 。

95.解释一个Servlet的生命周期.
96 .doGet()和doPost()之间的区别是什么?
97. web应用是什么 ?
98. 什么是服务端包含 (SSI) ?
99. 什么是 Servlet 链?
100. 如何知道请求 servlet的客户端信息 ?
101. Http response的结构是什么 ?
102. 什么是cookie?session和cookie之间的区别是什么?
103.浏览器和servlet通过什么协议通信 ?
104. 什么是HTTP通道 ?
105. sendRedirect和 forward 方法的区别?
106. 什么是URL编码和解码 ?

上面的这些面试题都整理成了PDF文档,希望能帮助到你面试前的复习并找到一个好的工作,相对来说也节省了你在网上搜索资料的时间来学习!!!

附欢迎关注我的公种号:it资源之家 ,扫描下面二维码即可领取更多一线大厂Java面试题资料!

最后

欢迎大家评论区一起交流,相互提升;整理资料不易,如果喜欢文章记得点个赞哈,感谢大家支持!!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ee