HTML5 WebSocket权威指南
《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少不必要的网络开销和延迟层,如何通过WebSocket对广泛使用的协议(如XMPP和STOMP)进行分层,如何保护WebSocket连接和在企业部署基于 WebSocket的应用程序。主要内容包括: WebSocket API和协议、WebSocket协议通信的例子、WebSocket的安全性和企业部署、内置即时通信和聊天应用程序的WebSocket与XMPP、通过WebSocket的STOMP实现发布/订阅消息传递协议,以及用远程帧缓冲协议实现VNC。,
淘宝技术这十年
《淘宝技术这十年》内容简介:任何网站的发展都不是一蹴而就的。它在发展过程中会遇到各种各样的问题和业务带来的压力。正是这些问题和压力推动着技术的进步和发展,而技术的发展反过来又会促进业务的更大提升。如今淘宝网的流量排名已是全球前15名、国内前3名,其系统服务器也从一台发展到万台以上。, 《淘宝技术这十年》从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其所有主动和被动的技术变革的前因后果。书中有幕后故事、产品经验、架构演进、技术启蒙,也有大牛成长、业内八卦、失败案例、励志故事。《淘宝技术这十年》文风流畅,有技术人员特有的幽默感;内容积极正面,有现场感,全部是作者亲身经历。
从Paxos到Zookeeper 分布式一致性原理与实践
《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper。全书共8章,分为五部分:第一部分(第1章)主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论;第二部分(第2~4章)介绍了2PC、3PC和Paxos三种分布式一致性协议,并着重讲解了ZooKeeper中使用的一致性协议——ZAB协议;第三部分(第5~6章)介绍了ZooKeeper的使用方法,包括客户端API的使用以及对ZooKeeper服务的部署与运行,并结合真实的分布式应用场景,总结了ZooKeeper使用的最佳实践;第四部分(第7章)对ZooKeeper的架构设计和实现原理进行了深入分析,包含系统模型、Leader选举、客户端与服务端的工作原理、请求处理,以及服务器角色的工作流程和数据存储等;第五部分(第8章)介绍了ZooKeeper的运维实践,包括配置详解和监控管理等,重点讲解了如何构建一个高可用的ZooKeeper服务。
目录 · · · · · ·
第1章分布式架构 1
1.1 从集中式到分布式 1
1.1.1 集中式的特点 2
1.1.2 分布式的特点 2
1.1.3 分布式环境的各种问题 4
1.2 从ACID到CAP/BASE 5
1.2.1 ACID 5
1.2.2 分布式事务 8
1.2.3 CAP和BASE理论 9
小结 15
第2章一致性协议 17
2.1 2PC与3PC 17
2.1.1 2PC 17
2.1.2 3PC 21
2.2 Paxos算法 24
2.2.1 追本溯源 25
2.2.2 Paxos理论的诞生 26
2.2.3 Paxos算法详解 27
小结 37
第3章Paxos的工程实践 39
3.1 Chubby 39
3.1.1 概述 39
3.1.2 应用场景 40
3.1.3 设计目标 40
3.1.4 Chubby技术架构 43
3.1.5 Paxos协议实现 52
3.2 Hypertable 55
3.2.1 概述 55
3.2.2 算法实现 57
小结 58
第4章ZooKeeper与Paxos 59
4.1 初识ZooKeeper 59
4.1.1 ZooKeeper介绍 59
4.1.2 ZooKeeper从何而来 62
4.1.3 ZooKeeper的基本概念 62
4.1.4 为什么选择ZooKeeper 64
4.2 ZooKeeper的ZAB协议 65
4.2.1 ZAB协议 65
4.2.2 协议介绍 66
4.2.3 深入ZAB协议 71
4.2.4 ZAB与Paxos算法的联系与区别 77
小结 78
第5章使用ZooKeeper 79
5.1 部署与运行 79
5.1.1 系统环境 79
5.1.2 集群与单机 80
5.1.3 运行服务 84
5.2 客户端脚本 88
5.2.1 创建 88
5.2.2 读取 89
5.2.3 更新 90
5.2.4 删除 91
5.3 Java客户端API使用 91
5.3.1 创建会话 91
5.3.2 创建节点 95
5.3.3 删除节点 99
5.3.4 读取数据 100
5.3.5 更新数据 109
5.3.6 检测节点是否存在 113
5.3.7 权限控制 115
5.4 开源客户端 120
5.4.1 ZkClient 120
5.4.2 Curator 130
小结 162
第6章ZooKeeper的典型应用场景 163
6.1 典型应用场景及实现注 163
6.1.1 数据发布/订阅 164
6.1.2 负载均衡 166
6.1.3 命名服务 170
6.1.4 分布式协调/通知 173
6.1.5 集群管理 179
6.1.6 Master选举 185
6.1.7 分布式锁 188
6.1.8 分布式队列 194
小结 197
6.2 ZooKeeper在大型分布式系统中的应用 197
6.2.1 Hadoop 198
6.2.2 HBase 203
6.2.3 Kafka 207
6.3 ZooKeeper在阿里巴巴的实践与应用 213
6.3.1 案例一消息中间件:Metamorphosis 213
6.3.2 案例二 RPC服务框架:Dubbo 217
6.3.3 案例三基于MySQL Binlog的增量订阅和消费组件:Canal 219
6.3.4 案例四分布式数据库同步系统:Otter 223
6.3.5 案例五轻量级分布式通用搜索平台:终搜 226
6.3.6 案例六实时计算引擎:JStorm 238
小结 242
第7章ZooKeeper技术内幕 243
7.1 系统模型 243
7.1.1 数据模型 243
7.1.2 节点特性 244
7.1.3 版本——保证分布式数据原子性操作 246
7.1.4 Watcher——数据变更的通知 249
7.1.5 ACL——保障数据的安全 265
7.2 序列化与协议 272
7.2.1 Jute介绍 272
7.2.2 使用Jute进行序列化 273
7.2.3 深入Jute 275
7.2.4 通信协议 277
7.3 客户端 284
7.3.1 一次会话的创建过程 286
7.3.2 服务器地址列表 289
7.3.3 ClientCnxn:网络I/O 295
7.4 会话 298
7.4.1 会话状态 298
7.4.2 会话创建 299
7.4.3 会话管理 304
7.4.4 会话清理 307
7.4.5 重连 309
7.5 服务器启动 311
7.5.1 单机版服务器启动 312
7.5.2 集群版服务器启动 315
7.6 Leader选举 321
7.6.1 Leader选举概述 321
7.6.2 Leader选举的算法分析 323
7.6.3 Leader选举的实现细节 328
7.7 各服务器角色介绍 335
7.7.1 Leader 335
7.7.2 Follower 338
7.7.3 Observer 339
7.7.4 集群间消息通信 339
7.8 请求处理 342
7.8.1 会话创建请求 343
7.8.2 SetData请求 351
7.8.3 事务请求转发 354
7.8.4 GetData请求 355
7.9 数据与存储 356
7.9.1 内存数据 356
7.9.2 事务日志 358
7.9.3 snapshot——数据快照 364
7.9.4 初始化 368
7.9.5 数据同步 372
小结 376
第8章ZooKeeper运维 379
8.1 配置详解 379
8.1.1 基本配置 379
8.1.2 高级配置 380
8.2 四字命令 384
8.3 JMX 390
8.3.1 开启远程JMX 390
8.3.2 通过JConsole连接ZooKeeper 391
8.4 监控 397
8.4.1 实时监控 397
8.4.2 数据统计 398
8.5 构建一个高可用的集群 398
8.5.1 集群组成 398
8.5.2 容灾 399
8.5.3 扩容与缩容 402
8.6 日常运维 402
8.6.1 数据与日志管理 402
8.6.2 Too many connections 404
8.6.3 磁盘管理 405
小结 405
附录AWindows平台上部署ZooKeeper 406
附录B从源代码开始构建 409
附录C各发行版本重大更新记录 414
附录DZooKeeper源代码阅读指引 418
linux命令行和shell脚本编程 第三版
目录 · · · · · ·
第一部分 Linux 命令行
第1章 初识Linux shell 2
1.1 什么是Linux 2
1.1.1 深入探究Linux内核 3
1.1.2 GNU工具 6
1.1.3 Linux桌面环境 8
1.2 Linux发行版 12
1.2.1 核心Linux发行版 13
1.2.2 特定用途的Linux发行版 13
1.2.3 Linux LiveCD 14
1.3 小结 15
第2章 走进shell 16
2.1 进入命令行 16
2.1.1 控制台终端 17
2.1.2 图形化终端 17
2.2 通过Linux控制台终端访问CLI 18
2.3 通过图形化终端仿真访问CLI 20
2.4 使用GNOME Terminal仿真器 21
2.4.1 访问GNOME Terminal 21
2.4.2 菜单栏 22
2.5 使用Konsole Terminal仿真器 25
2.5.1 访问Konsole Terminal 25
2.5.2 菜单栏 26
2.6 使用xterm终端仿真器 29
2.6.1 访问xterm 30
2.6.2 命令行参数 30
2.7 小结 32
第3章 基本的bash shell命令 33
3.1 启动shell 33
3.2 shell提示符 34
3.3 bash手册 34
3.4 浏览文件系统 37
3.4.1 Linux文件系统 37
3.4.2 遍历目录 40
3.5 文件和目录列表 42
3.5.1 基本列表功能 42
3.5.2 显示长列表 44
3.5.3 过滤输出列表 45
3.6 处理文件 46
3.6.1 创建文件 47
3.6.2 复制文件 47
3.6.3 制表键自动补全 50
3.6.4 链接文件 50
3.6.5 重命名文件 52
3.6.6 删除文件 54
3.7 处理目录 55
3.7.1 创建目录 55
3.7.2 删除目录 55
3.8 查看文件内容 58
3.8.1 查看文件类型 58
3.8.2 查看整个文件 59
3.8.3 查看部分文件 61
3.9 小结 63
第4章 更多的bash shell命令 64
4.1 监测程序 64
4.1.1 探查进程 64
4.1.2 实时监测进程 70
4.1.3 结束进程 72
4.2 监测磁盘空间 73
4.2.1 挂载存储媒体 73
4.2.2 使用df命令 76
4.2.3 使用du命令 77
4.3 处理数据文件 78
4.3.1 排序数据 78
4.3.2 搜索数据 81
4.3.3 压缩数据 83
4.3.4 归档数据 84
4.4 小结 85
第5章 理解shell 86
5.1 shell的类型 86
5.2 shell的父子关系 88
5.2.1 进程列表 91
5.2.2 别出心裁的子shell用法 93
5.3 理解shell的内建命令 96
5.3.1 外部命令 96
5.3.2 内建命令 97
5.4 小结 101
第6章 使用Linux环境变量 103
6.1 什么是环境变量 103
6.1.1 全局环境变量 104
6.1.2 局部环境变量 105
6.2 设置用户定义变量 106
6.2.1 设置局部用户定义变量 106
6.2.2 设置全局环境变量 107
6.3 删除环境变量 109
6.4 默认的shell环境变量 110
6.5 设置PATH环境变量 113
6.6 定位系统环境变量 114
6.6.1 登录shell 115
6.6.2 交互式shell进程 119
6.6.3 非交互式shell 120
6.6.4 环境变量持久化 121
6.7 数组变量 121
6.8 小结 122
第7章 理解Linux文件权限 124
7.1 Linux的安全性 124
7.1.1 /etc/passwd文件 124
7.1.2 /etc/shadow文件 126
7.1.3 添加新用户 127
7.1.4 删除用户 129
7.1.5 修改用户 130
7.2 使用Linux组 132
7.2.1 /etc/group文件 133
7.2.2 创建新组 133
7.2.3 修改组 134
7.3 理解文件权限 135
7.3.1 使用文件权限符 135
7.3.2 默认文件权限 136
7.4 改变安全性设置 138
7.4.1 改变权限 138
7.4.2 改变所属关系 139
7.5 共享文件 140
7.6 小结 142
第8章 管理文件系统 143
8.1 探索Linux文件系统 143
8.1.1 基本的Linux文件系统 143
8.1.2 日志文件系统 145
8.1.3 写时复制文件系统 147
8.2 操作文件系统 147
8.2.1 创建分区 147
8.2.2 创建文件系统 151
8.2.3 文件系统的检查与修复 153
8.3 逻辑卷管理 154
8.3.1 逻辑卷管理布局 154
8.3.2 Linux中的LVM 155
8.3.3 使用Linux LVM 156
8.4 小结 162
第9章 安装软件程序 163
9.1 包管理基础 163
9.2 基于Debian的系统 164
9.2.1 用aptitude管理软件包 164
9.2.2 用aptitude安装软件包 166
9.2.3 用aptitude更新软件 168
9.2.4 用aptitude卸载软件 169
9.2.5 aptitude仓库 169
9.3 基于Red Hat的系统 171
9.3.1 列出已安装包 171
9.3.2 用yum安装软件 173
9.3.3 用yum更新软件 174
9.3.4 用yum卸载软件 174
9.3.5 处理损坏的包依赖关系 175
9.3.6 yum软件仓库 176
9.4 从源码安装 177
9.5 小结 180
第10章 使用编辑器 181
10.1 vim编辑器 181
10.1.1 检查vim软件包 181
10.1.2 vim基础 183
10.1.3 编辑数据 185
10.1.4 复制和粘贴 185
10.1.5 查找和替换 186
10.2 nano编辑器 187
10.3 emacs编辑器 188
10.3.1 检查emacs软件包 189
10.3.2 在控制台中使用emacs 190
10.3.3 在GUI环境中使用emacs 195
10.4 KDE系编辑器 196
10.4.1 KWrite编辑器 196
10.4.2 Kate编辑器 200
10.5 GNOME编辑器 202
10.5.1 启动gedit 203
10.5.2 基本的gedit功能 203
10.5.3 设定偏好设置 204
10.6 小结 206
第二部分 shell脚本编程基础
第11章 构建基本脚本 210
11.1 使用多个命令 210
11.2 创建shell脚本文件 211
11.3 显示消息 212
11.4 使用变量 214
11.4.1 环境变量 214
11.4.2 用户变量 215
11.4.3 命令替换 216
11.5 重定向输入和输出 218
11.5.1 输出重定向 218
11.5.2 输入重定向 219
11.6 管道 220
11.7 执行数学运算 222
11.7.1 expr命令 223
11.7.2 使用方括号 224
11.7.3 浮点解决方案 225
11.8 退出脚本 228
11.8.1 查看退出状态码 228
11.8.2 exit命令 229
11.9 小结 231
第12章 使用结构化命令 232
12.1 使用if-then语句 232
12.2 if-then-else语句 235
12.3 嵌套if 235
12.4 test命令 238
12.4.1 数值比较 240
12.4.2 字符串比较 242
12.4.3 文件比较 246
12.5 复合条件测试 254
12.6 if-then的高级特性 255
12.6.1 使用双括号 255
12.6.2 使用双方括号 256
12.7 case命令 257
12.8 小结 258
第13章 更多的结构化命令 260
13.1 for命令 260
13.1.1 读取列表中的值 261
13.1.2 读取列表中的复杂值 262
13.1.3 从变量读取列表 263
13.1.4 从命令读取值 264
13.1.5 更改字段分隔符 265
13.1.6 用通配符读取目录 266
13.2 C语言风格的for命令 268
13.2.1 C语言的for命令 268
13.2.2 使用多个变量 269
13.3 while命令 270
13.3.1 while的基本格式 270
13.3.2 使用多个测试命令 271
13.4 until命令 272
13.5 嵌套循环 274
13.6 循环处理文件数据 276
13.7 控制循环 277
13.7.1 break命令 277
13.7.2 continue命令 280
13.8 处理循环的输出 282
13.9 实例 283
13.9.1 查找可执行文件 284
13.9.2 创建多个用户账户 285
13.10 小结 286
第14章 处理用户输入 287
14.1 命令行参数 287
14.1.1 读取参数 287
14.1.2 读取脚本名 289
14.1.3 测试参数 291
14.2 特殊参数变量 292
14.2.1 参数统计 292
14.2.2 抓取所有的数据 294
14.3 移动变量 295
14.4 处理选项 296
14.4.1 查找选项 297
14.4.2 使用getopt命令 300
14.4.3 使用更高级的getopts 302
14.5 将选项标准化 305
14.6 获得用户输入 306
14.6.1 基本的读取 306
14.6.2 超时 307
14.6.3 隐藏方式读取 308
14.6.4 从文件中读取 309
14.7 小结 309
第15章 呈现数据 311
15.1 理解输入和输出 311
15.1.1 标准文件描述符 311
15.1.2 重定向错误 313
15.2 在脚本中重定向输出 315
15.2.1 临时重定向 315
15.2.2 永久重定向 316
15.3 在脚本中重定向输入 317
15.4 创建自己的重定向 317
15.4.1 创建输出文件描述符 318
15.4.2 重定向文件描述符 318
15.4.3 创建输入文件描述符 319
15.4.4 创建读写文件描述符 320
15.4.5 关闭文件描述符 321
15.5 列出打开的文件描述符 322
15.6 阻止命令输出 323
15.7 创建临时文件 324
15.7.1 创建本地临时文件 324
15.7.2 在/tmp目录创建临时文件 325
15.7.3 创建临时目录 326
15.8 记录消息 327
15.9 实例 328
15.10 小结 330
第16章 控制脚本 331
16.1 处理信号 331
16.1.1 重温Linux信号 331
16.1.2 生成信号 332
16.1.3 捕获信号 334
16.1.4 捕获脚本退出 335
16.1.5 修改或移除捕获 335
16.2 以后台模式运行脚本 338
16.2.1 后台运行脚本 338
16.2.2 运行多个后台作业 340
16.3 在非控制台下运行脚本 341
16.4 作业控制 342
16.4.1 查看作业 342
16.4.2 重启停止的作业 344
16.5 调整谦让度 345
16.5.1 nice命令 345
16.5.2 renice命令 346
16.6 定时运行作业 346
16.6.1 用at命令来计划执行作业 347
16.6.2 安排需要定期执行的脚本 349
16.6.3 使用新shell启动脚本 352
16.7 小结 353
第三部分 高级shell脚本编程
第17章 创建函数 356
17.1 基本的脚本函数 356
17.1.1 创建函数 357
17.1.2 使用函数 357
17.2 返回值 359
17.2.1 默认退出状态码 359
17.2.2 使用return命令 360
17.2.3 使用函数输出 361
17.3 在函数中使用变量 362
17.3.1 向函数传递参数 362
17.3.2 在函数中处理变量 364
17.4 数组变量和函数 366
17.4.1 向函数传数组参数 366
17.4.2 从函数返回数组 368
17.5 函数递归 369
17.6 创建库 370
17.7 在命令行上使用函数 371
17.7.1 在命令行上创建函数 372
17.7.2 在.bashrc文件中定义函数 372
17.8 实例 374
17.8.1 下载及安装 374
17.8.2 构建库 374
17.8.3 shtool库函数 376
17.8.4 使用库 376
17.9 小结 377
第18章 图形化桌面环境中的脚本编程 378
18.1 创建文本菜单 378
18.1.1 创建菜单布局 379
18.1.2 创建菜单函数 380
18.1.3 添加菜单逻辑 380
18.1.4 整合shell脚本菜单 381
18.1.5 使用select命令 382
18.2 制作窗口 384
18.2.1 dialog包 384
18.2.2 dialog选项 389
18.2.3 在脚本中使用dialog命令 391
18.3 使用图形 393
18.3.1 KDE环境 393
18.3.2 GNOME环境 396
18.4 小结 400
第19章 初识sed和gawk 401
19.1 文本处理 401
19.1.1 sed编辑器 401
19.1.2 gawk程序 404
19.2 sed编辑器基础 410
19.2.1 更多的替换选项 410
19.2.2 使用地址 411
19.2.3 删除行 414
19.2.4 插入和附加文本 415
19.2.5 修改行 417
19.2.6 转换命令 418
19.2.7 回顾打印 419
19.2.8 使用sed处理文件 421
19.3 小结 423
第20章 正则表达式 424
20.1 什么是正则表达式 424
20.1.1 定义 424
20.1.2 正则表达式的类型 425
20.2 定义BRE模式 426
20.2.1 纯文本 426
20.2.2 特殊字符 427
20.2.3 锚字符 428
20.2.4 点号字符 430
20.2.5 字符组 430
20.2.6 排除型字符组 432
20.2.7 区间 433
20.2.8 特殊的字符组 434
20.2.9 星号 434
20.3 扩展正则表达式 436
20.3.1 问号 436
20.3.2 加号 437
20.3.3 使用花括号 437
20.3.4 管道符号 438
20.3.5 表达式分组 439
20.4 正则表达式实战 439
20.4.1 目录文件计数 440
20.4.2 验证电话号码 441
20.4.3 解析邮件地址 443
20.5 小结 444
第21章 sed进阶 445
21.1 多行命令 445
21.1.1 next命令 446
21.1.2 多行删除命令 449
21.1.3 多行打印命令 449
21.2 保持空间 450
21.3 排除命令 451
21.4 改变流 454
21.4.1 分支 454
21.4.2 测试 455
21.5 模式替代 456
21.5.1 &符号 457
21.5.2 替代单独的单词 457
21.6 在脚本中使用sed 458
21.6.1 使用包装脚本 458
21.6.2 重定向sed的输出 459
21.7 创建sed实用工具 460
21.7.1 加倍行间距 460
21.7.2 对可能含有空白行的文件加倍行间距 460
21.7.3 给文件中的行编号 461
21.7.4 打印末尾行 462
21.7.5 删除行 463
21.7.6 删除HTML标签 466
21.8 小结 467
第22章 gawk进阶 469
22.1 使用变量 469
22.1.1 内建变量 469
22.1.2 自定义变量 474
22.2 处理数组 476
22.2.1 定义数组变量 476
22.2.2 遍历数组变量 477
22.2.3 删除数组变量 478
22.3 使用模式 478
22.3.1 正则表达式 478
22.3.2 匹配操作符 479
22.3.3 数学表达式 480
22.4 结构化命令 480
22.4.1 if语句 480
22.4.2 while语句 482
22.4.3 do-while语句 483
22.4.4 for语句 484
22.5 格式化打印 484
22.6 内建函数 487
22.6.1 数学函数 487
22.6.2 字符串函数 488
22.6.3 时间函数 490
22.7 自定义函数 490
22.7.1 定义函数 490
22.7.2 使用自定义函数 491
22.7.3 创建函数库 491
22.8 实例 492
22.9 小结 493
第23章 使用其他shell 495
23.1 什么是dash shell 495
23.2 dash shell的特性 496
23.2.1 dash命令行参数 496
23.2.2 dash环境变量 497
23.2.3 dash内建命令 499
23.3 dash脚本编程 500
23.3.1 创建dash脚本 500
23.3.2 不能使用的功能 500
23.4 zsh shell 502
23.5 zsh shell的组成 503
23.5.1 shell选项 503
23.5.2 内建命令 504
23.6 zsh脚本编程 508
23.6.1 数学运算 508
23.6.2 结构化命令 509
23.6.3 函数 510
23.7 小结 510
第四部分 创建实用的脚本
第24章 编写简单的脚本实用工具 514
24.1 归档 514
24.2 管理用户账户 523
24.2.1 需要的功能 523
24.2.2 创建脚本 530
24.2.3 运行脚本 535
24.3 监测磁盘空间 537
24.3.1 需要的功能 537
24.3.2 创建脚本 540
24.3.3 运行脚本 541
24.4 小结 542
第25章 创建与数据库、Web及电子
邮件相关的脚本 543
25.1 MySQL数据库 543
25.1.1 使用MySQL 543
25.1.2 在脚本中使用数据库 552
25.2 使用Web 555
25.2.1 安装Lynx 556
25.2.2 lynx命令行 557
25.2.3 Lynx配置文件 558
25.2.4 从Lynx中获取数据 559
25.3 使用电子邮件 561
25.4 小结 564
第26章 一些小有意思的脚本 565
26.1 发送消息 565
26.1.1 功能分析 565
26.1.2 创建脚本 568
26.2 获取格言 573
26.2.1 功能分析 574
26.2.2 创建脚本 577
26.3 编造借口 583
26.3.1 功能分析 583
26.3.2 创建脚本 586
26.4 小结 587
附录A bash命令快速指南 589
附录B sed和gawk快速指南 597
【带目录】图解设计模式 结城浩
原版连续畅销12年、重印25次!
194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式
《程序员的数学》《数学女孩》作者结城浩又一力作
◆图文并茂
194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式
◆通俗易懂
用浅显的语言逐一讲解23种设计模式,读完此书会发现GoF书不再晦涩难懂
◆专业实用
编写了Java程序代码来实现设计模式,每章附带练习题和答案,用以熟练掌握设计 模式
◆拓展进阶
必要时对Java语言的功能进行了补充说明,可加深对Java的理解。此外,如果了解C++语言,同样可以轻松理解本书内容
本书适合以下读者阅读
•对面向对象开发感兴趣的人
•对设计模式感兴趣的人(特别是阅读了GoF书但是觉得难以理解的人)
•所有Java程序员(特别是对抽象类和接口的理解不充分的人)
目录 · · · · · ·
第1部分 适应设计模式 1
第1章 Iterator模式——一个一个遍历 1
1.1 Iterator模式 2
1.2 示例程序 2
Aggregate接口 3
Iterator接口 5
Book类 5
BookShelf类 5
BookShelfIteraotr类 6
Main类 7
1.3 Iterator模式中的登场角色 8
1.4 拓展思路的要点 9
不管实现如何变化,都可以使用Iterator 9
难以理解抽象类和接口 9
Aggregate和Iterator的对应 9
容易弄错“下一个” 10
还容易弄错“最后一个” 10
多个Iterator 10
迭代器的种类多种多样 10
不需要deleteIterator 10
1.5 相关的设计模式 11
1.6 本章所学知识 11
1.7 练习题 11
第2章 Adapter模式——加个“适配器”以便于复用 13
2.1 Adapter模式 14
2.2 示例程序(1)(使用继承的适配器) 14
Banner类 15
Print接口 16
PrintBanner类 16
Main类 16
2.3 示例程序(2)(使用委托的示例程序) 17
Print类 18
PrintBanner类 18
2.4 Adapter模式中的登场角色 18
2.5 拓展思路的要点 19
什么时候使用Adapter模式 19
如果没有现成的代码 20
版本升级与兼容性 20
功能完全不同的类 20
2.6 相关的设计模式 20
2.7 本章所学知识 21
2.8 练习题 21
第2部分 交给子类 23
第3章 Template Method模式——将具体处理交给子类 23
3.1 Template Method模式 24
什么是模板 24
什么是Template Method模式 24
3.2 示例程序 24
AbstractDisplay类 25
CharDisplay类 26
StringDisplay类 27
Main类 28
3.3 Template Method模式中的登场角色 28
3.4 拓展思路的要点 29
可以使逻辑处理通用化 29
父类与子类之间的协作 29
父类与子类的一致性 29
3.5 相关的设计模式 30
3.6 延伸阅读:类的层次与抽象类 30
父类对子类的要求 30
抽象类的意义 30
父类与子类之间的协作 31
3.7 本章所学知识 31
3.8 练习题 31
第4章 Factory Method模式——将实例的生成交给子类 33
4.1 Factory Method模式 34
4.2 示例程序 34
Product类 35
Factory类 35
IDCard类 36
IDCardFactory类 36
Main类 37
4.3 Factory Method模式中的登场角色 37
4.4 拓展思路的要点 39
框架与具体加工 39
生成实例——方法的三种实现方式 39
使用模式与开发人员之间的沟通 40
4.5 相关的设计模式 40
4.6 本章所学知识 41
4.7 练习题 41
第3部分 生成实例 43
第5章 Singleton模式——只有一个实例 43
5.1 Singleton模式 44
5.2 示例程序 44
Singleton类 44
Main类 45
5.3 Singleton模式中的登场角色 46
5.4 拓展思路的要点 46
为什么必须设置限制 46
何时生成这个唯一的实例 46
5.5 相关的设计模式 47
5.6 本章所学知识 47
5.7 练习题 47
第6章 Prototype模式——通过复制生成实例 49
6.1 Prototype模式 50
6.2 示例程序 50
Product接口 51
Manager类 52
MessageBox类 52
UnderlinePen类 53
Main类 54
6.3 Prototype模式中的登场角色 55
6.4 拓展思路的要点 56
不能根据类来生成实例吗 56
类名是束缚吗 56
6.5 相关的设计模式 57
6.6 延伸阅读:clone方法和java.lang.Clonable接口 57
Java语言的clone 57
clone方法是在哪里定义的 58
需要实现Cloneable的哪些方法 58
clone方法进行的是浅复制 58
6.7 本章所学知识 58
6.8 练习题 59
第7章 Builder模式——组装复杂的实例 61
7.1 Builder模式 62
7.2 示例程序 62
Builder类 63
Director类 63
TextBuilder类 64
HTMLBuilder类 65
Main类 65
7.3 Builder模式中的登场角色 67
7.4 相关的设计模式 69
7.5 拓展思路的要点 69
谁知道什么 69
设计时能够决定的事情和不能决定的事情 70
代码的阅读方法和修改方法 70
7.6 本章所学知识 70
7.7 练习题 70
第8章 Abstract Factory模式——将关联零件组装成产品 73
8.1 Abstract Factory模式 74
8.2 示例程序 74
抽象的零件:Item类 77
抽象的零件:Link类 78
抽象的零件:Tray类 78
抽象的产品:Page类 79
抽象的工厂:Factory类 79
使用工厂将零件组装称为产品:Main类 80
具体的工厂:ListFactory类 81
具体的零件:ListLink类 82
具体的零件:ListTray类 82
具体的产品:ListPage类 83
8.3 为示例程序增加其他工厂 84
具体的工厂:TableFactory类 85
具体的零件:TableLink类 86
具体的零件:TableTray类 86
具体的产品:TablePage类 87
8.4 Abstract Factory模式中的登场角色 87
8.5 拓展思路的要点 89
易于增加具体的工厂 89
难以增加新的零件 89
8.6 相关的设计模式 89
8.7 延伸阅读:各种生成实例的方法的介绍 90
8.8 本章所学知识 91
8.9 练习题 91
第4部分 分开考虑 93
第9章 Bridge模式——将类的功能层次结构与实现层次结构分离 93
9.1 Bridge模式 94
9.2 示例程序 95
类的功能层次结构:Display类 96
类的功能层次结构:CountDisplay类 97
类的实现层次结构:DisplayImpl类 97
类的实现层次结构:StringDisplayImpl类 98
Main类 98
9.3 Bridge模式中的登场角色 99
9.4 拓展思路的要点 100
分开后更容易扩展 100
继承是强关联,委托是弱关联 100
9.5 相关的设计模式 101
9.6 本章所学知识 101
9.7 练习题 102
第10章 Strategy模式——整体地替换算法 103
10.1 Strategy模式 104
10.2 示例程序 104
Hand类 105
Strategy接口 106
WinningStrategy类 106
ProbStrategy类 107
Player类 109
Main类 109
10.3 Strategy模式中的登场角色 111
10.4 拓展思路的要点 112
为什么需要特意编写Strategy角色 112
程序运行中也可以切换策略 112
10.5 相关的设计模式 113
10.6 本章所学知识 113
10.7 练习题 113
第5部分 一致性 117
第11章 Composite模式——容器与内容的一致性 117
11.1 Composite模式 118
11.2 示例程序 118
Entry类 119
File类 120
Directory类 121
FileTreatMentException类 122
Main类 122
11.3 Composite模式中的登场角色 124
11.4 拓展思路的要点 125
多个和单个的一致性 125
Add方法应该放在哪里 126
到处都存在递归结构 126
11.5 相关的设计模式 126
11.6 本章所学知识 127
11.7 练习题 127
第12章 Decorator模式——装饰边框与被装饰物的一致性 129
12.1 Decorator模式 130
12.2 示例程序 130
Display类 131
StringDisplay类 132
Border类 132
SideBorder类 133
FullBorder类 134
Main类 135
12.3 Decorator模式中的登场角色 136
12.4 拓展思路的要点 137
接口(API)的透明性 137
在不改变被装饰物的前提下增加功能 138
可以动态地增加功能 138
只需要一些装饰物即可添加许多功能 138
java.io包与Decorator模式 138
导致增加许多很小的类 139
12.5 相关的设计模式 139
12.6 延伸阅读:继承和委托中的一致性 140
继承——父类和子类的一致性 140
委托——自己和被委托对象的一致性 140
12.7 本章所学知识 142
12.8 练习题 142
第6部分 访问数据结构 145
第13章 Visitor模式——访问数据结构并处理数据 145
13.1 Visitor模式 146
13.2 示例程序 146
Visitor类 147
Element接口 148
Entry类 148
File类 148
Directory类 149
ListVisitor类 150
FileTreatmentException类 151
Main类 151
Visitor与Element之间的相互调用 152
13.3 Visitor模式中的登场角色 154
13.4 拓展思路的要点 155
双重分发 155
为什么要弄得这么复杂 155
开闭原则——对扩展开放,对修改关闭 155
易于增加ConcreteVisitor角色 156
难以增加ConcreteElement角色 156
Visitor工作所需的条件 156
13.5 相关的设计模式 157
13.6 本章所学知识 157
13.7 练习题 157
第14章 Chain of Responsibility模式——推卸责任 161
14.1 Chain of Responsibility模式 162
14.2 示例程序 162
Trouble类 163
Support类 163
NoSupport类 164
LimitSupport类 164
OddSupport类 165
SpecialSupport类 165
Main类 166
14.3 Chain of Responsibility模式中的登场角色 167
14.4 拓展思路的要点 168
弱化了发出请求的人和处理请求的人之间的关系 168
可以动态地改变职责链 168
专注于自己的工作 169
推卸请求会导致处理延迟吗 169
14.5 相关的设计模式 169
14.6 本章所学知识 169
14.7 练习题 169
第7部分 简单化 171
第15章 Facade模式——简单窗口 171
15.1 Facade模式 172
15.2 示例程序 172
Database类 173
HtmlWriter类 174
PageMaker类 175
Main类 176
15.3 Facade模式中的登场角色 176
15.4 拓展思路的要点 177
Facade角色到底做什么工作 177
递归地使用Facade模式 178
开发人员不愿意创建Facade角色的原因——心理原因 178
15.5 相关的设计模式 178
15.6 本章所学知识 178
15.7 练习题 179
第16章 Mediator模式——只有一个仲裁者 181
16.1 Mediator模式 182
16.2 示例程序 182
Mediator接口 185
Colleague接口 186
ColleagueButton类 186
ColleagueTextField类 187
ColleagueCheckbox类 188
LoginFrame类 188
Main类 191
16.3 Mediator模式中的登场角色 191
16.4 拓展思路的要点 192
当发生分散灾难时 192
通信线路的增加 193
哪些角色可以复用 193
16.5 相关的设计模式 193
16.6 本章所学知识 193
16.7 练习题 194
第8部分 管理状态 195
第17章 Observer模式——发送状态变化通知 195
17.1 Observer模式 196
17.2 示例程序 196
Observer接口 196
NumberGenerator类 197
RandomNumberGenerator类 198
DigitObserver类 198
GraphObserver类 199
Main类 199
17.3 Observer模式中的登场角色 200
17.4 拓展思路的要点 201
这里也出现了可替换性 201
Observer的顺序 202
当Observer的行为会对Subject产生影响时 202
传递更新信息的方式 202
从“观察”变为“通知” 203
Model/View/Controller(MVC) 203
17.5 延伸阅读:java.util.Observer接口 203
17.6 相关的设计模式 204
17.7 本章所学知识 204
17.8 练习题 204
第18章 Memento模式——保存对象状态 207
18.1 Memento模式 208
18.2 示例程序 208
Memento类 209
Gamer类 210
Main类 211
18.3 Memento模式中的登场角色 215
18.4 拓展思路的要点 216
两种接口(API)和可见性 216
需要多少个Memento 217
Memento的有效期限是多久 217
划分Caretaker角色和Originator角色的意义 217
18.5 相关的设计模式 218
18.6 本章所学知识 218
18.7 练习题 218
第19章 State模式——用类表示状态 221
19.1 State模式 222
19.2 示例程序 222
金库警报系统 222
不使用State模式的伪代码 223
使用了State模式的伪代码 224
State接口 226
DayState类 226
NightState类 227
Context接口 228
SafeFrame类 228
Main类 231
19.3 State模式中的登场角色 232
19.4 拓展思路的要点 233
分而治之 233
依赖于状态的处理 233
应当是谁来管理状态迁移 233
不会自相矛盾 234
易于增加新的状态 234
实例的多面性 235
19.5 相关的设计模式 235
19.6 本章所学知识 235
19.7 练习题 236
第9部分 避免浪费 237
第20章 Flyweight模式——共享对象,避免浪费 237
20.1 Flyweight模式 238
20.2 示例程序 238
BigChar类 240
BigCharFactory类 241
BigString类 242
Main类 244
20.3 Flyweight模式中的登场角色 244
20.4 拓展思路的要点 245
对多个地方产生影响 245
Intrinsic与Extrinsic 246
不要让被共享的实例被垃圾回收器回收了 246
内存之外的其他资源 247
20.5 相关的设计模式 247
20.6 本章所学知识 247
20.7 练习题 247
第21章 Proxy模式——只在必要时生成实例 249
21.1 Proxy模式 250
21.2 示例程序 250
Printer类 251
Printable接口 252
PrinterProxy类 253
Main类 254
21.3 Proxy模式中的登场角色 254
21.4 拓展思路的要点 255
使用代理人来提升处理速度 255
有必要划分代理人和本人吗 256
代理与委托 256
透明性 256
HTTP代理 256
各种Proxy模式 257
21.5 相关的设计模式 257
21.6 本章所学知识 257
21.7 练习题 257
第10部分 用类来表现 259
第22章 Command模式——命令也是类 259
22.1 Command模式 260
22.2 示例程序 260
Command接口 261
MacroCommand类 262
DrawCommand类 263
Drawable接口 263
DrawCanvas类 264
Main类 265
22.3 Command模式中的登场角色 268
22.4 拓展思路的要点 269
命令中应该包含哪些信息 269
保存历史记录 269
适配器 269
22.5 相关的设计模式 271
22.6 本章所学知识 272
22.7 练习题 272
第23章 Interpreter模式——语法规则也是类 273
23.1 Interpreter模式 274
23.2 迷你语言 274
迷你语言的命令 274
迷你语言程序示例 275
迷你语言的语法 278
终结符表达式与非终结符表达式 279
23.3 示例程序 279
Node类 281
ProgramNode类 281
CommandListNode类 282
CommandNode类 283
RepeatCommandNode类 284
PrimitiveCommandNode类 285
Context类 285
ParseException类 286
Main类 287
23.4 Interpreter模式中的登场角色 288
23.5 拓展思路的要点 289
还有其他哪些迷你语言 289
跳过标记还是读取标记 290
23.6 相关的设计模式 290
23.7 本章所学知识以及本书的结束语 290
23.8 练习题 290
附录 293
附录A 习题解答 294
附录B 示例程序的运行步骤 359
附录C GoF对设计模式的分类 361
附录D 设计模式Q&A 362
附录E 参考书籍 365
(带书签)机器学习实战(单页版)
内容简介 · · · · · ·
机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。
本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaBoost集成方法、基于树的回归算法和分类回归树(CART)算法等。第三部分则重点介绍无监督学习及其一些主要算法:k均值聚类算法、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。
全书通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。
作者简介 · · · · · ·
Peter Harrington
拥有电气工程学士和硕士学位,他曾经在美国加州和中国的英特尔公司工作7年。Peter拥有5项美国专利,在三种学术期刊上发表过文章。他现在是Zillabyte公司的首席科学家,在加入该公司之前,他曾担任2年的机器学习软件顾问。Peter在业余时间还参加编程竞赛和建造3D打印机。
目 录
第一部分 分类
第1章 机器学习基础 2
1.1 何谓机器学习 3
1.1.1 传感器和海量数据 4
1.1.2 机器学习非常重要 5
1.2 关键术语 5
1.3 机器学习的主要任务 7
1.4 如何选择合适的算法 8
1.5 开发机器学习应用程序的步骤 9
1.6 Python语言的优势 10
1.6.1 可执行伪代码 10
1.6.2 Python比较流行 10
1.6.3 Python语言的特色 11
1.6.4 Python语言的缺点 11
1.7 NumPy函数库基础 12
1.8 本章小结 13
第2章 k-近邻算法 15
2.1 k-近邻算法概述 15
2.1.1 准备:使用Python导入数据 17
2.1.2 从文本文件中解析数据 19
2.1.3 如何测试分类器 20
2.2 示例:使用k-近邻算法改进约会网站的配对效果 20
2.2.1 准备数据:从文本文件中解析数据 21
2.2.2 分析数据:使用Matplotlib创建散点图 23
2.2.3 准备数据:归一化数值 25
2.2.4 测试算法:作为完整程序验证分类器 26
2.2.5 使用算法:构建完整可用系统 27
2.3 示例:手写识别系统 28
2.3.1 准备数据:将图像转换为测试向量 29
2.3.2 测试算法:使用k-近邻算法识别手写数字 30
2.4 本章小结 31
第3章 决策树 32
3.1 决策树的构造 33
3.1.1 信息增益 35
3.1.2 划分数据集 37
3.1.3 递归构建决策树 39
3.2 在Python中使用Matplotlib注解绘制树形图 42
3.2.1 Matplotlib注解 43
3.2.2 构造注解树 44
3.3 测试和存储分类器 48
3.3.1 测试算法:使用决策树执行分类 49
3.3.2 使用算法:决策树的存储 50
3.4 示例:使用决策树预测隐形眼镜类型 50
3.5 本章小结 52
第4章 基于概率论的分类方法:朴素贝叶斯 53
4.1 基于贝叶斯决策理论的分类方法 53
4.2 条件概率 55
4.3 使用条件概率来分类 56
4.4 使用朴素贝叶斯进行文档分类 57
4.5 使用Python进行文本分类 58
4.5.1 准备数据:从文本中构建词向量 58
4.5.2 训练算法:从词向量计算概率 60
4.5.3 测试算法:根据现实情况修改分类器 62
4.5.4 准备数据:文档词袋模型 64
4.6 示例:使用朴素贝叶斯过滤垃圾邮件 64
4.6.1 准备数据:切分文本 65
4.6.2 测试算法:使用朴素贝叶斯进行交叉验证 66
4.7 示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向 68
4.7.1 收集数据:导入RSS源 68
4.7.2 分析数据:显示地域相关的用词 71
4.8 本章小结 72
第5章 Logistic回归 73
5.1 基于Logistic回归和Sigmoid函数的分类 74
5.2 基于最优化方法的最佳回归系数确定 75
5.2.1 梯度上升法 75
5.2.2 训练算法:使用梯度上升找到最佳参数 77
5.2.3 分析数据:画出决策边界 79
5.2.4 训练算法:随机梯度上升 80
5.3 示例:从疝气病症预测病马的死亡率 85
5.3.1 准备数据:处理数据中的缺失值 85
5.3.2 测试算法:用Logistic回归进行分类 86
5.4 本章小结 88
第6章 支持向量机 89
6.1 基于最大间隔分隔数据 89
6.2 寻找最大间隔 91
6.2.1 分类器求解的优化问题 92
6.2.2 SVM应用的一般框架 93
6.3 SMO高效优化算法 94
6.3.1 Platt的SMO算法 94
6.3.2 应用简化版SMO算法处理小规模数据集 94
6.4 利用完整Platt SMO算法加速优化 99
6.5 在复杂数据上应用核函数 105
6.5.1 利用核函数将数据映射到高维空间 106
6.5.2 径向基核函数 106
6.5.3 在测试中使用核函数 108
6.6 示例:手写识别问题回顾 111
6.7 本章小结 113
第7章 利用AdaBoost元算法提高分类
性能 115
7.1 基于数据集多重抽样的分类器 115
7.1.1 bagging:基于数据随机重抽样的分类器构建方法 116
7.1.2 boosting 116
7.2 训练算法:基于错误提升分类器的性能 117
7.3 基于单层决策树构建弱分类器 118
7.4 完整AdaBoost算法的实现 122
7.5 测试算法:基于AdaBoost的分类 124
7.6 示例:在一个难数据集上应用AdaBoost 125
7.7 非均衡分类问题 127
7.7.1 其他分类性能度量指标:正确率、召回率及ROC曲线 128
7.7.2 基于代价函数的分类器决策控制 131
7.7.3 处理非均衡问题的数据抽样方法 132
7.8 本章小结 132
第二部分 利用回归预测数值型数据
第8章 预测数值型数据:回归 136
8.1 用线性回归找到最佳拟合直线 136
8.2 局部加权线性回归 141
8.3 示例:预测鲍鱼的年龄 145
8.4 缩减系数来“理解”数据 146
8.4.1 岭回归 146
8.4.2 lasso 148
8.4.3 前向逐步回归 149
8.5 权衡偏差与方差 152
8.6 示例:预测乐高玩具套装的价格 153
8.6.1 收集数据:使用Google购物的API 153
8.6.2 训练算法:建立模型 155
8.7 本章小结 158
第9章 树回归 159
9.1 复杂数据的局部性建模 159
9.2 连续和离散型特征的树的构建 160
9.3 将CART算法用于回归 163
9.3.1 构建树 163
9.3.2 运行代码 165
9.4 树剪枝 167
9.4.1 预剪枝 167
9.4.2 后剪枝 168
9.5 模型树 170
9.6 示例:树回归与标准回归的比较 173
9.7 使用Python的Tkinter库创建GUI 176
9.7.1 用Tkinter创建GUI 177
9.7.2 集成Matplotlib和Tkinter 179
9.8 本章小结 182
第三部分 无监督学习
第10章 利用K-均值聚类算法对未标注数据分组 184
10.1 K-均值聚类算法 185
10.2 使用后处理来提高聚类性能 189
10.3 二分K-均值算法 190
10.4 示例:对地图上的点进行聚类 193
10.4.1 Yahoo! PlaceFinder API 194
10.4.2 对地理坐标进行聚类 196
10.5 本章小结 198
第11章 使用Apriori算法进行关联分析 200
11.1 关联分析 201
11.2 Apriori原理 202
11.3 使用Apriori算法来发现频繁集 204
11.3.1 生成候选项集 204
11.3.2 组织完整的Apriori算法 207
11.4 从频繁项集中挖掘关联规则 209
11.5 示例:发现国会投票中的模式 212
11.5.1 收集数据:构建美国国会投票记录的事务数据集 213
11.5.2 测试算法:基于美国国会投票记录挖掘关联规则 219
11.6 示例:发现毒蘑菇的相似特征 220
11.7 本章小结 221
第12章 使用FP-growth算法来高效发现频繁项集 223
12.1 FP树:用于编码数据集的有效方式 224
12.2 构建FP树 225
12.2.1 创建FP树的数据结构 226
12.2.2 构建FP树 227
12.3 从一棵FP树中挖掘频繁项集 231
12.3.1 抽取条件模式基 231
12.3.2 创建条件FP树 232
12.4 示例:在Twitter源中发现一些共现词 235
12.5 示例:从新闻网站点击流中挖掘 238
12.6 本章小结 239
第四部分 其他工具
第13章 利用PCA来简化数据 242
13.1 降维技术 242
13.2 PCA 243
13.2.1 移动坐标轴 243
13.2.2 在NumPy中实现PCA 246
13.3 示例:利用PCA对半导体制造数据降维 248
13.4 本章小结 251
第14章 利用SVD简化数据 252
14.1 SVD的应用 252
14.1.1 隐性语义索引 253
14.1.2 推荐系统 253
14.2 矩阵分解 254
14.3 利用Python实现SVD 255
14.4 基于协同过滤的推荐引擎 257
14.4.1 相似度计算 257
14.4.2 基于物品的相似度还是基于用户的相似度? 260
14.4.3 推荐引擎的评价 260
14.5 示例:餐馆菜肴推荐引擎 260
14.5.1 推荐未尝过的菜肴 261
14.5.2 利用SVD提高推荐的效果 263
14.5.3 构建推荐引擎面临的挑战 265
14.6 基于SVD的图像压缩 266
14.7 本章小结 268
第15章 大数据与MapReduce 270
15.1 MapReduce:分布式计算的框架 271
15.2 Hadoop流 273
15.2.1 分布式计算均值和方差的mapper 273
15.2.2 分布式计算均值和方差的reducer 274
15.3 在Amazon网络服务上运行Hadoop程序 275
15.3.1 AWS上的可用服务 276
15.3.2 开启Amazon网络服务之旅 276
15.3.3 在EMR上运行Hadoop作业 278
15.4 MapReduce上的机器学习 282
15.5 在Python中使用mrjob来自动化MapReduce 283
15.5.1 mrjob与EMR的无缝集成 283
15.5.2 mrjob的一个MapReduce脚本剖析 284
15.6 示例:分布式SVM的Pegasos算法 286
15.6.1 Pegasos算法 287
15.6.2 训练算法:用mrjob实现MapReduce版本的SVM 288
15.7 你真的需要MapReduce吗? 292
15.8 本章小结 292
附录A Python入门 294
附录B 线性代数 303
附录C 概率论复习 309
附录D 资源 312
索引 313
版权声明 316
用Python写网络爬虫
作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。
《用Python写网络爬虫》作为使用Python来爬取网络数据的杰出指南,讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法。此外,本书还介绍了如何使用AJAX URL和Firebug扩展来爬取数据,以及有关爬取技术的更多真相,比如使用浏览器渲染、管理cookie、通过提交表单从受验证码保护的复杂网站中抽取数据等。本书使用Scrapy创建了一个高级网络爬虫,并对一些真实的网站进行了爬取。
《用Python写网络爬虫》介绍了如下内容:
通过跟踪链接来爬取网站;
使用lxml从页面中抽取数据;
构建线程爬虫来并行爬取页面;
将下载的内容进行缓存,以降低带宽消耗;
解析依赖于JavaScript的网站;
与表单和会话进行交互;
解决受保护页面的验证码问题;
对AJAX调用进行逆向工程;
使用Scrapy创建高级爬虫。
本书读者对象
本书是为想要构建可靠的数据爬取解决方案的开发人员写作的,本书假定读者具有一定的Python编程经验。当然,具备其他编程语言开发经验的读者也可以阅读本书,并理解书中涉及的概念和原理。
目录
第1章 网络爬虫简介 1
1.1 网络爬虫何时有用 1
1.2 网络爬虫是否合法 2
1.3 背景调研 3
1.3.1 检查robots.txt 3
1.3.2 检查网站地图 4
1.3.3 估算网站大小 5
1.3.4 识别网站所用技术 7
1.3.5 寻找网站所有者 7
1.4 编写第一个网络爬虫 8
1.4.1 下载网页 9
1.4.2 网站地图爬虫 12
1.4.3 ID遍历爬虫 13
1.4.4 链接爬虫 15
1.5 本章小结 22
第2章 数据抓取 23
2.1 分析网页 23
2.2 三种网页抓取方法 26
2.2.1 正则表达式 26
2.2.2 Beautiful Soup 28
2.2.3 Lxml 30
2.2.4 性能对比 32
2.2.5 结论 35
2.2.6 为链接爬虫添加抓取回调 35
2.3 本章小结 38
第3章 下载缓存 39
3.1 为链接爬虫添加缓存支持 39
3.2 磁盘缓存 42
3.2.1 实现 44
3.2.2 缓存测试 46
3.2.3 节省磁盘空间 46
3.2.4 清理过期数据 47
3.2.5 缺点 48
3.3 数据库缓存 49
3.3.1 NoSQL是什么 50
3.3.2 安装MongoDB 50
3.3.3 MongoDB概述 50
3.3.4 MongoDB缓存实现 52
3.3.5 压缩 54
3.3.6 缓存测试 54
3.4 本章小结 55
第4章 并发下载 57
4.1 100万个网页 57
4.2 串行爬虫 60
4.3 多线程爬虫 60
4.3.1 线程和进程如何工作 61
4.3.2 实现 61
4.3.3 多进程爬虫 63
4.4 性能 67
4.5 本章小结 68
第5章 动态内容 69
5.1 动态网页示例 69
5.2 对动态网页进行逆向工程 72
5.3 渲染动态网页 77
5.3.1 PyQt还是PySide 78
5.3.2 执行JavaScript 78
5.3.3 使用WebKit与网站交互 80
5.3.4 Selenium 85
5.4 本章小结 88
第6章 表单交互 89
6.1 登录表单 90
6.2 支持内容更新的登录脚本扩展 97
6.3 使用Mechanize模块实现自动化表单处理 100
6.4 本章小结 102
第7章 验证码处理 103
7.1 注册账号 103
7.2 光学字符识别 106
7.3 处理复杂验证码 111
7.3.1 使用验证码处理服务 112
7.3.2 9kw入门 112
7.3.3 与注册功能集成 119
7.4 本章小结 120
第8章 Scrapy 121
8.1 安装 121
8.2 启动项目 122
8.2.1 定义模型 123
8.2.2 创建爬虫 124
8.2.3 使用shell命令抓取 128
8.2.4 检查结果 129
8.2.5 中断与恢复爬虫 132
8.3 使用Portia编写可视化爬虫 133
8.3.1 安装 133
8.3.2 标注 136
8.3.3 优化爬虫 138
8.3.4 检查结果 140
8.4 使用Scrapely实现自动化抓取 141
8.5 本章小结 142
第9章 总结 143
9.1 Google搜索引擎 143
9.2 Facebook 148
9.2.1 网站 148
9.2.2 API 150
9.3 Gap 151
9.4 宝马 153
9.5 本章小结 157
利用Python进行数据分析
内容简介 · · · · · ·
【名人推荐】
“科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法。本书在未来几年里肯定会成为Python领域中技术计算的权威指南。”
——Fernando Pérez 加州大学伯克利分校 研究科学家, IPython的创始人之一
【内容简介】
还在苦苦寻觅用Python控制、处理、整理、分析结构化数据的完整课程?本书含有大量的实践案例,你将学会如何利用各种Python库(包括NumPy、pandas、matplotlib以及IPython等)高效地解决各式各样的数据分析问题。
由于作者Wes McKinney是pandas库的主要作者,所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。
•将IPython这个交互式Shell作为你的首要开发环境。
•学习NumPy(Numerical Python)的基础和高级知识。
•从pandas库的数据分析工具开始。
•利用高性能工具对数据进行加载、清理、转换、合并以及重塑。
•利用matplotlib创建散点图以及静态或交互式的可视化结果。
•利用pandas的groupby功能对数据集进行切片、切块和汇总操作。
•处理各种各样的时间序列数据。
•通过详细的案例学习如何解决Web分析、社会科学、金融学以及经•济学等领域的问题。
作者简介 · · · · · ·
Wes McKinney 资深数据分析专家,对各种Python库(包括NumPy、pandas、matplotlib以及IPython等)等都有深入研究,并在大量的实践中积累了丰富的经验。撰写了大量与Python数据分析相关的经典文章,被各大技术社区争相转载,是Python和开源技术社区公认的权威人物之一。开发了用于数据分析的著名开源Python库——pandas,广获用户好评。在创建Lambda Foundry(一家致力于企业数据分析的公司)之前,他曾是AQR Capital Management的定量分析师。
目录 · · · · · ·
目录
前言 1
第1章 准备工作 5
本书主要内容 5
为什么要使用Python进行数据分析 6
重要的Python库 7
安装和设置 10
社区和研讨会 16
使用本书 16
致谢 18
第2章 引言 20
来自bit.ly的1.usa.gov数据 21
MovieLens 1M数据集 29
1880—2010年间全美婴儿姓名 35
小结及展望 47
第3章 IPython:一种交互式计算和开发环境 48
IPython基础 49
内省 51
使用命令历史 60
与操作系统交互 63
软件开发工具 66
IPython HTML Notebook 75
利用IPython提高代码开发效率的几点提示 77
高级IPython功能 79
致谢 81
第4章 NumPy基础:数组和矢量计算 82
NumPy的ndarray:一种多维数组对象 83
通用函数:快速的元素级数组函数 98
利用数组进行数据处理 100
用于数组的文件输入输出 107
线性代数 109
随机数生成 111
范例:随机漫步 112
第5章 pandas入门 115
pandas的数据结构介绍 116
基本功能 126
汇总和计算描述统计 142
处理缺失数据 148
层次化索引 153
其他有关pandas的话题 158
第6章 数据加载、存储与文件格式 162
读写文本格式的数据 162
二进制数据格式 179
使用HTML和Web API 181
使用数据库 182
第7章 数据规整化:清理、转换、合并、重塑 186
合并数据集 186
重塑和轴向旋转 200
数据转换 204
字符串操作 217
示例:USDA食品数据库 224
第8章 绘图和可视化 231
matplotlib API入门 231
pandas中的绘图函数 244
绘制地图:图形化显示海地地震危机数据 254
Python图形化工具生态系统 260
第9章 数据聚合与分组运算 263
GroupBy技术 264
数据聚合 271
分组级运算和转换 276
透视表和交叉表 288
示例:2012联邦选举委员会数据库 291
第10章 时间序列 302
日期和时间数据类型及工具 303
时间序列基础 307
日期的范围、频率以及移动 311
时区处理 317
时期及其算术运算 322
重采样及频率转换 327
时间序列绘图 334
移动窗口函数 337
性能和内存使用方面的注意事项 342
第11章 金融和经济数据应用 344
数据规整化方面的话题 344
分组变换和分析 355
更多示例应用 361
第12章 NumPy高级应用 368
ndarray对象的内部机理 368
高级数组操作 370
广播 378
ufunc高级应用 383
结构化和记录式数组 386
更多有关排序的话题 388
NumPy的matrix类 393
高级数组输入输出 395
性能建议 397
附录A Python语言精要 401
【带书签】RESTful Web Services中文版
本书向读者介绍了什么是REST、什么是面向资源的架构(Resource-Oriented Architecture,ROA)、REST式设计的优点、REST式Web服务的真实案例分析、如何用各种流行的编程语言编写Web服务客户端、如何用三种流行的框架(Ruby on Rails、Restlet和Django)实现REST式服务等。不仅讲解REST与面向资源的架构(ROA)的概念与原理,还向读者介绍如何编写符合REST风格的Web 2.0应用。本书详实、易懂,实战性强,提供了大量RESTful Web服务开发的最佳实践和指导,适合广大的Web开发人员、Web架构师及对Web开发或Web架构感兴趣的广大技术人员与学生阅读。
MongoDB权威指南(第二版)
内容简介 · · · · · ·
mongodb如何帮你管理通过web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现mongodb如此稳定、性能优越甚至能够无限水平扩展背后的原因。
《mongodb权威指南》的两位作者来自开发并支持开源数据库mongodb的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的json风格的文档比组织成关系型数据库中的记录要容易得多。
作者简介 · · · · · ·
KristinaccChodorow
13310gen的软件工程师,2MongoDB项目的核心成员.a负责数据库服务器、PHP驱动、Perl驱动等模块.a她曾在世界级的大会上发言,2包括OSCON、LinuxCon、FOSDEM和Latinoware.a
redis设计与实现
系统而全面地描述了 Redis 内部运行机制
图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备
包括大部分Redis单机特征,以及所有多机特性
【读者评价】
这本书描述的知识点很丰富,覆盖很全,里面提到特性较多,有不少我们也没用过 :) 每个命令内部的机制的介绍很不错,很多估计也是首次有详细文档介绍。
——杨卫华(@TimYang)新浪微博技术总监
近几年Redis以其高性能、高灵活性的优点,变得越来越流行。但很多人在使用Redis时,仅仅还是停留在比较表层的功能性认识,缺乏对内部机制原理的深入理解。本书是huangz同学长期对Redis源码的阅读心得结晶,书中对Redis的各个方面都进行了详细且深入的讲解,将复杂的原理用最简单的方式为大家解构和讲解,强烈推荐给每一位Redis的使用者阅读。
—— iammutex,NoSQLFan站长,乐视网技术经理
Redis 是近些年来特别火爆的 NoSQL 之一。纵观中外各种书籍还没有一本能对 Redis 内部进行深入剖析,《Redis 设计与实现》可谓开此先河。常和作者在网上交流,知道作者为这本书付出了大量的心血。这本书行文流畅,思路清晰,详细地介绍了 Redis 源码的方方面面。无论是想学习 NoSQL、网络编程的初学者,还是源码控的进阶者,本书都会有很大的帮助。
—— 阮若夷,支付宝高级专家
【内容简介】
本书全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速、有效地了解Redis的内部构造以及运作机制,更好、更高效地使用Redis。
本书主要分为四大部分。第一部分“数据结构与对象”介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对Redis实现单机数据库的方法进行了介绍,包括数据库、RDB持久化、AOF持久化、事件等。第三部分“多机数据库的实现”对Redis的Sentinel、复制、集群三个多机功能进行了介绍。第四部分“独立功能的实现”对Redis中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器等。本书作者专门维护了www.redisbook.com网站,提供带有详细注释的Redis源代码,以及本书相关的更新内容。
布道之道——引领团队拥抱技术创新.pdf
《布道之道:引领团队拥抱技术创新》旨在告诉读者如何说服自己的同事采用新的工具和技术。作者总结了7种怀疑论者模式:孤陋寡闻型、随波逐流型、百般挑剔型、激情燃尽型、时间紧迫型、发号施令型和不可理喻型。围绕说服这些怀疑论者,书中介绍了9个实用技巧和4个策略。理解并熟练运用这些技巧和策略,能够让你的技术布道生涯收获累累硕果。《布道之道:引领团队拥抱技术创新》适合IT行业的技术布道师、推广专家、产品经理、需求调研及实施人员阅读,同样也适合对前沿技术时刻保持深厚兴趣的设计和开发人员参考。
第一部分 导 言
第1 章 为什么写这本书 3
1.1 本书组织方式 4
1.2 为什么要看这本书 4
1.3 本书目标读者 5
第2 章 开宗明义 7
2.1 什么是业内发展成果 7
2.2 怀疑者指的是谁 8
2.3 为什么需要推销 8
第3 章 解决正确的问题 11
3.1 为什么要布道 13
3.2 考虑方案 13
3.2.1 研究问题 14
3.2.2 摸底调查 14
3.2.3 开列清单 14
3.3 面临的挑战 15
3.4 几点建议 15
第二部分 怀疑者模式
第4 章 了解身边的人 19
第5 章 孤陋寡闻型 21
5.1 他们为什么不用这种技术 21
5.2 深层次原因 22
5.3 有效的应对策略 22
5.4 几句忠告 22
第6 章 随波逐流型 25
6.1 深层次原因 25
6.2 有效的应对策略 26
6.3 几句忠告 27
第7 章 百般挑剔型 29
7.1 深层次原因 30
7.2 有效的应对策略 32
7.3 几句忠告 33
第8 章 激情燃尽型 35
8.1 深层次原因 36
8.2 有效的应对策略 36
8.3 几句忠告 37
第9 章 时间紧迫型 39
9.1 深层次原因 39
9.2 有效的应对策略 40
9.3 几句忠告 41
第10 章 发号施令型 43
10.1 深层次原因 43
10.2 有效的应对策略 44
10.3 几句忠告 45
第11 章 不可理喻型 47
11.1 深层次原因 48
11.2 有效的应对策略 48
11.3 几句忠告 49
第三部分 技 巧
第12 章 装满工具箱 53
第13 章 取得经验 55
13.1 技巧分析 57
13.2 怎样成为专家 57
13.2.1 研究技术和工具 57
13.2.2 实际使用 58
13.2.3 向现有专家求助 59
13.2.4 教人使用 59
13.3 适用对象 60
13.3.1 孤陋寡闻型 60
13.3.2 随波逐流型 60
13.3.3 百般挑剔型 60
13.3.4 激情燃尽型 61
13.4 陷阱 61
13.4.1 强迫别人 61
13.4.2 傲慢或霸道 62
13.5 小结 63
第14 章 传达理念 65
14.1 技巧分析 66
14.2 掌握表达的艺术 67
14.2.1 要做人,别做计算机 67
14.2.2 要有激情,但不能激进 67
14.2.3 要提建议,而不是申饬 68
14.2.4 要多听,而不是多说 68
14.2.5 保持积极的心态 69
14.3 适用对象 69
14.3.1 孤陋寡闻型 69
14.3.2 百般挑剔型 69
14.3.3 不可理喻型 70
14.4 陷阱 70
14.5 小结 70
第15 章 展示技术 71
15.1 技巧分析 72
15.2 把握展示时机 72
15.2.1 等待机会 73
15.2.2 创造机会 73
15.2.3 培养机会 74
15.2.4 代码评审 74
15.3 适用对象 74
15.3.1 孤陋寡闻型 74
15.3.2 百般挑剔型 75
15.3.3 时间紧迫型 75
15.3.4 不可理喻型 75
15.4 陷阱 75
15.5 小结 76
第16 章 适当妥协 77
16.1 技巧分析 78
16.2 找到折中方案 78
16.2.1 找到条件成熟的规定 79
16.2.2 找到与规定匹配的技术 79
16.3 适用对象 80
16.3.1 时间紧迫型 80
16.3.2 发号施令型 80
16.4 陷阱 81
16.5 小结 81
第17 章 建立信任 83
17.1 技巧分析 84
17.2 如何建立信任 85
17.2.1 不要故意撒谎 85
17.2.2 不要回避事实 85
17.2.3 永远不要制造FUD 86
17.2.4 承认错误 86
17.3 适用对象 87
17.3.1 激情燃尽型 87
17.3.2 百般挑剔型 87
17.3.3 不可理喻型 87
17.4 陷阱 88
17.5 小结 88
第18 章 公之于众 89
18.1 技巧分析 90
18.2 让自己成为焦点 91
18.2.1 开源你的工作 91
18.2.2 参加竞赛 92
18.2.3 为得奖而设计 92
18.2.4 让人评审你的项目 92
18.3 适用对象 93
18.3.1 孤陋寡闻型 93
18.3.2 百般挑剔型 93
18.3.3 激情燃尽型 93
18.3.4 发号施令型 94
18.4 陷阱 94
18.5 小结 94
第19 章 注重合力 95
19.1 技巧分析 96
19.2 构造合力 96
19.3 适用对象 96
19.3.1 时间紧迫型 96
19.3.2 发号施令型 97
19.4 陷阱 97
19.5 小结 97
第20 章 搭一座桥 99
20.1 技巧分析 101
20.2 搭一座桥 101
20.2.1 情况调查 101
20.2.2 找一座桥 102
20.2.3 搭一座桥 102
20.3 适用对象 102
20.3.1 随波逐流型 102
20.3.2 百般挑剔型 102
20.3.3 激情燃尽型 103
20.3.4 时间紧迫型 103
20.4 陷阱 103
20.5 小结 104
第21 章 来点刺激 105
21.1 技巧分析 106
21.2 给大家提一提神吧 106
21.3 适用对象 107
21.3.1 孤陋寡闻型 107
21.3.2 随波逐流型 107
21.3.3 时间紧迫型 108
21.3.4 百般挑剔型 108
21.3.5 激情燃尽型 108
21.4 陷阱 108
21.5 小结 109
第四部分 策 略
第22 章 简单,但不容易 113
第23 章 无视敌人 115
23.1 怎么无视敌人 115
23.2 为什么不好处理 116
第24 章 先易后难 117
24.1 难度分组 117
24.2 容易 118
24.2.1 孤陋寡闻型 118
24.2.2 随波逐流型 118
24.3 难 119
24.3.1 激情燃尽型 119
24.3.2 时间紧迫型 119
24.3.3 百般挑剔型 120
24.4 最难 120
第25 章 借力支持者 123
25.1 请求帮助 123
25.2 创造布道者 124
25.3 交叉推广 125
25.4 消耗关注 126
第26 章 说服管理层 127
26.1 希望管理层做什么 127
26.2 怎么做到 127
26.2.1 解决管理问题 128
26.2.2 用数字说话 128
26.2.3 解释为什么需要强制执行 128
26.3 接下来怎么办 129
第27 章 最后的话 131
27.1 经验教训 131
27.1.1 成功过度 131
27.1.2 莫求回报 132
27.1.3 你可能错了 133
27.2 成功之道 134
27.3 问题会扩散 134
27.4 只有过程,没有终点 135
参考文献 136
【带书签】机器学习导论
《机器学习导论》对机器学习的定义和应用实例进行了介绍,涵盖了监督学习。贝叶斯决策理论。参数方法、多元方法、维度归约、聚类、非参数方法、决策树。线性判别式、多层感知器,局部模型、隐马尔可夫模型。分类算法评估和比较,组合多学习器以及增强学习等。机器学习的目标是对计算机编程,以便使用样本数据或以往的经验来解决给定的问题。已经有许多机器学习的成功应用,包括分析以往销售数据来预测客户行为,人脸识别或语音识别,优化机器人行为以便使用最少的资源来完成任务,以及从生物信息数据中提取知识的各种系统。为了对机器学习问题和解进行统一的论述,《机器学习导论》讨论了机器学习在统计学、模式识别、神经网络。人工智能。信号处理、控制和数据挖掘等不同领域的应用。对所有学习算法都进行了解释,以便读者可以容易地将书中的公式转变为计算机程序。《机器学习导论》可作为高等院校计算机相关专业高年级本科生和研究生的教材,也可供研究机器学习方法的技术人员参考。
【带书签】图解机器学习
本书用丰富的图示,从最小二乘法出发,对基于最小二乘法实现的各种机器学习算法进行了详细的介绍。第Ⅰ部分介绍了机器学习领域的概况;第Ⅱ部分和第Ⅲ部分分别介绍了各种有监督的回归算法和分类算法;第Ⅳ部分介绍了各种无监督学习算法;第Ⅴ部分介绍了机器学习领域中的新兴算法。书中大部分算法都有相应的MATLAB程序源代码,可以用来进行简单的测试。
本书适合所有对机器学习有兴趣的初学者阅读。
187张图解轻松入门
提供可执行的Matlab程序代码
覆盖机器学习中最经典、用途最广的算法
专业实用
东京大学教授、机器学习权威专家执笔,浓缩机器学习的关键知识点
图文并茂
187张图示帮助理解,详略得当,为读懂大部头开路。
角度新颖
基于最小二乘法讲解各种有监督学习的回归和分类算法,以及无监督学习算法。
实战导向
配有可执行的MATLAB程序代码,边学习边实践。
目录 · · · · · ·
第I部分 绪 论
第1章 什么是机器学习 2
1.1 学习的种类 2
1.2 机器学习任务的例子 4
1.3 机器学习的方法 8
第2章 学习模型 12
2.1 线性模型 12
2.2 核模型 15
2.3 层级模型 17
第II部分 有监督回归
第3章 最小二乘学习法 22
3.1 最小二乘学习法 22
3.2 最小二乘解的性质 25
3.3 大规模数据的学习算法 27
第4章带有约束条件的最小二乘法 31
4.1 部分空间约束的最小二乘学习法 31
4.2 l2 约束的最小二乘学习法 33
4.3 模型选择 37
第5章 稀疏学习 43
5.1 l1 约束的最小二乘学习法 43
5.2 l1 约束的最小二乘学习的求解方法 45
5.3 通过稀疏学习进行特征选择 50
5.4 lp约束的最小二乘学习法 51
5.5 l1+l2 约束的最小二乘学习法 52
第6章 鲁棒学习 55
6.1 l1 损失最小化学习 56
6.2 Huber损失最小化学习 58
6.3 图基损失最小化学习 63
6.4 l1 约束的Huber损失最小化学习 65
第III部分 有监督分类
第7章 基于最小二乘法的分类 70
7.1 最小二乘分类 70
7.2 0/1 损失和间隔 73
7.3 多类别的情形 76
第8章 支持向量机分类 80
8.1 间隔最大化分类 80
8.2 支持向量机分类器的求解方法 83
8.3 稀疏性 86
8.4 使用核映射的非线性模型 88
8.5 使用Hinge损失最小化学习来解释 90
8.6 使用Ramp损失的鲁棒学习 93
第9章 集成分类 98
9.1 剪枝分类 98
9.2 Bagging学习法 101
9.3 Boosting 学习法 105
第10章 概率分类法 112
10.1 Logistic回归 112
10.2 最小二乘概率分类 116
第11 章序列数据的分类 121
11.1 序列数据的模型化 122
11.2 条件随机场模型的学习 125
11.3 利用条件随机场模型对标签序列进行预测 128
第IV部分 无监督学习
第12章 异常检测 132
12.1 局部异常因子 132
12.2 支持向量机异常检测 135
12.3 基于密度比的异常检测 137
第13章 无监督降维 143
13.1 线性降维的原理 144
13.2 主成分分析 146
13.3 局部保持投影 148
13.4 核函数主成分分析 152
13.5 拉普拉斯特征映射 155
第14章 聚类 158
14.1 K均值聚类 158
14.2 核K均值聚类 160
14.3 谱聚类 161
14.4 调整参数的自动选取 163
第V部分 新兴机器学习算法
第15章 在线学习 170
15.1 被动攻击学习 170
15.2 适应正则化学习 176
第16章 半监督学习 181
16.1 灵活应用输入数据的流形构造 182
16.2 拉普拉斯正则化最小二乘学习的求解方法 183
16.3 拉普拉斯正则化的解释 186
第17章 监督降维 188
17.1 与分类问题相对应的判别分析 188
17.2 充分降维 195
第18章 迁移学习 197
18.1 协变量移位下的迁移学习 197
18.2 类别平衡变化下的迁移学习 204
第19章 多任务学习 212
19.1 使用最小二乘回归的多任务学习 212
19.2 使用最小二乘概率分类器的多任务学习 215
19.3 多次维输出函数的学习 216
第VI部分 结 语
第20章 总结与展望 222
参考文献 225
【带书签】Java虚拟机规范(Java SE 7).pdf
《Java虚拟机规范(Java SE 7版)》是Java领域最重要和最权威的著作之一,由Oracle官方发布,基于Java SE 7,对最新的Java虚拟机规范进行了完整且详细的讲解,是深度了解Java虚拟机实现细节的必读之作。由国内几位资深的Java技术专家联袂翻译。《Java虚拟机规范(Java SE 7版)》共7章,第1章从宏观的角度介绍了Java虚拟机与Java的关系与发展历程。第2章概览
了Java虚拟机整体架构,包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助。第3章详述如何将Java语言编写的程序转换为Java虚拟机指令集,涉及常量、局部变量、控制结构、算术运算、参数接收、方法调用、数组、操作数栈异常处理、同步与注解等。第4章深入分析了用来表示编译后的类和接口的class文件格式,主要包括ClassFile结构、描述符与签名、常量池、字段、方法、属性、代码约束与class文件校验等。第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。
Docker技术入门与实战 完美解析中文版
【编辑推荐】
《Docker技术入门与实战》是中国首部Docker著作,一线Docker先驱实战经验结晶,来自IBM和新浪等多位技术专家联袂推荐!
《Docker技术入门与实战》结合企业生产环境,深入浅出地剖析 Docker 的核心概念、应用技巧、实现原理以及生态环境,为解决各类问题提供了有价值的参考。
【内容简介】
在云计算时代,开发者将应用转移到云上已经解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在。Docker的出现正好能帮助软件开发者开阔思路,尝试新的软件管理方法来解决这个问题。通过掌握Docker,开发人员便可享受先进的自动化运维理念和工具,无需运维人员介入即可顺利运行于各种运行环境。
《Docker技术入门与实战》分为三大部分:Docker入门、实战案例和高级话题。第一部分(第1~8章)介绍Docker与虚拟化技术的基本概念,包括安装、镜像、容器、仓库、数据管理等;第二部分(第9~17章)通过案例介绍Docker的应用方法,包括与各种操作系统平台、SSH服务的镜像、Web服务器与应用、数据库的应用、各类编程语言的接口、私有仓库等;第三部分(第18~21章)是一些高级话题,如Docker核心技术、安全、高级网络配置、相关项目等。
《Docker技术入门与实战》从基本原理开始入手,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员、运维人员快速部署应用。
目录 · · · · · ·
序一
序二
前言
作者简介
第一部分 Docker入门
第1章 初识Docker 3
1.1 什么是Docker 3
1.2 为什么要使用Docker 5
1.3 虚拟化与Docker 7
1.4 本章小结 8
第2章 Docker的核心概念和安装 9
2.1 核心概念 9
2.2 安装Docker 11
2.3 本书环境介绍 14
2.4 本章小结 15
第3章 镜像 16
3.1 获取镜像 16
3.2 查看镜像信息 17
3.3 搜寻镜像 20
3.4 删除镜像 21
3.5 创建镜像 23
3.6 存出和载入镜像 24
3.7 上传镜像 25
3.8 本章小结 25
第4章 容器 26
4.1 创建容器 26
4.2 终止容器 28
4.3 进入容器 29
4.4 删除容器 31
4.5 导入和导出容器 31
4.6 本章小结 32
第5章 仓库 33
5.1 Docker Hub 33
5.2 Docker Pool简介 35
5.3 创建和使用私有仓库 36
5.4 本章小结 38
第6章 数据管理 39
6.1 数据卷 39
6.2 数据卷容器 40
6.3 利用数据卷容器迁移数据 42
6.4 本章小结 42
第7章 网络基础配置 43
7.1 端口映射实现访问容器 43
7.2 容器互联实现容器间通信 45
7.3 本章小结 47
第8章 使用Dockerfile创建镜像 48
8.1 基本结构 48
8.2 指令 49
8.3 创建镜像 53
8.4 本章小结 53
第二部分 实战案例
第9章 操作系统 57
9.1 Busybox 57
9.2 Debian/Ubuntu 60
9.3 CentOS/Fedora 62
9.4 CoreOS 64
9.5 本章小结 69
第10章 创建支持SSH服务的镜像 70
10.1 基于commit命令创建 70
10.2 使用Dockerfile创建 74
10.3 本章小结 79
第11章 Web服务器与应用 80
11.1 Apache 80
11.2 Nginx 86
11.3 Tomcat 95
11.4 Weblogic 102
11.5 LAMP 119
11.5.1 下载LAMP镜像 119
11.5.2 使用默认方式启动LAMP容器 119
11.5.3 部署自己的PHP应用 120
11.5.4 在PHP程序中连接数据库 120
11.6 CMS 121
11.7 本章小结 123
第12章 数据库应用 124
12.1 MySQL 124
12.2 Oracle XE 129
12.3 MongoDB 130
12.4 本章小结 134
第13章 编程语言 136
13.1 PHP 136
13.1.1 PHP技术栈 136
13.1.2 PHP常用框架 142
13.1.3 相关资源 147
13.2 C/C++ 147
13.2.1 GCC 147
13.2.2 LLVM 150
13.2.3 Clang 150
13.3 Java 151
13.4 Python 153
13.4.1 Python技术栈 153
13.4.2 Flask 155
13.4.3 Django 157
13.4.4 相关资源 159
13.5 Perl 160
13.5.1 Perl技术栈 160
13.5.2 Catalyst 161
13.5.3 相关资源 161
13.6 Ruby 162
13.6.1 Ruby技术栈 162
13.6.2 JRuby 163
13.6.3 Ruby on Rails 164
13.6.4 Sinatra 165
13.6.5 相关资源 166
13.7 JavaScript 166
13.7.1 JavaScript技术栈 166
13.7.2 Node.js 167
13.7.3 Express 168
13.7.4 AngularJS 170
13.7.5 相关资源 171
13.8 Go 172
13.8.1 Go技术栈 172
13.8.2 Beego 174
13.8.3 Revel 175
13.8.4 Martini 177
13.8.5 相关资源 179
13.9 本章小结 180
第14章 使用私有仓库 181
14.1 使用docker-registry 181
14.2 用户认证 183
14.3 使用私有仓库批量上传镜像 186
14.4 仓库配置文件 189
14.5 本章小结 196
第15章 构建Docker容器集群 197
15.1 使用自定义网桥连接跨主机容器 197
15.2 使用Ambassador容器 199
15.3 本章小结 200
第16章 在公有云上使用Docker 202
16.1 公有云上安装Docker 202
16.1.1 CentOS 6.5系统 202
16.1.2 Ubuntu 14.04系统 207
16.2 阿里云Docker的特色服务 207
16.3 本章小结 213
第17章 Docker实践之道 214
17.1 个人学习之道 214
17.1.1 温故而知新 215
17.1.2 众人拾柴火焰高 216
17.2 技术创业之道 217
17.3 中小型企业实践之道 218
17.3.1 开发、测试和发布中应用Docker 218
17.3.2 应用Docker到生产环境 220
17.4 本章小结 220
第三部分 高级话题
第18章 Docker核心技术 223
18.1 基本架构 223
18.2 命名空间 225
18.3 控制组 227
18.4 联合文件系统 229
18.5 Docker网络实现 230
18.6 本章小结 232
第19章 Docker安全 233
19.1 命名空间隔离的安全 233
19.2 控制组资源控制的安全 234
19.3 内核能力机制 234
19.4 Docker服务端的防护 235
19.5 其他安全特性 236
19.6 本章小结 237
第20章 高级网络配置 238
20.1 网络启动与配置参数 238
20.2 配置容器DNS和主机名 240
20.3 容器访问控制 241
20.4 映射容器端口到宿主主机的实现 243
20.5 配置docker0网桥 244
20.6 自定义网桥 245
20.7 创建一个点到点连接 246
20.8 工具和项目 247
20.9 本章小结 251
第21章 Docker相关项目 252
21.1 平台即服务方案 252
21.2 持续集成 253
21.3 管理工具 256
21.4 编程开发 261
21.5 其他项目 262
21.6 本章小结 267
附 录
附录A 常见问题汇总 270
附录B 常见仓库 276
附录C Docker命令查询 294
附录D Docker资源链接 299
【带书签】SpringCloud微服务实战 高清完整版
《Spring Cloud微服务实战》从时下流行的微服务架构概念出发,详细介绍了Spring Cloud针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。
《Spring Cloud微服务实战》适合所有Java开发人员,尤其适合正在做微服务架构技术选型或正在实施微服务架构的团队查阅和参考。
目录 · · · · · ·
第1章 基础知识 1
什么是微服务架构 1
-- 与单体系统的区别 1
-- 如何实施微服务 2
为什么选择Spring Cloud 6
Spring Cloud简介 7
版本说明 8
第2章 微服务构建:Spring Boot 11
框架简介 12
快速入门 13
-- 项目构建与解析 13
-- 实现RESTful API 17
配置详解 20
-- 配置文件 20
-- 自定义参数 22
-- 参数引用 22
-- 使用随机数 23
-- 命令行参数 23
-- 多环境配置 24
-- 加载顺序 25
监控与管理 26
-- 初识actuator 27
-- 原生端点 28
小结 38
第3章 服务治理:Spring Cloud Eureka 39
服务治理 39
-- Netflix Eureka 40
--搭建服务注册中心 41
--注册服务提供者 43
--高可用注册中心 46
--服务发现与消费 48
Eureka详解 51
--基础架构 52
--服务治理机制 52
--源码分析 56
配置详解 65
--服务注册类配置 65
--服务实例类配置 67
跨平台支持 71
第4章 客户端负载均衡:Spring Cloud Ribbon 73
客户端负载均衡 73
RestTemplate详解 75
-- GET请求 75
-- POST请求 77
-- PUT请求 79
-- DELETE请求 79
源码分析 80
-- 负载均衡器 91
-- 负载均衡策略 109
配置详解 123
--自动化配置 124
-- Camden版本对RibbonClient配置的优化 125
-- 参数配置 127
-- 与Eureka结合 127
重试机制 128
第5章 服务容错保护:Spring Cloud Hystrix 130
快速入门 131
原理分析 135
-- 工作流程 135
-- 断路器原理 144
-- 依赖隔离 148
使用详解 151
-- 创建请求命令 151
-- 定义服务降级 154
-- 异常处理 157
-- 命令名称、分组以及线程池划分 158
-- 请求缓存 159
-- 请求合并 166
属性详解 172
-- Command属性 174
-- collapser属性 184
-- threadPool属性 185
Hystrix仪表盘 187
Turbine集群监控 192
-- 构建监控聚合服务 192
-- 与消息代理结合 196
第6章 声明式服务调用:Spring Cloud Feign 199
快速入门 200
参数绑定 202
继承特性 205
Ribbon配置 209
全局配置 209
指定服务配置 209
重试机制 210
Hystrix配置 211
全局配置 211
禁用Hystrix 211
指定命令配置 212
服务降级配置 212
其他配置 214
第7章 API网关服务:Spring Cloud Zuul 217
快速入门 219
-- 构建网关 220
-- 请求路由 221
-- 请求过滤 223
路由详解 226
-- 传统路由配置 226
-- 服务路由配置 228
-- 服务路由的默认规则 229
-- 自定义路由映射规则 229
-- 路径匹配 230
-- 路由前缀 233
-- 本地跳转 234
-- Cookie与头信息 235
-- Hystrix和Ribbon支持 236
过滤器详解 238
-- 过滤器 238
-- 请求生命周期 239
-- 核心过滤器 240
-- 异常处理 244
-- 禁用过滤器 256
动态加载 257
-- 动态路由 257
-- 动态过滤器 261
第8章 分布式配置中心:Spring Cloud Config 267
快速入门 267
-- 构建配置中心 268
-- 配置规则详解 269
-- 客户端配置映射 272
服务端详解 274
-- 基础架构 274
-- Git配置仓库 276
-- SVN配置仓库 279
-- 本地仓库 279
-- 本地文件系统 279
-- 健康监测 280
-- 属性覆盖 281
-- 安全保护 281
-- 加密解密 282
-- 高可用配置 286
客户端详解 286
-- URI指定配置中心 287
-- 服务化配置中心 287
-- 失败快速响应与重试 290
-- 获取远程配置 292
-- 动态刷新配置 293
第9章 消息总线:Spring Cloud Bus 295
消息代理 295
RabbitMQ实现消息总线 296
-- 基本概念 297
-- 安装与使用 298
-- 快速入门 302
-- 整合Spring Cloud Bus 306
-- 原理分析 307
-- 指定刷新范围 308
-- 架构优化 309
-- RabbitMQ配置 310
Kafka实现消息总线 312
-- Kafka简介 312
-- 快速入门 313
--整合Spring Cloud Bus 315
-- Kafka配置 318
深入理解 318
-- 源码分析 320
-- 其他消息代理的支持 342
第10章 消息驱动的微服务:Spring Cloud Stream 344
快速入门 344
核心概念 349
-- 绑定器 350
-- 发布-订阅模式 351
-- 消费组 353
-- 消息分区 354
使用详解 355
-- 开启绑定功能 355
-- 绑定消息通道 356
-- 消息生产与消费 360
-- 响应式编程 366
-- 消费组与消息分区 368
-- 消息类型 370
绑定器详解 373
-- 绑定器SPI 373
-- 自动化配置 374
-- 多绑定器配置 374
-- RabbitMQ与Kafka绑定器 376
配置详解 376
-- 基础配置 377
-- 绑定通道配置 377
-- 绑定器配置 379
第11章 分布式服务跟踪:Spring Cloud Sleuth 386
快速入门 386
-- 准备工作 386
-- 实现跟踪 389
跟踪原理 390
抽样收集 392
与Logstash整合 394
与Zipkin整合 397
-- HTTP收集 398
-- 消息中间件收集 402
-- 收集原理 404
-- 数据存储 414
-- API接口 417
附录A Starter POMs 419
后记 421
微服务设计中文完整版
本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务,等等。
作者简介:
Sam Newman
是ThoughtWorks公司的技术专家、ThoughtWorks内部系统架构师,同时还为全球的客户提供咨询服务。他在开发和IT运维方面与全球多个领域的公司有过合作。
译者简介:
崔力强
阿里巴巴技术专家,目前专注于持续交付相关的产品开发。曾在ThoughtWorks任职多年,从事软件定制开发、敏捷软件开发的相关咨询等工作,帮助过数个团队和项目进行精益需求管理、软件设计、自动化测试和持续集成等实践。微信号:blade_1986
张骏
2010年加入ThoughtWorks公司。作为开发人员、项目经理、资深敏捷教练和资深咨询师,在金融、电信和能源服务行业的大型复杂业务系统的设计、开发、管理、咨询等方面有丰富的经验。曾为国内外诸多客户提供软件设计、开发以及咨询服务。拥有10年工作经验,在Scrum、看板、规模化敏捷等方法论,以及精益需求管理、自动化测试、持续集成、领域驱动设计、微服务等具体实践方面都有丰富的积累。微信号:zhangjun695339
目录 · · · · · ·
前言 xiv
第1章 微服务 1
1.1 什么是微服务 2
1.1.1 很小,专注于做好一件事 2
1.1.2 自治性 3
1.2 主要好处 3
1.2.1 技术异构性 3
1.2.2 弹性 4
1.2.3 扩展 5
1.2.4 简化部署 5
1.2.5 与组织结构相匹配 6
1.2.6 可组合性 6
1.2.7 对可替代性的优化 6
1.3 面向服务的架构 7
1.4 其他分解技术 7
1.4.1 共享库 8
1.4.2 模块 8
1.5 没有银弹 9
1.6 小结 10
第2章 演化式架构师 11
2.1 不准确的比较 11
2.2 架构师的演化视角 12
2.3 分区 14
2.4 一个原则性的方法 15
2.4.1 战略目标 15
2.4.2 原则 15
2.4.3 实践 16
2.4.4 将原则和实践相结合 16
2.4.5 真实世界的例子 16
2.5 要求的标准 17
2.5.1 监控 18
2.5.2 接口 18
2.5.3 架构安全性 18
2.6 代码治理 18
2.6.1 范例 19
2.6.2 裁剪服务代码模板 19
2.7 技术债务 20
2.8 例外管理 21
2.9 集中治理和领导 21
2.10 建设团队 22
2.11 小结 23
第3章 如何建模服务 24
3.1 MusicCorp简介 24
3.2 什么样的服务是好服务 25
3.2.1 松耦合 25
3.2.2 高内聚 25
3.3 限界上下文 26
3.3.1 共享的隐藏模型 26
3.3.2 模块和服务 27
3.3.3 过早划分 28
3.4 业务功能 28
3.5 逐步划分上下文 29
3.6 关于业务概念的沟通 30
3.7 技术边界 30
3.8 小结 31
第4章 集成 32
4.1 寻找理想的集成技术 32
4.1.1 避免破坏性修改 32
4.1.2 保证API的技术无关性 32
4.1.3 使你的服务易于消费方使用 33
4.1.4 隐藏内部实现细节 33
4.2 为用户创建接口 33
4.3 共享数据库 33
4.4 同步与异步 35
4.5 编排与协同 35
4.6 远程过程调用 38
4.6.1 技术的耦合 38
4.6.2 本地调用和远程调用并不相同 39
4.6.3 脆弱性 39
4.6.4 RPC很糟糕吗 40
4.7 REST 41
4.7.1 REST和HTTP 41
4.7.2 超媒体作为程序状态的引擎 42
4.7.3 JSON、XML还是其他 44
4.7.4 留心过多的约定 44
4.7.5 基于HTTP的REST的缺点 45
4.8 实现基于事件的异步协作方式 46
4.8.1 技术选择 46
4.8.2 异步架构的复杂性 47
4.9 服务即状态机 48
4.10 响应式扩展 48
4.11 微服务世界中的DRY和代码重用的危险 49
4.12 按引用访问 50
4.13 版本管理 51
4.13.1 尽可能推迟 51
4.13.2 及早发现破坏性修改 52
4.13.3 使用语义化的版本管理 53
4.13.4 不同的接口共存 53
4.13.5 同时使用多个版本的服务 54
4.14 用户界面 55
4.14.1 走向数字化 56
4.14.2 约束 56
4.14.3 API组合 57
4.14.4 UI片段的组合 57
4.14.5 为前端服务的后端 59
4.14.6 一种混合方式 60
4.15 与第三方软件集成 61
4.15.1 缺乏控制 61
4.15.2 定制化 62
4.15.3 意大利面式的集成 62
4.15.4 在自己可控的平台进行定制化 62
4.15.5 绞杀者模式 64
4.16 小结 65
第5章 分解单块系统 66
5.1 关键是接缝 66
5.2 分解MusicCorp 67
5.3 分解单块系统的原因 68
5.3.1 改变的速度 68
5.3.2 团队结构 68
5.3.3 安全 68
5.3.4 技术 68
5.4 杂乱的依赖 69
5.5 数据库 69
5.6 找到问题的关键 69
5.7 例子:打破外键关系 70
5.8 例子:共享静态数据 71
5.9 例子:共享数据 72
5.10 例子:共享表 73
5.11 重构数据库 74
5.12 事务边界 75
5.12.1 再试一次 76
5.12.2 终止整个操作 77
5.12.3 分布式事务 77
5.12.4 应该怎么办呢 78
5.13 报告 78
5.14 报告数据库 78
5.15 通过服务调用来获取数据 80
5.16 数据导出 81
5.17 事件数据导出 82
5.18 数据导出的备份 83
5.19 走向实时 84
5.20 修改的代价 84
5.21 理解根本原因 84
5.22 小结 85
第6章 部署 86
6.1 持续集成简介 86
6.2 把持续集成映射到微服务 87
6.3 构建流水线和持续交付 90
6.4 平台特定的构建物 91
6.5 操作系统构建物 92
6.6 定制化镜像 93
6.6.1 将镜像作为构建物 94
6.6.2 不可变服务器 95
6.7 环境 95
6.8 服务配置 96
6.9 服务与主机之间的映射 97
6.9.1 单主机多服务 97
6.9.2 应用程序容器 99
6.9.3 每个主机一个服务 100
6.9.4 平台即服务 101
6.10 自动化 101
6.11 从物理机到虚拟机 102
6.11.1 传统的虚拟化技术 103
6.11.2 Vagrant 104
6.11.3 Linux容器 104
6.11.4 Docker 106
6.12 一个部署接口 107
6.13 小结 109
第7章 测试 110
7.1 测试类型 110
7.2 测试范围 111
7.2.1 单元测试 112
7.2.2 服务测试 113
7.2.3 端到端测试 114
7.2.4 权衡 114
7.2.5 比例 115
7.3 实现服务测试 115
7.3.1 mock还是打桩 115
7.3.2 智能的打桩服务 116
7.4 微妙的端到端测试 117
7.5 端到端测试的缺点 118
7.6 脆弱的测试 118
7.6.1 谁来写这些测试 119
7.6.2 测试多长时间 119
7.6.3 大量的堆积 120
7.6.4 元版本 120
7.7 测试场景,而不是故事 121
7.8 拯救消费者驱动的测试 121
7.8.1 Pact 123
7.8.2 关于沟通 124
7.9 还应该使用端到端测试吗 124
7.10 部署后再测试 125
7.10.1 区分部署和上线 125
7.10.2 金丝雀发布 126
7.10.3 平均修复时间胜过平均故障间隔时间 127
7.11 跨功能的测试 128
7.12 小结 129
第8章 监控 131
8.1 单一服务,单一服务器 132
8.2 单一服务,多个服务器 132
8.3 多个服务,多个服务器 133
8.4 日志,日志,更多的日志 134
8.5 多个服务的指标跟踪 135
8.6 服务指标 135
8.7 综合监控 136
8.8 关联标识 137
8.9 级联 139
8.10 标准化 139
8.11 考虑受众 140
8.12 未来 140
8.13 小结 141
第9章 安全 143
9.1 身份验证和授权 143
9.1.1 常见的单点登录实现 144
9.1.2 单点登录网关 145
9.1.3 细粒度的授权 146
9.2 服务间的身份验证和授权 146
9.2.1 在边界内允许一切 146
9.2.2 HTTP(S) 基本身份验证 147
9.2.3 使用SAML或OpenID Connect 148
9.2.4 客户端证书 148
9.2.5 HTTP之上的HMAC 149
9.2.6 API密钥 149
9.2.7 代理问题 150
9.3 静态数据的安全 152
9.3.1 使用众所周知的加密算法 152
9.3.2 一切皆与密钥相关 153
9.3.3 选择你的目标 153
9.3.4 按需解密 153
9.3.5 加密备份 153
9.4 深度防御 154
9.4.1 防火墙 154
9.4.2 日志 154
9.4.3 入侵检测(和预防)系统 154
9.4.4 网络隔离 155
9.4.5 操作系统 155
9.5 一个示例 156
9.6 保持节俭 158
9.7 人的因素 158
9.8 黄金法则 158
9.9 内建安全 159
9.10 外部验证 159
9.11 小结 159
第10章 康威定律和系统设计 161
10.1 证据 161
10.1.1 松耦合组织和紧耦合组织 162
10.1.2 Windows Vista 162
10.2 Netflix和Amazon 162
10.3 我们可以做什么 163
10.4 适应沟通途径 163
10.5 服务所有权 164
10.6 共享服务的原因 164
10.6.1 难以分割 164
10.6.2 特性团队 164
10.6.3 交付瓶颈 165
10.7 内部开源 166
10.7.1 守护者的角色 166
10.7.2 成熟 166
10.7.3 工具 167
10.8 限界上下文和团队结构 167
10.9 孤儿服务 167
10.10 案例研究:RealEstate.com.au 168
10.11 反向的康威定律 169
10.12 人 170
10.13 小结 170
第11章 规模化微服务 171
11.1 故障无处不在 171
11.2 多少是太多 172
11.3 功能降级 173
11.4 架构性安全措施 174
11.5 反脆弱的组织 175
11.5.1 超时 176
11.5.2 断路器 176
11.5.3 舱壁 178
11.5.4 隔离 179
11.6 幂等 179
11.7 扩展 180
11.7.1 更强大的主机 181
11.7.2 拆分负载 181
11.7.3 分散风险 181
11.7.4 负载均衡 182
11.7.5 基于worker的系统 184
11.7.6 重新设计 184
11.8 扩展数据库 185
11.8.1 服务的可用性和数据的持久性 185
11.8.2 扩展读取 185
11.8.3 扩展写操作 186
11.8.4 共享数据库基础设施 187
11.8.5 CQRS 187
11.9 缓存 188
11.9.1 客户端、 代理和服务器端缓存 188
11.9.2 HTTP缓存 189
11.9.3 为写使用缓存 190
11.9.4 为弹性使用缓存 190
11.9.5 隐藏源服务 191
11.9.6 保持简单 191
11.9.7 缓存中毒:一个警示 192
11.10 自动伸缩 192
11.11 CAP定理 193
11.11.1 牺牲一致性 194
11.11.2 牺牲可用性 195
11.11.3 牺牲分区容忍性 195
11.11.4 AP还是CP 196
11.11.5 这不是全部或全不 196
11.11.6 真实世界 197
11.12 服务发现 197
11.13 动态服务注册 199
11.13.1 Zookeeper 199
11.13.2 Consul 200
11.13.4 构造你自己的系统 201
11.13.5 别忘了人 201
11.14 文档服务 201
11.14.1 Swagger 202
11.14.2 HAL 和HAL浏览器 202
11.15 自描述系统 203
11.16 小结 203
第12章 总结 204
12.1 微服务的原则 204
12.1.1 围绕业务概念建模 205
12.1.2 接受自动化文化 205
12.1.3 隐藏内部实现细节 205
12.1.4 让一切都去中心化 206
12.1.5 可独立部署 206
12.1.6 隔离失败 206
12.1.7 高度可观察 207
12.2 什么时候你不应该使用微服务 207
12.3 临别赠言 208
关于作者 209
关于封面 209
【带书签】微服务架构与实践 ,王磊著
目录 · · · · · ·
第1部分 基础篇
第1章 单块架构及其面临的挑战 3
1.1 三层应用架构 4
1.1.1 三层应用架构的发展 4
1.1.2 什么是三层架构 5
1.1.3 三层架构的优势 6
1.2 单块架构 6
1.2.1 什么是单块架构 6
1.2.2 单块架构的优势 7
1.2.3 单块架构面临的挑战 8
1.3 小结 12
第2章 微服务架构综述 13
2.1 什么是微服务架构 13
2.1.1 多微才够微 14
2.1.2 单一职责 17
2.1.3 轻量级通信 17
2.1.4 独立性 19
2.1.5 进程隔离 20
2.2 微服务的诞生背景 22
2.2.1 互联网行业的快速发展 23
2.2.2 敏捷、精益方法论的深入人心 23
2.2.3 单块架构系统面临的挑战 23
2.2.4 容器虚拟化技术 23
2.3 微服务架构与 SOA 24
2.3.1 SOA概述 24
2.3.2 微服务与 SOA 25
2.4 微服务的本质 26
2.4.1 服务作为组件 27
2.4.2 围绕业务组织团队 28
2.4.3 关注产品而非项目 29
2.4.4 技术多样性 31
2.4.5 业务数据独立 32
2.4.6 基础设施自动化 33
2.4.7 演进式架构 33
2.5 微服务不是银弹 34
2.5.1 分布式系统的复杂度 35
2.5.2 运维成本 36
2.5.3 部署自动化 36
2.5.4 DevOps与组织架构 37
2.5.5 服务间的依赖测试 37
2.5.6 服务间的依赖管理 37
2.6 小结 38
第2部分 实践篇
第3章 构建第一个服务 41
3.1 场景分析 41
3.2 任务拆分 43
第4章 Hello World API 45
4.1 API实现 45
4.1.1 开发语言 ——Ruby 45
4.1.2 Web框架——Grape 46
4.1.3 API的具体实现 47
4.2 代码测试与静态检查 50
4.2.1 代码测试 50
4.2.2 测试覆盖率统计 53
4.2.3 静态检查 54
4.2.4 代码复杂度检查 57
第5章 构建 Docker映像 61
5.1 定义 Dockerfile 61
5.2 配置 Docker主机 63
5.3 构建 Docker映像 64
5.4 运行 Docker容器 64
5.5 发布 Docker映像 65
5.6 小结 69
第6章 部署 Docker映像 71
6.1基础设施 AWS 71
6.2基础设施自动化 73
6.3 部署 Docker映像 80
6.4自动化部署 81
6.5 小结 84
第7章 持续交付流水线 85
7.1 持续集成环境 85
7.2 提交阶段 87
7.3 验证阶段 91
7.4 构建阶段 91
7.5 发布阶段 94
7.6 小结 96
第8章 日志聚合 97
8.1 日志聚合工具简介 97
8.2 Splunk的核心 99
8.3 安装 Splunk索引器 100
8.4 安装 Splunk转发器 101
8.5 日志查找 102
8.6 告警设置 103
8.7 小结 104
第9章 监控与告警 105
9.1 Nagios简介 105
9.2 Nagios的工作原理 107
9.3 Nagios安装 108
9.4 Nagios的配置 109
9.5 监控 products-service 111
9.6 告警 113
9.7 小结 114
第10章 功能迭代 115
10.1 定义模型 116
10.2 持久化模型 117
10.3 定义表现形式 119
10.4 实现 API 122
10.5 服务描述文件 125
10.6 小结 127
第3部分 进阶篇
第11章 微服务与持续交付 131
11.1 持续交付的核心 132
11.2 微服务架构与持续交付 133
11.2.1 开发 133
11.2.2 测试 137
11.2.3 持续集成 139
11.2.4 构建 139
11.2.5 部署 140
11.2.6 运维 143
11.3 小结 144
第12章 微服务与轻量级通信机制 145
12.1 同步通信与异步通信 145
12.1.1 概述 145
12.1.2 同步通信与异步通信的选择 146
12.2 远程调用 RPC 147
12.2.1 远程过程调用的核心 147
12.2.2 远程方法调用 148
12.2.3 远程过程调用的弊端 148
12.3 REST 149
12.3.1 概述 149
12.3.2 REST的核心 150
12.3.3 REST的优势 152
12.3.4 REST的不足 152
12.3.5 本节小结 155
12.4 HAL 155
12.4.1 概述 155
12.4.2 HAL的核心 156
12.4.3 HAL浏览器 160
12.5 消息队列 161
12.5.1 核心部分 162
12.5.2 访问方式 163
12.5.3 消息队列的优缺点 164
12.6 后台任务处理系统 165
12.6.1 核心部分 165
12.6.2 服务回调 166
12.6.3 一个例子 167
12.6.4 后台任务与微服务 169
12.7 小结 170
第13章 微服务与测试 171
13.1 微服务的结构 171
13.2 微服务的测试策略 173
13.3 微服务的单元测试 175
13.3.1 单元测试综述 175
13.3.2 单元测试的内容 176
13.4 微服务的集成测试 179
13.4.1 集成测试综述 179
13.4.2 集成测试的实施方法 179
13.4.3 集成测试的内容 180
13.5 基于消费者驱动的契约测试 181
13.5.1 集成测试存在的弊端 181
13.5.2 什么是契约 183
13.5.3 什么是契约测试 184
13.5.4 契约测试的方法 185
13.5.5 Pact实现契约测试 187
13.5.6 一个例子 192
13.5.7 本节小结 205
13.6 微服务的组件测试 205
13.6.1 组件测试概述 205
13.6.2 组件测试的方法 206
13.6.3 本节小结 207
13.7 微服务的端到端测试 208
13.7.1 端到端测试概述 208
13.7.2 端到端测试的内容 208
13.7.3 本节小结 209
13.8 小结 210
第14章 使用微服务架构改造遗留系统 211
14.1 背景与挑战 211
14.2 改造策略 212
14.2.1 昀小修改 212
14.2.2 功能剥离 212
14.2.3 数据解耦 213
14.2.4 数据同步 213
14.2.5 迭代替换 214
14.3 快速开发实践 215
14.3.1 快速开发模板 215
14.3.2 代码生成工具 217
14.3.3 持续集成模板 217
14.3.4 一键部署工具 217
14.4 微服务架构下的新系统 218
14.5 小结 220
《收获,不止Oracle》
资源为txt,内有百度云盘链接。
编辑推荐
颠覆IT技术图书的传统写作方式,在妙趣横生的故事中学到Oracle核心知识与优化方法论,让你摆脱技术束缚,超越技术。
内容提要
在这本书里读者将会跟随作者一同对Oracle数据库的相关知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、优化、设计人员,还是从事Java、C的开发人员。接下来作者再将这部分知识中最实用的内容进一步提炼,浓缩出最精华的部分,分享给大家。这是二八现象的一次经典应用。
这部分知识就是Oracle的物理体系结构、逻辑体系结构、表、索引以及表连接五大部分。通过阅读这些章节,读者将会在最短时间内以一种有史以来最轻松的方式,完成对Oracle数据库的整体认识,不仅能在工作中解决常规问题,还能具备一定的设计和调优能力。相信通过这些章节的学习,会给读者的Oracle学习带来极大的收获。
然而,作者最希望看到的是:让读者的收获,不止Oracle。
为达到此目的,作者精心将全书分成了上下两篇,刚才所描述的具体知识点体现在全书的上篇,而在下篇中,读者将通过各种精彩故事、生动案例,体会到该如何学习和如何思考,在意识的天空抛开束缚,无拘无束、尽情飞翔。
在这里,读者也许会有疑问,前面说的有史以来最轻松的方式是一种什么样的方式呢?还请亲爱的读者自己去揭晓谜底吧。
目录
上篇 开启惊喜之门——带意识地学Oracle
第1章意识,少做事从学习开始 2
1.1 选择先学什么颇有学问 2
1.1.1 梁老师课堂爆笑开场 2
1.1.2 看似跑题的手机分类 4
1.1.3 学什么先了解做什么 5
1.2 善于规划分类才有效果 7
1.2.1 分类与角色密切相关 7
1.2.2 角色自我认识有讲究 9
1.3 明白学以致用方有意义 11
第2章震惊,体验物理体系之旅 13
2.1 必须提及的系列知识 13
2.2 物理体系从老余开店慢慢铺开 16
2.2.1 老余的三个小故事 16
2.2.1.1 顾客的尺寸 16
2.2.1.2 有效的调整 17
2.2.1.3 记录的习惯 18
2.2.2 体系结构原理初探 20
2.2.2.1 从一普通查询SQL说起20
2.2.2.2 老余故事终现用心良苦23
2.2.2.3 一起体会Oracle代价 27
2.2.3 体系结构原理再探 30
2.2.3.1 从一普通更新语句说起30
2.2.3.2 体系结构中提交的探讨34
2.2.3.3 劳模的评选 38
2.2.3.4 回滚的研究 40
2.2.3.5 一致的查询 43
2.2.3.6 一致读的原理46
2.2.3.7 实践的体会 49
2.3 体系学习让SQL性能提升千倍 65
2.3.1 一起探索体系学习的意义 65
2.3.1.1 同学们不知所学何用 66
2.3.1.2 实际上大有用武之地 67
2.3.2 单车到飞船的经典之旅 70
2.3.2.1 未优化前,单车速度 70
2.3.2.2 绑定变量,摩托速度 72
2.3.2.3 静态改写,汽车速度 74
2.3.2.4 批量提交,动车速度 75
2.3.2.5 集合写法,飞机速度 77
2.3.2.6 直接路径,火箭速度 78
2.3.2.7 并行设置,飞船速度 79
2.3.3 精彩的总结与课程展望 80
2.3.3.1 最大的收获应该是思想80
2.3.3.2 老师的课程展望与规划81
第3章神奇,走进逻辑体系世界 84
3.1 长幼有序的逻辑体系 84
3.2 逻辑体系从老余养殖细细说起 85
3.2.1 农场之体系逻辑结构 85
3.2.2 农场之BLOCK漫谈89
3.2.3 农场之区与段 91
3.2.4 农场之表空间的分类 93
3.2.4.1 表空间与系统农场93
3.2.4.2 表空间与临时农场93
3.2.4.3 表空间与回滚农场94
3.2.5 逻辑结构之初次体会 94
3.2.5.1 逻辑结构之BLOCK 94
3.2.5.2 逻辑结构之TABLESPACE 95
3.2.5.3 逻辑结构之USER 97
3.2.5.4 逻辑结构之EXTENT 97
3.2.5.5 逻辑结构之SEGMENT 98
3.2.6 逻辑结构之二次体会 100
3.2.6.1 BLOCK的大小与调整 100
3.2.6.2 PCTFREE参数与调整 101
3.2.6.3 PCTFREE与生效范围 102
3.2.6.4 EXTENT尺寸与调整 103
3.2.7 逻辑结构之三次体会 104
3.2.7.1 已用与未用表空间情况104
3.2.7.2 表空间大小与自动扩展105
3.2.7.3 回滚表空间新建与切换109
3.2.7.4 临时表空间新建与切换111
3.2.7.5 临时表空间组及其妙用114
3.3 课程结束你给程序安上了翅膀 117
3.3.1 过度扩展与性能 117
3.3.2 PCTFREE与性能120
3.3.3 行迁移与优化 123
3.3.4 块的大小与应用 124
第4章祝贺,表的设计成就英雄 131
4.1 表的设计之五朵金花 131
4.2 表的特性从老余一家展开描述 132
4.2.1 老余一家各施所长 132
4.2.2 普通堆表不足之处 132
4.2.2.1 表更新日志开销较大 133
4.2.2.2 delete无法释放空间 136
4.2.2.3 表记录太大检索较慢 139
4.2.2.4 索引回表读开销很大 140
4.2.2.5 有序插入却难有序读出143
4.2.3 奇特的全局临时表 146
4.2.3.1 分析全局临时表的类型146
4.2.3.2 观察各类DML的REDO量 147
4.2.3.3 全局临时表两大重要特性 149
4.2.4 神通广大的分区表 153
4.2.4.1 分区表类型及原理155
4.2.4.2 分区表最实用的特性 165
4.2.4.3 分区索引类型简述176
4.2.4.4 分区表之相关陷阱177
4.2.5 有趣的索引组织表 184
4.2.6 簇表的介绍及应用 187
4.3 理解表设计的你成为项目组英雄 189
第5章惊叹,索引天地妙不可言 191
5.1 看似简单无趣的索引知识 191
5.2 索引探秘从小余缉凶拉开帷幕 192
5.2.1 BTREE索引的精彩世界 192
5.2.1.1 BTREE索引结构图展现192
5.2.1.2 到底是物理还是逻辑结构 194
5.2.1.3 索引结构三大重要特点198
5.2.1.4 插播小余缉凶精彩故事201
5.2.1.5 妙用三特征之高度较低203
5.2.1.6 巧用三特征之存储列值219
5.2.1.7 活用三特征之索引有序248
5.2.1.8 不可不说的主外键设计265
5.2.1.9 组合索引高效设计要领272
5.2.1.10变换角度看索引的危害289
5.2.1.11如何合理控制索引数量295
5.2.2 位图索引的玫瑰花之刺 297
5.2.2.1 统计条数奋勇夺冠297
5.2.2.2 即席查询一骑绝尘302
5.2.2.3 遭遇更新苦不堪言306
5.2.2.4 重复度低一败涂地309
5.2.2.5 了解结构真相大白311
5.2.3 小心函数索引步步陷阱 315
5.2.3.1 列运算让索引失去作用315
5.2.3.2 函数索引是这样应用的317
5.2.3.3 避免列运算的经典案例319
5.3 索引让一系列最熟悉的SQL飞起来了 325
第6章经典,表的连接学以致用 327
6.1 表的连接之江南三剑客 327
6.2 三大类型从小余跳舞一一道来 328
6.2.1 跳舞也能跳出连接类型 328
6.2.1.1 感觉怪异的嵌套循环 328
6.2.1.2 排序合并及哈希连接 329
6.2.2 各类连接访问次数差异 330
6.2.2.1 嵌套循环的表访问次数330
6.2.2.2 哈希连接的表访问次数337
6.2.2.3 排序合并的表访问次数340
6.2.3 各类连接驱动顺序区别 341
6.2.3.1 嵌套循环的表驱动顺序341
6.2.3.2 哈希连接的表驱动顺序343
6.2.3.3 排序合并的表驱动顺序345
6.2.4 各类连接排序情况分析 347
6.2.4.1 除嵌套循环都需排序 347
6.2.4.2 排序只需取部分字段 347
6.2.4.3 关于排序的经典案例 349
6.2.5 各类连接限制场景对比 350
6.2.5.1 哈希连接的限制 350
6.2.5.2 排序合并的限制 353
6.2.5.3 嵌套循环无限制 355
6.3 你动手装备的表连接威震三军 355
6.3.1 嵌套循环与索引 356
6.3.2 哈希连接与索引 362
6.3.3 排序合并与索引 363
下篇飞翔意识天空——思想与案例的分享
第7章搞定!不靠技术靠菜刀 368
7.1 SQL被一刀剁了 369
7.2 整个模块丢弃了 370
7.3 调用次数减少了 371
7.4 排序不再需要了 372
7.5 大表砍成小表了 373
7.6 排重操作消失了 373
7.7 插入阻碍小多了 374
7.8 迁移事情不做了 375
第8章升级!靠技术改隐形刀 377
8.1 大表等同小表了 378
8.2 大表切成小表了 379
8.3 索引变身小表了 380
8.4 删除动作不做了 380
8.5 清表角度变换了 381
8.6 提交次数缩减了 382
8.7 迁移越来越快了 384
8.8 SQL语句精简了 385
第9章提问,也是智慧的体现 391
9.1 描述要考虑周全 392
9.2 用词要尽量准确 393
9.3 说明要力求简洁 394
9.4 问过的避免再问 396
9.5 能搜能试不急问 396
第10章买鱼,居然买出方法论 398
10.1 小余买鱼系列故事 398
10.1.1 诊断与改进 398
10.1.2 需求与设计 401
10.1.3 资源的利用 403
10.1.4 真正的需求 404
10.2 买鱼买出了方法论 405
10.2.1 一套流程 405
10.2.2 两大法宝 407
10.3 方法论的应用案例 408
10.3.1 从我们的这一套流程说起 408
10.3.1.1 诊断 408
10.3.1.2 改进优化(首次优化) 409
10.3.1.3 需求与设计(再次优化) 410
10.3.1.4 资源利用(花絮) 412
10.3.2 案例映衬了经典两大法宝 412
第11章宝典,规范让你少做事 414
11.1 抓狂,为何事总忙不完 415
11.1.1 技术能力不足的新人们 415
11.1.2 不懂提问智慧的求助者 415
11.1.3 产生各种失误的粗心者 416
11.1.3.1 啊,小黄的DDL惹祸 416
11.1.3.2 惨,老师登错环境了 417
11.1.3.3 糟,小罗忘操作…… 417
11.1.4 解决问题缓慢的技术员 419
11.1.4.1 优化效率低下的小高 419
11.1.4.2 为何老师能快速解决 420
11.1.5 陷入种种困境的开发者 422
11.1.5.1 超长SQL使小郑烦恼 422
11.1.5.2 缺少注释让小叶沮丧 422
11.1.6 总是考虑不全的设计者 423
11.1.6.1 未提前规划的王工 423
11.1.6.2 不了解特性的刘工 424
11.2 淡定,规范少做无谓事 425
11.2.1 学习规范——促成新人快速成长 426
11.2.2 求助规范——引导求助不再迷糊 427
11.2.3 操作规范——协助粗心者不犯错 428
11.2.4 流程规范——保障问题快速解决 429
11.2.4.1 动态整体 429
11.2.4.2 动态局部 432
11.2.4.3 静态整体 439
11.2.4.4 静态局部 448
11.2.5 开发规范——让开发者驾轻就熟 451
11.2.5.1 SQL编写规范 452
11.2.5.2 PL/SQL编写规范 455
11.2.6 设计规范——助设计者运筹帷幄 457
11.2.6.1 表规范 458
11.2.6.2 索引规范 461
11.2.6.3 环境参数规范 467
11.2.6.4 命名规范 469
Manning.AngularJS.in.Action.2015.7 AngularJS实战(英文版)
AngularJS in Action covers everything you need to know to get started with the AngularJS framework. As you read, you'll explore all the individual components of the framework and learn how to customize and extend them. You'll discover the emerging patterns for web application architecture and tackle required tasks like communicating with a web server back-end. Along the way, you'll see AngularJS in action by building real world applications with thoroughly commented code.
《计算机科学技术导论》(专业版,第二版),陶树平主编,高等教育出版社,2004年
《计算机科学技术导论》(专业版,第二版),陶树平主编,高等教育出版社,2004年
CSS设计指南(第3版)
中文名: CSS设计指南(第3版)原名: Stylin' with CSS: A Designer's Guide (3rd Edition) (Voices That Matter)
内容介绍:
《css设计指南(第3版)》是一本面向初中级读者的经典设计指南。全书共分8 章,前4 章分别介绍了html 标记和文档结构、css 工作原理、定位元素、字体和文本,对规则、声明、层迭、特指度、选择符等基本概念进行了详细解读。随后4 章介绍了页面布局、界面组件,css3 圆角、阴影、渐变、多背景等视觉设计技巧,最后还对如何实现最前沿的响应式设计进行了通俗易懂的演示。
《css设计指南(第3版)》适合css 初中级读者阅读。