...
 
Commits (17)
    https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/de4a4a0bce0a27b6cc57f51bae8a8b15c334ce2f Update 07.md 2022-07-08T20:45:54+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/b40c903c5464a02b46687dcf282fec9c223a9462 Update 08.md 2022-07-08T20:46:03+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fa2f0b74306f7b2f28c8d54c5c69c472a7f710b5 Update 09.md 2022-07-08T20:46:13+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/839b190826ff0cce2c02a414eeb5f85cf04ed488 Update 10.md 2022-07-08T20:46:23+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/3653e2d46369840d718359bce3c45cd877e2884a Update 11.md 2022-07-08T20:46:31+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/c96575ed18e20cd23bab03a071d5d7ac69a573b6 Update 12.md 2022-07-08T20:46:39+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/6464b97b1722b0071fc7151d619956ccc917283e Update 13.md 2022-07-08T20:46:50+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/b5b60f9f83fbf2ee22458f49963b30d04259ec62 Update 09.md 2022-07-08T20:59:50+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/61e6a4a4baff56db981c767aadf587befea092a7 Update 1.md 2022-07-11T22:29:40+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/1576448dcc41e58ec28eee14b7ff2f345eb88c42 Update 2.md 2022-07-11T22:30:27+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/44510f6f375889fdd05267f586491f09a39361b9 Update 3.md 2022-07-11T22:30:47+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/e70b4ebb7f027bf5380763713302b3701ed6f393 Update 4.md 2022-07-11T22:31:08+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/265af96f166552c8b99e09809e2165dcb9eb54dd Update 5.md 2022-07-11T22:31:19+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fdc2f2134867ea6d4ecf22f8c979906f9bd932f9 Update 6.md 2022-07-11T22:31:30+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fbe88fef4f54af885b65824c4690c7c4c5b512cd Update 7.md 2022-07-11T22:31:47+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/bf831541580cd580210d345b871379bdc218333b Update 8.md 2022-07-11T22:31:58+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/350ed58d54e56c7539f49716e251c82985f0668e Update 9.md 2022-07-11T22:32:10+08:00 布客飞龙 562826179@qq.com
