Skip to content

Files

Latest commit

eb0ea53 · Sep 21, 2021

History

History
333 lines (252 loc) · 14.1 KB

File metadata and controls

333 lines (252 loc) · 14.1 KB

十八、答案

第一章

  1. 19.3。
  2. 开发人员不再需要等待很长时间才能发布到 Java 平台。更重要的是,没有发布将代表平台的重大变化
  3. Java 平台的模块化。
  4. CORBA。
  5. 更快的启动。
  6. 低开销垃圾收集器。
  7. 标识符。
  8. Java18.3(10)。
  9. Java9、10(18.3)和 11(18.9)。
  10. G1。

第二章

  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 中,栅栏操作是javac以屏障指令的形式对内存进行强制约束的操作。这些操作发生在屏障指令之前和之后,本质上是将它们封闭起来。
  2. Coin 项目是 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. binconflib

  8. binconflibdemosamplemaninclude

  9. 链接时间。

  10. Java 链接器。

第五章

  1. 当开发计算机上有多个版本的库时,库信息的特殊性不足,类加载器有问题,类路径过长。

  2. Java9。

  3. 模块通过提供强大的封装解决了 Java9JDK 之前的单片问题。

  4. java.base

  5. Java 中的封装是由module-info.java文件中的信息驱动的。

  6. jdk.unsupportedJDK 模块。

  7. module-info.java

  8. Java 网络启动协议(JNLP)。

  9. 它是一个非法的标识符,从 Java10 开始。

  10. --add-opens--add-exports--permit-illegal-access

第六章

  1. 读取求值打印循环通常称为 REPL,从短语中的每个单词中提取第一个字母。它也被称为语言 Shell 或交互式顶层。
  2. 它是一个交互式读取求值打印循环工具,用于求值以下 Java 编程语言组件声明、语句和表达式。它有自己的 API,因此可以被外部应用使用。
  3. 如下所示:
  • 制表符补全
  • 语句结尾分号的自动补全
  • 导入的自动补全
  • 定义的自动补全
  1. JShell 是位于/bin文件夹中的命令行工具。
  2. 退出 Shell 就像进入/exit一样简单。
  3. /vars
  4. 在 JShell 中输入/help/?命令提供了一个完整的命令列表和可以在 Shell 中使用的语法。
  5. 在 JShell 中,可以使用/help命令,然后使用需要额外帮助的命令来获得额外的帮助。
  6. 命令行工具通常提供相对稀疏的反馈,以避免屏幕过度拥挤,或者对开发人员造成麻烦。JShell 有几种反馈模式,除了让开发人员能够创建自己的定制模式之外。
  7. 反馈方式有四种:concisenormalsilentverbose

第七章

  1. 以下是垃圾收集算法:
  • 标记和扫描
  • CMS 垃圾收集
  • 串行垃圾收集
  • 并行垃圾收集
  • G1 垃圾收集
  1. G1 名称代表“垃圾优先”。

  2. iCMS(增量并发标记扫描)、【CPU】、【37327】、【36739】、【35813】、

  3. MiB 代表 Mebibyte,是数字信息字节的倍数。

  4. 尽管垃圾收集在 Java 中是自动的,但是您可以显式调用 方法java.lang.System.gc()方法来帮助调试过程。此方法不接受任何参数,也不返回任何值。

  5. 因为 Java 中的所有对象,甚至是您自己创建的对象,都是java.lang.Object的子类,所以 Java 中的每个对象都有一个finalize()方法。

  6. 这些组合在 Java9 中已被删除。

  7. CollectedHeap类。

  8. 对于 Java10,G1Full 垃圾收集器被转换为并行,以减轻对使用完全垃圾收集的开发人员的任何负面影响。

  9. GC。

