# 评估 # 第一章 1. 19.3. 2. 开发人员不再需要等待很长时间才能发布到 Java 平台。更重要的是,没有发布将代表平台的重大变化 3. Java 平台的模块化。 4. 科尔巴。 5. 更快的启动。 6. 低开销垃圾收集器。 7. 标识符。 8. Java18.3(10)。 9. Java9、10(18.3)和 11(18.9)。 10. G1。 # 第 2 章 1. 当一个线程在一个队列中等待一个当前被锁定的对象时,它就被认为是在争夺这个锁 2. 代码缓存是 **Java 虚拟机**(**JVM**)存储生成的本机代码的内存区域。 3. `-XX:NonProfiledCodeHeapSize`。 4. Lint 和 DocLint 是向`javac`报告警告的来源。 5. `hotspot/test/testlibrary/jit-tester`。 6. `-Xshare:off`。 7. FXML 公司。 8. 在 Java9 之前,字符串数据存储为一个数组`chars` 9. 从 Java9 开始,字符串现在在内部使用字节数组和用于编码引用的标志字段来表示。 10. OpenType 是一个 HTML 格式的字体格式规范。 # 第三章 1. 在 Java 中,fence 操作是`javac`以 barrier 指令的形式对内存进行强制约束的操作。这些操作发生在屏障指令之前和之后,本质上是将它们封闭起来。 2. projectcoin 是 Java7 中引入的一组小改动的特性集。 3. 从 Java9 开始,我们可以对私有实例方法使用`@SafeVarargs`注释。 4. 从 Java9 开始,我们在类和文件中列出`import`语句的顺序将不再影响编译过程。 5. Java 平台在`cacerts`密钥库中包含一组根证书。 6. `var`标识符在技术上是一个保留的类型名。 7. 可以通过使用新的`var`标识符来推断声明。 8. 下划线字符(`_`)不能再用作合法的标识符名称。 9. `java.util.concurrent.atomic`包是 12 个子类的集合,支持对线程安全和无锁的单个变量执行操作。 10. 变量处理程序是对变量的类型化引用,由`java.lang.invoke.VarHandle`抽象类控制。 # 第四章 1. JDK、JRE 和 JAR 都太大了。 2. 模块化系统具有以下要求: * 必须有一个公共接口,以允许所有连接模块之间的互操作性 * 必须支持隔离和连接测试 * 编译时操作必须能够识别正在使用的模块 * 对模块的运行时支持 3. Java 模块是以下内容的集合: * 包装 * 班级 * 接口 * 代码 * 数据 * 资源 4. `java`。 5. JDK 的主要组件如下: * 开发工具 * JavaFX 工具 * **Java 运行时环境**(**JRE**) * 源代码 * 图书馆 * C 头文件 * 数据库 6. 可维护性、性能和安全性。 7. `bin`、`conf`和`lib`。 8. `bin`、`conf`、`lib`、`demo`、`sample`、`man`、`include`。 9. 链接时间。 10. Java 链接器。 # 第五章 1. 当开发计算机上有多个版本的库时,库信息的特殊性不足,类加载器有问题,类路径过长。 2. Java9。 3. 模块通过提供强大的封装解决了 Java9JDK 之前的单片问题。 4. `java.base`。 5. Java 中的封装是由`module-info.java`文件中的信息驱动的。 6. `jdk.unsupported`JDK 模块。 7. `module-info.java`。 8. Java 网络启动协议(**JNLP**)。 9. 它是一个非法的标识符,从 Java10 开始。 10. `--add-opens`、`--add-exports`和`--permit-illegal-access`。 # 第六章 1. Read-Eval-Print 循环通常称为 REPL,从短语中的每个单词中提取第一个字母。它也被称为语言 Shell 或交互式顶层。 2. 它是一个交互式 Read Eval Print Loop 工具,用于评估以下 Java 编程语言组件声明、语句和表达式。它有自己的 API,因此可以被外部应用程序使用。 3. 如下所示: * 制表符完成 * 语句结尾分号的自动完成 * 导入的自动完成 * 定义的自动完成 4. JShell 是位于/bin 文件夹中的命令行工具。 5. 退出 Shell 就像进入`/exit`一样简单。 6. `/vars`。 7. 在 JShell 中输入`/help`或`/?`命令提供了一个完整的命令列表和可以在 Shell 中使用的语法。 8. 在 JShell 中,可以使用`/help`命令,然后使用需要额外帮助的命令来获得额外的帮助。 9. 命令行工具通常提供相对稀疏的反馈,以避免 屏幕过度拥挤,或者对开发人员造成麻烦。JShell 有 几种反馈模式,除了让开发人员能够创建 自己的定制模式之外。 10. 反馈方式有四种:`concise`、`normal`、`silent`、`verbose`。 # 第七章 1. 以下是垃圾收集算法: * 标记和扫描 * CMS 垃圾收集 * 串行垃圾回收 * 并行垃圾回收 * G1 垃圾回收 2. G1 名称首先引用垃圾。 3. **iCMS**(增量并发标记扫描)、【CPU】、【37327】、【36739】、【35813】、 4. MiB 代表 Mebibyte,是数字信息字节的倍数。 5. 尽管垃圾收集在 Java 中是自动的,但是您可以显式调用 方法`java.lang.System.gc()`方法来帮助调试过程。此方法不接受任何参数,也不返回任何值。 6. 因为 Java 中的所有对象,甚至是您自己创建的对象,都是`java.lang.Object`的子类,所以 Java 中的每个对象都有一个`finalize()`方法。 7. 这些组合在 Java9 中已被删除。 8. `CollectedHeap`班。 9. 对于 Java10,g1full 垃圾回收器被转换为 parallel,以减轻对使用 full 垃圾回收的开发人员的任何负面影响。 10. εGC。 # 第 8 章 1. 微基准是用来测试系统性能的。这与宏观基准测试不同,后者在不同的平台上运行测试,以进行效率比较和后续分析。使用微标记,我们通常针对一个系统上的特定代码片段,例如方法或循环。微基准的主要目的是在我们的代码中识别优化机会。 2. 微基准发生在流程设计、实现、执行、分析和增强的几个阶段。 3. Maven,也称为 apachemaven,是一个项目管理和理解工具,我们可以使用它来管理我们的应用程序项目构建、报告和文档。 4. `pom.xml`。 5. 它们都是可配置的选项。 6. All、AverageTime、SampleTime、SingleShotTime 和吞吐量。 7. 纳秒,微秒,毫秒,秒,分钟,小时,天。 8. 对于电源管理陷阱,有两种建议策略: * 在运行测试之前禁用任何电源管理系统 * 长时间运行基准测试 9. 对于操作系统调度器陷阱,有两种建议策略: * 优化系统调度策略 * 长时间运行基准测试 10. 对于分时陷阱,有两种建议策略: * 在运行基准测试之前测试所有代码,以确保一切正常工作 * 只有当所有线程都已启动或停止时,才使用 JMH 进行测量 # 第九章 1. 在 Java 应用程序编程的上下文中,进程是操作系统中的执行单元。当你启动一个程序,你就启动了一个过程。 2. Java9 中引入了两个支持处理操作系统进程的新接口:`ProcessHandle`和`ProcessHandle.Info`。 3. 处理完成后,`handle.is.Alive()`方法返回 false。 4. 我们可以通过句柄访问进程的 PID。 `handle.getPid()`方法返回`Long`,表示 PID 的数值。 5. 为了得到当前进程的 PID,可以使用调用链`ProcessHandle.current().getPid()`。 6. `command()`、`arguments()`、`commandLine()`、`startInstant()`、`totalCpuDuration()`、`user()`。 7. 为了得到控制子进程的进程句柄的`Stream`,应该使用静态方法`processHandle.children()`。 8. `processHandle.descendants()`。 9. `allProcess()`。 10. `CompletableFuture`。 # 第十章 1. Java 运行时有一个名为`Stack`的类,可以使用**后进先出**(**LIFO**)策略来存储对象。 2. JVM 是用 C 编写的,执行调用 C 函数并从那里返回的操作。 这个调用返回序列是使用本机方法栈维护的,就像其他 C 程序一样。 3. Java 虚拟机`Stack`。 4. 在 Java 中,我们使用 API 来获取`Logger`。使用 API,模块可以为服务`LoggerFinder`提供实现,而服务`LoggerFinder`又可以返回实现`getLogger()`方法的`Logger`。 5. `StackWalker`班。 6. `RETAIN_CLASS_REFERENCE`、`SHOW_REFLECT_FRAMES`和`SHOW_HIDDEN_FRAMES`。 7. 如果我们指定第一个选项 enum constant,`RETAIN_CLASS_REFERENCE`作为`getInstance()`方法的参数,那么返回的实例将授予我们访问各个栈在遍历期间引用的类的权限。 8. `SHOW_REFLECT_FRAMES`enum 常量将生成一个 walker,其中包含来自某个反射调用的帧。 9. 枚举常量选项`SHOW_HIDDEN_FRAMES`将包括所有隐藏帧,其中包含反射调用以及为 Lambda 函数调用生成的调用帧。 10. `StackWalker`类是最终类,不能扩展。 # 第十一章 1. 易用性。 2. 大约 10% 的 HTTP 协议未被 API 公开: * 标准/通用认证机制仅限于基本认证 * 性能改进可能无法实现 * 不支持对请求进行筛选 * 不支持对响应进行筛选 * 新的 API 不包括可插入的连接缓存 * 缺乏通用的升级机制 3. 包名、源文件名、访问控制选项。 4. `languageVersion()`、`optionLength(String option)`、`start(RootDoc root)`、`validOptions(String[][] options, DocErrorReporter reporter)`。 5. `AttributeTree.ValueKind`和`DocTree.Kind`。 6. HTML5。 7. JVM 的 JavaScript 引擎。 8. 欧洲计算机制造商协会 JavaScript 脚本语言规范。 9. 支持 JarFile API 和标准类加载器。 10. 构造器不应接受任何参数。 * 它必须是可序列化的 * 它的属性必须包含更改器和访问器方法 # 第十二章 1. 反应式编程是指应用程序在异步数据流发生时对其作出反应。 2. 数据流是字符串和基本数据类型的二进制输入/输出。 3. 效率。 4. 以下是不需要的数据缓冲、数据转换和转换。 5. `java.util.concurrent`。 6. `Flow.Publisher`、`Flow.Subscriber`、`Flow.Subscription`、`Flow.Processor`。 7. 多个进程共享一个处理器。 8. 并发性和并行性经常被用作可互换的术语。并发是指当多个进程重叠时,尽管开始和停止时间可能不同。并行性发生在任务同时启动、运行和停止时。 9. 共享内存系统配置有多个处理器,所有处理器共享一个公共系统内存。 10. 在分布式存储系统中,每个处理器都有自己的内存,每个单独的处理器都与其他处理器完全链接,从而形成一个完全链接的分布式系统。 # 第十三章 1. **数据报传输层安全**(**DTLS**)是一种通信协议。 2. **传输层安全**(**TLS**)是最常见的网络安全协议。 3. 在实现握手重新协商时,始终实现`renegotiation_info`扩展。 4. 实现 FS 可以确保过去的会话加密密钥不会在长期加密密钥受损时受损。 5. 它本质上是存储公钥证书和私钥的数据库文件或数据存储库文件。 6. `KeyStore`将存储在`/jre/lib/security/cacerts`文件夹中。 7. `KeyStore.Builder`类用于延迟`KeyStore`的实例化。 8. 它具有以下特点: * 线程安全的 * 输入地图不需要同步 * 快速阅读 * 写入使用锁 * 无对象级锁定 * 锁定在非常精细的级别 9. 哈希码是一个对象生成的数字,存储在哈希表中,用于快速存储和检索。 10. **Galois HASH**(**GHASH**)是一种密码系统哈希算法。 # 第十四章 1. 统一日志记录架构。 2. 命令行选项、装饰、级别、输出和标记。 3. 在 Java 日志框架的上下文中,装饰是关于日志消息的元数据。 4. 错误、警告、信息、调试、跟踪和开发。 5. 发展。 6. 错误。 7. 在源代码中。 8. 依赖于方法的编译器标志。 9. C1 和 C2。 10. C1。 # 第 15 章 1. **Unicode 转换格式 -8**(**UTF-8**)是一个字符集,它使用一到四个 8 位字节封装所有 Unicode 字符。它是 Unicode 的面向字节的编码形式。 2. 以下是 UTF-8 的一些特点: * 可以对所有 1112064 Unicode 代码点进行编码 * 使用一到四个 8 位字节 * 占所有网页的近 90% * 向后兼容 ASCII * 是可逆的 3. `ResourceBundle`班。 4. 没有什么。 5. 基于给定`baseName`和默认`locale`的资源包 6. Java18.9(Java11)支持 Unicode 10.0.0,于 2017 年 6 月 20 日发布。 7. JDK9、10 和 11 已通过以下实现成功移植到 Linux/AArch64: * 模板解释器 * C1 JIT 编译器 * C2 JIT 编译器 8. 多分辨率图像包含同一图像的多个分辨率变体。 9. `java.awt.Graphics`类用于从多分辨率图像中检索所需的变量。 10. **CLDR**(简称**公共区域数据仓库**)是许多支持多种语言的软件应用程序的关键组件,被吹捧为最大的区域数据仓库,被众多大型软件供应商使用,包括苹果、谷歌、IBM 和微软。 # 第十六章 1. JDK 的拟议更改列表。 2. 广泛的信息吸引力。 3. 提案必须符合以下标准之一: * 需要大量的工程工作来实施(至少两周) * 涉及对 JDK 或其基础结构的重大更改 * 是 Java 开发人员或用户的高需求项目 4. 草案这是最早的状态,在 JEP 已经写好并由作者分发以取得共识时使用。 5. 一旦作者达成共识,JEP 就可以登录到 JEP 档案中。 6. 一旦 JEP 被认为准备好进行正式评估,提交人就会设置这种状态。 7. 一旦 OpenJDK 负责人接受了 JEP,它就变为这个状态。 8. Funded Funded 表示职能部门领导或集团领导已判断 JEP 获得全额资助。 9. 已完成此状态表示增强工作已在版本发布中完成并交付。 10. 。 # 第十七章 1. Java 用户组。 2. 有 200 多个罐子。 3. 在地理上。 4. 活动、书籍、产品和其他资源的折扣。 5. **Java 社区流程™**是针对 Java 平台开发技术规范标准的结构化方法。 6. Java 社区由数百万开发人员组成。 7. 四大好处如下: * 与其他 Java 专业人士联网 * 分享技巧、技巧和资源 * 向他人学习 * 增加 Java 知识 8. 。 9. 在 [JCP](http://jcp.org) 登记。 10. 任何注册会员