写点什么

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

发布于: 2 小时前

有关 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 编码和解码 ?


小编将以上的面试合集做了一个整理,还有更多的 redis、高并发、多线程、微服务、分布式、MySQL、数据库、线程、锁、jvm、Java 虚拟机、spring 等面试题库也一并分享出来,供大家参考,需要的可以点击这里即可获取到文章中的文档,资料

发布于: 2 小时前阅读数: 3
用户头像

Java架构师,高并发,高可用,分布式 2021.06.21 加入

领取文中资料加微信:MXC1146 即可获取

评论

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