第八章

  1. 微基准是用来测试系统性能的。这与宏观基准测试不同,后者在不同的平台上运行测试,以进行效率比较和后续分析。使用微标记,我们通常针对一个系统上的特定代码片段,例如方法或循环。微基准的主要目的是在我们的代码中识别优化机会。

  2. 微基准发生在流程设计、实现、执行、分析和增强的几个阶段。

  3. Maven,也称为 ApacheMaven,是一个项目管理和理解工具,我们可以使用它来管理我们的应用项目构建、报告和文档。

  4. pom.xml

  5. 它们都是可配置的选项。

  6. All、AverageTime、SampleTime、SingleShotTime 和吞吐量。

  7. 纳秒,微秒,毫秒,秒,分钟,小时,天。

  8. 对于电源管理陷阱,有两种建议策略:

  • 在运行测试之前禁用任何电源管理系统
  • 长时间运行基准测试
  1. 对于操作系统调度器陷阱,有两种建议策略:
  • 优化系统调度策略
  • 长时间运行基准测试
  1. 对于分时陷阱,有两种建议策略:
  • 在运行基准测试之前测试所有代码,以确保一切正常工作
  • 只有当所有线程都已启动或停止时,才使用 JMH 进行测量

第九章

  1. 在 Java 应用编程的上下文中,进程是操作系统中的执行单元。当你启动一个程序,你就启动了一个过程。

  2. Java9 中引入了两个支持处理操作系统进程的新接口:ProcessHandleProcessHandle.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_REFERENCESHOW_REFLECT_FRAMESSHOW_HIDDEN_FRAMES

  7. 如果我们指定第一个选项枚举常量,RETAIN_CLASS_REFERENCE作为getInstance()方法的参数,那么返回的实例将授予我们访问各个栈在遍历期间引用的类的权限。

  8. SHOW_REFLECT_FRAMES枚举常量将生成一个遍历器,其中包含来自某个反射调用的帧。

  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.ValueKindDocTree.Kind

  6. HTML5。

  7. JVM 的 JavaScript 引擎。

  8. 欧洲计算机制造商协会 JavaScript 脚本语言规范。

  9. 支持 JarFile API 和标准类加载器。

  10. 构造器不应接受任何参数。 * 它必须是可序列化的 * 它的属性必须包含更改器和访问器方法

第十二章

  1. 反应式编程是指应用在异步数据流发生时对其作出反应。
  2. 数据流是字符串和基本数据类型的二进制输入/输出。
  3. 效率。
  4. 以下是不需要的数据缓冲、数据转换和转换。
  5. java.util.concurrent
  6. Flow.PublisherFlow.SubscriberFlow.SubscriptionFlow.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 HASHGHASH)是一种密码系统哈希算法。

第十四章

  1. 统一日志记录架构。

  2. 命令行选项、装饰、级别、输出和标签。

  3. 在 Java 日志框架的上下文中,装饰是关于日志消息的元数据。

  4. 错误、警告、信息、调试、跟踪和开发。

  5. 开发。

  6. 错误。

  7. 在源代码中。

  8. 依赖于方法的编译器标志。

  9. C1 和 C2。

  10. C1。

第十五章

  1. Unicode 转换格式 -8UTF-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. “受到资助”表示职能部门领导或集团领导已判断 JEP 获得全额资助。
  9. 已完成此状态表示增强工作已在版本发布中完成并交付。
  10. http://openjdk.java.net/jeps/0

第十七章

  1. Java 用户组。
  2. 有 200 多个。
  3. 在地理上。
  4. 活动、书籍、产品和其他资源的折扣。
  5. Java 社区流程™是针对 Java 平台开发技术规范标准的结构化方法。
  6. Java 社区由数百万开发人员组成。
  7. 四大好处如下:
  • 与其他 Java 专业人士联网
  • 分享技巧、技巧和资源
  • 向他人学习
  • 增加 Java 知识
  1. https://www.oracle.com/technetwork/articles/otn-submit-100481.html
  2. JCP 登记。
  3. 任何注册会员