2022年Java面试问答
已发表: 2022-08-03你是程序员吗? 并且您已选择 Java 编程语言作为您建立职业的首选利基市场? 恭喜! 你选对了。 据统计,美国程序员平均年收入为 105,801 美元。 即平均每小时 50.87 美元、每周 2,035 美元和每月 8,817 美元。 这不是令人印象深刻吗?
但是,作为一名 Java 程序员获得一份梦想的工作并不是一厢情愿的事情。 在全球 800 万 Java 程序员中,只有大约 56,585 人在美国获得有报酬的工作,这使得作为 Java 程序员的求职竞争非常激烈。 如果您必须找到理想的工作,那么您需要具备 Java 编程语言的基本和复杂方面的能力。
现在您知道作为一名 Java 程序员获得一份工作是多么有竞争力,以及有资格成为少数几个获得 Java 程序员工作的人的要求。 请记住,成功是机会会议准备的函数。 随着我们的进步,我们设计了一个问答指南,以帮助您在面试阶段扩大规模,并可能找到您梦寐以求的工作。 这份清单是在文章的帮助下编制的——为 Apollotechnical 上的 Java 面试问题和答案做准备。 让我们继续吧。
面向新生的基本 Java 面试问题

你对 Java 的理解是什么?
Java 是一种通用、面向对象和跨平台的编程语言,在全球 30 亿台设备上用于各种任务,例如社交网络应用程序、音频和视频程序、游戏、海量数据处理、嵌入式设备等。
Java和Python之间的比较
简而言之,Java 是一种通用的、以对象为中心的编程语言,它基于类,但所需的规范较少。 由于其快速、可靠和以结果为导向的声誉,它是开发手机、游戏机、笔记本电脑、高端科学计算机等应用程序的首选编程语言。另一方面,Python 是一种翻译的、以对象为中心的和提升的动态结构化编程语言。 Python 通过启用模块和包来促进程序灵活性和代码重用。
概述主要的 Java 特性
- Java 是面向对象的
- Java 与平台无关
- 具有出色的多线程实现
- 使用简单的语言
- 并且是架构中立的
Java中的对象是什么意思
在 Java 中,对象是另一个称为“类”的 Java 分组的组件(也称为“实例”)。 每个对象都有一个独特的状态、行为/动作和身份。 字段(变量)存储对象的状态,而方法(操作)展示对象的动作。 在运行时,对象是从标识为类的框架中创建的。
对象也可以是表示现实世界实体的基于对象的编程的基本元素。
Java编程中Stringbuffer和Stringbuilder的区别
StringBuffer 和 StringBuilder 的主要区别在于四个参数:性能/速度、线程安全、可用性和同步。 StringBuilder 是 StringBuffer 类的非同步变体。
StringBuffer 和 StringBuilder 的另一个区别是前者是线程安全的,而后者不是。
区分 JDK、JRE 和 JVM
Java 开发工具包 (JDK) 包括编写、故障排除和分析 Java 编程工具。 JRE 是一组类和对象以及 JVM 运行应用程序所需的其他随附文件。 JVM 不提供任何软件开发工具。
Java Development Kit (JDK) 是用于创建 Java 应用程序的软件产品。 JRE 是一个软件包,其中包含运行 Java 编程所需的 Java 类库和其他组件。 Java 虚拟机 (JVM) 解释 Java 字节语言并创建适合执行的氛围。 JDK是平台相关的,JRE是平台相关的,JVM是平台相关的,规模更大。
定义继承
在 Java 中,继承是一种将一个类的特征转移到另一个类的原理。 它是 Java 中一个类从另一个类获取属性或允许一个类拥有另一个类的特性(方法和属性)的框架。
Java 中的类是什么?
类是面向对象编程中的基本元素。 它是一种定义归因于类实例化的状态和功能的格式。 类也是一个逻辑模板,因为它用于构建共享相似属性和方法的模型。
比较Java中的重载和覆盖
重载是指具有相同名称的同一类的方法,但每个方法具有不同的标准或具有不同类型和顺序的相同标准。 而重写意味着在与超类相同的标题下拥有具有相同技术的子类以及相同类型的标准和返回值。
此外,重载是一种命令行多态性,具有静态键和重载静态方法。 重写是一种程序执行多态性,具有灵活的键和无法重写静态方法。
解释使用双重检查锁定在 Java 中创建线程安全的单例
单例模式是一种众所周知的设计模式,其中一个类在其整个生命周期中仅限于一个实例,并且多个客户端共享该实例。 单例模式体现了两个主要职责:第一个是确保只生成一个类实例。 第二个是提供一种方法,每个人都可以在全球范围内访问该特定实例。
Singleton 设计在多线程程序中面临的挑战之一是确保只生成一个类的实例,即使不同的用户同时调用 getInstance() 技术。 双重检查锁定系统通过确保仅在第一次调用 getInstance() 函数并且在没有上述同步的情况下再次带回相同实例的任何时候创建单个 Singleton 案例时才使用同步,从而纠正了这种困境所有其他实例。
Java中级面试题

