自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (25)
  • 收藏
  • 关注

空空如也

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。,

2018-01-18

淘宝技术这十年

《淘宝技术这十年》内容简介:任何网站的发展都不是一蹴而就的。它在发展过程中会遇到各种各样的问题和业务带来的压力。正是这些问题和压力推动着技术的进步和发展,而技术的发展反过来又会促进业务的更大提升。如今淘宝网的流量排名已是全球前15名、国内前3名,其系统服务器也从一台发展到万台以上。, 《淘宝技术这十年》从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其所有主动和被动的技术变革的前因后果。书中有幕后故事、产品经验、架构演进、技术启蒙,也有大牛成长、业内八卦、失败案例、励志故事。《淘宝技术这十年》文风流畅,有技术人员特有的幽默感;内容积极正面,有现场感,全部是作者亲身经历。

2017-12-15

从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

2017-12-13

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

2017-12-07

【带目录】图解设计模式 结城浩

原版连续畅销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

2017-12-05

(带书签)机器学习实战(单页版)

内容简介 · · · · · · 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。 本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如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

2017-10-18

用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

2017-10-17

利用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

2017-10-17

【带书签】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架构感兴趣的广大技术人员与学生阅读。

2017-10-17

MongoDB权威指南(第二版)

内容简介 · · · · · · mongodb如何帮你管理通过web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现mongodb如此稳定、性能优越甚至能够无限水平扩展背后的原因。 《mongodb权威指南》的两位作者来自开发并支持开源数据库mongodb的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的json风格的文档比组织成关系型数据库中的记录要容易得多。 作者简介 · · · · · · KristinaccChodorow 13310gen的软件工程师,2MongoDB项目的核心成员.a负责数据库服务器、PHP驱动、Perl驱动等模块.a她曾在世界级的大会上发言,2包括OSCON、LinuxCon、FOSDEM和Latinoware.a

2017-10-17

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源代码,以及本书相关的更新内容。

2017-10-17

布道之道——引领团队拥抱技术创新.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

2017-10-13

【带书签】机器学习导论

《机器学习导论》对机器学习的定义和应用实例进行了介绍,涵盖了监督学习。贝叶斯决策理论。参数方法、多元方法、维度归约、聚类、非参数方法、决策树。线性判别式、多层感知器,局部模型、隐马尔可夫模型。分类算法评估和比较,组合多学习器以及增强学习等。机器学习的目标是对计算机编程,以便使用样本数据或以往的经验来解决给定的问题。已经有许多机器学习的成功应用,包括分析以往销售数据来预测客户行为,人脸识别或语音识别,优化机器人行为以便使用最少的资源来完成任务,以及从生物信息数据中提取知识的各种系统。为了对机器学习问题和解进行统一的论述,《机器学习导论》讨论了机器学习在统计学、模式识别、神经网络。人工智能。信号处理、控制和数据挖掘等不同领域的应用。对所有学习算法都进行了解释,以便读者可以容易地将书中的公式转变为计算机程序。《机器学习导论》可作为高等院校计算机相关专业高年级本科生和研究生的教材,也可供研究机器学习方法的技术人员参考。

2017-10-13

【带书签】图解机器学习

本书用丰富的图示,从最小二乘法出发,对基于最小二乘法实现的各种机器学习算法进行了详细的介绍。第Ⅰ部分介绍了机器学习领域的概况;第Ⅱ部分和第Ⅲ部分分别介绍了各种有监督的回归算法和分类算法;第Ⅳ部分介绍了各种无监督学习算法;第Ⅴ部分介绍了机器学习领域中的新兴算法。书中大部分算法都有相应的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

2017-10-13

【带书签】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虚拟机操作码助记符表。

2017-10-13

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

2017-09-27

【带书签】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

2017-09-16

微服务设计中文完整版

本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务,等等。 作者简介: 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

2017-09-16

【带书签】微服务架构与实践 ,王磊著

目录 · · · · · · 第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

2017-09-16

《收获,不止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

2017-09-16

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.

2017-08-22

《计算机科学技术导论》(专业版,第二版),陶树平主编,高等教育出版社,2004年

《计算机科学技术导论》(专业版,第二版),陶树平主编,高等教育出版社,2004年

2017-08-21

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 初中级读者阅读。

2015-11-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除