# 一、从面向对象到函数式编程
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是向读者介绍使用设计模式和 Java 中可用的最新特性编写健壮、可维护和可扩展代码的基本概念。为了实现我们的目标,我们将讨论以下主题:
* 什么是编程范式?
......
# 二、创建型模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习创造模式。创造模式是处理对象创造的模式。在本章中,我们将介绍以下主题:
* 单例模式
......
# 三、行为模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习行为模式。行为模式是关注对象交互、通信和控制流的模式。大多数行为模式是基于组合和委托而不是继承的。我们将在本章中了解以下行为模式:
* 责任链模式
......
# 四、结构模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习结构模式。结构模式是通过利用对象和类之间的关系来创建复杂结构的模式。大多数结构模式都是基于继承的。在本章中,我们将只关注以下 GOF 模式:
* 适配器模式
......
# 五、函数式模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习函数模式,以及通过引入函数式编程风格(现在在最重要的编程语言中是可能的)对传统模式所做的更改。Java8 引入了一些函数式特性,增加了一个新的抽象级别,影响了我们编写一些面向对象设计模式的方式,甚至使其中一些模式变得无关紧要。在本章中,我们将看到设计模式是如何被新的语言特性所改变,甚至取代的。在他的论文《动态语言中的设计模式》中,Peter Norvig 注意到 23 种设计模式中有 16 种更简单,或者被动态语言中现有的语言特征所取代,比如 Dylan。全文见[这个页面](http://norvig.com/design-patterns/)。在这一章中,我们将看到什么可以被取代,以及新出现的模式是怎样和怎样的。正如 peternorvig 在他的论文中所说的,*很久以前,子程序调用只是一种模式*,随着语言的发展,这些模式会发生变化或被替换。
为了运行本章中的代码,我们使用了 Java 中可用的 JShell REPL 工具,可以从 Windows 中的`$JAVA_HOME/bin/jshell on Linux or %JAVA_HOME%/bin/jshell.exe`访问该工具。
......
# 六、让我们开始反应式吧
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
这一章将描述反应式编程范式,以及为什么它能很好地适用于带有函数元素的语言。读者将熟悉反应式编程背后的概念。我们将介绍在创建反应式应用时从观察者模式和迭代器模式中使用的元素。这些示例将使用反应式框架和名为 **RxJava**(版本 2.0)的 Java 实现。
我们将讨论以下主题:
......
# 七、反应式设计模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
在最后一章中,我们讨论了反应式编程风格,并强调了进行反应式编程的重要性。在本章中,我们将逐一回顾反应式编程的四大支柱,即响应性、弹性、弹性和消息驱动,并了解实现这些支柱的各种模式。本章将介绍以下主题:
* 响应模式
......
# 八、应用架构的发展趋势
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
每当我们开始开发一个应用时,我们首先需要确定的是我们将要使用的设计或架构。随着软件行业在过去几十年的成熟,我们用来设计系统的方式也发生了变化。在本章中,我们将讨论我们在最近的过去看到的一些重要的架构趋势,这些趋势至今仍然相关。我们将尝试分析这些架构模式的好、坏和丑,并找出哪种模式能够解决哪种类型的问题。本章将介绍以下主题:
* 什么是应用架构?
......
# 九、Java 最佳实践
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
在本章中,我们将讨论 Java9 和 Java10 中的最佳实践。Java 从 1995 年发布的版本 1.0 到最近的版本 Java10 已经有了很大的发展。我们将快速了解 Java 从一开始到今天的发展历程,但我们将更多地关注 Java9 和 Java10 带来的最新变化。
在本章中,我们将介绍以下主题:
......
# 七、Java 反射类、接口、构造器、方法和字段
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 反射 API 的 17 个问题。从经典主题,如检查和实例化 Java 工件(例如,模块、包、类、接口、超类、构造器、方法、注解和数组),到*合成**桥接*构造或基于嵌套的访问控制(JDK11),本章详细介绍了 Java 反射 API。在本章结束时,Java 反射 API 将不会有任何秘密未被发现,您将准备好向您的同事展示反射可以做什么。
# 问题
......
# 八、函数式编程-基础和设计模式
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 11 个涉及 Java 函数式编程的问题。我们将从一个问题开始,这个问题旨在提供从 0 到函数式接口的完整过程。然后,我们将继续研究 GoF 中的一套设计模式,我们将用 Java 函数风格来解释这些模式。
在本章结束时,您应该熟悉函数式编程,并准备好继续处理一组问题,这些问题允许我们深入研究这个主题。您应该能够使用一堆以函数式风格编写的常用设计模式,并且非常了解如何开发代码以利用函数式接口。
......
# 九、函数式编程——深入研究
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 22 个涉及 Java 函数式编程的问题。这里,我们将重点讨论在流中遇到的涉及经典操作的几个问题(例如,`filter``map`),并讨论无限流、空安全流和缺省方法。这个问题的综合列表将涵盖分组、分区和收集器,包括 JDK12`teeing()`收集器和编写自定义收集器。此外,还将讨论`takeWhile()``dropWhile()`、组合函数、谓词和比较器、Lambda 测试和调试以及其他一些很酷的话题。
一旦您涵盖了本章和上一章,您就可以在生产应用上释放函数式编程了。下面的问题将为您准备各种各样的用例,包括角落用例或陷阱。
......@@ -1266,7 +1274,7 @@ double total = numbers.stream()
然而,要注意那些可能导致不想要的结果的案例。例如,如果我们要计算给定数字的调和平均数,那么就没有一个开箱即用的*归约特例*,因此我们只能依赖`reduce()`,如下所示:
*```java
```java
List<Double> numbers = Arrays.asList(1.0d, 5.0d, 8.0d, 10.0d);
```
......
# 十、并发-线程池、可调用对象和同步器
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 并发的 14 个问题。我们将从线程生命周期以及对象级和类级锁定的几个基本问题开始。然后我们继续讨论 Java 中线程池的一系列问题,包括 JDK8 工作线程池。在那之后,我们有关于`Callable``Future`的问题。然后,我们将几个问题专门讨论 Java 同步器(例如,屏障、信号量和交换器)。在本章结束时,您应该熟悉 Java 并发的主要坐标,并准备好继续处理一组高级问题。
# 问题
......
# 十一、并发-深入探索
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 并发的 13 个问题,涉及 Fork/Join 框架、`CompletableFuture``ReentrantLock``ReentrantReadWriteLock``StampedLock`、原子变量、任务取消、可中断方法、线程局部、死锁等方面。对于任何开发人员来说,并发性都是必需的主题之一,在工作面试中不能被忽视。这就是为什么这一章和最后一章如此重要。读完本章,您将对并发性有相当的了解,这是每个 Java 开发人员都需要的。
# 问题
......
# 十二、`Optional`
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 24 个问题,旨在提请您注意使用`Optional`的几个规则。本节介绍的问题和解决方案基于 Java 语言架构师 Brian Goetz 的定义:
`Optional`旨在为库方法返回类型提供一种有限的机制,在这种情况下,需要有一种明确的方式来表示无结果,并且使用`null`表示这种结果极有可能导致错误。”
......
# 十三、HTTP 客户端和 WebSocket API
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 20 个问题,旨在介绍 HTTP 客户端和 WebSocket API。
你还记得`HttpUrlConnection`吗?好吧,JDK11 附带了 HTTP 客户端 API,它是对`HttpUrlConnection`的重新发明。HTTP 客户端 API 易于使用,支持 HTTP/2(默认)和 HTTP/1.1。为了向后兼容,当服务器不支持 HTTP/2 时,HTTP 客户端 API 将自动从 HTTP/2 降级到 HTTP 1.1。此外,HTTP 客户端 API 支持同步和异步编程模型,并依赖流来传输数据(反应流)。它还支持 WebSocket 协议,该协议用于实时 Web 应用,以较低的消息开销提供客户端-服务器通信。
......