什么是 JDK? 提到JDK的变种?
JDK 代表 Java 开发工具包。 Java Development Kit (JDK) 是任何 Java 应用程序开发过程中的首选软件。 Java Development Kit (JDK) 包括编写、故障排除和分析 Java 编程工具。
从根本上说,JDK 是 Java 标准版或 Java 企业版实现。 由于平台进行了重大升级,Java 在 1998 年更名为 Java 2(简称为 Java 2 SDK 或 J2SDK)。 它开发了三个独立的 Java 版本来支持各种应用程序。
- J2SE 代表 Java 2 Platform, the Basic and Usual Edition,适用于桌面和服务器环境。
- J2EE 代表 Java 2 Platform, Corporate Edition,专为业务应用程序设计,包括基于云的存储和在线服务支持等功能。
- J2ME(Java 2 平台,微型版)专门用于已安装和移动的小工具或平台。
然而,在 2004 年,变体的标签分别被修改为 Java ME(Java 平台微型版)、Java EE(Java 平台企业版)和 Java SE(Java 平台标准版)。 开发工具包的名称也从“Java 2 SDK”更改为“JDK”。 此外,操作上下文被重命名为“JRE”而不是“J2RE”。 Java SE 6 和 Java EE 5 及其版本的变体仍在使用中。

构造函数可以返回值吗?
了解构造函数不像 Java 编程中使用的常规技术,它不会返回或带回任何指定的结果,这可能会对代码造成重大影响或影响。 构造函数可以包含无限的指令,但它不能带回或返回语句的值或结果。
解释 Java 中的“THIS”关键字
“This”是 Java 中的一个特定术语,用于指定程序员现在正在运行的实体。 关键字仅作为与使用运算符有关的不同参数的前缀 – 句点 (.),它可以在方法或构造函数内部使用。 'This' 关键字并不经常使用,因为大多数应用程序旨在避免出现必要的情况。 通过术语“this”提供对实例变量的访问。
解释 Java 中的 'SUPER' 关键字
在 Java 中,流行语“super”是与引用父类实例的继承概念相关联的相对参数,假设派生类在组或方法中具有与父类同名的参数。 当子类需要访问基类中的参数、函数或构造函数时,主要使用该术语。
解释Java中的方法重载
在 Java 中,重载是指具有相同名称和类但具有不同标准的方法,反之亦然。 两种或多种技术具有统一的名称和类,但重载时的签名不同。 重载是一种命令行多态性,它会拉伸方法的行为,从而导致重载。
我们可以在 Java 中重载静态方法吗?
在 Java 中,静态方法的行为类似于常规的重载方法,因此可以重载。 但是,如果目标是重载静态方法,则必须提供具有相同名称但方法签名不同的附加静态方法。
定义后期绑定
后期绑定是一种格式,它指示编译器不应该对方法调用进行类型检查,不检查参数,并且应该将所有内容留给运行时(一个实例在 COM 编程中)。
定义动态方法分派
动态方法分派是指在运行时而不是在编译时解决或修复对覆盖方法的调用。
为什么链表中的delete函数比数组快
LinkedList 删除操作返回 O(1)。 但是 ArrayList 删除操作在最坏的情况下返回 O(n),即删除第一个条目时,在最好的情况下返回 O(1),同时删除最后一个元素。 与 ArrayList 相比,LinkedList 元素删除更快。 这样做的原因是每个 LinkedList 元素都有两个指针(地址)指向列表中的两个相邻成员。 因此,删除节点涉及修改节点的两个相邻组件中的参考位置。
面向有经验的高级 Java 面试问题

