当前位置: 首页 > 文档资料 > Java 9 中文教程 >

面试问题(Java 9 Interview Questions)

优质
小牛编辑
123浏览
2023-12-01

亲爱的读者,这些Java 9 Interview Questions专门设计用于让您熟悉在面试Java 9时可能遇到的问题的本质。 根据我的经验,很好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的问题 -

JAVA 9(又名jdk 1.9)是JAVA编程语言开发的主要版本。 它的初始版本于2017年9月21日发布.Java 9发布的主要目标是 -

  • 为了使JDK和Java Standard Edition平台模块化,它可以很好地降低到小型计算设备。

  • 提高JDK和Java实现的整体安全性。

  • 为JAVA SE和EE平台轻松构建java代码库和大型应用程序的构建过程和维护。

  • 设计和实现Java平台的标准模块系统,可以轻松地应用于Platform和JDK。

Java 8中增加了90多个增强功能,最重要的增强功能如下所述 -

  • Module - 作为模块引入的一种新型Java编程组件,它是一个命名的,自描述的代码和数据集合。

  • REPL (JShell) - 添加到Java平台的Read-Eval-Print Loop(REPL)功能。

  • HTTP 2 Client - 支持websockets和HTTP 2流以及服务器推送功能的新HTTPClient API。

  • Improved JavaDocs - 支持HTML5输出生成。 为生成的API文档提供搜索框。

  • Multirelease JAR - 增强JAR格式,以便多个Java发行版特定版本的类文件可以共存于一个存档中。

在Java 9中,引入了一种称为模块的新型编程组件。 模块是代码和数据的自描述集合,并具有用于标识它的名称。

使用Modules组件,Java 9中添加了以下增强功能 -

  • 引入了新的可选阶段,链接时间。 此阶段介于编译时和运行时之间。 在此阶段,可以组装和优化一组模块,使用jlink工具制作自定义运行时映像。

  • javac,jlink和java有其他选项来指定模块路径,这些选项进一步定位了模块的定义。

  • JAR格式更新为模块化JAR,其根目录中包含module-info.class文件。

  • 引入了JMOD格式,一种打包格式(类似于JAR),可以包含本机代码和配置文件。

按照惯例,模块的源代码位于同一目录中,即模块的名称。

REPL代表Read-Eval-Print Loop。

使用JShell,java具有REPL功能。 使用JShell,我们可以编写和测试基于java的逻辑,而无需使用javac进行编译,直接查看计算结果。

使用-html5标志运行jdk 9的javadoc工具以生成新类型的文档。

在java 9中,引入了一个新特性,其中增强了jar格式以具有不同版本的java类,或者可以根据平台维护和使用资源。

是! 以下命令将为java 7和java 9版本创建一个多版本jar。

$ jar -c -f test.jar -C java7 . --release 9 -C java9 .

两个java版本的语法相同,结果会有所不同。 使用JDK 7运行。

C:\JAVA > java -cp test.jar cn.xnip.Tester
Inside Java 7

使用JDK 9运行。

C:\JAVA > java -cp test.jar cn.xnip.Tester
Inside Java 9

使用Java 9,新的工厂方法被添加到List,Set和Map接口以创建不可变实例。 这些工厂方法是便利工厂方法,以较简洁和简洁的方式创建集合。

使用java 9,以下方法将添加到List,Set和Map接口以及它们的重载对应物。

static <E> List<E> of(E e1, E e2, E e3);
static <E> Set<E>  of(E e1, E e2, E e3);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3);
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)

注意事项 (Points to Note)

  • 对于List和Set接口,(...)方法被重载为0到10个参数,一个带有var args参数。

  • 对于Map接口,(...)方法重载为0到10个参数。

  • 如果Map接口的参数超过10个,则可以使用ofEntries(...)方法接受var args参数。

以下是默认的项目结构:

  • 数据库脚本存储在db文件夹中。

  • java源代码存储在src文件夹中。

  • 图像,js,META-INF,样式(css)存储在war文件夹中。

  • JSP存储在jsp文件夹中。

  • 第三方jar文件存储在lib文件夹中。

  • java类文件存储在WEB-INF\classes文件夹中。

使用Java 9接口可以具有以下类型的变量/方法。

  • 常数变量
  • 抽象方法
  • 默认方法
  • 静态方法
  • Private methods
  • Private Static methods

在Java 9中,负责控制和管理操作系统进程的Process API得到了显着改进。 ProcessHandle类现在提供进程的本机进程ID,开始时间,累计CPU时间,参数,命令,用户,父进程和后代。

ProcessHandle类提供了检查进程活跃性和破坏进程的方法。 它具有onExit方法,CompletableFuture类可以在进程退出时异步执行操作。

Streams是在Java中引入的,以帮助开发人员从一系列对象中执行聚合操作。 使用Java 9,几乎没有更多方法可以使流更好。

  • takeWhile
  • dropWhile
  • iterate
  • ofNullable

takeWhile方法获取所有值,直到谓词返回false。 在有序流的情况下,它返回一个流,该流由从该流中获取的与给定谓词匹配的元素的最长前缀组成。

dropWhile方法在开始时抛弃所有值,直到谓词返回true。 在有序流的情况下,在丢弃与给定谓词匹配的元素的最长前缀之后,它返回由该流的剩余元素组成的流。

iterate方法现在有hasNext谓词作为paremeter,一旦hasNext谓词返回false就停止循环。

引入了ofNullable方法来防止NullPointerExceptions并避免对流进行空检查。 此方法返回包含单个元素的顺序Stream(如果为非null),否则返回空Stream。

try-with-resources语句是一个try语句,其中包含一个或多个正式声明的资源。 这里资源是一个对象,一旦不再需要就应该关闭它。 try-with-resources语句确保在需求完成后关闭每个资源。 任何实现java.lang.AutoCloseable或java.io.Closeable的对象,接口都可以用作资源。

使用Java 9,对@Deprecated注释进行了两项新的增强。

  • forRemoval - 指示在将来的版本中是否要删除带注释的元素。 默认值为false。

  • since - 返回已注释元素已弃用的版本。 默认值为空字符串。

在java 9中,它也可以与匿名类一起使用,以简化代码并提高可读性。

Java 8中引入了可选类,以避免空检查和NullPointerException问题。 在Java 9中,添加了三种新方法来改进其功能。

  • stream()
  • ifPresentOrElse()
  • or()

使用Java 9,引入了一种新的多分辨率图像API,它支持具有不同分辨率变体的多个图像。 此API允许将具有不同分辨率的一组图像用作单个多分辨率图像。 以下是多分辨率图像的主要操作。

  • Image getResolutionVariant(double destImageWidth, double destImageHeight) - 获取特定图像,该图像是表示指定大小的逻辑图像的最佳变体。

  • List《Image》 getResolutionVariants() - 获取所有分辨率变体的可读列表。

在Java 8中引入了CompletableFuture类来表示Future,可以通过设置其值和状态明确来完成。 它可以用作java.util.concurrent.CompletionStage。 它支持在未来完成时触发的依赖功能和操作。 在java 9中,CompletableFuture API得到了进一步的增强。 以下是对API进行的相关更改。

  • 支持延迟和超时。
  • Improved support for subclassing.
  • 新工厂方法增加了。

接下来是什么 (What is Next?)

此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。