Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-java-zh
提交
cb2e8122
A
apachecn-java-zh
项目概览
OpenDocCN
/
apachecn-java-zh
10 个月 前同步成功
通知
5
Star
53
Fork
13
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-java-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cb2e8122
编写于
6月 25, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-06-25 22:27:24
上级
e3386901
变更
11
显示空白变更内容
内联
并排
Showing
11 changed file
with
42 addition
and
42 deletion
+42
-42
new/design-pattern-best-prac-java/6.md
new/design-pattern-best-prac-java/6.md
+1
-1
new/java-coding-prob/01.md
new/java-coding-prob/01.md
+1
-1
new/java-coding-prob/09.md
new/java-coding-prob/09.md
+2
-2
new/java-coding-prob/11.md
new/java-coding-prob/11.md
+1
-1
new/java-coding-prob/13.md
new/java-coding-prob/13.md
+1
-1
new/java-proj/6.md
new/java-proj/6.md
+1
-1
new/learn-java12-prog/05.md
new/learn-java12-prog/05.md
+1
-1
new/learn-java12-prog/06.md
new/learn-java12-prog/06.md
+1
-1
new/learn-java12-prog/14.md
new/learn-java12-prog/14.md
+1
-1
new/master-java11/01.md
new/master-java11/01.md
+3
-3
new/master-java11/02.md
new/master-java11/02.md
+29
-29
未找到文件。
new/design-pattern-best-prac-java/6.md
浏览文件 @
cb2e8122
...
...
@@ -438,7 +438,7 @@ RxJava `Observable`应用于小数据集(最长不超过 1000 个元素),
*
`zipIterable`
:发出一个指定的组合器函数的结果,该函数应用于给定的可观测项发出的多个项的组合
*
`zipWith`
:发出一个指定的组合器函数的结果,该组合器函数应用于这个和给定的可观测值的组合
下面的代码显示了如何基于字符串
串联
组合器将
`zip`
应用于从 1 到 5 到 10 到 16(更多元素)的范围发出的元素。请注意,由于没有要应用的对应项,因此不会应用额外的发射(编号 16):
下面的代码显示了如何基于字符串
连接
组合器将
`zip`
应用于从 1 到 5 到 10 到 16(更多元素)的范围发出的元素。请注意,由于没有要应用的对应项,因此不会应用额外的发射(编号 16):
![](
img/eb0fc961-36a5-4e0b-a200-3ac7f2b45424.png
)
...
...
new/java-coding-prob/01.md
浏览文件 @
cb2e8122
...
...
@@ -1283,7 +1283,7 @@ public static String concatRepeat(String str, int n) {
}
```
从 JDK11 开始,解决方案依赖于
`String.repeat(int count)`
方法。此方法返回一个字符串,该字符串通过将此字符串
`count`
串联
几次而得到。在幕后,这个方法使用了
`System.arraycopy()`
,这使得这个速度非常快:
从 JDK11 开始,解决方案依赖于
`String.repeat(int count)`
方法。此方法返回一个字符串,该字符串通过将此字符串
`count`
连接
几次而得到。在幕后,这个方法使用了
`System.arraycopy()`
,这使得这个速度非常快:
```
java
String
result
=
"hello"
.
repeat
(
5
);
...
...
new/java-coding-prob/09.md
浏览文件 @
cb2e8122
...
...
@@ -1457,9 +1457,9 @@ List<Melon> melons = Arrays.asList(new Melon("Crenshaw", 2000),
new
Melon
(
"Gac"
,
3000
),
new
Melon
(
"Cantaloupe"
,
2600
));
```
在上一个问题中,我们讨论了内置于
`Collectors`
中的
`Stream`
API。在这个类别中,我们还有
`Collectors.joining()`
。这些收集器的目标是将流中的元素
串联
成一个按
*相遇顺序*
的
`String`
。或者,这些收集器可以使用分隔符、前缀和后缀,因此最全面的
`joining()`
风格是
`String joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)`
。
在上一个问题中,我们讨论了内置于
`Collectors`
中的
`Stream`
API。在这个类别中,我们还有
`Collectors.joining()`
。这些收集器的目标是将流中的元素
连接
成一个按
*相遇顺序*
的
`String`
。或者,这些收集器可以使用分隔符、前缀和后缀,因此最全面的
`joining()`
风格是
`String joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)`
。
但是,如果我们只想在不使用分隔符的情况下
串联
西瓜的名称,那么这就是一种方法(只是为了好玩,让我们排序并删除重复的名称):
但是,如果我们只想在不使用分隔符的情况下
连接
西瓜的名称,那么这就是一种方法(只是为了好玩,让我们排序并删除重复的名称):
```
java
String
melonNames
=
melons
.
stream
()
...
...
new/java-coding-prob/11.md
浏览文件 @
cb2e8122
...
...
@@ -2209,7 +2209,7 @@ public boolean execute() throws InterruptedException {
# 223 重入读写锁
通常,读写
串联
(例如,读写文件)应基于两个语句完成:
通常,读写
连接
(例如,读写文件)应基于两个语句完成:
*
只要没有编写器(共享悲观锁),读者就可以同时阅读。
...
...
new/java-coding-prob/13.md
浏览文件 @
cb2e8122
...
...
@@ -139,7 +139,7 @@ HttpRequest request = HttpRequest.newBuilder()
# 查询参数生成器
使用包含查询参数的 URI 意味着对这些参数进行编码。完成此任务的 Java 内置方法是
`URLEncoder.encode()`
。但将多个查询参数
串联
起来并对其进行编码会导致类似以下情况:
使用包含查询参数的 URI 意味着对这些参数进行编码。完成此任务的 Java 内置方法是
`URLEncoder.encode()`
。但将多个查询参数
连接
起来并对其进行编码会导致类似以下情况:
```
java
URI
uri
=
URI
.
create
(
"http://localhost:8080/books?name="
+
...
...
new/java-proj/6.md
浏览文件 @
cb2e8122
...
...
@@ -1178,7 +1178,7 @@ private static final Logger log =
log
.
debug
(
"Adding new guess {} to the game"
,
newGuess
);
```
它创建一个调试消息。Slf4j 支持在字符串中使用
`{}`
文本进行格式化。这样,就不需要从小部分追加字符串,而且如果实际的日志项没有发送到日志目标,则不会执行格式化。如果我们以任何形式使用
`String`
串联
来传递一个字符串作为参数,那么格式化就会发生,即使根据示例不需要调试日志记录。
它创建一个调试消息。Slf4j 支持在字符串中使用
`{}`
文本进行格式化。这样,就不需要从小部分追加字符串,而且如果实际的日志项没有发送到日志目标,则不会执行格式化。如果我们以任何形式使用
`String`
连接
来传递一个字符串作为参数,那么格式化就会发生,即使根据示例不需要调试日志记录。
日志记录方法的版本也只有两个参数,
`String`
消息和
`Throwable`
。在这种情况下,日志框架将负责异常的输出和栈跟踪。如果您在异常处理代码中记录了一些内容,请记录异常并让记录器格式化它。
...
...
new/learn-java12-prog/05.md
浏览文件 @
cb2e8122
...
...
@@ -233,7 +233,7 @@ System.out.println(sf); //prints: 23.42
Java11 在
`String`
类中引入了几个新方法。
`repeat()`
方法允许您基于同一字符串的多个
串联
创建新的字符串值,如下代码所示:
`repeat()`
方法允许您基于同一字符串的多个
连接
创建新的字符串值,如下代码所示:
```
java
System
.
out
.
println
(
"ab"
.
repeat
(
3
));
//prints: ababab
...
...
new/learn-java12-prog/06.md
浏览文件 @
cb2e8122
...
...
@@ -420,7 +420,7 @@ System.out.println(list); //prints: [null, S2, s1, s3]
以下
`Map`
方法对于本书的范围来说太复杂了,所以我们只是为了完整起见才提到它们。它们允许组合或计算多个值,并将它们聚集在
`Map`
中的单个现有值中,或创建一个新值:
*
`default V merge(K key, V value, BiFunction<V,V,V> remappingFunction)`
:如果提供的键值对存在且值不是
`null`
,则提供的函数用于计算新值;如果新计算的值是
`null`
,则删除键值对;如果提供的键值对不存在或值是
`null`
,则提供的非空值替换当前值;此方法可用于聚合多个值;例如,可用于
串联
字符串值:
`map.merge(key, value, String::concat)`
;我们将在第 13 章、“函数式编程”中解释
`String::concat`
的含义
*
`default V merge(K key, V value, BiFunction<V,V,V> remappingFunction)`
:如果提供的键值对存在且值不是
`null`
,则提供的函数用于计算新值;如果新计算的值是
`null`
,则删除键值对;如果提供的键值对不存在或值是
`null`
,则提供的非空值替换当前值;此方法可用于聚合多个值;例如,可用于
连接
字符串值:
`map.merge(key, value, String::concat)`
;我们将在第 13 章、“函数式编程”中解释
`String::concat`
的含义
*
`default V compute(K key, BiFunction<K,V,V> remappingFunction)`
:使用提供的函数计算新值
*
`default V computeIfAbsent(K key, Function<K,V> mappingFunction)`
:仅当提供的键尚未与值关联或值为
`null`
时,才使用提供的函数计算新值
*
`default V computeIfPresent(K key, BiFunction<K,V,V> remappingFunction)`
:仅当提供的键已经与值关联并且该值不是
`null`
时,才使用提供的函数计算新值
...
...
new/learn-java12-prog/14.md
浏览文件 @
cb2e8122
...
...
@@ -102,7 +102,7 @@ Stream.of("1 ", 2).forEach(System.out::print); //prints: 1 2
泛型可以帮助程序员避免许多错误,因此应该尽可能地添加泛型。
`of(T... values)`
方法也可用于多个流的
串联
。例如,假设我们有以下四个流,我们希望将它们连接成一个流:
`of(T... values)`
方法也可用于多个流的
连接
。例如,假设我们有以下四个流,我们希望将它们连接成一个流:
```
java
Stream
<
Integer
>
stream1
=
Stream
.
of
(
1
,
2
);
...
...
new/master-java11/01.md
浏览文件 @
cb2e8122
...
...
@@ -122,12 +122,12 @@ HTTP2.0 是 HTTP1.1 协议的继承者,这个新版本的协议解决了前一
Java10 于 2018 年 3 月发布,除了之前介绍的基于时间的版本控制之外,还有以下 11 个特性:
*
局部变量类型推断
*
将 JDK 林整合到单个存储库中
*
将 JDK
森
林整合到单个存储库中
*
垃圾收集接口
*
G1 的并行完全垃圾收集器
*
应用类数据共享
*
线程本地握手
*
删除本机头生成工具(
javah
)
*
删除本机头生成工具(
`javah`
)
*
其他 Unicode 语言标记扩展
*
备用内存设备上的堆分配
*
基于 Java 的 JIT 编译器实验
...
...
@@ -227,7 +227,7 @@ Java11 于 2018 年 9 月发布,具有以下四个特性:
3.
JDK9 对 Java 平台最重要的改变是什么?
4.
Java11 删除了什么:CORBA、Lambda 还是 G1?
5.
CD 支持更快的启动还是更高效的垃圾收集?
6.
什么是
ε
?
6.
什么是
Epsilon
?
7.
`var`
是数据类型、标识符、保留字还是关键字?
8.
哪个 Java 版本向 Java 平台引入了根证书?
9.
哪个版本包括对垃圾收集的增强?
...
...
new/master-java11/02.md
浏览文件 @
cb2e8122
...
...
@@ -11,7 +11,7 @@ JEP 计划是 Oracle 支持开源、开放创新和开放标准的一部分。
在本章中,我们将介绍以下内容:
*
改进的争用锁
*
分段码缓存
*
分段
代
码缓存
*
智能 Java 编译,第二阶段【JEP199】
*
解决 Lint 和 Doclint 警告【JEP212】
*
Javac 的分层属性【JEP215】
...
...
@@ -21,22 +21,22 @@ JEP 计划是 Oracle 支持开源、开放创新和开放标准的一部分。
*
测试 Javac【JEP235】生成的类文件属性
*
在 CD 档案中存储内部字符串【JEP250】
*
为模块化准备 JavaFXUI 控件和 CSS API【JEP253】
*
紧
弦
*
紧
凑字符串
*
将选定的 Xerces 2.11.0 更新合并到 JAXP【JEP255】
*
将 JavaFX/Media 更新为 GStreamer 的更新版本【JEP257】
*
HarfBuzz 字体布局引擎
*
Windows 和 Linux 上的 HiDPI 图形【JEP263】
*
Marlin图形渲染器
*
Unicode 8.0.0[JEP267 和 JEP314]
*
临界
截面预留堆放
区【JEP270】
*
临界
段的预留栈
区【JEP270】
*
语言定义对象模型的动态链接
*
G1 中大型
物体
的附加试验【JEP278】
*
改进测试故障排除
*
优化字符串
串联
*
热点
C++ 单元测试框架【JEP281】
*
G1 中大型
对象
的附加试验【JEP278】
*
改进测试
失败的
故障排除
*
优化字符串
连接
*
Hotspot
C++ 单元测试框架【JEP281】
*
在 Linux 上启用 GTK3【JEP283】
*
新
热点
构建系统
*
将 JDF 林整合到单个存储库中【JEP296】
*
新
Hotspot
构建系统
*
将 JDF
森
林整合到单个存储库中【JEP296】
# 技术要求
...
...
@@ -185,8 +185,8 @@ public double computeSometing(double x, double y) {
那么,Java9、10 和 11 中发生了什么变化?要回答这个问题,我们需要回顾一下 Java8 引入的几个影响 Java 注释的更改:
*
Lambda 表达式
*
重复注
释
*
Java 类型注
释
*
重复注
解
*
Java 类型注
解
这些与 Java8 相关的更改影响了 Java 注释,但并没有改变
`javac`
处理它们的方式。有一些硬编码的解决方案允许
`javac`
处理新的注释,但它们效率不高。此外,这种类型的编码(硬编码解决方法)很难维护。
...
...
@@ -205,7 +205,7 @@ public double computeSometing(double x, double y) {
**语义版本控制**
使用主要、次要、补丁(
`0.0.0`
)模式,如下所示:
*
**主要**
等同于不向后兼容的新 API 更改
*
**次要**
是添加向后兼容的功能
时
*
**次要**
是添加向后兼容的功能
的情况
*
**补丁**
是指错误修复或向后兼容的小改动
Oracle 从 Java9 开始就支持语义版本控制。对于 Java,Java 版本号的前三个元素将使用主次安全模式:
...
...
@@ -217,8 +217,8 @@ Oracle 从 Java9 开始就支持语义版本控制。对于 Java,Java 版本
Java9 有三个版本:初始版本和两个更新。下面列出的版本演示了主要的次要安全模式:
*
Java SE 9
*
Java SE 9.0.1
版
*
Java SE 9.0.4
版
*
Java SE 9.0.1
*
Java SE 9.0.4
如第 1 章、“Java11 场景”所述,在 Java9 之后的版本将遵循
*的时间发布模式年月日*
。使用该模式,Java9 之后的四个版本如下:
...
...
@@ -317,7 +317,7 @@ Java9 引入了更高效的 cd,Java9 进一步改进了这个特性,特别
我们对 CDS 存档使用三个步骤:确定要包含的类、创建存档和使用存档:
1.
阶级决
定
1.
类的确
定
2.
AppCD 存档创建
3.
使用 AppCD 存档
...
...
@@ -476,7 +476,7 @@ Xerces 2.11.0 支持以下标准:
*
**文档对象模型**
(
**DOM**
):
*
3 级:
*
核心
*
加载
并
保存
*
加载
和
保存
*
2 级:
*
核心
*
事件
...
...
@@ -486,7 +486,7 @@ Xerces 2.11.0 支持以下标准:
*
XML 2.0.2 的简单 API
*
Java API for XML Processing(JAXP)1.4
*
XML 1.0 流 API
*
XML
架构
1.0
*
XML
模式
1.0
*
XML 模式 1.1
*
XML 模式定义语言
...
...
@@ -496,7 +496,7 @@ JDK 已更新为包括以下 Xerces 2.11.0 类别:
*
数据类型
*
文档对象模型级别 3
*
XML 架构验证
*
XPointer
公司
*
XPointer
JAXP 的公共 API 在 Java9、10 或 11 中没有改变。
...
...
@@ -657,8 +657,8 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
测试中有两种基本类型的信息:
*
环境
的
*
过
程
*
环境
*
进
程
每种类型的信息将在下一节中描述。
...
...
@@ -671,8 +671,8 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
*
I/O 负载
*
内存空间
*
打开的文件
*
开放式插座
*
进程正在运行
*
打开的套接字
*
正在运行的进程
*
系统事件
*
系统消息
...
...
@@ -681,7 +681,7 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
在测试过程中也有与 Java 进程直接相关的信息。其中包括:
*
C 堆
*
堆
芯
转储
*
堆转储
*
小型转储
*
堆统计信息
*
Java 栈
...
...
@@ -692,7 +692,7 @@ Java 中添加了额外的功能来自动收集信息,以支持测试失败和
在 Java9 之前,字符串连接由
`javac`
翻译成
`StringBuilder : : append`
链。这是一种次优的翻译方法,通常需要预先确定。
增强更改了由
`javac`
生成的字符串
串联
字节码序列,因此它使用
`INVOKEDYNAMIC`
调用。增强的目的是增加优化并支持将来的优化,而不需要重新格式化
`javac`
的字节码。
增强更改了由
`javac`
生成的字符串
连接
字节码序列,因此它使用
`INVOKEDYNAMIC`
调用。增强的目的是增加优化并支持将来的优化,而不需要重新格式化
`javac`
的字节码。
有关
`INVOKEDYNAMIC`
的更多信息,请参见 JEP276。
...
...
@@ -711,7 +711,7 @@ HotSpot 是 JVM 的名称。此 Java 增强旨在支持 JVM 的 C++ 单元测试
*
个性化测试结果
*
与现有基础设施集成
*
内部测试支持
*
阳性和阴性
检测
*
正例和负例
检测
*
短执行时间测试
*
支持所有 JDK9 构建平台
*
测试编译目标
...
...
@@ -741,15 +741,15 @@ GTK+,正式称为 GIMP 工具箱,是一种用于创建图形用户界面的
那么,实现这一增强需要进行哪些更改?对于 JavaFX,更改了三个具体内容:
*
GTK 2 和 GTK 3 都增加了自动测试
*
添加了动态加载
gtk
2 的功能
*
添加了动态加载
GTK
2 的功能
*
为 GTK 3 添加了支持
对于 AWT 和 Swing,实现了以下更改:
*
GTK 2 和 GTK 3 都增加了自动测试
*
`AwtRobot`
迁移到
gtk
3
*
`AwtRobot`
迁移到
GTK
3
*
为 GTK 3 更新了
`FileChooserDilaog`
*
添加了动态加载
gtk
3 的功能
*
添加了动态加载
GTK
3 的功能
*
Swing GTK LnF 经过修改以支持 GTK 3
Swing GTK LnF 是 Swing GTK look and feel 的缩写。
...
...
@@ -784,7 +784,7 @@ Java9 平台由八个不同的存储库组成,如下图所示。在 Java10 中
# 问题
1.
什么是
知足
锁?
1.
什么是
乐观
锁?
2.
什么是代码缓存?
3.
用于定义已分析编译方法的代码堆大小的命令行代码是什么?
4.
警告上下文中的 Lint 和 Doclint 是什么?
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录