尽管继承是一个流行的 oops 概念,但它不如组合有利。 解释!
Java 类只能有一个超类,因为该语言不支持多重继承。 在各种功能中,例如读取和写入文件,编译结构更可取。 您可以将其与私人成员的作家和读者能力进行比较。 在组合物的帮助下,可以防止破坏封装,同时实现显着的柔韧性。 由于继承而无法进行的单元测试可以在组合的帮助下实现。
使用 new() 创建字符串与使用文字创建字符串有何不同?
当我们使用 new() 生成 String 时,会在堆内存中构建一个新对象。 与字符串文字相比,执行时间更长,因此落后。 但是,当使用字符串字面量创建的字符串的字符串中已建立数据时,该相同数据与字符串池中的字符串变量存在链接。 无需使用相同的已建立数据构建全新的字符串即可实现这一点。
尽管有垃圾收集器,程序中是否可能超出内存限制?
是的。 垃圾收集器的存在不会以任何方式阻止或阻碍程序内存不足。
为什么需要同步? 借助相关示例进行解释
同步是一种确保所有重合线程同时运行的机制。 同步可防止由不一致的协同内存视图产生的内存一致性问题。 在同步方法中,对象由线程监视并保持在适当的位置。 如果另一个线程正在执行同步方法,则当前线程将停止,直到前一个线程释放监视器。
比方说,在需要查找对特定 URL 发出的请求数的情况下,运行多个请求必然会导致计数不稳定。 假设线程 1 将计数视为 12; 加一将增加到 13。 同时,另一个线程 2 也将计数视为 12,并且以同样的方式通过添加 1 将计数增加到 13。计数值的这种不可预测性的发生是因为最终得到的不是预期的最终值 14值将是 13。这是同步在函数增加时发挥作用的地方 (),因此阻止了对计数的并发访问。
你能解释一下 Java 线程的生命周期吗?
在 Java 中,线程的生命周期被定义为线程从出生到死亡的状态转换。 当线程实例生成,调用Thread类的start()函数时,线程进入runnable状态。 当 Thread 类调用 sleep() 或 wait() 方法时,线程变得不可运行。
使用无序数组与使用有序数组之间的权衡是什么?
有序数组的一个主要优点是它的搜索时间复杂度为 O(log n)。 有序数组上的插入操作具有 O(n) 的时间复杂度,因为必须移动得分较高的成员以生成新的变体。 另一方面,无序数组的插入操作需要 O(1) 的稳定时间。
是否可以在java中两次导入相同的类或包,在运行时会发生什么?
是的。 无论导入类或包的频率如何,JVM 都会在运行时内部加载一次。
如果代码 system.Exit(o) 写在 try 块的末尾,“Finally”块会被执行吗?
不,“finally”块在这种情况下不会执行,因为当 System.exit (0) 被激活时,控件会立即离开程序,因此“finally”永远不会执行。 如果系统。 无异常调用 exit(0); 该程序将不会运行。
Java中的标记接口你理解什么
没有常量或方法的接口称为标记接口或标记接口,因为它为编译器和 JVM 提供了有关对象运行时类型的信息。 远程接口、Serializable 和 Cloneable 是标记接口的示例,所有这些接口都是空的。
解释 Java 中的术语“双大括号初始化”
在 Java 中,双括号初始化是 2 个独立过程的混合。 在这种情况下,涉及两个大括号 ({)。 当在 java 代码中显示两个连续的大括号时,会发生双大括号初始化。
未命名内部类的构造是第一个大括号,而初始化块是第二个大括号。 当未命名的内部类使用初始化块时,会发生 Java 双大括号初始化。
结论
作为新手程序员甚至是经验丰富的程序员,这些面试问题可能会显得有些棘手。 但是,如果您致力于练习这些问题,那么您一定会在下一次获得机会时获得成功。
