CodeGym /Java 博客 /随机的 /探索 Java 开发人员职位的工作面试中的问题和答案。第1部分
John Squirrels
第 41 级
San Francisco

探索 Java 开发人员职位的工作面试中的问题和答案。第1部分

已在 随机的 群组中发布
你好!CodeGym 汇集了各种各样的人。我们中的一些人只想成为 Java 开发人员,并且我们正在投入大量时间和精力进行开发。其他人已经是 Java 开发人员。无论哪种情况,您都需要准备好在技术面试中接受测试。这些都不容易。他们需要情感和技术上的准备。 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 1 部分我最近遇到了一些针对 Java 开发人员职位的大量面试问题列表。问题分为不同的级别:初级、中级和高级。不要惊慌:并非所有问题都很简单,但很少有人问带星号的问题。这些问题很好,我想尝试回答其中的大部分问题。显然,这不可能全部放在一篇文章中。毕竟,那里有很多问题。这意味着将有一系列文章回答这些面试问题。让我立即强调几点:答案会很短,因为写得非常详细的答案可能会被拉到单独的一篇文章中。此外,在面试中不需要非常详细和冗长的答案,因为你的面试官只有一个小时的时间来采访你的基本主题(而且,

初级开发人员职位的问答

一般的问题

1. 你知道哪些设计模式?告诉我们您在工作中使用的两种设计模式。

有各种各样的图案。对于那些想要彻底熟悉设计模式的人,我推荐阅读《Head First. Design Patterns》一书。它将帮助您轻松学习最基本的设计模式的细节。就您可以在求职面试中提及的设计模式而言,您会想到以下内容:
  • Builder——一个经常使用的模板,一种替代经典对象创建方法的方法;
  • 策略——一种本质上代表多态性的模式。也就是说,我们只有一个接口,但程序的行为会根据传递给函数的特定接口实现而改变(策略模式现在几乎在 Java 应用程序中无处不在)。
如果这对您来说还不够,请注意Spring(如果您已经熟悉它),因为它是一个完整的框架平台,反过来,从头到尾都充满了模式。以下是我正在谈论的几个例子:
  • Factory — 这种模式可以在 ApplicationContext(或 BeanFactory)中找到;
  • Singleton——默认情况下所有bean都是单例;
  • 代理——基本上,Spring 中的一切都以这种或那种方式使用这种模式,例如 AOP;
  • 责任链——一种支持 Spring Security 的模式;
  • 模板——在 Spring JDBC 中使用。

核心

探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 2 部分

2、Java有哪些数据类型?

Java 具有以下原始数据类型:
  • byte——整数,范围从-128到127,占1个字节;
  • short——整数,范围从-32768到32767,占用2个字节;
  • int — 从-2147483648 到 2147483647 的整数,占用 4 个字节;
  • long——整数,范围从 9223372036854775808 到 9223372036854775807,占用 8 个字节;
  • float — 范围从-3.4E+38到3.4E+38的浮点数,占用4个字节;
  • double — 范围从-1.7E+308到1.7E+308的浮点数,占用8个字节;
  • char — UTF-16 中的单个字符,占用 2 个字节;
  • boolean true/false 值,占用 1 个字节。
还有指向堆上对象的引用数据类型。

3. 对象与原始数据类型有何不同?

第一个区别是占用的内存量:原语占用很少,因为它们只包含自己的值,但对象可以包含很多不同的值——包括原语和对其他对象的引用。第二个区别是:Java 是一种面向对象的语言,因此 Java 中的所有工作都是对象之间的交互。基元在这里不太适合。事实上,这就是 Java 不是 100% 面向对象语言的原因。第三个区别是第二个区别,因为 Java 专注于对象交互,所以有许多不同的管理对象的机制。例如,构造函数、方法、异常(主要与对象一起工作)等。为了让原语以某种方式在这个面向对象的环境中工作,Java 的创建者想出了基本类型的包装器( IntegerCharacterDoubleBoolean ...)

4. 按引用传递参数和按值传递参数有什么区别?

原始字段存储它们的值:例如,如果我们设置int i = 9;,然后i字段存储值 9。当我们引用一个对象时,这意味着我们有一个引用该对象的字段。换句话说,我们有一个字段存储对象在内存中的地址。

Cat cat = new Cat();
这意味着引用对象的字段也存储。它们的值是内存地址。即cat存放的是new Cat()对象的内存地址。当我们将参数传递给方法时,它的值被复制。在原语的情况下,原语的值被复制。因此,该方法适用于副本。当副本被改变时,原件不受影响。在引用类型的情况下,复制内存地址的值。因此,两个引用变量都将存储指向同一对象的地址。而如果我们使用这个新的引用来改变对象,那么我们会发现它对于旧的引用也发生了改变。毕竟,它们都指向同一个对象。

5.什么是JVM、JDK、JRE?

JVM代表Java 虚拟机,它运行由编译器预先生成的 Java 字节码。 JRE代表Java 运行时环境。基本上,它是一个用于运行 Java 应用程序的环境。它包括 JVM、标准库和其他组件,用于运行用 Java 编程语言编写的小程序和应用程序。换句话说,JRE 是运行已编译 Java 程序所需的一切的包,但它不包括用于开发应用程序的工具和实用程序,例如编译器或调试器。 JDK代表Java Development Kit ,它是JRE的扩展. 也就是说,它不仅是运行 Java 应用程序的环境,也是开发它们的环境。JDK 包含 JRE 中的所有内容,以及创建 Java 应用程序(包括 Java 文档)所需的各种附加工具——编译器和调试器。 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 3 部分

6. 为什么要使用JVM?

如上所述,Java 虚拟机是运行编译器预先生成的 Java 字节码的虚拟机。这意味着 JVM 不理解 Java 源代码。所以,首先,我们编译.java文件。编译后的文件具有.class扩展,现在是 JVM 可以理解的字节码形式。每个操作系统的 JVM 都不同。当 JVM 运行字节码文件时,它会根据运行的操作系统调整它们。事实上,由于有不同的JVM,不同操作系统的JDK(或JRE)也不同(每个版本都需要自己的JVM)。让我们记住在其他编程语言中开发是如何工作的。你写一个程序,然后它的代码被编译成特定操作系统的机器代码,然后你就可以运行它了。也就是说,你需要为每个平台编写不同版本的程序。但是 Java 对代码的双重处理(将源代码编译成字节码,然后由 JVM 处理字节码)让您享受跨平台解决方案的好处。我们创建一次代码并将其编译成字节码。然后我们可以把它带到任何操作系统上,本地 JVM 就可以运行它。而这恰恰是Java的传奇一次编写,随处运行的特性。 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 4 部分

7. 什么是字节码?

正如我上面所说,编译器将 Java 代码转换为中间字节码(我们从扩展名为 .java 的文件转换为扩展名为 .class 的文件)。在许多方面,字节码类似于机器码,只是它的指令集不是针对真实处理器,而是虚拟处理器。也就是说,它可以包括为 JIT 编译器设计的部分,该编译器为程序运行的实际处理器优化命令执行。JIT 编译,也称为即时编译,是一种通过在程序运行时将字节码编译成机器码或其他格式来提高字节码程序性能的技术。您可能已经猜到,JVM 在运行字节码时使用 JIT 编译器。让我们看一些示例字节码: 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 5 部分不太可读,是吗?好消息是这条指令并不适合我们。它适用于 JVM。

8. JavaBean 有哪些特点?

JavaBean是遵循一定规则的 Java 类以下是编写JavaBean的一些规则:
  1. 该类必须包含一个带有公共访问修饰符的空(无参数)构造函数。这个构造函数可以创建类的对象而不会出现任何不必要的问题(这样就没有不必要的参数摆弄)。

  2. 内部字段通过getset实例方法访问,这应该具有标准实现。比如我们有一个name字段,那么我们就应该有getNamesetName等。这使得各种工具(框架)可以毫无困难地自动获取和设置bean的内容。

  3. 该类必须覆盖equals()hashCode()toString()方法。

  4. 该类必须是可序列化的。也就是说,它必须具有 Serializable 标记接口或实现Externalizable接口。这样可以可靠地保存、存储和恢复 bean 的状态。

探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 6 部分

9. 什么是 OutOfMemoryError?

OutOfMemoryError是与 Java 虚拟机 (JVM) 相关的严重运行时错误。当 JVM 无法为对象分配内存,因为没有足够的内存,并且垃圾收集器无法分配更多内存时,会发生此错误。几种类型的OutOfMemoryError
  • OutOfMemoryError: Java heap space — 由于内存不足,无法在 Java 堆上分配对象。此错误可能是由内存泄漏或默认堆大小对于当前应用程序来说太小引起的。

  • OutOfMemoryError: GC Overhead limit exceeded——因为应用程序的数据勉强能装进堆,垃圾收集器一直在运行,导致Java程序运行很慢。结果,超出了垃圾收集器的开销限制,应用程序因该错误而崩溃。

  • OutOfMemoryError: Requested array size exceeds VM limit — 这表明应用程序试图为超过堆大小的数组分配内存。同样,这可能意味着默认分配的内存不足。

  • OutOfMemoryError: Metaspace — 堆用完了分配给元数据的空间(元数据是类和方法的指令)。

  • OutOfMemoryError:请求大小字节的原因。交换空间不足——尝试从堆中分配内存时发生了一些错误,结果导致堆空间不足。

10.什么是堆栈跟踪?我如何得到它?

堆栈跟踪是到目前为止在应用程序执行过程中调用的类和方法的列表。您可以通过执行以下操作在应用程序的特定点获取堆栈跟踪:

StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
这为我们提供了一组按后进先出 (LIFO)顺序 排列的 StackTraceElements 。 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 7 部分在 Java 中,当人们谈论堆栈跟踪时,通常指的是发生错误(或异常)时在控制台上显示的堆栈跟踪。您可以从这样的异常中获取堆栈跟踪:

StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
如果我们想在控制台上显示异常的堆栈跟踪:

try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
此外,如果发生错误、未经检查的异常或未经处理的已检查异常,那么当应用程序崩溃时,我们会自动在控制台上获取异常的堆栈跟踪。下面是控制台上堆栈跟踪的一个小示例: 探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 8 部分就此而言,我们将结束今天对该主题的讨论。探索 Java 开发人员职位的工作面试中的问题和答案。 第 1 - 9 部分
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION