读Java实战(第二版)
文章平均质量分 88
读Java实战(第二版)笔记、感想与总结
躺柒
书既可以读薄也可以读厚
1. 输出才能检验输入;
2. 分享才能集思广益;
3. 完成才能完善,无限完善才能逼近完美;
4. 万事开头难,坚持更难,长期坚持难上加难。
展开
-
Java实战(第二版)读后总结与感想
英] 拉乌尔–加布里埃尔·乌尔玛(Raoul-Gabriel Urma),[意] 马里奥·富斯科(Mario Fusco),[英] 艾伦·米克罗夫特(Alan Mycroft) 著,陆明刚,劳佳 译。乱序或者跳序笔记不易记,适用于章节独立性强的书,还好该书章节独立性强,关联性主要在附录上。说是乱序、跳序,其实,更多地是基于我个人的认知而调整的顺序。详细介绍了新的API的使用和注意事项,避免走弯路和回头路。读薄率31252÷750000≈4.17%附录的信息量很大,也很有意思,值得细读。原创 2023-03-05 07:15:00 · 85 阅读 · 0 评论 -
读Java实战(第二版)笔记01_Java的变化
在数学上常常用来代表类似于函数的东西,它接受一个参数值,并返回true或false。程序可以从输入流中一个一个读取数据项,然后以同样的方式将数据项写入输出流。采用多态和方法重写替代if-then-else来处理这种类型的数据。使用for-each循环,而不用暴露Iterator里面的模板写法。从Java的演进路径来看,它一直致力于让并发编程更容易、出错更少。给接口设计者提供了一种扩充接口的方式,而不会破坏现有的代码。一个容器对象,它既可以包含值,也可以不包含值。将方法和函数(即代码)传递给其他方法的能力。转载 2023-02-05 07:15:00 · 105 阅读 · 1 评论 -
读Java实战(第二版)笔记02_行为参数化Lambda表达式
1.3.1.2.转载 2023-02-06 07:15:00 · 128 阅读 · 1 评论 -
读Java实战(第二版)笔记03_引入和使用流
OptionalInt、OptionalDouble和OptionalLong。纯粹不变的:它没有修改现有状态,但在每次迭代时会创建新的元组。只需要创建一个给定大小的流,而用不着处理流中所有的元素。接受一个Supplier类型的Lambda提供新的值。集合中的每个元素都得先算出来才能添加到集合中。通过查询语句来表达,而不是临时编写一个实现。在并行代码中使用有状态的供应源是不安全的。一个终端操作,执行流水线,并能生成结果。从支持数据处理操作的源生成的元素序列。一个数据源(如集合)来执行一个查询。转载 2023-02-07 07:15:00 · 113 阅读 · 1 评论 -
读Java实战(第二版)笔记04_用流收集数据
方便程序员和可读性是头等大事转载 2023-02-08 07:15:00 · 170 阅读 · 1 评论 -
读Java实战(第二版)笔记05_Collection API的增强功能
除非需要进行某种形式的数据处理并对数据进行转换,否则应该尽量使用工厂方法。要负担分配数组、初始化以及最后对它进行垃圾回收的开销。没有分配数组、初始化以及最后对它进行垃圾回收的开销。由链接列表(LinkedList)实现的。没有Arrays.asSet()标准的HashMap是不带同步的。这个数组被封装于列表中。需要额外分配一个数组。时间复杂度是O(n)转载 2023-02-09 07:15:00 · 125 阅读 · 1 评论 -
读Java实战(第二版)笔记06_新的日期和时间API
以Unix元年时间(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的秒数进行计算。以两个temporal对象的差值的方式来定义它们的对象。以两个temporal对象的差值的方式来定义它们的对象。定义了如何访问temporal对象某个字段的值的接口。弃用API跟新的日期和时间API之间执行互操作。当前时间和伦敦格林尼治子午线时间的差异。java.time.Instant类。java.time.format包。主要用于以秒和纳秒衡量时间的长短。ChronoField枚举。转载 2023-02-10 07:15:00 · 115 阅读 · 0 评论 -
读Java实战(第二版)笔记07_用Optional取代null
包括Java在内的大多数现代程序设计语言为了与更老的语言保持兼容。历史上被引入到程序设计语言中,目的是为了表示变量值的缺失。设计初衷仅仅是要支持能返回Optional对象的语法。操纵由Optional对象构成的Stream。基础类型的Optional对象。和Stream接口的相似之处。类型系统默认会强制进行检查。封装Optional值的类。在类型系统上开了个口子。变相的“null检查”清晰界定变量值缺失原因。破坏了Java的哲学。转载 2023-02-12 07:15:00 · 67 阅读 · 0 评论 -
读Java实战(第二版)笔记08_默认方法
如果还是无法判断,那么继承了多个接口的类必须通过显式覆盖和调用期望的方法,显式地选择使用哪一个默认方法的实现。缺失的方法实现会作为接口的一部分由实现类继承(所以命名为默认实现),而无须由实现类提供。由default修饰符修饰,并像类中声明的其他方法一样包含方法体。通过精简的接口,你能获得最有效的组合,因为你可以只选择需要的实现。从一个拥有100个方法及字段的类进行继承就不是个好主意。函数式接口只包含一个抽象方法,默认方法是种非抽象方法。类可以从多个接口中继承它们的行为(即实现的代码)已经有一个默认的实现。转载 2023-02-13 07:15:00 · 65 阅读 · 0 评论 -
读Java实战(第二版)笔记09_函数式的思考
流水线中的函数不会由于需要等待从另一个方法中读取变量,或者由于需要写入的变量同时有另一个方法正在写而发生中断大多数时候编程的效率要比细微的执行时间差异重要得多转载 2023-02-14 07:15:00 · 43 阅读 · 0 评论 -
读Java实战(第二版)笔记10_函数式编程的技巧
将具备两个参数(比如,x和y)的函数f转化为使用一个参数的函数g,并且这个函数的返回值也是一个函数,它会作为新函数的一个参数。final只能应用于类的字段,无法应用于它指向的对象,如果你想要对对象进行保护,则需要将其中的字段声明为final,以此类推。将所有你愿意接受的作为参数的函数可能带来的副作用以文档的方式记录下来。当一个函数使用的所有参数仅有部分(少于函数的完整参数列表)被传递时。会创建一个新的树,并将其作为结果返回,通过参数的方式实现共享。数据结构的值始终保持一致,不受其他部分变化的影响。转载 2023-02-15 07:15:00 · 86 阅读 · 0 评论 -
读Java实战(第二版)笔记11_语言特性和类库更新
使用int和long参数的addExact、subtractExact、multipleExact、incrementExact、decrementExact和negateExact。Short、Integer、Long、Float和Double类。java.lang.reflect.Executable类。java.util.concurrent.atomic包。java.lang.reflect.Parameter类。老版的Java禁止对同一个声明使用多个同类的注解。使用Map.Entry对象的操作。转载 2023-02-16 07:15:00 · 141 阅读 · 0 评论 -
读Java实战(第二版)笔记12_重构、测试和调试
希望使用这个算法,但是需要对其中的某些行进行改进,才能达到希望的效果”时是非常有用的。通过定义一个代表处理对象的抽象类来实现的,在抽象类中会定义一个字段来记录后续对象。如果需要采用某个算法的框架,同时又希望有一定的灵活度,能对它的某些部分进行改进。涉及重载的上下文里,将匿名类转换为Lambda表达式可能导致最终的代码更加晦涩。匿名类和Lambda表达式中的this和super的含义是不同的。一个或多个该接口的具体实现,它们代表了算法的多种实现。无须向客户暴露实例化的逻辑就能完成对象的创建。转载 2023-02-17 07:15:00 · 48 阅读 · 0 评论 -
读Java实战(第二版)笔记13_Java模块系统
最早提出于2000年,直到Java 9诞生,一直都是实现基于JVM的模块化应用的事实标准。无论你是否在你的应用中使用了CORBA,对CORBA的支持默认都打包在JDK之中。通过模块组织类,可以帮助你清晰地表示应用程序中类与类之间的可见性关系。通过private关键字,借助编译器验证组件中的类是否封装良好。OGSi与新的Java 9模块系统之间并不是完全互斥的。将单体的计算机程序分解为一个个相互独立的特性。导致很高的维护成本并限制了Java的演进。模块中的所有内容都是被封装的。uses和provides。转载 2023-02-18 07:15:00 · 47 阅读 · 0 评论 -
读Java实战(第二版)笔记14_CompletableFuture及反应式编程背后的概念
Java 7为了使用fork/join实现分而治之算法,新增了java.util.concurrent.RecursiveTask。Java 8则增加了对流和流的并行处理(依赖于新增的Lambda表达式)的支持。使用来自多个数据源的内容,将它们聚集在一起,从而简化我们的生活。思维模式是类Future的对象随着时间的推移可以产生很多的结果。使用流(Stream)是对一种线程使用模式的抽象。对并行流的迭代是比显式使用线程更高级的概念。设计和理解并发系统最好的方式是使用图形。思维模式是计算的执行是独立且并发的。转载 2023-02-19 07:15:00 · 49 阅读 · 0 评论 -
读Java实战(第二版)笔记15_并行数据处理与性能
Java没有元组(tuple,用来表示由异类元素组成的有序列表的结构,不需要包装对象),所以你必须创建一个新类来把状态封装起来。ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。并行软件的行为和性能有时是违反直觉的,因此一定要测量,确保你并没有把程序拖得更慢。内部迭代让你可以并行处理一个流,而无须在代码中显式使用和协调不同的线程。转载 2023-02-20 07:15:00 · 81 阅读 · 0 评论 -
读Java实战(第二版)笔记16_组合式异步编程
执行比较耗时的操作时,尤其是那些依赖一个或多个远程服务的操作,使用异步任务可以改善程序的性能,加快程序的响应速度。调用了某个方法,调用方在被调用方执行的过程中会等待,被调用方执行结束返回,调用方取得被调用方的返回值并继续运行。处理流的流水线中如果发生I/O等待,流的延迟特性会让我们很难判断到底什么时候触发了等待。会直接返回,或者至少在被调用方计算完成之前,将它剩余的计算任务交由另一个线程去做。依据等待/计算,或者W/C的比率设定需要使用的线程数。底层依赖的是线程数量固定的通用线程池。转载 2023-02-21 07:15:00 · 108 阅读 · 0 评论 -
读Java实战(第二版)笔记17_反应式编程
组件间完全的解耦合既是实现有效隔离的必要前提,也是保障系统在遭遇失效(韧性)和超大负荷(弹性)时仍能保持响应的基础。多个独立应用可以像一个单一系统那样步调一致地工作,同时其又具备良好的扩展性。以异步的方式处理、整合来自不同系统和源头的数据流。主线程池中运行的线程执行的都为无阻塞的操作。调用它一次与重复调用多次的效果是同样的。blockingSubscribe方法。开辟独立的线程池用于执行阻塞式操作。所有实现该接口的库需要遵守的合约。2013年至2014年间发起。开发反应式应用和系统的规范。转载 2023-02-22 07:15:00 · 64 阅读 · 0 评论 -
读Java实战(第二版)笔记18_基于Lambda的领域特定语言
仅在Lambda首次被调用时需要转换,其后所有的调用都能直接跳过这一步,直接调用之前链接的实现。嵌套函数DSL(nested function DSL)代码的易读性和易理解性在软件中的重要性甚至更胜一筹。需要暴露恰当的类和方法,以使代码的编写逻辑更流畅。为了解决某个特定业务领域问题的一种自定义语言。独立DSL(stand-alone DSL)把Stream API当成DSL去操作集合。介于内部DSL与外部DSL之间的解决方案。SQL是最通用且应用最广泛的DSL。使用Lambda表达式的函数序列。转载 2023-02-23 07:15:00 · 61 阅读 · 0 评论 -
读Java实战(第二版)笔记19_尾声
显式声明模块的依赖性,错误可以在很早的时候,就借由编译检测到。对模块的公有访问、每个模块的访问边界以及内部实现进行区分。将Java SE平台解构成更细粒度的组成部分。声明非递归的方法时,不需要显式地返回类型。行为参数化(Lambda以及方法引用)混合了面向对象和函数式编程的语言。Java 10的局部变量类型推断。只执行运行你的应用所需要的特性。直接使用任何一个Java类库。以使用val关键字替换var。不是任何类都能在运行时加载它。一个类只能被有限的组件访问。Java 9的模块系统。对不变性的更深层支持。转载 2023-02-24 07:15:00 · 61 阅读 · 0 评论