- ISBN:9787302672173
- 装帧:平装-胶订
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:376
- 出版时间:2024-10-01
- 条形码:9787302672173 ; 978-7-302-67217-3
本书特色
《函数式与并发编程》主要围绕两个主题:函数式编程和并发编程。本书主要使用Scala 编写代码示例,逐一讲解各编程特性的用法和注意事项,是一本不可多得的工具书,强烈推荐给程序员们。笔者周围的程序员提到这两个主题时都存在一定的畏难情绪,这是正常的,也是可以理解的。程序员不仅需要丰富的编程经验,还要具备深厚的编程设计思维,而这并非一朝一夕就能形成的,需要经年累月的实战和经验积累。我并不推荐读者将本书从头读到尾,这样不利于理解和消化书中的知识点。建议具备一定的函数式编程和并发编程基础的读者建立场景和问题,通过解决问题的方式来学习本书,并在遇到问题时查阅本书。本书也可作为理解这两个主题的途径。
内容简介
"现代语言支持的函数式和并发编程语言特性可能富有挑战性,即使是经验丰富的开发人员,当面对函数式与并发编程时,也可能心生畏惧。面向对象编程的程序员之所以畏惧这些特性,很可能是因为他们对这些特性的工作方式有所误解。为了消除误解,程序员应首先熟悉这些强大的特性背后的抽象概念。 《函数式与并发编程》介绍了一系列核心的编程语言结构,可让你的编程工作变得高效起来,无论你使用的是哪种编程语言,你都能从中获益——在当下的工作中,以及在未来的职业发展中。Charpentier用大量重点突出的小型Scala代码示例阐释了函数式与并发编程的关键概念,并通过完整的案例研究对前述技术和技巧进行深入的探究和阐释。这些技术和技巧将从一种语言传递到另一种语言——包括Java的**版本。利用函数式和并发编程语言特性,开发人员和程序员将能编写出易于理解、调试、优化和改进的优质代码。 另外,本书还讨论了现代编程语言中常用的类型策略,包括类型推断、子类型、多态性、类型类、类型边界和变型。 核心主题 ● 递归和尾递归 ● 模式匹配和代数数据类型 ● 可持久化结构和不可变性 ● 高阶函数和lambda表达式 ● 延迟求值和流 ● 线程和线程池 ● 原子性和锁 ● 同步和线程安全对象 ● 无锁、非阻塞模式 ● Future、Promise和函数并发编程 《函数式与并发编程》中的大部分代码示例都是使用Scala编写的,其中包含函数式与并发编程的许多标准特性;然而,读者不必事先了解Scala,而只需要熟悉一些基本概念,如类、方法、对象、类型、变量、循环和条件语句等。此外,读者在编程方面应有足够的经验,以免因为简单的语法问题而分心。 "
目录
第1章 函数式编程的概念 3
1.1 什么是函数式编程 3
1.2 函数 4
1.3 从函数到函数式编程概念 5
1.4 小结 6
第2章 编程语言中的函数 7
2.1 定义函数 7
2.2 合成函数 8
2.3 定义为方法的函数 9
2.4 定义为方法的运算符 10
2.5 扩展方法 10
2.6 局部函数 11
2.7 重复参数 12
2.8 可选参数 13
2.9 命名参数 13
2.10 类型参数 14
2.11 小结 16
第3章 不可变性 17
3.1 纯函数和非纯函数 17
3.2 动作 18
3.3 表达式与语句 20
3.4 函数变量 22
3.5 不可变对象 23
3.6 可变状态的实现 24
3.7 函数式列表 25
3.8 混合编程 27
3.9 更新可变/不可变对象的集合 28
3.10 小结 30
第4章 案例研究:active-passive集合 31
4.1 面向对象设计 31
4.2 函数值 33
4.3 函数对象 35
4.4 小结 36
第5章 模式匹配与代数数据类型 38
5.1 函数开关 38
5.2 元组 39
5.3 选项 40
5.4 回顾函数式列表 41
5.5 树 43
5.6 示例:列表拉链 46
5.7 提取器 48
5.8 小结 49
第6章 递归程序设计 51
6.1 递归的必要性 51
6.2 递归算法 53
6.3 递归算法的关键原理 55
6.4 递归结构 56
6.5 尾递归 58
6.6 尾递归函数示例 60
6.7 小结 63
第7章 列表递归 64
7.1 等价的递归算法 64
7.2 遍历列表 65
7.3 返回列表 66
7.4 从执行堆栈中构建列表 68
7.5 多个/嵌套列表上的递归 69
7.6 除尾部以外的子列表递归 71
7.7 逆序创建列表 73
7.8 示例:排序 74
7.9 高效地构建列表 77
7.10 小结 78
第8章 案例研究:二叉搜索树 79
8.1 二叉搜索树 79
8.2 二叉搜索树的整数集 80
8.3 未重新平衡情况下的实现 81
8.4 自平衡树 86
8.5 小结 90
第9章 高阶函数 92
9.1 函数作为值 92
9.2 柯里化 95
9.3 函数字面量 96
9.4 函数与方法 99
9.5 单一抽象方法接口 100
9.6 部分应用 100
9.7 闭包 104
9.8 控制反转 107
9.9 小结 108
第10章 标准高阶函数 109
10.1 带有谓词参数的函数 109
10.2 映射和遍历 111
10.3 flatMap 112
10.4 fold和reduce 116
10.5 iterate、tabulate和unfold 118
10.6 sortWith、sortBy、maxBy和minBy 119
10.7 groupBy和groupMap 120
10.8 标准高阶函数的实现 121
10.9 foreach、map、flatMap和for推导式 122
10.10 小结 124
第11章 案例研究:文件树 125
11.1 设计概述 125
11.2 节点搜索辅助函数 126
11.3 字符串表示 126
11.4 构建树 128
11.5 查询 131
11.6 导航 135
11.7 树形拉链 135
11.8 小结 138
第12章 延迟计算 139
12.1 延迟求值的参数 139
12.2 按名称参数 140
12.3 控制抽象 142
12.4 内部领域特定语言 144
12.5 作为延迟求值列表的流 145
12.6 管道流 147
12.7 无限数据结构流 148
12.8 迭代 149
12.9 列表、流、迭代程序和视图 151
12.10 字段和局部变量的延迟求值 154
12.11 示例:子集和 155
12.12 小结 157
第13章 故障处理 158
13.1 例外情况和特殊值 158
13.2 使用Option 160
13.3 使用Try 160
13.4 使用Either 162
13.5 高阶函数和管道 163
13.6 小结 166
第14章 案例研究:蹦床 167
14.1 尾调用优化 167
14.2 用于尾调用的蹦床函数 168
14.3 Java中的尾调用优化 169
14.4 处理非尾调用 170
14.5 小结 174
第15章 类型(及相关概念) 175
15.1 类型策略 175
15.2 类型集合 179
15.3 类型服务 180
15.4 抽象数据类型 181
15.5 类型推断 182
15.6 子类型 185
15.7 多态性 188
15.8 类型变换 190
15.9 类型边界 195
15.10 类型类 199
15.11 小结 203
第Ⅱ部分 并发编程
第16章 并发编程的概念 208
16.1 非顺序程序 208
16.2 并发编程相关概念 211
16.3 小结 211
第17章 线程与不确定性 213
17.1 执行线程 213
17.2 使用lambda表达式创建线程 214
17.3 多线程程序的不确定性 215
17.4 线程终止 216
17.5 测试和调试多线程程序 218
17.6 小结 219
第18章 原子性和锁 220
18.1 原子性 220
18.2 非原子操作 222
18.3 原子操作和非原子复合操作 223
18.4 锁 226
18.5 内部锁 227
18.6 选择锁目标 229
18.7 小结 231
第19章 线程安全对象 232
19.1 不可变对象 232
19.2 封装同步策略 233
19.3 避免引用转义 234
19.4 公用锁和私有锁 235
19.5 利用不可变类型 236
19.6 线程安全 239
19.7 小结 240
第20章 案例研究:线程安全队列 242
20.1 作为列表对组的队列 242
20.2 单个公用锁的实现 242
20.3 单个私有锁的实现 245
20.4 应用锁拆分 247
20.5 小结 249
第21章 线程池 250
21.1 即发即弃异步执行 250
21.2 示例:并行服务器 252
21.3 不同类型的线程池 254
21.4 并行集合 256
21.5 小结 260
第22章 同步 261
22.1 同步的必要性 261
22.2 同步器 264
22.3 死锁 265
22.4 使用线程转储调试死锁 267
22.5 Java内存模型 268
22.6 小结 272
第23章 常用同步器 274
23.1 锁 274
23.2 锁存器和栅栏 276
23.3 信号量 278
23.4 条件 279
23.5 阻塞队列 284
23.6 小结 287
第24章 案例研究:并行执行 289
24.1 顺序引用实现 289
24.2 每个任务一个新线程 290
24.3 有界线程数 291
24.4 专用线程池 292
24.5 共享线程池 293
24.6 有界线程池 294
24.7 并行集合 295
24.8 使用条件提交异步任务 295
24.9 双信号量实现 299
24.10 小结 300
第25章 Future与Promise 302
25.1 函数任务 302
25.2 Future作为同步器 303
25.3 超时、故障和取消 306
25.4 Future变体 307
25.5 Promise 308
25.6 示例:线程安全缓存 309
25.7 小结 311
第26章 函数并发编程 312
26.1 阻塞的正确性和性能问题 312
26.2 回调 314
26.3 Future的高阶函数 316
26.4 Future的flatMap函数 318
26.5 示例:重新访问并行服务器 319
26.6 函数并发编程模式 322
26.7 小结 325
第27章 *小化线程阻塞 327
27.1 原子操作 327
27.2 无锁数据结构 330
27.3 fork/join池 332
27.4 异步编程 333
27.5 actor 334
27.6 反应流 337
27.7 非阻塞同步 338
27.8 小结 340
第28章 案例研究:并行策略 341
28.1 问题定义 341
28.2 带超时的顺序实现 342
28.3 使用invokeAny的并行实现 344
28.4 使用CompletionService的并行实现 345
28.5 Scala Future的异步实现 346
28.6 带有CompletableFuture的异步实现 348
28.7 缓存策略的结果 350
28.8 小结 353 —附录和词汇表通过扫描封底二维码获取—
附录 Java和Kotlin的特性 354
词汇表 381
作者简介
Michel Charpentier 是美国新罕布什尔大学(UNH)计算机科学系的副教授。多年来,他一直致力于分布式系统、正式验证以及移动传感器网络等领域的研究。自 1999 年以来,他一直在UNH工作,目前正在讲授编程语言、并发性、形式验证和模型检查等课程。
-
大数据技术导论(第2版)
¥28.9¥41.0 -
微信小程序开发教程
¥37.7¥49.0 -
机器学习
¥69.0¥108.0 -
大模型应用开发极简入门 基于GPT-4和ChatGPT
¥41.9¥59.8 -
C程序设计(第五版)
¥34.5¥59.9 -
数据结构教程(第6版·微课视频·题库版)
¥42.6¥65.0 -
计算机组成原理实验指导与习题解析
¥34.8¥52.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥36.4¥68.0 -
大数据丛书数据可视化(第2版)
¥163.2¥259.0 -
人工智能
¥28.1¥55.0 -
数据结构基础(C语言版)(第2版)
¥42.6¥49.0 -
工业互联网安全创新技术及应用
¥96.0¥128.0 -
AI办公助手 ChatGPT+Office智能办公从入门到实践 80集视频课
¥64.8¥79.8 -
计算机网络基础(微课版)
¥45.6¥55.0 -
零信任架构
¥71.2¥89.0 -
剪映:即梦AI绘画与视频制作从新手到高手
¥62.3¥89.0 -
红蓝攻防 技术与策略(原书第3版)
¥111.2¥139.0 -
RFID与智能卡技术实验指导书
¥29.4¥36.0 -
人工智能导论(第2版)
¥32.8¥39.8 -
Web前端开发基础
¥37.5¥57.0