自定义博客皮肤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)
  • 资源 (514)
  • 收藏
  • 关注

空空如也

Go语言实战(中文高清版)

第1章 关于Go语言的介绍 1 1.1 用Go解决现代编程难题 2 1.1.1 开发速度 2 1.1.2 并发 3 1.1.3 Go语言的类型系统 5 1.1.4 内存管理 7 1.2 你好,Go 7 1.3 小结 8 第2章 快速开始一个Go程序 9 2.1 程序架构 9 2.2 main包 11 2.3 search包 13 2.3.1 search.go 13 2.3.2 feed.go 21 2.3.3 match.go default.go 24 2.4 RSS匹配器 30 2.5 小结 36 第3章 打包和工具链 37 3.1 包 37 3.1.1 包名惯例 38 3.1.2 main包 38 3.2 导入 39 3.2.1 远程导入 40 3.2.2 命名导入 40 3.3 函数init 41 3.4 使用Go的工具 42 3.5 进一步介绍Go开发工具 44 3.5.1 go vet 44 3.5.2 Go代码格式化 45 3.5.3 Go语言的文档 45 3.6 与其他Go开发者合作 48 3.7 依赖管理 48 3.7.1 第三方依赖 49 3.7.2 对gb的介绍 50 3.8 小结 52 第4章 数组、切片和映射 53 4.1 数组的内部实现和基础功能 53 4.1.1 内部实现 53 4.1.2 声明和初始化 54 4.1.3 使用数组 55 4.1.4 多维数组 58 4.1.5 在函数间传递数组 59 4.2 切片的内部实现和基础功能 60 4.2.1 内部实现 60 4.2.2 创建和初始化 61 4.2.3 使用切片 63 4.2.4 多维切片 74 4.2.5 在函数间传递切片 75 4.3 映射的内部实现和基础功能 76 4.3.1 内部实现 76 4.3.2 创建和初始化 78 4.3.3 使用映射 79 4.3.4 在函数间传递映射 81 4.4 小结 82 第5章 Go语言的类型系统 83 5.1 用户定义的类型 83 5.2 方法 87 5.3 类型的本质 90 5.3.1 内置类型 91 5.3.2 引用类型 91 5.3.3 结构类型 93 5.4 接口 95 5.4.1 标准库 96 5.4.2 实现 98 5.4.3 方法集 99 5.4.4 多态 103 5.5 嵌入类型 105 5.6 公开或未公开的标识符 113 5.7 小结 121 第6章 并发 122 6.1 并发与并行 122 6.2 goroutine 125 6.3 竞争状态 132 6.4 锁住共享资源 135 6.4.1 原子函数 135 6.4.2 互斥锁 138 6.5 通道 140 6.5.1 无缓冲的通道 141 6.5.2 有缓冲的通道 146 6.6 小结 149 第7章 并发模式 150 7.1 runner 150 7.2 pool 158 7.3 work 168 7.4 小结 174 第8章 标准库 176 8.1 文档与源代码 177 8.2 记录日志 178 8.2.1 log包 179 8.2.2 定制的日志记录器 182 8.2.3 结论 186 8.3 编码 解码 187 8.3.1 解码JSON 187 8.3.2 编码JSON 192 8.3.3 结论 193 8.4 输入和输出 193 8.4.1 Writer和Reader接口 194 8.4.2 整合并完成工作 195 8.4.3 简单的curl 199 8.4.4 结论 200 8.5 小结 200 第9章 测试和性能 201 9.1 单元测试 201 9.1.1 基础单元测试 202 9.1.2 表组测试 205 9.1.3 模仿调用 208 9.1.4 测试服务端点 212 9.2 示例 217 9.3 基准测试 220 9.4 小结 224

2018-06-03

Go程序设计语言(中文高清版)

出版者的话 译者序 前言 第1章 入门 1 1.1 hello,world 1 1.2 命令行参数 3 1.3 找出重复行 6 1.4 GIF动画 10 1.5 获取一个URL 12 1.6 并发获取多个URL 13 1.7 一个Web服务器 14 1.8 其他内容 17 第2章 程序结构 20 2.1 名称 20 2.2 声明 21 2.3 变量 22 2.3.1 短变量声明 22 2.3.2 指针 23 2.3.3 new函数 25 2.3.4 变量的生命周期 26 2.4 赋值 27 2.4.1 多重赋值 27 2.4.2 可赋值性 28 2.5 类型声明 29 2.6 包和文件 30 2.6.1 导入 31 2.6.2 包初始化 33 2.7 作用域 34 第3章 基本数据 38 3.1 整数 38 3.2 浮点数 42 3.3 复数 45 3.4 布尔值 47 3.5 字符串 47 3.5.1 字符串字面量 49 3.5.2 Unicode 49 3.5.3 UTF-8 50 3.5.4 字符串和字节slice 53 3.5.5 字符串和数字的相互转换 56 3.6 常量 56 3.6.1 常量生成器iota 57 3.6.2 无类型常量 59 第4章 复合数据类型 61 4.1 数组 61 4.2 slice 63 4.2.1 append函数 66 4.2.2 slice就地修改 69 4.3 map 71 4.4 结构体 76 4.4.1 结构体字面量 78 4.4.2 结构体比较 80 4.4.3 结构体嵌套和匿名成员 80 4.5 JSON 82 4.6 文本和HTML模板 87 第5章 函数 92 5.1 函数声明 92 5.2 递归 93 5.3 多返回值 96 5.4 错误 98 5.4.1 错误处理策略 99 5.4.2 文件结束标识 101 5.5 函数变量 102 5.6 匿名函数 104 5.7 变长函数 110 5.8 延迟函数调用 111 5.9 宕机 115 5.10 恢复 118 第6章 方法 120 6.1 方法声明 120 6.2 指针接收者的方法 122 6.3 通过结构体内嵌组成类型 124 6.4 方法变量与表达式 127 6.5 示例:位向量 128 6.6 封装 130 第7章 接口 133 7.1 接口即约定 133 7.2 接口类型 135 7.3 实现接口 136 7.4 使用flag.Value来解析参数 139 7.5 接口值 141 7.6 使用sort.Interface来排序 144 7.7 http.Handler接口 148 7.8 error接口 152 7.9 示例:表达式求值器 154 7.10 类型断言 160 7.11 使用类型断言来识别错误 161 7.12 通过接口类型断言来查询特性 162 7.13 类型分支 164 7.14 示例:基于标记的XML解析 166 7.15 一些建议 168 第8章 goroutine和通道 170 8.1 goroutine 170 8.2 示例:并发时钟服务器 171 8.3 示例:并发回声服务器 174 8.4 通道 176 8.4.1 无缓冲通道 177 8.4.2 管道 178 8.4.3 单向通道类型 180 8.4.4 缓冲通道 181 8.5 并行循环 183 8.6 示例:并发的Web爬虫 187 8.7 使用select多路复用 190 8.8 示例:并发目录遍历 192 8.9 取消 195 8.10 示例:聊天服务器 198 第9章 使用共享变量实现并发 201 9.1 竞态 201 9.2 互斥锁:sync.Mutex 205 9.3 读写互斥锁:sync.RWMutex 208 9.4 内存同步 208 9.5 延迟初始化:sync.Once 210 9.6 竞态检测器 212 9.7 示例:并发非阻塞缓存 212 9.8 goroutine与线程 218 9.8.1 可增长的栈 219 9.8.2 goroutine调度 219 9.8.3 GOMAXPROCS 219 9.8.4 goroutine没有标识 220 第10章 包和go工具 221 10.1 引言 221 10.2 导入路径 221 10.3 包的声明 222 10.4 导入声明 223 10.5 空导入 223 10.6 包及其命名 225 10.7 go工具 226 10.7.1 工作空间的组织 227 10.7.2 包的下载 228 10.7.3 包的构建 229 10.7.4 包的文档化 231 10.7.5 内部包 232 10.7.6 包的查询 233 第11章 测试 235 11.1 go test工具 235 11.2 Test函数 236 11.2.1 随机测试 239 11.2.2 测试命令 240 11.2.3 白盒测试 242 11.2.4 外部测试包 245 11.2.5 编写有效测试 246 11.2.6 避免脆弱的测试 247 11.3 覆盖率 248 11.4 Benchmark函数 250 11.5 性能剖析 252 11.6 Example函数 254 第12章 反射 256 12.1 为什么使用反射 256 12.2 reflect.Type和reflect.Value 257 12.3 Display:一个递归的值显示器 259 12.4 示例:编码S表达式 263 12.5 使用reflect.Value来设置值 266 12.6 示例:解码S表达式 268 12.7 访问结构体字段标签 271 12.8 显示类型的方法 273 12.9 注意事项 274 第13章 低级编程 276 13.1 unsafe.Sizeof、Alignof 和Offsetof 276 13.2 unsafe.Pointer 278 13.3 示例:深度相等 280 13.4 使用cgo调用C代码 282 13.5 关于安全的注意事项 286

2018-06-03

每天5分钟玩转Kubernetes

第1章 先把 Kubernetes 跑起来 1 1.1 先跑起来 1 1.2 创建 Kubernetes 集群 2 1.3 部署应用 4 1.4 访问应用 5 1.5 Scale 应用 6 1.6 滚动更新 7 1.7 小结 8 第2章 重要概念 9 第3章 部署 Kubernetes Cluster 13 3.1 安装 Docker 14 3.2 安装 kubelet、kubeadm 和 kubectl 14 3.3 用 kubeadm 创建 Cluster 14 3.3.1 初始化Master 14 3.3.2 配置 kubectl 16 3.3.3 安装Pod网络 16 3.3.4 添加 k8s-node1 和 k8s-node2 16 3.4 小结 18 第4章 Kubernetes 架构 19 4.1 Master 节点 19 4.2 Node 节点 20 4.3 完整的架构图 21 4.4 用例子把它们串起来 22 4.5 小结 24 第5章 运行应用 25 5.1 Deployment 25 5.1.1 运行Deployment 25 5.1.2 命令 vs 配置文件 29 5.1.3 Deployment 配置文件简介 30 5.1.4 伸缩 31 5.1.5 Failover 33 5.1.6 用label 控制 Pod 的位置 33 5.2 DaemonSet 36 5.2.1 kube-flannel-ds 36 5.2.2 kube-proxy 37 5.2.3 运行自己的 DaemonSet 38 5.3 Job 40 5.3.1 Pod 失败的情况 41 5.3.2 Job 的并行性 43 5.3.3 定时 Job 45 5.4 小结 48 第6章 通过 Service 访问 Pod 49 6.1 创建 Service 49 6.2 Cluster IP 底层实现 51 6.3 DNS 访问 Service 53 6.4 外网如何访问 Service 55 6.5 小结 58 第7章 Rolling Update 59 7.1 实践 59 7.2 回滚 61 7.3 小结 63 第8章 Health Check 64 8.1 默认的健康检查 64 8.2 Liveness 探测 65 8.3 Readiness 探测 67 8.4 Health Check 在 Scale Up 中的应用 69 8.5 Health Check 在滚动更新中的应用 71 8.6 小结 75 第9章 数据管理 76 9.1 Volume 76 9.1.1 emptyDir 76 9.1.2 hostPath 78 9.1.3 外部 Storage Provider 79 9.2 PersistentVolume & PersistentVolumeClaim 81 9.2.1 NFS PersistentVolume 81 9.2.2 回收 PV 84 9.2.3 PV 动态供给 86 9.3 一个数据库例子 87 9.4 小结 91 第10章 Secret & Configmap 92 10.1 创建 Secret 92 10.2 查看 Secret 93 10.3 在Pod中使用Secret 94 10.3.1 Volume 方式 94 10.3.2 环境变量方式 96 10.4 ConfigMap 97 10.5 小结 100 第11章 Helm—Kubernetes的包管理器 101 11.1 Why Helm 101 11.2 Helm 架构 103 11.3 安装 Helm 104 11.3.1 Helm 客户端 104 11.3.2 Tiller服务器 105 11.4 使用Helm 106 11.5 chart 详解 109 11.5.1 chart 目录结构 109 11.5.2 chart 模板 113 11.5.3 再次实践 MySQL chart 115 11.5.4 升级和回滚 release 118 11.5.5 开发自己的 chart 119 11.6 小结 126 第12章 网 络 127 12.1 Kubernetes 网络模型 127 12.2 各种网络方案 128 12.3 Network Policy 129 12.3.1 部署 Canal 129 12.3.2 实践 Network Policy 130 12.4 小结 135 第13章 Kubernetes Dashboard 136 13.1 安装 136 13.2 配置登录权限 137 13.3 Dashboard 界面结构 139 13.4 典型使用场景 140 13.4.1 部署 Deployment 140 13.4.2 在线操作 141 13.4.3 查看资源详细信息 142 13.4.4 查看 Pod 日志 142 13.5 小结 143 第14章 Kubernetes 集群监控 144 14.1 Weave Scope 144 14.1.1 安装 Scope 144 14.1.2 使用 Scope 145 14.2 Heapster 151 14.2.1 部署 151 14.2.2 使用 152 14.3 Prometheus Operator 155 14.3.1 Prometheus 架构 159 14.3.2 Prometheus Operator 架构 161 14.3.3 部署 Prometheus Operator 162 14.4 小结 167 第15章 Kubernetes 集群日志管理 168 15.1 部署 168 15.2 小结 173 写在最后 174

2018-06-03

Kubernetes权威指南(第2版-高清书签版)

第1章 Kubernetes 入门 1 1.1 Kubernetes 是什么 1 1.2 为什么要用Kubernetes 4 1.3 从一个简单的例子开始 5 1.3.1 环境准备 6 1.3.2 启动MySQL 服务 7 1.3.3 启动Tomcat 应用 9 1.3.4 通过浏览器访问网页 11 1.4 Kubernetes 基本概念和术语 12 1.4.1 Master 12 1.4.2 Node 13 1.4.3 Pod 15 1.4.4 Label(标签) 19 1.4.5 Replication Controller(RC) 22 1.4.6 Deployment 25 1.4.7 Horizontal Pod Autoscaler(HPA) 27 1.4.8 Service(服务) 29 1.4.9 Volume(存储卷) 35 1.4.10 Persistent Volume 39 1.4.11 Namespace(命名空间) 40 1.4.12 Annotation(注解) 42 1.4.13 小结 42 第2章 Kubernetes 实践指南 43 2.1 Kubernetes 安装与配置 43 2.1.1 安装Kubernetes 43 2.1.2 配置和启动Kubernetes 服务 45 2.1.3 Kubernetes 集群的安全设置 51 2.1.4 Kubernetes 的版本升级 57 2.1.5 内网中的Kubernetes 相关配置 57 2.1.6 Kubernetes 核心服务配置详解 58 2.1.7 Kubernetes 集群网络配置方案 72 2.2 kubectl 命令行工具用法详解 80 2.2.1 kubectl 用法概述 80 2.2.2 kubectl 子命令详解 82 2.2.3 kubectl 参数列表 84 2.2.4 kubectl 输出格式 84 2.2.5 kubectl 操作示例 86 2.3 Guestbook 示例:Hello World 87 2.3.1 创建redis-master RC 和Service 89 2.3.2 创建redis-slave RC 和Service 91 2.3.3 创建frontend RC 和Service 93 2.3.4 通过浏览器访问frontend 页面 96 2.4 深入掌握Pod 97 2.4.1 Pod 定义详解 97 2.4.2 Pod 的基本用法 102 2.4.3 静态Pod 107 2.4.4 Pod 容器共享Volume 108 2.4.5 Pod 的配置管理 110 2.4.6 Pod 生命周期和重启策略 123 2.4.7 Pod 健康检查 124 2.4.8 玩转Pod 调度 126 2.4.9 Pod 的扩容和缩容 135 2.4.10 Pod 的滚动升级 139 2.5 深入掌握Service 143 2.5.1 Service 定义详解 143 2.5.2 Service 基本用法 145 2.5.3 集群外部访问Pod 或Service 150 2.5.4 DNS 服务搭建指南 153 2.5.5 Ingress:HTTP 7 层路由机制 161 第3章 Kubernetes 核心原理 165 3.1 Kubernetes API Server 原理分析 165 3.1.1 Kubernetes API Server 概述 165 3.1.2 独特的Kubernetes Proxy API 接口 168 3.1.3 集群功能模块之间的通信 169 3.2 Controller Manager 原理分析 170 3.2.1 Replication Controller 171 3.2.2 Node Controller 173 3.2.3 ResourceQuota Controller 174 3.2.4 Namespace Controller 176 3.2.5 Service Controller 与Endpoint Controller 176 3.3 Scheduler 原理分析 177 3.4 kubelet 运行机制分析 181 3.4.1 节点管理 181 3.4.2 Pod 管理 182 3.4.3 容器健康检查 183 3.4.4 cAdvisor 资源监控 184 3.5 kube-proxy 运行机制分析 186 3.6 深入分析集群安全机制 190 3.6.1 API Server 认证 190 3.6.2 API Server 授权 192 3.6.3 Admission Control 准入控制 194 3.6.4 Service Account 195 3.6.5 Secret 私密凭据 200 3.7 网络原理 203 3.7.1 Kubernetes 网络模型 203 3.7.2 Docker 的网络基础 205 3.7.3 Docker 的网络实现 217 3.7.4 Kubernetes 的网络实现 225 3.7.5 开源的网络组件 229 3.7.6 网络实战 234 第4章 Kubernetes 开发指南 247 4.1 REST 简述 247 4.2 Kubernetes API 详解 249 4.2.1 Kubernetes API 概述 249 4.2.2 API 版本 254 4.2.3 API 详细说明 254 4.2.4 API 响应说明 256 4.3 使用Java 程序访问Kubernetes API 258 4.3.1 Jersey 258 4.3.2 Fabric8 270 4.3.3 使用说明 271 第5章 Kubernetes 运维指南 292 5.1 Kubernetes 集群管理指南 292 5.1.1 Node 的管理 292 5.1.2 更新资源对象的Label 294 5.1.3 Namespace:集群环境共享与隔离 295 5.1.4 Kubernetes 资源管理 299 5.1.5 Kubernetes 集群高可用部署方案 333 5.1.6 Kubernetes 集群监控 343 5.1.7 kubelet 的垃圾回收(GC)机制 361 5.2 Kubernetes 高级案例 362 5.2.1 ElasticSearch 日志搜集查询和展现案例 362 5.2.2 Cassandra 集群部署案例 371 5.3 Trouble Shooting 指导 376 5.3.1 查看系统Event 事件 377 5.3.2 查看容器日志 379 5.3.3 查看Kubernetes 服务日志 379 5.3.4 常见问题 381 5.3.5 寻求帮助 384 5.4 Kubernetes v1.3 开发中的新功能 385 5.4.1 Pet Set(有状态的容器) 385 5.4.2 Init Container(初始化容器) 388 5.4.3 Cluster Federation(集群联邦) 391 第6章 Kubernetes 源码导读 396 6.1 Kubernetes 源码结构和编译步骤 396 6.2 kube-apiserver 进程源码分析 400 6.2.1 进程启动过程 400 6.2.2 关键代码分析 402 6.2.3 设计总结 417 6.3 kube-controller-manager 进程源码分析 420 6.3.1 进程启动过程 420 6.3.2 关键代码分析 423 6.3.3 设计总结 431 6.4 kube-scheduler 进程源码分析 433 6.4.1 进程启动过程 434 6.4.2 关键代码分析 438 6.4.3 设计总结 445 6.5 kubelet 进程源码分析 447 6.5.1 进程启动过程 447 6.5.2 关键代码分析 452 6.5.3 设计总结 475 6.6 kube-proxy 进程源码分析 476 6.6.1 进程启动过程 476 6.6.2 关键代码分析 478 6.6.3 设计总结 493 6.7 kubectl 进程源码分析 494 6.7.1 kubectl create 命令 495 6.7.2 rolling-update 命令 499 后记 505

2018-06-03

企业IT架构转型之道-阿里巴巴中台战略思想与架构实战

序言一 序言二 前言 **部分 引子 **章 阿里巴巴集团中台战略引发的思考 1.1 阿里巴巴共享业务事业部的发展史 1.2 企业信息中心发展的症结 第2章 构建业务中台的基础——共享服务体系 2.1 回归SOA的本质——服务重用 2.2 服务需要不断的业务滋养 2.3 共享服务体系是培育业务创新的土壤 2.4 赋予业务快速创新和试错能力 2.5 为真正发挥大数据威力做好储备 2.6 改变组织阵型会带来组织效能的提升 第二部分 共享服务体系搭建 第3章 分布式服务框架的选择 3.1 淘宝平台“服务化”历程 3.2 “中心化”与“去中心化”服务框架的对比 3.3 阿里巴巴分布式服务框架 3.4 关于微服务 第4章 共享服务中心建设原则 4.1 淘宝的共享服务中心概貌 4.2 什么是服务中心 4.3 服务中心的划分原则 第5章 数据拆分实现数据库能力线性扩展 5.1 数据库瓶颈阻碍业务的持续发展 5.2 数据库分库分表的实践 第6章 异步化与缓存原则 6.1 业务流程异步化 6.2 数据库事务异步化 6.3 事务与柔性事务 6.4 大促**活动催生缓存技术的高度使用 第7章 打造数字化运营能力 7.1 业务服务化带来的问题 7.2 鹰眼平台的架构 7.3 埋点和输出日志 7.4 海量日志分布式处理平台 7.5 日志收集控制 7.6 典型业务场景 第8章 打造平台稳定性能力 8.1 限流和降级 8.2 流量调度 8.3 业务开关 8.4 容量压测及评估规划 8.5 全链路压测平台 8.6 业务一致性平台 第9章 共享服务中心对内和对外的协作共享 9.1 服务化建设野蛮发展带来的问题 9.2 共享服务平台的建设思路 9.3 共享服务平台与业务方协作 9.4 业务中台与前端应用协作 9.5 业务中台绩效考核 9.6 能力开放是构建生态的基础 第三部分 阿里巴巴能力输出与案例 10章 大型央企互联网转型 10.1 项目背景 10.2 项目实施 10.3 客户收益 10.4 笔者感想 10.5 项目后记 11章 时尚行业品牌公司互联网转型 11.1 项目背景 11.2 供应链的改造 11.3 基于SCRM的全渠道整合营销 11.4 小结

2018-06-03

深入理解Spring Cloud与微服务构建

第1章 微服务简介 1 1.1 单体架构及其存在的不足 1 1.1.1 单体架构简介 1 1.1.2 单体架构存在的不足 2 1.1.3 单体架构使用服务器集群 及存在的不足 2 1.2 微服务 3 1.2.1 什么是微服务 4 1.2.2 微服务的优势 8 1.3 微服务的不足 9 1.3.1 微服务的复杂度 9 1.3.2 分布式事务 9 1.3.3 服务的划分 11 1.3.4 服务的部署 11 1.4 微服务和SOA的关系 12 1.5 微服务的设计原则 12 第2章 Spring Cloud简介 14 2.1 微服务应该具备的功能 14 2.1.1 服务的注册与发现 15 2.1.2 服务的负载均衡 15 2.1.3 服务的容错 17 2.1.4 服务网关 18 2.1.5 服务配置的统一管理 19 2.1.6 服务链路追踪 20 2.2 Spring Cloud 21 2.2.1 简介 21 2.2.2 常用组件 21 2.2.3 项目一览表 23 2.3 Dubbo简介 24 2.4 Spring Cloud与Dubbo比较 25 2.5 Kubernetes简介 26 2.6 Spring Could与Kubernetes比较 27 2.7 总结 29 第3章 构建微服务的准备 30 3.1 JDK的安装 30 3.1.1 JDK的下载和安装 30 3.1.2 环境变量的配置 30 3.2 IDEA的安装 31 3.2.1 IDEA的下载 31 3.2.2 用IDEA创建一个Spring Boot 工程 32 3.2.3 用IDEA启动多个Spring Boot 工程实例 34 3.3 构建工具Maven的使用 35 3.3.1 Maven简介 35 3.3.2 Maven的安装 35 3.3.3 Maven的核心概念 37 3.3.4 编写Pom文件 37 3.3.5 Maven构建项目的生命周期 39 3.3.6 常用的Maven命令 40 第4章 开发框架Spring Boot 43 4.1 Spring Boot简介 43 4.1.1 Spring Boot的特点 43 4.1.2 Spring Boot的优点 44 4.2 用IDEA构建Spring Boot工程 44 4.2.1 项目结构 44 4.2.2 在Spring Boot工程中构建 Web 45 4.2.3 Spring Boot的测试 46 4.3 Spring Boot配置文件详解 46 4.3.1 自定义属性 47 4.3.2 将配置文件的属性赋给 实体类 47 4.3.3 自定义配置文件 49 4.3.4 多个环境的配置文件 50 4.4 运行状态监控Actuator 50 4.4.1 查看运行程序的健康状态 52 4.4.2 查看运行程序的Bean 53 4.4.3 使用Actuator关闭应用程序 55 4.4.4 使用shell连接Actuator 56 4.5 Spring Boot整合JPA 57 4.6 Spring Boot整合Redis 60 4.6.1 Redis简介 60 4.6.2 Redis的安装 60 4.6.3 在Spring Boot中使用Redis 60 4.7 Spring Boot整合Swagger2,搭建 Restful API在线文档 62 第5章 服务注册和发现Eureka 66 5.1 Eureka简介 66 5.1.1 什么是Eureka 66 5.1.2 为什么选择Eureka 66 5.1.3 Eureka的基本架构 67 5.2 编写Eureka Server 67 5.3 编写Eureka Client 70 5.4 源码解析Eureka 73 5.4.1 Eureka的一些概念 73 5.4.2 Eureka的高可用架构 74 5.4.3 Register服务注册 74 5.4.4 Renew服务续约 78 5.4.5 为什么Eureka Client获取 服务实例这么慢 80 5.4.6 Eureka 的自我保护模式 80 5.5 构建高可用的Eureka Server集群 81 5.6 总结 83 第6章 负载均衡Ribbon 84 6.1 RestTemplate简介 84 6.2 Ribbon简介 85 6.3 使用RestTemplate和Ribbon来消费 服务 85 6.4 LoadBalancerClient简介 88 6.5 源码解析Ribbon 90 第7章 声明式调用Feign 101 7.1 写一个Feign客户端 101 7.2 FeignClient详解 105 7.3 FeignClient的配置 106 7.4 从源码的角度讲解Feign的工作 原理 107 7.5 在Feign中使用HttpClient和 OkHttp 110 7.6 Feign是如何实现负载均衡的 112 7.7 总结 114 第8章 熔断器Hystrix 115 8.1 什么是Hystrix 115 8.2 Hystrix解决了什么问题 115 8.3 Hystrix的设计原则 117 8.4 Hystrix的工作机制 117 8.5 在RestTemplate和Ribbon上使用 熔断器 118 8.6 在Feign上使用熔断器 119 8.7 使用Hystrix Dashboard监控熔断器的 状态 120 8.7.1 在RestTemplate中使用Hystrix Dashboard 120 8.7.2 在Feign中使用 Hystrix Dashboard 123 8.8 使用Turbine聚合监控 124 第9章 路由网关Spring Cloud Zuul 126 9.1 为什么需要Zuul 126 9.2 Zuul的工作原理 126 9.3 案例实战 128 9.3.1 搭建Zuul服务 128 9.3.2 在Zuul上配置API接口的 版本号 131 9.3.3 在Zuul上配置熔断器 132 9.3.4 在Zuul中使用过滤器 133 9.3.5 Zuul的常见使用方式 135 第10章 配置中心 Spring Cloud Config 137 10.1 Config Server从本地读取配置 文件 137 10.1.1 构建Config Server 137 10.1.2 构建Config Client 138 10.2 Config Server从远程Git仓库读取 配置文件 140 10.3 构建高可用的Config Server 141 10.3.1 构建Eureka Server 141 10.3.2 改造Config Server 142 10.3.3 改造Config Client 143 10.4 使用Spring Cloud Bus刷新配置 144 第11章 服务链路追踪 Spring Cloud Sleuth 147 11.1 为什么需要Spring Cloud Sleuth 147 11.2 基本术语 147 11.3 案例讲解 148 11.3.1 构建Zipkin Server 148 11.3.2 构建User Service 149 11.3.3 构建Gateway Service 151 11.3.4 项目演示 152 11.4 在链路数据中添加自定义数据 153 11.5 使用RabbitMQ 传输链路数据 154 11.6 在MySQL数据库中存储链路数据 155 11.6.1 使用Http传输链路数据, 并存储在MySQL数据 库中 156 11.6.2 使用RabbitMQ传输链路 数据,并存储在MySQL 数据库中 157 11.7 在ElasticSearch中存储链路数据 158 11.8 用Kibana展示链路数据 159 第12章 微服务监控 Spring Boot Admin 161 12.1 使用Spring Boot Admin监控Spring Cloud微服务 161 12.1.1 构建Admin Server 161 12.1.2 构建Admin Client 163 12.2 在Spring Boot Admin中集成Turbine 166 12.2.1 改造Eureka Client 166 12.2.2 另行构建Eureka Client 167 12.2.3 构建Turbine工程 168 12.2.4 在Admin Server中集成 Turbine 169 12.3 在Spring Boot Admin中添加安全 登录界面 172 第13章 Spring Boot Security详解 174 13.1 Spring Security简介 174 13.1.1 什么是Spring Security 174 13.1.2 为什么选择Spring Security 174 13.1.3 Spring Security提供的安全 模块 175 13.2 Spring Boot Security与Spring Security 的关系 176 13.3 Spring Boot Security案例详解 176 13.3.1 构建Spring Boot Security 工程 176 13.3.2 配置Spring Security 178 13.3.3 编写相关界面 180 13.3.4 Spring Security方法级别上 的保护 185 13.3.5 从数据库中读取用户的 认证信息 188 13.4 总结 193 第14章 使用Spring Cloud OAuth2 保护微服务系统 195 14.1 什么是OAuth2 195 14.2 如何使用Spring OAuth2 196 14.2.1 OAuth2 Provider 196 14.2.2 OAuth2 Client 200 14.3 案例分析 201 14.3.1 编写Eureka Server 202 14.3.2 编写Uaa授权服务 202 14.3.3 编写service-hi资源服务 209 14.4 总结 215 第15章 使用Spring Security OAuth2 和JWT保护微服务系统 217 15.1 JWT简介 217 15.1.1 什么是JWT 217 15.1.2 JWT的结构 218 15.1.3 JWT的应用场景 219 15.1.4 如何使用JWT 219 15.2 案例分析 219 15.2.1 案例架构设计 219 15.2.2 编写主Maven工程 220 15.2.3 编写Eureka Server 221 15.2.4 编写Uaa授权服务 222 15.2.5 编写user-service资源服务 227 15.3 总结 236 第16章 使用Spring Cloud构建微 服务综合案例 237 16.1 案例介绍 237 16.1.1 工程结构 237 16.1.2 使用的技术栈 238 16.1.3 工程架构 238 16.1.4 功能展示 240 16.2 案例详解 244 16.2.1 准备工作 244 16.2.2 构建主Maven工程 244 16.2.3 构建eureka-server工程 245 16.2.4 构建config-server工程 246 16.2.5 构建zipkin-service工程 247 16.2.6 构建monitoring-service 工程 248 16.2.7 构建uaa-service工程 250 16.2.8 构建gateway-service工程 251 16.2.9 构建admin-service工程 253 16.2.10 构建user-service工程 253 16.2.11 构建blog-service工程 256 16.2.12 构建log-service工程 256 16.3 启动源码工程 260 16.4 项目演示 261 16.5 总结 262

2018-06-03

逆流而上-阿里巴巴技术成长之路

第1章基础架构高可用 1.1明察秋毫,域名解析排查技巧 1.2智能定位,网络端到端静默丢包点迅速锁定 1.3灵活调度,对接运营商网络流量的容灾策略 1.4抽丝剥茧,深挖云盘挂起背后的真相 1.5存储的底线,SSD数据不一致 第2章中间件使用常见隐患与预防 2.1高并发“热点”缓存数据快速“退火” 2.2自我保护,让系统坚如磐石 2.3机房容灾,VIPServer软负载流量调度实例 2.4山洪暴发,高流量触发Tomcatbug引起集群崩溃 第3章数据库常见问题 3.1性能杀手,SQL执行计划 3.2波谲云诡,数据库延迟 3.3风暴来袭,AliSQL连接池调优 3.4防患于未然,ORM规约变更案例 3.5云数据库,SQL优化经典案例 第4章业务研发经典案例 4.1幂等控制,分布式锁超时情况和业务重试的并发 4.2另类解法,分布式一致性 4.3大道至简,从故障模型的边界状态切换到原始状态 4.4疑案追踪,JSON序列化不一致 4.5从现象到本质,不保证顺序的Class.getMethodsJVM实现 4.6破解超时迷局,浅析启动初期load飙高问题 4.7洞悉千丝万缕,浅谈JIT编译优化的误区 第5章运行管理域稳定性建设 5.1洞若观火,让故障无处遁形 5.2体系化思考,高效解决运营商问题 5.3以战养兵,以故障演练提升系统稳定性

2018-06-03

架构探险:从零开始写JavaWeb框架

第1章 从一个简单的Web应用 1 正所谓“工欲善其事,必先利其器”,在正式开始设计并开发我们的轻量级Java Web框架之前,有必要首先掌握以下技能: 使用IDEA搭建并开发Java项目; 使用Maven自动化构建Java项目; 使用Git管理项目源代码。 1.1 使用IDEA创建Maven项目 3 1.1.1 创建IDEA项目 3 1.1.2 调整Maven配置 3 1.2 搭建Web项目框架 5 1.2.1 转为Java Web项目 5 1.2.2 添加Java Web的Maven依赖 6 1.3 编写一个简单的Web应用 10 1.3.1 编写 Servlet类 10 1.3.2 编写JSP页面 11 1.4 让Web应用跑起来 12 1.4.1 在IDEA中配置Tomcat 12 1.4.2 使用Tomcat的Maven插件 13 1.4.3 以Debug方式运行程序 13 1.5 将代码放入Git仓库中 14 1.5.1 编写.gitignore文件 14 1.5.2 提交本地 Git 仓库 15 1.5.3 推送远程Git仓库 15 1.5.4 总结 16 第2章 为Web应用添加业务功能 17 我们将在这个应用的基础上增加一些业务功能,您将学会更多有关项目实战的技能,具体包括: 如何进行需求分析; 如何进行系统设计; 如何编写应用程序。 2.1 需求分析与系统设计 19 2.1.1 需求分析 19 2.1.2 系统设计 19 2.2 动手开发Web应用 21 2.2.1 创建数据库 22 2.2.2 准备开发环境 22 2.2.3 编写模型层 23 2.2.4 编写控制器层 25 2.2.5 编写服务层 27 2.2.6 编写单元测试 28 2.2.7 编写视图层 31 2.3 细节完善与代码优化 31 2.3.1 完善服务层 32 2.3.2 完善控制器层 59 2.3.3 完善视图层 60 2.4 总结 65 第3章 搭建轻量级Java Web框架 66 我们需要这样的框架,它足够轻量级、足够灵巧,不妨给它取一个优雅的名字――Smart Framework,本章我们就一起来实现这个框架。 您将通过本章的学习,掌握如下技能: 如何快速搭建开发框架; 如何加载并读取配置文件; 如何实现一个简单的IOC容器; 如何加载指定的类; 如何初始化框架。 3.1 确定目标 68 3.2 搭建开发环境 70 3.2.1 创建框架项目 70 3.2.2 创建示例项目 73 3.3 定义框架配置项 74 3.4 加载配置项 75 3.5 开发一个类加载器 78 3.6 实现Bean容器 87 3.7 实现依赖注入功能 90 3.8 加载Controller 93 3.9 初始化框架 97 3.10 请求转发器 98 3.11 总结 109 第4章 使框架具备AOP特性 110 在本章中,读者将学到大量有用的技术,具体包括: 如何理解并使用代理技术; 如何使用Spring提供的AOP技术; 如何使用动态代理技术实现AOP框架; 如何理解并使用ThreadLocal技术; 如何理解数据库事务管理机制; 如何使用AOP框架实现事务控制。 4.1 代理技术简介 112 4.1.1 什么是代理 112 4.1.2 JDK动态代理 114 4.1.3 CGlib动态代理 116 4.2 AOP技术简介 118 4.2.1 什么是AOP 118 4.2.2 写死代码 119 4.2.3 静态代理 120 4.2.4 JDK动态代理 121 4.2.5 CGLib动态代理 122 4.2.6 Spring AOP 124 4.2.7 Spring + AspectJ 136 4.3 开发AOP框架 142 4.3.1 定义切面注解 142 4.3.2 搭建代理框架 143 4.3.3 加载AOP框架 150 4.4 ThreadLocal简介 158 4.4.1 什么是ThreadLocal 158 4.4.2 自己实现ThreadLocal 161 4.4.3 ThreadLocal使用案例 163 4.5 事务管理简介 172 4.5.1 什么是事务 172 4.5.2 事务所面临的问题 173 4.5.3 Spring的事务传播行为 175 4.6 实现事务控制特性 178 4.6.1 定义事务注解 178 4.6.2 提供事务相关操作 181 4.6.3 编写事务代理切面类 182 4.6.4 在框架中添加事务代理机制 184 4.7 总结 185 第5章 框架优化与功能扩展 186 本章将对现有框架进行优化,并提供一些扩展功能。通过本章的学习,读者可以了解到: 如何优化Action参数; 如何实现文件上传功能; 如何与Servlet API完全解耦; 如何实现安全控制框架; 如何实现Web服务框架。 5.1 优化Action参数 188 5.1.1 明确Action参数优化目标 188 5.1.2 动手优化Action参数使用方式 188 5.2 提供文件上传特性 191 5.2.1 确定文件上传使用场景 191 5.2.2 实现文件上传功能 194 5.3 与Servlet API解耦 214 5.3.1 为何需要与Servlet API解耦 214 5.3.2 与Servlet API解耦的实现过程 215 5.4 安全控制框架――Shiro 219 5.4.1 什么是Shiro 219 5.4.2 Hello Shiro 220 5.4.3 在Web开发中使用Shiro 224 5.5 提供安全控制特性 230 5.5.1 为什么需要安全控制 230 5.5.2 如何使用安全控制框架 231 5.5.3 如何实现安全控制框架 242 5.6 Web服务框架――CXF 261 5.6.1 什么是CXF 261 5.6.2 使用CXF开发SOAP服务 262 5.6.3 基于SOAP的安全控制 278 5.6.4 使用CXF开发REST服务 291 5.7 提供Web服务特性 308 5.8 总结 329 附录A Maven快速入门 330 附录B 将构件发布到Maven中央仓库 342

2018-03-12

每天5分钟玩转Docker容器技术 完整中文版 清晰版书籍

目 录 第一篇 启 程 第1章 鸟瞰容器生态系统 3 1.1 容器生态系统 3 1.2 本教程覆盖的知识范围 10 1.3 准备实验环境 10 1.3.1 环境选择 10 1.3.2 安装 Docker 10 1.4 运行第一个容器 11 1.5 小结 12 第二篇 容器技术 第2章 容器核心知识概述 15 2.1 What —— 什么是容器 15 2.2 Why —— 为什么需要容器 16 2.2.1 容器解决的问题 16 2.2.2 Docker 的特性 20 2.2.3 容器的优势 20 2.3 How —— 容器是如何工作的 21 2.4 小结 24 第3章 Docker 镜像 26 3.1 镜像的内部结构 26 3.1.1 hello-world —— 最小的镜像 26 3.1.2 base 镜像 27 3.1.3 镜像的分层结构 30 3.2 构建镜像 32 3.2.1 docker commit 32 3.2.2 Dockerfile 34 3.3 RUN vs CMD vs ENTRYPOINT 42 3.3.1 Shell 和 Exec 格式 42 3.3.2 RUN 44 3.3.3 CMD 44 3.3.4 ENTRYPOINT 45 3.3.5 最佳实践 46 3.4 分发镜像 46 3.4.1 为镜像命名 46 3.4.2 使用公共 Registry 49 3.4.3 搭建本地 Registry 51 3.5 小结 52 第4章 Docker 容器 55 4.1 运行容器 55 4.1.1 让容器长期运行 56 4.1.2 两种进入容器的方法 57 4.1.3 运行容器的最佳实践 59 4.1.4 容器运行小结 59 4.2 stop/start/restart 容器 60 4.3 pause / unpause 容器 61 4.4 删除容器 61 4.5 State Machine 62 4.6 资源限制 65 4.6.1 内存限额 65 4.6.2 CPU 限额 66 4.6.3 Block IO 带宽限额 68 4.7 实现容器的底层技术 69 4.7.1 cgroup 70 4.7.2 namespace 70 4.8 小结 72 第5章 Docker 网络 74 5.1 none 网络 74 5.2 host 网络 75 5.3 bridge 网络 76 5.4 user-defined 网络 78 5.5 容器间通信 84 5.5.1 IP通信 84 5.5.2 Docker DNS Server 85 5.5.3 joined 容器 85 5.6 将容器与外部世界连接 87 5.6.1 容器访问外部世界 87 5.6.2 外部世界访问容器 90 5.7 小结 91 第6章 Docker 存储 92 6.1 storage driver 92 6.2 Data Volume 94 6.2.1 bind mount 94 6.2.2 docker managed volume 96 6.3 数据共享 99 6.3.1 容器与 host 共享数据 99 6.3.2 容器之间共享数据 99 6.4 volume container 100 6.5 data-packed volume container 102 6.6 Data Volume 生命周期管理 103 6.6.1 备份 104 6.6.2 恢复 104 6.6.3 迁移 104 6.6.4 销毁 104 6.7 小结 105 第三篇 容器进阶知识 第7章 多主机管理 109 7.1 实验环境描述 110 7.2 安装 Docker Machine 111 7.3 创建 Machine 112 7.4 管理Machine 114 第8章 容器网络 117 8.1 libnetwork & CNM 117 8.2 overlay 119 8.2.1 实验环境描述 120 8.2.2 创建overlay网络 121 8.2.3 在overlay中运行容器 122 8.2.4 overlay 网络连通性 124 8.2.5 overlay 网络隔离 126 8.2.6 overlay IPAM 127 8.3 macvlan 127 8.3.1 准备实验环境 127 8.3.2 创建 macvlan 网络 128 8.3.3 macvlan 网络结构分析 130 8.3.4 用 sub-interface 实现多 macvlan 网络 131 8.3.5 macvlan 网络间的隔离和连通 132 8.4 flannel 136 8.4.1 实验环境描述 137 8.4.2 安装配置 etcd 137 8.4.3 build flannel 138 8.4.4 将 flannel 网络的配置信息保存到 etcd 139 8.4.5 启动 flannel 139 8.4.6 配置 Docker 连接 flannel 141 8.4.7 将容器连接到 flannel 网络 143 8.4.8 flannel 网络连通性 144 8.4.9 flannel 网络隔离 146 8.4.10 flannel 与外网连通性 146 8.4.11 host-gw backend 146 8.5 weave 148 8.5.1 实验环境描述 148 8.5.2 安装部署 weave 149 8.5.3 在host1中启动weave 149 8.5.4 在 host1 中启动容器 150 8.5.5 在host2中启动weave并运行容器 153 8.5.6 weave 网络连通性 154 8.5.7 weave 网络隔离 155 8.5.8 weave 与外网的连通性 156 8.5.9 IPAM 158 8.6 calico 158 8.6.1 实验环境描述 159 8.6.2 启动 etcd 159 8.6.3 部署 calico 160 8.6.4 创建calico网络 161 8.6.5 在 calico 中运行容器 161 8.6.6 calico 默认连通性 164 8.6.7 calico policy 167 8.6.8 calico IPAM 169 8.7 比较各种网络方案 170 8.7.1 网络模型 171 8.7.2 Distributed Store 171 8.7.3 IPAM 171 8.7.4 连通与隔离 172 8.7.5 性能 172 第9章 容器监控 173 9.1 Docker自带的监控子命令 173 9.1.1 ps 173 9.1.2 top 174 9.1.3 stats 175 9.2 sysdig 175 9.3 Weave Scope 179 9.3.1 安装 179 9.3.2 容器监控 181 9.3.3 监控 host 184 9.3.4 多主机监控 186 9.4 cAdvisor 189 9.4.1 监控 Docker Host 189 9.4.2 监控容器 191 9.5 Prometheus 194 9.5.1 架构 194 9.5.2 多维数据模型 195 9.5.3 实践 196 9.6 比较不同的监控工具 204 9.7 几点建议 205 第10章 日志管理 207 10.1 Docker logs 207 10.2 Docker logging driver 209 10.3 ELK 211 10.3.1 日志处理流程 211 10.3.2 安装 ELK 套件 212 10.3.3 Filebeat 214 10.3.4 管理日志 216 10.4 Fluentd 220 10.4.1 安装 Fluentd 221 10.4.2 重新配置 Filebeat 221 10.4.3 监控容器日志 221 10.5 Graylog 222 10.5.1 Graylog 架构 222 10.5.2 部署 Graylog 223 10.5.3 配置 Graylog 225 10.5.4 监控容器日志 227 10.6 小结 229 第11章 数据管理 230 11.1 从一个例子开始 230 11.2 实践 Rex-Ray driver 232 11.2.1 安装 Rex-Ray 232 11.2.2 配置 VirtualBox 234 11.2.3 创建Rex-Ray volume 236 11.2.4 使用 Rex-Ray volume 237 写在最后 243

2018-01-28

Spring微服务实战(中文-高清完整版)

1. 欢迎来到Cloud和Spring 1 1.1什么是微服务? 2 1.2什么是Spring,它和微服务有什么关联? 5 1.3你将从这本书里学到什么? 6 1.4为什么这本书不你有关? 7 1.5使用Spring Boot构建一个微服务 8 1.6为什么要改变我们构建应用程序的方式? 12 1.7云究竟是什么? 13 1.8为什么是云和微服务? 15 1.9微服务丌仅仅是编写代码 19 1.9.1微服务核心开发模式 19 1.9.2微服务路由模式 20 1.9.3微服务客户端弹性模式 21 1.9.4微服务安全模式 23 1.9.5微服务日志记录和跟踪模式 24 1.9.6微服务构建和部署模式 25 1.10使用Spring Cloud构建微服务 26 1.10.1 Spring Boot 28 1.10.2 Spring Cloud Config 28 1.10.3 Spring Cloud Service Discovery 28 1.10.4 Spring Cloud/Netflix Hystrix and Ribbon 29 1.10.5 Spring Cloud/Netflix Zuul 29 1.10.6 Spring Cloud Stream 29 1.10.7 Spring Cloud Sleuth 29 1.10.8 Spring Cloud Security 30 1.10.9 准备些什么? 30 1.11使用Spring Cloud举例 30 1.12了解不我们相关的例子 33 1.13小结 33 2. 使用Spring Boot构建微服务 35 2.1架构师的故事:设计微服务架构 38 2.1.1分解业务问题 38 2.1.2确定服务粒度 41 2.1.3互相交谈:服务接口 43 2.2什么时候丌使用微服务 44 2.2.1分布式系统构建的复杂性 44 2.2.2服务器扩展 44 2.2.3应用类型 44 2.2.4数据转换和一致性 45 2.3开发:使用Spring Boot和Java构建一个微服务 45 2.3.1从骨架项目快速入门 46 2.3.2编写引导类,启劢你的Spring Boot应用 47 2.3.3创建微服务的访问入口:Spring Boot控制器 48 2.4运维:严格的运行时构建 53 2.4.1服务装配:打包和部署微服务 56 2.4.2服务引导:管理微服务的配置 58 2.4.3服务注册不发现:客户端如何不微服务通信 59 2.4.4监控微服务健康状况 60 2.5观点汇总 62 2.6小结 63 3. 使用Spring Cloud Configuration Server控制配置 64 3.1管理配置(和复杂性) 65 3.1.1配置管理架构 67 3.1.2实现选择 69 3.2建立Spring Cloud Config Server 70 3.2.1创建Spring Cloud配置引导类 74 3.2.2通过配置文件使用Spring Cloud Config Server 75 3.3将Spring Cloud配置不Spring Boot客户端集成 77 3.3.1配置Spring Cloud Config Server的依赖 79 3.3.2 Spring Cloud Config使用配置 79 3.3.3使用Spring Cloud Configuration Server配置数据源 83 3.3.4使用@Value注解直接读取属性 86 3.3.5通过Git使用Spring Cloud Config Server 87 3.3.6通过Spring Cloud Config Server刷新属性 88 3.4保护敏感配置信息 89 3.4.1下载和安装加密所需的Oracle JCE JAR包 90 3.4.2配置加密密钥 91 3.4.3加密和解密属性 91 3.4.4配置微服务使用加密的客户端 93 3.5最后的思考 95 3.6小结 95 4. 服务发现 96 4.1我的服务在哪里? 97 4.2关于云端服务发现的研究 100 4.2.1服务发现架构 100 4.2.2使用Spring和Netflix Eureka实现服务发现 103 4.3创建Spring Eureka Service 105 4.4使用Spring Eureka注册服务 107 4.5使用服务发现查找服务 111 4.5.1使用Spring DiscoveryClient查找服务实例 112 4.5.2使用Ribbon-aware Spring RestTemplate调用服务 114 4.5.3使用Netflix Feign client调用服务 116 4.6小结 118 5. 坏事发生时:使用Spring Cloud和Netflix Hystrix的客户端弹性模式119 5.1客户端的弹性模式 120 5.1.1客户端负载均衡 121 5.1.2断路器 122 5.1.3回退处理 122 5.1.4舱壁 122 5.2客户端弹性的重要性 123 5.3熔断机制 126 5.4配置使用Spring Cloud和Hystrix的依赖 127 5.5使用Hystrix实现断路器 128 5.5.1调用微服务超时 131 5.5.2自定义断路器上的超时时间 132 5.6回退处理 133 5.7舱壁模式的实现 136 5.8深入理解Hystrix 138 5.8.1进一步理解Hystrix配置 142 5.9线程上下文和Hystrix 144 5.9.1 ThreadLocal 和 Hystrix 144 5.9.2 Hystrix并发策略 147 5.10小结 151 6. 使用Spring Cloud和Zuul进行服务路由 153 6.1服务网关 154 6.2 Spring Cloud和Netflix Zuul 157 6.2.1配置Spring Boot工程引用Zuul依赖 157 6.2.2使用SpringCloud注解配置Zuul服务 157 6.2.3配置Zuul不Eureka通信 158 6.3在Zuul中配置路由 159 6.3.1通过服务发现自劢映射路由 159 6.3.2通过服务发现手劢映射路由 161 6.3.3使用静态URL手劢映射路由 165 6.3.4劢态重新加载路由配置 168 6.3.5 Zuul和服务超时 169 6.4 Zuul过滤器 169 6.5创建pre类型Zuul过滤器生成关联ID 173 6.5.1在服务调用中使用关联ID 176 6.6创建post类型Zuul过滤器接收关联ID 182 6.7创建劢态路由过滤器 184 6.7.1构建路由过滤器的框架 186 6.7.2实现run方法 187 6.7.3转发路由 188 6.7.4把代码整合在一起 190 6.8小结 191 7. 微服务安全 192 7.1介绍OAuth2 193 7.2从小事做起:使用Spring和OAuth2保护一个单独的端点 195 7.2.1配置EagleEye OAuth2认证服务 196 7.2.2在OAuth2服务注册客户端应用 197 7.2.3配置EagleEye用户 200 7.2.4用户认证 202 7.3使用OAuth2保护组织服务 205 7.3.1为单独的服务添加Spring Security和OAuth2 JAR包 205 7.3.2配置服务指向OAuth2认证服务 206 7.3.3定义那些资源可以访问服务 207 7.3.4传递OAuth2访问令牌 210 7.4 JavaScript Web Tokens和OAuth2 213 7.4.1修改认证服务来发布JavaScript Web Tokens 214 7.4.2在微服务中消费JavaScript Web Tokens 218 7.4.3扩展JWT Token 220 7.4.4解析来自自定义字段的JavaScript token 222 7.5关于微服务安全的思考 224 7.6小结 227 8. Spring Cloud Stream的事件驱动架构 228 8.1 消息,EDA和微服务的案例 229 8.1.1使用同步请求响应的方法传递状态改变 230 8.1.2在服务乊间使用消息传递状态改变 233 8.1.3消息架构的缺点 235 8.2介绍Spring Cloud Stream 236 8.2.1 Spring Cloud Stream体系结构 237 8.3 写一个简单的消息生产者和消费者 238 8.3.1在组织服务中编写消息生产者 239 8.3.2在许可服务中编写消息消费者 244 8.3.3查看运行中的消息服务 247 8.4 Spring Cloud Stream使用案例:分布式缓存 249 8.4.1使用Redis缓存查找 250 8.4.2定义自定义channels 256 8.4.3将它们放在一起:收到消息时清除缓存 257 8.5小结 258 9. 使用Spring Cloud Sleuth和Zipkin进行分布式跟踪 259 9.1 Spring Cloud Sleuth和关联ID 260 9.1.1添加Spring Cloud Sleuth 261 9.1.2分析Spring Cloud Sleuth Trace 262 9.2日志聚合和Spring Cloud Sleuth 263 9.2.1 实战中的Spring Cloud Sleuth/Papertrail实现 265 9.2.2创建一个Papertrail账户并配置syslog连接器 267 9.2.3将Docker输出重定向到Papertrail 268 9.2.4在Papertrail里搜索Spring Cloud Sleuth Trace ID 270 9.2.5使用Zuul将关联ID添加到HTTP响应中 272 9.3使用Zipkin实现分布式跟踪 274 9.3.1配置Spring Cloud Sleuth和Zipkin依赖 275 9.3.2配置服务指向Zipkin 275 9.3.3安装和配置Zipkin Server 276 9.3.4设置跟踪级别 278 9.3.5使用Zipkin跟踪交易 278 9.3.6可视化更复杂的交易 281 9.3.7捕获消息跟踪 282 9.3.8添加自定义span 284 9.4小结 287 10. 部署微服务 288 10.1 EagleEye:在云环境中设置核心基础设施 290 10.1.1使用Amazon RDS创建PostgreSQL数据库 293 10.1.2在Amazon创建Redis集群 296 10.1.3创建ECS(弹性可伸缩的计算服务)集群 298 10.2除了基础设施:部署EagleEye 302 10.2.1在ECS中手劢部署EagleEye服务 303 10.3构建/部署管道的架构 305 10.4构建和部署管道 309 10.5开始你的构建/部署管道:GitHub和Travis CI 311 10.6在Travis CI中构建服务 312 10.6.1核心构建运行时配置 315 10.6.2安装预构建工具 318 10.6.3执行构建 320 10.6.4标记源代码控制代码 320 10.6.5构建微服务和创建Docker镜像 321 10.6.6将镜像发布到Docker Hub 322 10.6.7在Amazon ECS环境中启劢服务 323 10.6.8开展平台测试 323 10.7关于构建/部署管道的总结 325 10.8小结 325 附录A:在桌面上运行云 327 附录B:OAuth2授权类型 336

2018-01-28

大数据之路:阿里巴巴大数据实践

第1章 总述1 第1篇 数据技术篇 第2章 日志采集8 2.1 浏览器的页面日志采集8 2.1.1 页面浏览日志采集流程9 2.1.2 页面交互日志采集14 2.1.3 页面日志的服务器端清洗和预处理15 2.2 无线客户端的日志采集16 2.2.1 页面事件17 2.2.2 控件点击及其他事件18 2.2.3 特殊场景19 2.2.4 H5 & Native日志统一20 2.2.5 设备标识22 2.2.6 日志传输23 2.3 日志采集的挑战24 2.3.1 典型场景24 2.3.2 大促保障26 第3章 数据同步29 3.1 数据同步基础29 3.1.1 直连同步30 3.1.2 数据文件同步30 3.1.3 数据库日志解析同步31 3.2 阿里数据仓库的同步方式35 3.2.1 批量数据同步35 3.2.2 实时数据同步37 3.3 数据同步遇到的问题与解决方案39 3.3.1 分库分表的处理39 3.3.2 高效同步和批量同步41 3.3.3 增量与全量同步的合并42 3.3.4 同步性能的处理43 3.3.5 数据漂移的处理45 第4章 离线数据开发48 4.1 数据开发平台48 4.1.1 统一计算平台49 4.1.2 统一开发平台53 4.2 任务调度系统58 4.2.1 背景58 4.2.2 介绍60 4.2.3 特点及应用65 第5章 实时技术68 5.1 简介69 5.2 流式技术架构71 5.2.1 数据采集72 5.2.2 数据处理74 5.2.3 数据存储78 5.2.4 数据服务80 5.3 流式数据模型80 5.3.1 数据分层80 5.3.2 多流关联83 5.3.3 维表使用84 5.4 大促挑战&保障86 5.4.1 大促特征86 5.4.2 大促保障88 第6章 数据服务91 6.1 服务架构演进91 6.1.1 DWSOA92 6.1.2 OpenAPI93 6.1.3 SmartDQ94 6.1.4 统一的数据服务层96 6.2 技术架构97 6.2.1 SmartDQ97 6.2.2 iPush100 6.2.3 Lego101 6.2.4 uTiming102 6.3 实践103 6.3.1 性能103 6.3.2 稳定性111 第7章 数据挖掘116 7.1 数据挖掘概述116 7.2 数据挖掘算法平台117 7.3 数据挖掘中台体系119 7.3.1 挖掘数据中台120 7.3.2 挖掘算法中台122 7.4 数据挖掘案例123 7.4.1 用户画像123 7.4.2 互联网反作弊125 第2篇 数据模型篇 第8章 大数据领域建模综述130 8.1 为什么需要数据建模130 8.2 关系数据库系统和数据仓库131 8.3 从OLTP和OLAP系统的区别看模型方法论的选择132 8.4 典型的数据仓库建模方法论132 8.4.1 ER模型132 8.4.2 维度模型133 8.4.3 Data Vault模型134 8.4.4 Anchor模型135 8.5 数据模型实践综述136 第9章 数据整合及管理体系138 9.1 概述138 9.1.1 定位及价值139 9.1.2 体系架构139 9.2 规范定义140 9.2.1 名词术语141 9.2.2 指标体系141 9.3 模型设计148 9.3.1 指导理论148 9.3.2 模型层次148 9.3.3 基本原则150 9.4 模型实施152 9.4.1 业界常用的模型实施过程152 9.4.2 OneData实施过程154 第10章 维度设计159 10.1 维度设计基础159 10.1.1 维度的基本概念159 10.1.2 维度的基本设计方法160 10.1.3 维度的层次结构162 10.1.4 规范化和反规范化163 10.1.5 一致性维度和交叉探查165 10.2 维度设计高级主题166 10.2.1 维度整合166 10.2.2 水平拆分169 10.2.3 垂直拆分170 10.2.4 历史归档171 10.3 维度变化172 10.3.1 缓慢变化维172 10.3.2 快照维表174 10.3.3 极限存储175 10.3.4 微型维度178 10.4 特殊维度180 10.4.1 递归层次180 10.4.2 行为维度184 10.4.3 多值维度18 10.4.4 多值属性187 10.4.5 杂项维度188 第11章 事实表设计190 11.1 事实表基础190 11.1.1 事实表特性190 11.1.2 事实表设计原则191 11.1.3 事实表设计方法193 11.2 事务事实表196 11.2.1 设计过程196 11.2.2 单事务事实表200 11.2.3 多事务事实表202 11.2.4 两种事实表对比206 11.2.5 父子事实的处理方式208 11.2.6 事实的设计准则209 11.3 周期快照事实表210 11.3.1 特性211 11.3.2 实例212 11.3.3 注意事项217 11.4 累积快照事实表218 11.4.1 设计过程218 11.4.2 特点221 11.4.3 特殊处理223 11.4.4 物理实现225 11.5 三种事实表的比较227 11.6 无事实的事实表228 11.7 聚集型事实表228 11.7.1 聚集的基本原则229 11.7.2 聚集的基本步骤229 11.7.3 阿里公共汇总层230 11.7.4 聚集补充说明234 第3篇 数据管理篇 第12章 元数据236 12.1 元数据概述236 12.1.1 元数据定义236 12.1.2 元数据价值237 12.1.3 统一元数据体系建设238 12.2 元数据应用239 12.2.1 Data Profile239 12.2.2 元数据门户241 12.2.3 应用链路分析241 12.2.4 数据建模242 12.2.5 驱动ETL开发243 第13章 计算管理245 13.1 系统优化245 13.1.1 HBO246 13.1.2 CBO249 13.2 任务优化256 13.2.1 Map倾斜257 13.2.2 Join倾斜261 13.2.3 Reduce倾斜269 第14章 存储和成本管理275 14.1 数据压缩275 14.2 数据重分布276 14.3 存储治理项优化277 14.4 生命周期管理278 14.4.1 生命周期管理策略278 14.4.2 通用的生命周期管理矩阵280 14.5 数据成本计量283 14.6 数据使用计费284 第15章 数据质量285 15.1 数据质量保障原则285 15.2 数据质量方法概述287 15.2.1 消费场景知晓289 15.2.2 数据加工过程卡点校验292 15.2.3 风险点监控295 15.2.4 质量衡量299 第4篇 数据应用篇 第16章 数据应用304 16.1 生意参谋305 16.1.1 背景概述305 16.1.2 功能架构与技术能力307 16.1.3 商家应用实践310 16.2 对内数据产品平台313 16.2.1 定位313 16.2.2 产品建设历程314 16.2.3 整体架构介绍317 附录A 本书插图索引320

2018-01-28

每天5分钟玩转OpenStack(高清完整版)

第一篇 预备知识 第 1 章 虚拟化 2 1.1 1型虚拟化 2 1.2 2型虚拟化 2 1.3 KVM 3 1.3.1 基本概念 3 1.3.2 KVM实操 4 1.4 KVM 虚拟化原理 11 1.4.1 CPU 虚拟化 11 1.4.2 内存虚拟化 12 1.4.3 存储虚拟化 13 1.5 网络虚拟化 19 1.5.1 Linux Bridge 19 1.5.2 VLAN 28 1.5.3 Linux Bridge + VLAN = 虚拟交换机 35 第 2 章 云 计 算 36 2.1 基本概念 36 2.2 云计算和 OpenStack 38 第二篇 OpenStack 核心 第 3 章 OpenStack 架构 41 3.1 Conceptual Architecture 41 3.2 Logical Architecture 42 第 4 章 搭建实验环境 45 4.1 部署拓扑 45 4.2 物理资源需求 46 4.3 网络规划 47 4.4 部署 DevStack 47 第 5 章 Identity Service——Keystone 55 5.1 概念 55 5.1.1 User 55 5.1.2 Credentials 57 5.1.3 Authentication 57 5.1.4 Token 57 5.1.5 Project 58 5.1.6 Service 59 5.1.7 Endpoint 60 5.1.8 Role 60 5.2 通过例子学习 62 5.2.1 第1步 登录 62 5.2.2 第2步 显示操作界面 62 5.2.3 第3步 显示image列表 63 5.2.4 Troubleshoot 64 第 6 章 Image Service——Glance 65 6.1 理解 Image 65 6.2 理解 Image Service 66 6.3 Glance 架构 66 6.4 Glance 操作 69 6.4.1 创建 image 70 6.4.2 删除 image 72 6.5 如何使用 OpenStack CLI 74 6.6 如何 Troubleshooting 77 第 7 章 Compute Service——Nova 79 7.1 Nova架构 80 7.1.1 架构概览 80 7.1.2 物理部署方案 82 7.1.3 从虚机创建流程看 nova-* 子服务如何协同工作 84 7.1.4 OpenStack 通用设计思路 85 7.2 Nova 组件详解 88 7.2.1 nova-api 88 7.2.2 nova-scheduler 90 7.2.3 nova-compute 97 7.2.4 nova-conductor 104 7.3 通过场景学习 Nova 105 7.3.1 看懂 OpenStack 日志 105 7.3.2 Launch 108 7.3.3 Shut Off 108 7.3.4 Start 112 7.3.5 Soft/Hard Reboot 114 7.3.6 Lock/Unlock 114 7.3.7 Terminate 115 7.3.8 Pause/Resume 116 7.3.9 Suspend/Resume 118 7.3.10 Rescue/Unrescue 119 7.3.11 Snapshot 122 7.3.12 Rebuild 125 7.3.13 Shelve 128 7.3.14 Unshelve 130 7.3.15 Migrate 133 7.3.16 Resize 139 7.3.17 Live Migrate 144 7.3.18 Evacuate 150 7.3.19 Instance 操作总结 154 7.4 小节 156 第 8 章 Block Storage Service ——Cinder 157 8.1 理解 Block Storage 157 8.2 理解 Block Storage Service 157 8.2.1 Cinder 架构 158 8.2.2 物理部署方案 159 8.2.3 从volume创建流程看cinder-*子服务如何协同工作 160 8.2.4 Cinder 的设计思想 161 8.2.5 Cinder组件详解 163 8.2.6 通过场景学习 Cinder 170 8.3 小节 220 第 9 章 Networking Service ——Neutron 221 9.1 Neutron 概述 221 9.1.1 Neutron 功能 221 9.1.2 Neutron 网络基本概念 222 9.2 Neutron 架构 224 9.2.1 物理部署方案 227 9.2.2 Neutron Server 228 9.2.3 Neutron 如何支持各种 network provider 229 9.2.4 ML2 Core Plugin 231 9.2.5 Service Plugin / Agent 234 9.2.6 小结 235 9.3 为Neutron 准备物理基础设施 237 9.3.1 1控制节点 + 1 计算节点的部署方案 237 9.3.2 配置多个网卡区分不同类型的网络数据 238 9.3.3 网络拓扑 239 9.3.4 安装和配置节点 240 9.4 Linux Bridge 实现 Neutron 网络 244 9.4.1 配置 linux-bridge mechanism driver 244 9.4.2 初始网络状态 245 9.4.3 了解Linux Bridge 环境中的各种网络设备 247 9.4.4 local network 248 9.4.5 flat network 262 9.4.6 DHCP 服务 270 9.4.7 vlan network 274 9.4.8 Routing 285 9.4.9 vxlan network 307 9.4.10 Securet Group 321 9.4.11 Firewall as a Service 328 9.4.12 Load Balancing as a Service 337 9.5 Open vSwitch 实现 Neutron 网络 358 9.5.1 网络拓扑 358 9.5.2 配置 openvswitch mechanism driver 359 9.5.3 初始网络状态 360 9.5.4 了解 Open vSwitch 环境中的各种网络设备 362 9.5.5 local network 362 9.5.6 flat network 377 9.5.7 vlan network 386 9.5.8 Routing 399 9.5.9 vxlan network 411 9.6 总结 421 写在最后 422

2018-01-28

Spring Boot 2精髓-从构建小系统到架构分布式大系统(高清完整版)

第1章 Java EE简介 1.1 Java EE 1.1.1 Java EE架构 1.1.2 Java EE的缺点 1.2 Spring 1.2.1 Spring IoC容器和AOP 1.2.2 Spring的缺点 1.3 Spring Boot 1.4 Hello,Spring Boot 1.4.1 创建一个Maven工程 1.4.2 增加Web支持 1.4.3 Hello Spring Boot示例 1.4.4 使用热部署 1.4.5 添加REST支持 第2章 Spring Boot基础 2.1 检查Java环境与安装Java 2.2 安装和配置Maven 2.2.1 Maven介绍 2.2.2 安装Maven 2.2.3 设置Maven 2.2.4 使用IDE设置Maven 2.2.5 Maven的常用命令 2.3 Spring核心技术 2.3.1 Spring的历史 2.3.2 Spring容器介绍 2.3.3 Spring AOP介绍 第3章 MVC框架 3.1 集成MVC框架 3.1.1 引入依赖 3.1.2 Web应用目录结构 3.1.3 Java包名结构 3.2 使用Controller 3.3 URL映射到方法 3.3.1 @RequestMapping 3.3.2 URL路径匹配 3.3.3 HTTP method匹配 3.3.4 consumes和produces 3.3.5 params和header匹配 3.4 方法参数 3.4.1 PathVariable 3.4.2 Model&ModelAndView 3.4.3 JavaBean接受HTTP参数 3.4.4 @RequsetBody接受JSON 3.4.5 MultipartFile 3.4.6 @ModelAttribute 3.4.7 @InitBinder 3.5 验证框架 3.5.1 JSR-303 3.5.2 MVC中使用@Validated 3.5.3 自定义校验 3.6 WebMvcConfigurer 3.6.1 拦截器 3.6.2 跨域访问 3.6.3 格式化 3.6.4 注册Controller 3.7 视图技术 3.7.1 使用Freemarker 3.7.2 使用Beetl 3.7.3 使用Jackson 3.7.4 Redirect和Forward 3.8 通用错误处理 3.9 @Service和@Transactional 3.9.1 声明一个Service类 3.9.2 事务管理 3.10 curl命令 第4章 视图技术 4.1 Beetl模板引擎 4.1.1 安装Beetl 4.1.2 设置定界符号和占位符 4.1.3 配置Beetl 4.1.4 groupTemplate 4.2 使用变量 4.2.1 全局变量 4.2.2 局部变量 4.2.3 共享变量 4.2.4 模板变量 4.3 表达式 4.3.1 计算表达式 4.3.2 逻辑表达式 4.4 控制语句 4.4.1 循环语句 4.4.2 条件语句 4.4.3 try catch 4.5 函数调用 4.6 格式化函数 4.7 直接调用Java 4.8 标签函数 4.9 HTML标签 4.10 安全输出 4.11 高级功能 4.11.1 配置Beetl 4.11.2 自定义函数 4.11.3 自定义格式化函数 4.11.4 自定义标签函数 4.11.5 自定义HTML标签 4.11.6 布局 4.11.7 AJAX局部渲染 4.12 脚本引擎 4.13 JSON技术 4.13.1 在Spring Boot中使用Jackson 4.13.2 自定义ObjectMapper 4.13.3 Jackson的三种使用方式 4.13.4 Jackson树遍历 4.13.5 对象绑定 4.13.6 流式操作 4.13.7 Jackson注解 4.13.8 集合的反序列化 4.14 MVC分离开发 4.14.1 集成WebSimulate 4.14.2 模拟JSON响应 4.14.3 模拟模板渲染 第5章 数据库访问 5.1 配置数据源 5.2 Spring JDBC Template 5.2.1 查询 5.2.2 修改 5.2.3 JdbcTemplate增强 5.3 BeetlSQL介绍 5.3.1 BeetlSQL功能概览 5.3.2 添加Maven依赖 5.3.3 配置BeetlSQL 5.3.4 SQLManager 5.3.5 使用SQL文件 5.3.6 Mapper 5.3.7 使用实体 5.4 SQLManager内置CRUD 5.4.1 内置的插入API 5.4.2 内置的更新(删除)API 5.4.3 内置的查询API 5.4.4 代码生成方法 5.5 使用sqlId 5.5.1 md文件命名 5.5.2 md文件构成 5.5.3 调用sqlId 5.5.4 翻页查询 5.5.5 TailBean 5.5.6 ORM查询 5.5.7 其他API 5.5.8 Mapper详解 5.6 BeetlSQL的其他功能 5.6.1 常用函数和标签 5.6.2 主键设置 5.6.3 BeetlSQL注解 5.6.4 NameConversion 5.6.5 锁 第6章 Spring Data JPA 6.1 集成Spring Data JPA 6.1.1 集成数据源 6.1.2 配置JPA支持 6.1.3 创建Entity 6.1.4 简化Entity 6.2 Repository 6.2.1 CrudRepository 6.2.2 PagingAndSortingRepository 6.2.3 JpaRepository 6.2.4 持久化Entity 6.2.5 Sort 6.2.6 Pageable和Page 6.2.7 基于方法名字查询 6.2.8 @Query查询 6.2.9 使用JPA Query 6.2.10 Example查询 第7章 Spring Boot配置 7.1 配置Spring Boot 7.1.1 服务器配置 7.1.2 使用其他Web服务器 7.1.3 配置启动信息 7.1.4 配置浏览器显示ico 7.2 日志配置 7.3 读取应用配置 7.3.1 Environment 7.3.2 @Value 7.3.3 @ConfigurationProperties 7.4 Spring Boot自动装配 7.4.1 @Configuration和@Bean 7.4.2 Bean条件装配 7.4.3 Class条件装配 7.4.4 Environment装配 7.4.5 其他条件装配 7.4.6 联合多个条件 7.4.7 Condition接口 7.4.8 制作Starter 第8章 部署Spring Boot应用 8.1 以jar文件运行 8.2 以war方式部署 8.3 多环境部署 8.4 @Profile注解 第9章 Testing单元测试 9.1 JUnit介绍 9.1.1 JUnit的相关概念 9.1.2 JUnit测试 9.1.3 Assert 9.1.4 Suite 9.2 Spring Boot单元测试 9.2.1 测试范围依赖 9.2.2 Spring Boot测试脚手架 9.2.3 测试Service 9.2.4 测试MVC 9.2.5 完成MVC请求模拟 9.2.6 比较MVC的返回结果 9.2.7 JSON比较 9.3 Mockito 9.3.1 模拟对象 9.3.2 模拟方法参数 9.3.3 模拟方法返回值 9.4 面向数据库应用的单元测试 9.4.1 @Sql 9.4.2 XLSUnit 9.4.3 XLSUnit的基本用法 第10章 REST 10.1 REST简介 10.1.1 REST风格的架构 10.1.2 使用“api”作为上下文 10.1.3 增加一个版本标识 10.1.4 标识资源 10.1.5 确定HTTP Method 10.1.6 确定HTTP Status 10.1.7 REST VS. WebService 10.2 Spring Boot集成REST 10.2.1 集成REST 10.2.2 @RestController 10.2.3 REST Client 10.3 Swagger UI 10.3.1 集成Swagger 10.3.2 Swagger规范 10.3.3 接口描述 10.3.4 查询参数描述 10.3.5 URI中的参数 10.3.6 HTTP头参数 10.3.7 表单参数 10.3.8 文件上传参数 10.3.9 整个请求体作为参数 10.4 模拟REST服务 第11章 MongoDB 11.1 安装MongoDB 11.2 使用shell 11.2.1 指定数据库 11.2.2 插入文档 11.2.3 查询文档 11.2.4 更新操作 11.2.5 删除操作 11.3 Spring Boot集成MongoDB 11.4 增删改查 11.4.1 增加API 11.4.2 根据主键查询API 11.4.3 查询API 11.4.4 修改API 11.4.5 删除API 11.4.6 使用MongoDatabase 11.4.7 打印日志 第12章 Redis 12.1 安装Redis 12.2 使用redis-cli 12.2.1 安全设置 12.2.2 基本操作 12.2.3 keys 12.2.4 Redis List 12.2.5 Redis Hash 12.2.6 Set 12.2.7 Pub/Sub 12.3 Spring Boot集成Redis 12.4 使用StringRedisTemplate 12.4.1 opsFor 12.4.2 绑定Key的操作 12.4.3 RedisConnection 12.4.4 Pub/Sub 12.5 序列化策略 12.5.1 默认序列化策略 12.5.2 自定义序列化策略 第13章 Elasticsearch 13.1 Elasticsearch介绍 13.1.1 安装Elasticsearch 13.1.2 Elasticsearch的基本概念 13.2 使用REST访问Elasticsearch 13.2.1 添加文档 13.2.2 根据主键查询 13.2.3 根据主键更新 13.2.4 根据主键删除 13.2.5 搜索文档 13.2.6 联合多个索引搜索 13.3 使用RestTemplate访问ES 13.3.1 创建Book 13.3.2 使用RestTemplate获取搜索结果 13.4 Spring Data Elastic 13.4.1 安装Spring Data 13.4.2 编写Entity 13.4.3 编写Dao 13.4.4 编写Controller 第14章 Cache 14.1 关于Cache 14.1.1 Cache的组件和概念 14.1.2 Cache的单体应用 14.1.3 使用专有的Cache服务器 14.1.4 使用一二级缓存服务器 14.2 Spring Boot Cache 14.3 注释驱动缓存 14.3.1 @Cacheable 14.3.2 Key生成器 14.3.3 @CachePut 14.3.4 @CacheEvict 14.3.5 @Caching 14.3.6 @CacheConfig 14.4 使用Redis Cache 14.4.1 集成Redis缓存 14.4.2 禁止缓存 14.4.3 定制缓存 14.5 Redis缓存原理 14.6 实现Redis两级缓存 14.6.1 实现TwoLevelCacheManager 14.6.2 创建RedisAndLocalCache 14.6.3 缓存同步说明 14.6.4 将代码组合在一起 第15章 Spring Session 15.1 水平扩展实现 15.2 Nginx的安装和配置 15.2.1 安装Nginx 15.2.2 配置Nginx 15.3 Spring Session 15.3.1 Spring Session介绍 15.3.2 使用Redis 15.3.3 Nginx+Redis 第16章 Spring Boot和ZooKeeper 16.1 ZooKeeper 16.1.1 ZooKeeper的数据结构 16.1.2 安装ZooKeeper 16.1.3 ZooKeeper的基本命令 16.1.4 领导选取演示 16.1.5 分布式锁演示 16.1.6 服务注册演示 16.2 Spring Boot集成ZooKeeper 16.2.1 集成Curator 16.2.2 Curator API 16.3 实现分布式锁 16.4 服务注册 16.4.1 通过ServiceDiscovery注册服务 16.4.2 获取服务 16.5 领导选取 第17章 监控Spring Boot应用 17.1 安装Acutator 17.2 HTTP跟踪 17.3 日志查看 17.4 线程栈信息 17.5 内存信息 17.6 查看URL映射 17.7 查看Spring容器管理的Bean 17.8 其他监控 17.9 编写自己的监控信息 17.9.1 编写HealthIndicator 17.9.2 自定义监控

2018-01-28

架构探险:从零开始写分布式服务架构(高清完整版 + 全部源码)

第1章 常用的RPC框架 1 1.1 RPC框架原理 1 1.2 RMI介绍 2 1.2.1 原生RMI代码示例 3 1.2.2 RMI穿透防火墙 5 1.3 CXF/Axis2介绍 7 1.3.1 CXF介绍 7 1.3.2 Axis2介绍 14 1.4 Thrift介绍 21 1.4.1 Thrift工作原理介绍 23 1.4.2 Thrift IDL语法说明 26 1.4.3 基于Apache Thrift的Java版完整案例 28 1.4.4 基于Java注解的简化实现 36 1.5 gRPC介绍 42 1.5.1 protobuf3语法介绍 43 1.5.2 gRPC使用示例 45 1.6 HTTP Client介绍 53 1.6.1 构建HttpClient对象 54 1.6.2 构建URI对象 55 1.6.3 构建请求对象(HttpGet、HttpPost) 56 1.6.4 HttpClient发起调用及获取调用返回结果 56 1.7 实现自己的RPC框架 61 1.8 RPC框架与分布式服务框架的区别 68 1.9 本章小结 68 第2章 分布式服务框架总体架构与功能 69 2.1 面向服务的体系架构(SOA) 69 2.1.1 面向服务架构范式 69 2.1.2 服务拆分原则 71 2.2 分布式服务框架现实需求 72 2.3 分布式服务框架总体架构及所需的技术概述 72 2.4 本章小结 74 第3章 分布式服务框架序列化与反序列化实现 75 3.1 序列化原理及常用的序列化介绍 75 3.2 Java默认的序列化 77 3.3 XML序列化框架介绍 80 3.4 JSON序列化框架介绍 82 3.5 Hessian序列化框架介绍 87 3.6 protobuf序列化框架介绍 88 3.7 protostuff序列化框架介绍 93 3.8 Thrift序列化框架介绍 98 3.9 Avro序列化框架介绍 100 3.9.1 Avro介绍 100 3.9.2 Avro IDL语言介绍 101 3.9.3 Schema定义介绍 103 3.9.4 Maven配置及使用IDL与Schema自动生成代码 103 3.9.5 Avro序列化/反序列化实现 105 3.10 JBoss Marshalling序列化框架介绍 110 3.11 序列化框架的选型 112 3.12 实现自己的序列化工具引擎 113 3.13 本章小结 118 第4章 实现分布式服务框架服务的发布与引入 119 4.1 Spring Framework框架概述 119 4.1.1 Spring Framework介绍 119 4.1.2 Spring Framework周边生态项目介绍 121 4.2 FactoryBean的秘密 122 4.2.1 FactoryBean的作用及使用场景 123 4.2.2 FactoryBean实现原理及示例说明 124 4.3 Spring框架对于已有RPC框架集成的支持 127 4.3.1 Spring支持集成RPC框架介绍 127 4.3.2 基于RmiProxyFactoryBean 实现RMI与Spring的集成 128 4.3.3 基于HttpInvokerProxyFactoryBean实现HTTP Invoker与Spring的集成 131 4.3.4 基于HessianProxyFactoryBean实现Hessian与Spring的集成 133 4.4 实现自定义服务框架与Spring的集成 136 4.4.1 实现远程服务的发布 136 4.4.2 实现远程服务的引入 144 4.5 在Spring中定制自己的XML标签 150 4.6 本章小结 158 第5章 分布式服务框架注册中心 159 5.1 服务注册中心介绍 159 5.2 ZooKeeper实现服务的注册中心原理 161 5.2.1 ZooKeeper介绍 161 5.2.2 部署ZooKeeper 161 5.2.3 ZkClient使用介绍 164 5.2.4 ZooKeeper实现服务注册中心 173 5.3 集成ZooKeeper实现自己的服务注册与发现 175 5.3.1 服务注册中心服务提供方 175 5.3.2 服务注册中心服务消费方 176 5.3.3 服务注册中心实现 178 5.4 本章小结 189 第6章 分布式服务框架底层通信实现 190 6.1 Java I/O模型及I/O类库的进化 190 6.1.1 Linux下实现的I/O模型 190 6.1.2 Java语言实现的I/O模型 194 6.1.3 Java Classic I/O(Blocking I/O)介绍 194 6.1.4 Java Non-blocking I/O(NIO)介绍 211 6.1.5 NIO2及Asynchronous I/O介绍 233 6.2 Netty使用介绍 255 6.2.1 Netty开发入门 256 6.2.2 Netty粘包/半包问题解决 265 6.3 使用Netty构建服务框架底层通信 320 6.3.1 构建分布式服务框架Netty服务端 320 6.3.2 构建分布式服务框架服务调用端Netty客户端 330 6.4 本章小结 347 第7章 分布式服务框架软负载实现 348 7.1 软负载的实现原理 348 7.2 负载均衡常用算法 349 7.2.1 软负载随机算法实现 349 7.2.2 软负载加权随机算法实现 350 7.2.3 软负载轮询算法实现 351 7.2.4 软负载加权轮询算法实现 352 7.2.5 软负载源地址hash算法实现 354 7.3 实现自己的软负载机制 355 7.4 软负载在分布式服务框架中的应用 357 7.5 本章小结 361 第8章 分布式服务框架服务治理 362 8.1 服务治理介绍 362 8.2 服务治理的简单实现 364 8.2.1 服务分组路由实现 364 8.2.2 简单服务依赖关系分析实现 374 8.2.3 服务调用链路跟踪实现原理 380 8.3 本章小结 380 附录A 如何配置运行本书完成的分布式服务框架 381

2018-01-28

Spring boot 开发REST服务(全套视频以及源码)

1-1 导学.mp4 2-1 开发环境安装.mp4 2-2 代码结构介绍.mp4 2-3 Hello Spring Security.mp4 3-1 Restful简介.mp4 3-2 查询请求.mp4 3-3 用户详情请求.mp4 3-4 用户创建请求.mp4 3-5 修改和删除请求.mp4 3-6 服务异常处理.mp4 3-7 使用切片拦截REST服务.mp4 3-8 使用Filter和Interceptor拦截REST服务.mp4 3-9 使用REST方式处理文件服务.mp4 3-10 使用多线程提高REST服务性能.mp4 3-11 使用Swagger自动生成文档.mp4 3-12 使用WireMock伪造REST服务.mp4 4-1 简介.mp4 4-2 SpringSecurity基本原理.mp4 4-3 自定义用户认证逻辑.mp4 4-4 个性化用户认证流程(一).mp4 4-5 个性化用户认证流程(二).mp4 4-6 认证流程源码级详解.mp4 4-7 图片验证码.mp4 4-8 图片验证码重构.mp4 4-9 添加记住我功能.mp4 4-10 短信验证码接口开发.mp4 4-11 短信登录开发.mp4 4-12 短信登录配置及重构.mp4 4-13 小结.mp4 5-1 OAuth协议简介.mp4 5-2 SpringSocial简介.mp4 5-3 开发QQ登录(上).mp4 5-4 开发QQ登录(中).mp4 5-5 开发QQ登录(下).mp4 5-6 处理注册逻辑.mp4 5-7 开发微信登录.mp4 5-8 绑定和解绑处理.mp4 5-9 单机Session管理.mp4 5-10 集群Session管理.mp4 5-11 退出登录.mp4 6-1 SpringSecurityOAuth简介.mp4 6-2 实现标准的OAuth服务提供商.mp4 6-3 SpringSecurityOAuth核心源码解析.mp4 6-4 重构用户名密码登录.mp4 6-5 重构短信登录.mp4 6-6 重构社交登录.mp4 6-7 重构注册逻辑.mp4 6-8 令牌配置.mp4 6-9 使用JWT替换默认令牌.mp4 6-10 基于JWT实现SSO单点登录1.mp4 6-11 基于JWT实现SSO单点登录2.mp4 7-1 SpringSecurity授权简介.mp4 7-2 SpringSecurity源码解析.mp4 7-3 权限表达式.mp4 7-4 基于数据库Rbac数据模型控制权限.mp4 8-1 课程总结.mp4

2018-01-24

九年双11互联网技术超级工程

新智能 1 阿里搜索技术,在AI路上走了多远? 1 直击阿里新一代数据库技术:如何实现极致弹性能力? 9 争分夺秒:阿里实时大数据技术全力助战双11 21 阿里小蜜这一年:从点到面的变迁 41 菜鸟仓配自动化UCS揭秘 62 阿里怎么发红包?自研智能权益系统首次公开 68 2017双11:开启智能全链路压测之路 78 智能写手:智能文本生成在2017双11的应用 85 浅谈分布式存储系统Pangu2.0:它让双11运维变得智能起来 100 新基础 118 双11稳定性负责人叔同讲述:九年双11的云化架构演进和升级 118 阿里双11网络技术揭秘:百万级物理和虚拟网络设备的智能化之路 134 从10%到40%:阿里巴巴混部技术权威详解 150 经历400多天打磨,HSF的架构和性能有哪些新突破? 166 直击阿里容器技术Pouch 179 直击阿里双11神秘技术:PB级大规模文件分发系统“蜻蜓” 185 双11万亿流量下的分布式缓存 203 2017双11交易系统TMF2.0技术揭秘,实现全链路管理 214 新体验 221 一天造出10亿个淘宝首页,阿里工程师如何实现? 221 双十一安全技术:目标检测在淘宝直播中的应用 238 持续迭代下的双11供应链体系最新架构及功能解读 244 七层流量清洗提供安全防护新方案 252 2017双11:区块链在天猫国际商品溯源中的应用 260 直击Weex在优酷双11猫晚直播的应用 270 如何把范冰冰“送”到你家?双11晚会“逆天”技术首次公开 281

2018-01-23

从零开始学Storm(第2版)

第1章 Storm简介 1.1 什么是Storm 1 1.2 Storm的诞生 3 1.2.1 从Twitter说起 3 1.2.2 Twitter需要处理大批实时性要求高的大数据业务 3 1.2.3 Storm帮助Twitter解决实时海量大数据处理问题 4 1.3 Storm的成长 5 1.3.1 Storm正式开源 5 1.3.2 Apache接管并孵化Storm 5 1.3.3 Storm的核心技术和基本组成 6 1.3.4 Storm的项目小组 7 1.3.5 Storm的技术支持网站 10 1.4 Storm的优势 13 1.4.1 集成多种技术 13 1.4.2 简单的API 13 1.4.3 可扩展的 14 1.4.4 容错的 14 1.4.5 保证数据处理 14 1.4.6 可以使用任何语言 14 1.4.7 部署和操作简单 15 1.4.8 自由开源 15 1.5 Storm的应用现状和发展趋势 15 1.5.1 应用现状 16 1.5.2 发展趋势 18 1.6 如何学习Storm 20 1.7 本书的章节安排及学习建议 21 1.7.1 本书的章节安排 21 1.7.2 关于如何阅读本书的建议 22 1.8 本章小结 23 第 2 章 Storm的基本知识 2.1 概念 24 2.1.1 元组(Tuple) 24 2.1.2 流(Stream) 25 2.1.3 龙卷(Spout) 26 2.1.4 闪电(Bolt) 27 2.1.5 拓扑(Topology) 27 2.1.6 主控节点与工作节点 28 2.1.7 Nimbus进程与Supervisor进程 28 2.1.8 流分组(Stream grouping) 28 2.1.9 工作进程(Worker) 28 2.1.10 任务(Task) 28 2.1.11 执行器(Executor) 28 2.1.12 可靠性(Reliability) 29 2.2 Storm的配置 29 2.2.1 Storm的配置类型 29 2.2.2 defaults.yaml文件 30 2.2.3 storm.yaml文件 33 2.2.4 Config类 34 2.3 序列化(Serialization) 35 2.3.1 动态类型 36 2.3.2 自定义序列化 36 2.3.3 Java序列化 37 2.3.4 特定组件序列化注册 37 2.4 容错机制 37 2.4.1 Worker进程死亡 37 2.4.2 节点死亡 38 2.4.3 Nimbus或者Supervisor守护进程死亡 38 2.4.4 Nimbus是否是“单点故障” 38 2.5 可靠性机制——保证消息处理 38 2.5.1 消息被“完全处理”的含义 38 2.5.2 如果一个消息被完全处理或完全处理失败会发生什么 39 2.5.3 Storm如何保证可靠性 40 2.5.4 Storm如何实现可靠性 43 2.5.5 调节可靠性 44 2.6 消息传输机制 45 2.6.1 ZeroMQ 45 2.6.2 Netty 45 2.6.3 自定义消息通信机制 45 2.7 Storm的开发环境与生产环境 46 2.7.1 开发环境与本地模式 46 2.7.2 生产环境与远程模式 46 2.7.3 开发环境与生产环境的对比 47 2.8 Storm拓扑的并行度(parallelism) 48 2.8.1 工作进程、执行器和任务 48 2.8.2 配置拓扑的并行度 49 2.8.3 拓扑示例 50 2.8.4 如何改变运行中拓扑的并行度 51 2.9 Storm命令行客户端 52 2.10 Javadoc文档 56 2.11 本章小结 56 第 3 章 拓扑详解 3.1 什么是拓扑 57 3.2 TopologyBuilder 57 3.3 流分组 59 3.3.1 什么是流分组 59 3.3.2 不同的流分组方式 60 3.4 一个简单的拓扑 64 3.5 在本地模式下运行拓扑 67 3.6 在生产集群上运行拓扑 68 3.6.1 常见的配置 70 3.6.2 杀死拓扑 70 3.6.3 更新运行中的拓扑 71 3.6.4 监控拓扑 71 3.7 拓扑的常见模式 71 3.7.1 流连接(Stream Join) 71 3.7.2 批处理(Batching) 72 3.7.3 BasicBolt 72 3.7.4 内存中缓存与字段的组合 72 3.7.5 流的top N 72 3.7.6 高效保存近更新缓存对象的TimeCacheMap(已弃用) 74 3.7.7 分布式RPC的CoordinatedBolt与KeyedFairBolt 75 3.8 本地模式与StormSubmitter的对比 75 3.9 多语言协议(Multi-Language Protocol) 77 3.10 使用非JVM语言操作Storm 81 3.10.1 支持的非Java语言 81 3.10.2 对Storm使用非Java语言 81 3.10.3 实现非Java DSL的笔记 82 3.11 Hook 82 3.12 本章小结 83 第 4 章 组件详解 4.1 基本接口 84 4.1.1 IComponent接口 84 4.1.2 ISpout接口 85 4.1.3 IBolt接口 86 4.1.4 IRichSpout与IRichBolt接口 88 4.1.5 IBasicBolt接口 88 4.1.6 IStateSpout与IRichStateSpout接口 89 4.2 基本抽象类 90 4.2.1 BaseComponent抽象类 90 4.2.2 BaseRichSpout抽象类 90 4.2.3 BaseRichBolt抽象类 91 4.2.4 BaseBasicBolt抽象类 92 4.3 事务接口 92 4.3.1 IPartitionedTransactionalSpout 92 4.3.2 IOpaquePartitionedTransactionalSpout 94 4.3.3 ITransactionalSpout 95 4.3.4 ICommitterTransactionalSpout 96 4.3.5 IBatchBolt 97 4.4 组件之间的相互关系 97 4.5 本章小结 98 第 5 章 Spout详解 5.1 可靠的与不可靠的消息 99 5.2 Spout获取数据的方式 102 5.2.1 直接连接(Direct Connection) 102 5.2.2 消息队列(Enqueued Messages) 103 5.2.3 DRPC(分布式RPC) 104 5.3 常用的Spout 104 5.3.1 Kestrel作为Spout的数据源 104 5.3.2 AMQP作为Spout的数据源 104 5.3.3 JMS作为Spout的数据源 105 5.3.4 Redis作为Spout的数据源 105 5.3.5 beanstalkd作为Spout的数据源 105 5.4 学习编写Spout类 105 5.5 本章小结 106 第 6 章 Bolt详解 6.1 Bolt概述 107 6.2 可靠的与不可靠的Bolt 108 6.2.1 使用Anchoring机制实现可靠的Bolt 108 6.2.2 使用IBasicBolt接口实现自动确认 109 6.3 复合流与复合Anchoring 110 6.3.1 复合流 110 6.3.2 复合Anchoring 110 6.4 使用其他语言定义Bolt 111 6.5 学习编写Bolt类 111 6.5.1 可靠的Bolt 111 6.5.2 不可靠的Bolt 112 6.6 本章小结 113 第 7 章 ZooKeeper详解 7.1 ZooKeeper简介 114 7.2 ZooKeeper的下载和部署 114 7.2.1 ZooKeeper的下载 114 7.2.2 ZooKeeper的部署 115 7.3 ZooKeeper的配置 117 7.4 ZooKeeper的运行 119 7.5 ZooKeeper的本地模式实例 120 7.6 ZooKeeper的数据模型 121 7.6.1 ZNode 122 7.6.2 ZooKeeper中的时间 123 7.6.3 ZooKeeper的Stat结构 123 7.7 ZooKeeper的命令行操作范例 124 7.8 Storm在ZooKeeper中的目录结构 127 7.9 本章小结 128 第 8 章 基础软件的安装与使用 8.1 Linux的基本操作 129 8.1.1 环境变量 129 8.1.2 常用命令 130 8.2 JDK的下载与配置 134 8.2.1 Sun JDK的下载 134 8.2.2 在Linux下安装JDK 135 8.2.3 在Windows下安装JDK 136 8.3 GitHub托管项目的下载 141 8.4 Maven的下载与配置 143 8.4.1 Maven的下载 143 8.4.2 在Linux下部署Maven 144 8.4.3 在Windows下部署Maven 145 8.5 其他软件——Notepad++ 146 8.6 本章小结 147 第 9 章 Storm的安装与配置 9.1 Storm集群的安装步骤与准备工作 148 9.1.1 搭建ZooKeeper集群 148 9.1.2 安装Storm的本地依赖 148 9.1.3 下载并解压Storm发行版本 151 9.1.4 配置storm.yaml文件 153 9.1.5 启动Storm的守护进程 154 9.2 本地模式的Storm完整的配置命令 157 9.3 本章小结 159 第 10 章 Storm集群搭建实践 10.1 准备工作 160 10.1.1 概述 160 10.1.2 配置hosts文件 161 10.1.3 配置静态IP 161 10.1.4 集群SSH无密码 163 10.1.5 修改主机名 164 10.1.6 关闭防火墙 164 10.1.7 同步时间 164 10.1.8 安装JDK 165 10.2 ZooKeeper集群的搭建 166 10.2.1 部署**个节点 166 10.2.2 部署第i个节点 167 10.2.3 启动ZooKeeper集群 167 10.2.4 查看ZooKeeper状态 168 10.2.5 关闭ZooKeeper集群 168 10.2.6 清理ZooKeeper集群 168 10.3 Storm集群的搭建 168 10.3.1 安装Storm依赖(每个Storm节点) 168 10.3.2 部署**个节点 169 10.3.3 部署第i个节点 171 10.3.4 启动Storm守护进程 171 10.4 本章小结 172 第 11 章 准备Storm的开发环境 11.1 Storm的开发环境 173 11.1.1 什么是Storm的开发环境 173 11.1.2 如何管理Storm 173 11.1.3 如何提交拓扑到集群 176 11.2 Eclipse的下载与配置 176 11.2.1 Eclipse的下载 176 11.2.2 Eclipse的配置与运行 177 11.2.3 Eclipse插件的安装 178 11.3 使用Maven管理项目 180 11.3.1 Maven的下载与配置 180 11.3.2 配置pom.xml文件 180 11.3.3 运行Maven命令 182 11.4 使用Nexus搭建本地Maven私服 183 11.4.1 下载Nexus 183 11.4.2 运行Nexus 184 11.4.3 登录Nexus后台 184 11.4.4 配置Repositories 185 11.4.5 配置setting.xml文件 187 11.4.6 修改Eclipse的Maven插件的配置 189 11.5 使用SVN管理代码版本 189 11.5.1 在Windows下搭建SVN服务器 189 11.5.2 在Linux下搭建SVN服务器 191 11.5.3 安装SVN客户端 191 11.6 部署单节点的Storm集群 192 11.6.1 部署伪分布的ZooKeeper 192 11.6.2 部署伪分布的Storm集群 192 11.7 本章小结 194 第 12 章 开发自己的Storm应用 12.1 新建Maven项目 195 12.2 修改为适合Storm开发的项目 198 12.2.1 对包名进行分类管理 198 12.2.2 修改pom.xml文件 199 12.3 编写代码 201 12.3.1 编写Spout类 201 12.3.2 编写Bolt类 202 12.3.3 编写Topology类 203 12.4 本地测试运行 204 12.5 提交到Storm集群运行 205 12.5.1 使用Maven打包 205 12.5.2 提交jar包到集群 205 12.6 本章小结 206 第 13 章 storm-starter详解 13.1 storm-starter项目概述 207 13.2 storm-starter的下载 209 13.3 使用Maven进行管理 211 13.3.1 使用Maven打包storm-starter 211 13.3.2 使用Maven直接运行ExclamationTopology 211 13.3.3 使用Maven运行单元测试 211 13.4 在Eclipse中运行 212 13.4.1 新建Maven项目的方式 212 13.4.2 导入已存在的项目的方式 214 13.5 storm-starter的入门例子 214 13.5.1 ExclamationTopology 214 13.5.2 WordCountTopology 216 13.5.3 ReachTopology 219 13.6 storm-starter的其他例子 225 13.6.1 BasicDRPCTopology 225 13.6.2 ManualDRPC 226 13.6.3 PrintSampleStream 226 13.6.4 RollingTopWords 227 13.6.5 SkewedRollingTopWords 228 13.6.6 SingleJoinExample 229 13.6.7 TransactionalGlobalCount 230 13.6.8 TransactionalWords 230 13.6.9 WordCountTopologyNode 231 13.7 本章小结 232 第 14 章 研发与集群管理技巧 14.1 使用daemontools监控Storm进程 233 14.1.1 daemontools简介 233 14.1.2 安装daemontools 234 14.1.3 编写监控脚本 234 14.2 使用Monit监控Storm 236 14.2.1 Monit简介 236 14.2.2 安装Monit 237 14.2.3 配置Monit 238 14.2.4 启动Monit 240 14.2.5 获取Monit帮助信息 241 14.3 常用的集群操作命令 242 14.4 使用Storm的经验与建议 243 14.5 本章小结 244 第 15 章 DRPC详解 15.1 概述 245 15.2 DRPCTopologyBuilder 246 15.2.1 LinearDRPCTopologyBuilder 246 15.2.2 LinearDRPCTopologyBuilder提供的方法 246 15.2.3 LinearDRPCTopologyBuilder使用范例 248 15.2.4 LinearDRPCTopologyBuilder的工作原理 249 15.2.5 LinearDRPCTopologyBuilder目前已弃用 249 15.3 本地模式的DRPC 249 15.4 远程模式的DRPC 250 15.5 一个复杂的DRPC例子(计算reach值) 250 15.6 非线性DRPC 253 15.7 本章小结 253 第 16 章 事务拓扑详解 16.1 什么是事务拓扑 254 16.1.1 设计1 254 16.1.2 设计2 255 16.1.3 设计3(Storm的设计) 256 16.2 事务拓扑的设计细节 256 16.3 事务拓扑的实现细节 257 16.3.1 事务Spout的工作原理 257 16.3.2 “对于给定的事务id不能发射相同的Batch”的处理 258 16.3.3 更多的细节 260 16.4 事务拓扑API 260 16.4.1 Bolt 260 16.4.2 事务Spout 261 16.4.3 配置 262 16.5 TransactionalTopologyBuilder 262 16.5.1 TransactionalTopologyBuilder提供的方法 262 16.5.2 TransactionalTopologyBuilder类已弃用 266 16.6 一个简单的例子 266 16.7 本章小结 269 第 17 章 Trident详解 17.1 Trident概述 270 17.1.1 简单的例子——单词统计(TridentWordCount) 270 17.1.2 另一个例子——计算Reach值(TridentReach) 274 17.1.3 字段和元组 275 17.1.4 状态(State) 276 17.1.5 Trident拓扑的执行 277 17.2 Trident API 279 17.2.1 概述 279 17.2.2 本地分区操作 279 17.2.3 重新分区操作 283 17.2.4 聚合操作 284 17.2.5 流分组操作 284 17.2.6 合并与连接 285 17.3 Trident的状态 285 17.3.1 Trident状态分类 286 17.3.2 事务Spout(Transactional Spout) 286 17.3.3 不透明事务Spout(Opaque Transactional Spout) 288 17.3.4 非事务Spout(Non-transactional Spout) 289 17.3.5 Spout与State之间的联系 289 17.3.6 State API 290 17.3.7 persistentAggregate方法 294 17.3.8 实现 MapStates 294 17.4 Trident Spout 295 17.4.1 流水线(Pipelining) 296 17.4.2 Trident Spout的类型 296 17.5 本章小结 296 第 18 章 Storm的内部实现 18.1 文件系统分析 297 18.2 数据目录结构 298 18.2.1 Nimbus节点的目录结构 299 18.2.2 Supervisor节点的目录结构 299 18.3 代码库的结构 300 18.3.1 storm.thrift 301 18.3.2 Java接口 316 18.3.3 实现 316 18.4 拓扑的生命周期 318 18.4.1 启动拓扑 319 18.4.2 监控拓扑 321 18.4.3 杀死拓扑 321 18.5 Acking框架的实现 322 18.5.1 异或计算的基本原理 322 18.5.2 Acking框架的实现原理 322 18.5.3 Acker的execute方法 323 18.5.4 待定元组(pending tuple)和RotatingMap 323 18.6 Metric 324 18.7 本章小结 329 第 19 章 Storm相关的其他项目 19.1 JStorm项目 330 19.1.1 项目简介 330 19.1.2 下载与部署 331 19.1.3 源代码编译 332 19.2 storm-deploy项目 332 19.3 Storm与Kafka 333 19.3.1 Kafka简介 333 19.3.2 Kafka的安装 333 19.3.3 启动服务 334 19.3.4 测试运行 335 19.3.5 Storm与Kafka的项目 337 19.4 storm-kestrel项目 338 19.4.1 storm-kestrel项目简介 338 19.4.2 使用storm-kestrel项目 338 19.4.3 Kestrel服务器和队列 339 19.4.4 添加元素到kestrel 339 19.4.5 从Kestrel中移除元素 340 19.4.6 持续添加元素到Kestrel 341 19.4.7 使用KestrelSpout 342 19.4.8 执行 342 19.5 本章小结 343 第 20 章 企业应用案例 20.1 Storm席卷众多互联网企业 344 20.1.1 Storm的典型应用场景 344 20.1.2 Storm的三大基本应用 345 20.2 Storm在Twitter中的应用 345 20.2.1 Twitter公司简介 345 20.2.2 Storm帮助Twitter提升产品性能 346 20.2.3 MapR在Twitter中的应用简介 346 20.3 Storm在阿里巴巴集团的应用 348 20.3.1 阿里巴巴集团简介 348 20.3.2 Storm在阿里巴巴的应用 348 20.3.3 Storm在淘宝公司的应用 350 20.3.4 Storm在支付宝公司的应用 350 20.4 其他应用Storm的知名企业和项目 351 20.5 本章小结 367 参考资料 368

2017-12-05

Hadoop集群(1-11期)

Hadoop集群·CentOS安装配置(第1期) Hadoop集群·机器信息分布表(第2期) Hadoop集群·VSFTP安装配置(第3期) Hadoop集群·SecureCRT使用(第4期) Hadoop集群·Hadoop安装配置(第5期) Hadoop集群·JDK和SSH无密码配置(第5期副刊) Hadoop集群·WordCount运行详解(第6期) Hadoop集群·Eclipse开发环境设置(第7期) Hadoop集群·HDFS初探之旅(第8期) Hadoop集群·MapReduce初级案例(第9期) Hadoop集群·MySQL关系数据库(第10期) Hadoop集群·常用MySQL数据库命令(第10期副刊) Hadoop集群·HBase简介及安装(第11期) Hadoop集群·HBase之旅(第11期副刊)

2017-10-29

Nutch搜索引擎(1-5期)

Nutch搜索引擎·Nutch简介及安装(第1期) Nutch搜索引擎·Solr简介及安装(第2期) Nutch搜索引擎·Nutch简单应用(第3期) Nutch搜索引擎·Eclipse开发配置(第4期) Nutch搜索引擎·Nutch浅入分析(第5期)

2017-10-29

Nutch搜索引擎·Nutch浅入分析(第5期)

1.1 Nutch 基本原理 1.1.1 Nutch 基本组成 1.1.2 Nutch 工作流程 1.2 Nutch 流程详解 1.2.1 Nutch 数据流程 1.2.2 Nutch 流程分析

2017-10-29

Nutch搜索引擎·Eclipse开发配置(第4期)

1.1 环境准备 1.1.1 本期引言 1.1.2 环境介绍 1.1.3 JDK 安装配置 1.1.4 ANT 安装配置 1.1.5 IvyDE 安装配置 1.1.5 Tomcat 安装配置 1.1.6 Cygwin 安装配置 1.2 Eclipse 开发 1.2.1 Solr 部署 1.2.2 Nutch 导入 1.2.3 Solr 与Nutch 结合

2017-10-29

Nutch搜索引擎·Nutch简单应用(第3期)

Nutch搜索引擎·Nutch简单应用(第3期) 1.1 Nutch 命令详解 1.2 Nutch 简单应用

2017-10-29

Nutch搜索引擎·Solr简介及安装(第2期)

1.1 Solr 简介 1.1.1 Solr 的特性 1.1.2 Solr 的目录结构 1.1.3 Solr 与Lucene 关系 1.2 Solr 安装 1.2.1 环境介绍 1.2.2 安装Solr 1.2.3 结合Nutch

2017-10-29

Nutch搜索引擎·Nutch简介及安装(第1期)

1.1 Nutch 简介 1.1.1 Nutch 的目标 1.1.2 Nutch 的优点 1.1.3 Nutch 与Lucene 关系 1.2 Nutch 安装 1.2.1 环境介绍 1.2.2 安装JDK 1.2.3 安装Tomcat 1.2.4 安装Nutch

2017-10-29

菜鸟取经(1-4期)

菜鸟取经·程序员面试(第1期) 菜鸟取经·程序员心声(第2期) 菜鸟取经·程序员管理(第3期) 菜鸟取经·程序员薪金(第4期)

2017-10-29

菜鸟取经·程序员管理(第3期)

1、本期内容 1.1 关于项目管理的一点体会 1.2 项目管理杂谈-我所期望的新人 1.3 项目管理杂谈-员工的积极性在哪里? 1.4 项目管理有感之一 沟通 1.5 关于项目管理的一点杂感 1.6 网站项目管理 1.7 项目管理者的尴尬 1.8 随便谈谈项目管理 1.9 项目管理中,最难管的是什么? 1.10 对项目管理的几点认识 1.11 2010 年下年终总结--项目管理篇 1.12 项目管理杂谈-走还是留,是个问题! 1.13 项目管理一些体会 1.14 项目管理经验教训总结 1.15 我的项目管理观点

2017-10-29

菜鸟取经·程序员心声(第2期)

1、本期内容 1.1 态度决定方向,毅力成就行动 1.2 IT 草根的江湖路 1.3 人生感悟与心得 1.4 程序人生 1.5 也谈成功 1.6 一些个人感悟 1.7 最近的一些想法与大家分享 1.8 感悟、资产和幸福感 1.9 也谈人生 1.10 大道至简,职场上做人做事做管理 1.11 我的工作经历 1.12 老鸟对菜鸟的一些建议 1.13 程序员心底的小声音 1.14 职场人生 1.15 我们不仅是程序员 1.16 我应该遵守的简单条例 1.17 思想

2017-10-29

菜鸟取经·程序员面试(第1期)

1、本期内容 1.1 如何准备面试 1.2 “工作经验”栏里你填了些什么? 1.3 九步走帮你打造成功求职简历 1.4 专家点评简历三大误区 1.5 一流简历要避免的8 大错误 1.6 求职信不可犯的九大戒 1.7 找工作的20 条吐血经验 1.8 IT 面试:激情的重要性 1.9 用人单位常用的面试方式及面试问题 1.10 谈谈.Net 技术面试 1.11 谈谈技术面试 1.12 程序员面试时要注意细节 1.13 编程技术面试的五大要点 1.14 让面试失败的十个坏习惯 1.15 面试中要避免的肢体语言 1.16 面试后须做的五件事 1.17 5 种求职者面试难成功 1.18 7 大迹象预示面试成功 1.19 HR 对应届生的简历建议,请慎用英语! 1.20 HR 简历照片的重视程度只有5% 1.21 HR 经理的四种常用面试技法 1.22 被HR 快速否决的9 种求职者 1.23 人事经理30 秒看一份简历 1.24 大战微软面试 1.25 微软全球技术中心面试 1.26 一次谷歌面试趣事 1.27 Google 的面试经历 1.28 IBM 面试记 1.29 Infosys 面试经历 1.30 搜狐,百度和豆瓣的面试感受 1.31 百度面试归来,经验值又+1 了 1.32 淘宝面试记 1.33 淘宝面试失败总结 1.34 腾讯实习生笔试面试总结 1.35 曝光腾讯面试全记录 1.36 华为面试归来的感想 1.37 迅雷面试记 1.38 用友面试经历 1.39 TCL 面试经验分享 1.40 中移动总部面试经历 1.41 雀巢SMC 面试攻略 1.42 我在雀巢公司的面试 1.43 三赴上海易传媒—揭秘之旅 1.44 我在日企面试中落荒而逃 1.45 北京艾德思奇科技有限公司面试实录 1.46 30 岁面霸IT 男30 次面试失败经历 1.47 IT 外企那点儿事 1.48 《失业七个月,面试六十家公司》体会 1.49 面试笔试总结 1.50 今天面试开发人员,谈谈面试的体会 1.51 如何在面试中发现优秀程序员

2017-10-29

细细品味架构(6-10期)

细细品味架构·大众点评实时监控系统CAT(第6期) 细细品味架构·酷狗音乐的大数据实践(第7期) 细细品味架构·360的分布式配置管理服务QConf(第8期) 细细品味架构·分布式Redis解决方案Codis(第9期) 细细品味架构·Hadoop 2015技术发展与2016发展趋势(第10期)

2017-10-29

细细品味架构·Hadoop 2015技术发展与2016发展趋势(第10期)

1、本期内容 1.1 版权申明 1.2 内容之一 1.2.1 HDFS 1.2.2 YARN 1.2.3 2016 年发展趋势 1.2.4 现场答疑(Q&A) 1.3 内容之二 1.3.1 新API 接口 1.3.2 多个 Region 副本 1.3.3 Family 粒度的 Flush 1.3.4 RPC 读写队列分离 1.3.5 在线调整配置 1.3.6 社区的工作方向和趋势 1.3.7 现场答疑(Q & A) 2、知识扩展 2.1 Hadoop 十年解读与发展预测 2.1.1 年史篇 2.1.2 技术篇 2.1.3 产业篇 2.1.4 应用篇 2.1.5 展望篇 2.1.6 编者篇 2.2 Docker on YARN 在Hulu 的实现 2.2.1 设计动机 2.2.2 架构设计 2.2.3 编程模型 2.2.4 容错设计 2.2.5 应用实战 2.2.6 同类比较 2.2.7 展望未来

2017-10-29

Flink V1.6.1高可用配置指南

Flink V1.6.1高可用配置指南,包括Flink Standalone 集群HA配置和Flink on yarn 集群HA配置。

2019-02-24

Go语言圣经(2018-07-28中文高清版)

更新时间:2018-07-02 17:08:03 构建时间:2018-07-28 23:14:36

2019-01-29

Go 1.11.4安装文件

从官网下载的最新版本的安装文件,包括了Windows、Mac、Linux版本,内含三个文件:go1.11.4.darwin-amd64.pkg、go1.11.4.linux-amd64.tar.gz、go1.11.4.windows-amd64.msi

2019-01-17

goland Mac版安装文件

官网下载的最新goland-2018.3.2版本的Mac版安装文件。

2019-01-17

传统架构迁移到微服务架构方案

本文档描述了从传统架构迁移到微服务架构的实际生产级方案。

2018-12-24

Introduction to Apache Flink

Chapter 1 Why Apache Flink?   Consequences of Not Doing Streaming Well   Goals for Processing Continuous Event Data   Evolution of Stream Processing Technologies   First Look at Apache Flink   Flink in Production   Where Flink Fits Chapter 2 Stream-First Architecture   Traditional Architecture versus Streaming Architecture   Message Transport and Message Processing   The Transport Layer: Ideal Capabilities   Streaming Data for a Microservices Architecture   Beyond Real-Time Applications   Geo-Distributed Replication of Streams Chapter 3 What Flink Does   Different Types of Correctness   Hierarchical Use Cases: Adopting Flink in Stages Chapter 4 Handling Time   Counting with Batch and Lambda Architectures   Counting with Streaming Architecture   Notions of Time   Windows   Time Travel   Watermarks   A Real-World Example: Kappa Architecture at Ericsson Chapter 5 Stateful Computation   Notions of Consistency   Flink Checkpoints: Guaranteeing Exactly Once   Savepoints: Versioning State   End-to-End Consistency and the Stream Processor as a Database   Flink Performance: the Yahoo! Streaming Benchmark   Conclusion Chapter 6 Batch Is a Special Case of Streaming   Batch Processing Technology   Case Study: Flink as a Batch Processor Appendix Additional Resources   Going Further with Apache Flink   Selected O’Reilly Publications by Ted Dunning and Ellen Friedman

2018-12-02

Apache Flink实践

案例篇 阿里巴巴为什么选择 Apache Flink? .................................................................. 1 Apache Flink 在滴滴出行的应用与实践............................................................11 字节跳动 Jstorm 到 Apache Flink 的迁移实践...............................................20 Apache Flink 在美团的实践与应用 ....................................................................32 Apache Flink 在唯品会的实践.............................................................................47 携程基于 Apache Flink 的实时特征平台...........................................................57 技术篇 一文了解 Apache Flink 核心技术 .......................................................................66 流计算框架 Flink 与 Storm 的性能对比.............................................................73 Spark VS Flink – 下一代大数据计算引擎之争,谁主沉浮? ......................95 5分钟从零构建第一个ApacheFlink应用.................................................. 109 Apache Flink 零基础实战教程:如何计算实时热门商品.......................... 114 Apache Flink SQL 概览 ..................................................................................... 124 Apache Flink 类型和序列化机制简介 ............................................................. 140 深度剖析阿里巴巴对 Apache Flink 的优化与改进 ....................................... 151

2018-11-30

Oracle Application Express: Build Powerful Data-Centric Web Apps with APEX

Develop Robust Modern Web Applications with Oracle Application Express. Covers APEX 5.1. Easily create data-reliant web applications that are reliable, scalable, dynamic, responsive, and secure using the detailed information contained in this Oracle Press guide. Oracle Application Express (APEX): Build Powerful Data-Centric Web Apps with APEX features step-by-step application development techniques, real-world coding examples, and best practices. You will find out how to work with the App Builder and Page Designer, use APEX themes (responsive and mobile included), templates and wizards, and design and deploy custom web apps. New and updated features in APEX 5.0/5.1 are thoroughly covered and explained. • Understand APEX concepts and programming fundamentals • Plan and control the development cycle, using HLD techniques • Use APEX themes and templates, including Universal Theme • Use APEX wizards to rapidly build forms and reports on database tables • Build modern, dynamic, and interactive user interface using the Page Designer • Increase user experience using Dynamic Actions (Ajax included) • Build and utilize the new APEX 5.1 Interactive Grid • Implement App Logic with APEX computations, validations, and processes • Use (automatic) built-in and manual DML to manipulate your data • Handle security at browser, application, and database levels • Successfully deploy the developed APEX apps

2018-10-22

Scala程序设计(第2版)

第1章 零到六十:Scala简介  1 1.1 为什么选择Scala  1 1.1.1 富有魅力的Scala  2 1.1.2 关于Java 8  3 1.2 安装Scala  3 1.2.1 使用SBT  5 1.2.2 执行Scala命令行工具  6 1.2.3 在IDE中运行Scala REPL  8 1.3 使用Scala  8 1.4 并发  17 1.5 本章回顾与下一章提要  27 第2章 更简洁,更强大  28 2.1 分号  28 2.2 变量声明  29 2.3 Range  31 2.4 偏函数  32 2.5 方法声明  33 2.5.1 方法默认值和命名参数列表  33 2.5.2 方法具有多个参数列表  34 2.5.3 Future简介  35 2.5.4 嵌套方法的定义与递归  38 2.6 推断类型信息  40 2.7 保留字  44 2.8 字面量  46 2.8.1 整数字面量  46 2.8.2 浮点数字面量  47 2.8.3 布尔型字面量  48 2.8.4 字符字面量  48 2.8.5 字符串字面量  48 2.8.6 符号字面量  50 2.8.7 函数字面量  50 2.8.8 元组字面量  50 2.9 Option、Some 和None:避免使用null  52 2.10 封闭类的继承  53 2.11 用文件和名空间组织代码  54 2.12 导入类型及其成员  55 2.12.1 导入是相对的  56 2.12.2 包对象  57 2.13 抽象类型与参数化类型  57 2.14 本章回顾与下一章提要  59 第3章 要点详解  60 3.1 操作符重载?  60 3.2 无参数方法  63 3.3 优先级规则  64 3.4 领域特定语言  65 3.5 Scala中的if语句  66 3.6 Scala中的for推导式  67 3.6.1 for循环  67 3.6.2 生成器表达式  67 3.6.3 保护式:筛选元素  67 3.6.4 Yielding  68 3.6.5 扩展作用域与值定义  69 3.7 其他循环结构  70 3.7.1 Scala的while循环  71 3.7.2 Scala中的do-while循环  71 3.8 条件操作符  71 3.9 使用try、catch和final子句  72 3.10 名字调用和值调用  75 3.11 惰性赋值  78 3.12 枚举  79 3.13 可插入字符串  81 3.14 Trait:Scala语言的接口和“混入”  83 3.15 本章回顾与下一章提要  85 第4章 模式匹配  86 4.1 简单匹配  86 4.2 match中的值、变量和类型  87 4.3 序列的匹配  90 4.4 元组的匹配  94 4.5 case中的guard语句  94 4.6 case类的匹配  95 4.6.1 unapply方法  96 4.6.2 unapplySeq方法  100 4.7 可变参数列表的匹配  101 4.8 正则表达式的匹配  103 4.9 再谈case语句的变量绑定  104 4.10 再谈类型匹配  104 4.11 封闭继承层级与全覆盖匹配  105 4.12 模式匹配的其他用法  107 4.13 总结关于模式匹配的评价  111 4.14 本章回顾与下一章提要  111 第5章 隐式详解  112 5.1 隐式参数  112 5.2 隐式参数适用的场景  115 5.2.1 执行上下文  115 5.2.2 功能控制  115 5.2.3 限定可用实例  116 5.2.4 隐式证据  120 5.2.5 绕开类型擦除带来的限制  122 5.2.6 改善报错信息  124 5.2.7 虚类型  124 5.2.8 隐式参数遵循的规则  127 5.3 隐式转换  128 5.3.1 构建独有的字符串插入器  132 5.3.2 表达式问题  134 5.4 类型类模式  135 5.5 隐式所导致的技术问题  137 5.6 隐式解析规则  139 5.7 Scala内置的各种隐式  139 5.8 合理使用隐式  146 5.9 本章回顾与下一章提要  146 第6章 Scala函数式编程  147 6.1 什么是函数式编程  148 6.1.1 数学中的函数  148 6.1.2 不可变变量  149 6.2 Scala中的函数式编程  151 6.2.1 匿名函数、Lambda与闭包  152 6.2.2 内部与外部的纯粹性  154 6.3 递归  154 6.4 尾部调用和尾部调用优化  155 6.5 偏应用函数与偏函数  157 6.6 Curry化与函数的其他转换  158 6.7 函数式编程的数据结构  162 6.7.1 序列  162 6.7.2 映射表  166 6.7.3 集合  168 6.8 遍历、映射、过滤、折叠与归约  168 6.8.1 遍历  169 6.8.2 映射  170 6.8.3 扁平映射  172 6.8.4 过滤  173 6.8.5 折叠与归约  174 6.9 向左遍历与向右遍历  178 6.10 组合器:软件最佳组件抽象  183 6.11 关于复制  186 6.12 本章回顾与下一章提要  188 第7章 深入学习for推导式  189 7.1 内容回顾:for推导式组成元素  189 7.2 for推导式:内部机制  192 7.3 for推导式的转化规则  194 7.4 Option以及其他的一些容器类型  197 7.4.1 Option容器  197 7.4.2 Either:Option类型的逻辑扩展  200 7.4.3 Try类型  205 7.4.4 Scalaz提供的Validation类  206 7.5 本章回顾与下一章提要  209 第8章 Scala面向对象编程  210 8.1 类与对象初步  211 8.2 引用与值类型  213 8.3 价值类  214 8.4 父类  217 8.5 Scala的构造器  217 8.6 类的字段  221 8.6.1 统一访问原则  223 8.6.2 一元方法  224 8.7 验证输入  224 8.8 调用父类构造器(与良好的面向对象设计)  226 8.9 嵌套类型  230 8.10 本章回顾与下一章提要  232 第9章 特征   233 9.1 Java 8中的接口  233 9.2 混入trait  234 9.3 可堆叠的特征  238 9.4 构造trait  243 9.5 选择类还是trait  244 9.6 本章回顾与下一章提要  245 第10章 Scala对象系统(I)  246 10.1 参数化类型:继承转化  246 10.1.1 Hood下的函数  247 10.1.2 可变类型的变异  250 10.1.3 Scala和Java中的变异  252 10.2 Scala的类型层次结构  253 10.3 闲话Nothing(以及Null)  254 10.4 Product、case类和元组  258 10.5 Predef对象  260 10.5.1 隐式转换  260 10.5.2 类型定义  262 10.5.3 条件检查方法  263 10.5.4 输入输出方法  263 10.5.5 杂项方法  265 10.6 对象的相等  265 10.6.1 equals方法  266 10.6.2 == 和!=方法  266 10.6.3 eq 和ne方法  267 10.6.4 数组相等和sameElements方法  267 10.7 本章回顾与下一章提要  268 第11章 Scala对象系统(II)  269 11.1 覆写类成员和trait成员  269 11.2 尝试覆写final声明  272 11.3 覆写抽象方法和具体方法  272 11.4 覆写抽象字段和具体字段  274 11.5 覆写抽象类型  280 11.6 无须区分访问方法和字段:统一访问原则  280 11.7 对象层次结构的线性化算法  282 11.8 本章回顾与下一章提要  287 第12章 Scala集合库  288 12.1 通用、可变、不可变、并发以及并行集合  288 12.1.1 scala.collection包  289 12.1.2 collection.concurrent包  290 12.1.3 collection.convert包  291 12.1.4 collection.generic包  291 12.1.5 collection.immutable包  291 12.1.6 scala.collection.mutable包  292 12.1.7 scala.collection.parallel包  294 12.2 选择集合  295 12.3 集合库的设计惯例  296 12.3.1 Builder  296 12.3.2 CanBuildFrom  297 12.3.3 Like特征  298 12.4 值类型的特化  298 12.5 本章回顾与下一章提要  300 第13章 可见性规则  301 13.1 默认可见性:公有可见性  301 13.2 可见性关键字  302 13.3 Public可见性  303 13.4 Protected可见性  304 13.5 Private可见性  305 13.6 作用域内私有和作用域内受保护可见性  306 13.7 对可见性的想法  312 13.8 本章回顾与下一章提要  313 第14章 Scala类型系统(I)  314 14.1 参数化类型  315 14.1.1 变异标记  315 14.1.2 类型构造器  315 14.1.3 类型参数的名称  315 14.2 类型边界  315 14.2.1 类型边界上限  316 14.2.2 类型边界下限  316 14.3 上下文边界  320 14.4 视图边界  320 14.5 理解抽象类型  322 14.6 自类型标记  325 14.7 结构化类型  329 14.8 复合类型  332 14.9 存在类型  334 14.10 本章回顾与下一章提要  335 第15章 Scala类型系统(II)  336 15.1 路径相关类型  336 15.1.1 C.this  337 15.1.2 C.super  337 15.1.3 path.x  338 15.2 依赖方法类型  339 15.3 类型投影  340 15.4 值的类型  343 15.4.1 元组类型  343 15.4.2 函数类型  343 15.4.3 中缀类型  343 15.5 Higher-Kinded类型  344 15.6 类型Lambda  348 15.7 自递归类型:F-Bounded多态  350 15.8 本章回顾与下一章提要  351 第16章 高级函数式编程  352 16.1 代数数据类型  352 16.1.1 加法类型与乘法类型  352 16.1.2 代数数据类型的属性  354 16.1.3 代数数据类型的最后思考  355 16.2 范畴理论  355 16.2.1 关于范畴  356 16.2.2 Functor范畴  356 16.2.3 Monad范畴  360 16.2.4 Monad的重要性  362 16.3 本章回顾与下一章提要  363 第17章 并发工具  365 17.1 scala.sys.process包  365 17.2 Future类型  367 17.3 利用Actor模型构造稳固且可扩展的并发应用  371 17.4 Akka:为Scala设计的Actor系统  372 17.5 Pickling和Spores  383 17.6 反应式编程  384 17.7 本章回顾与下一章提要  385 第18章 Scala与大数据  386 18.1 大数据简史  386 18.2 用Scala改善MapReduce  387 18.3 超越MapReduce  392 18.4 数学范畴  393 18.5 Scala数据工具列表  394 18.6 本章回顾与下一章提要  394 第19章 Scala动态调用  396 19.1 一个较为激进的示例:Ruby on Rails框架中的ActiveRecord库  396 19.2 使用动态特征实现Scala 中的动态调用  397 19.3 关于DSL的一些思考  402 19.4 本章回顾与下一章提要  402 第20章 Scala的领域特定语言  403 20.1 DSL 示例:Scala中XML和JSON DSL  404 20.2 内部DSL  406 20.3 包含解析组合子的外部DSL  410 20.3.1 关于解析组合子  410 20.3.2 计算工资单的外部DSL  410 20.4 内部DSL与外部DSL:最后的思考  413 20.5 本章回顾与下一章提要  413 第21章 Scala工具和库  414 21.1 命令行工具  414 21.1.1 命令行工具:scalac  414 21.1.2 Scala命令行工具  418 21.1.3 scalap和javap命令行工具  421 21.1.4 scaladoc 命令行工具  422 21.1.5 fsc命令行工具  422 21.2 构建工具  422 21.2.1 SBT:Scala标准构建工具  423 21.2.2 其他构建工具  425 21.3 与IDE或文本编辑器集成  425 21.4 在Scala中应用测试驱动开发  426 21.5 第三方库  427 21.6 本章回顾与下一章提要  429 第22章 与Java的互操作  430 22.1 在Scala代码中使用Java名称  430 22.2 Java泛型与Scala泛型  430 22.3 JavaBean的性质  432 22.4 AnyVal类型与Java原生类型  433 22.5 Java代码中的Scala名称  433 22.6 本章回顾与下一章提要  434 第23章 应用程序设计  435 23.1 回顾之前的内容  435 23.2 注解  437 23.3 Trait即模块  441 23.4 设计模式  442 23.4.1 构造型模式  443 23.4.2 结构型模式  443 23.4.3 行为型模式  444 23.5 契约式设计带来更好的设计  446 23.6 帕特农神庙架构  448 23.7 本章回顾与下一章提要  453 第24章 元编程:宏与反射  454 24.1 用于理解类型的工具  455 24.2 运行时反射  455 24.2.1 类型反射  455 24.2.2 ClassTag、TypeTag与Manifest  457 24.3 Scala 的高级运行时反射API  458 24.4 宏  461 24.4.1 宏的示例:强制不变性  463 24.4.2 关于宏的最后思考  466 24.5 本章回顾与下一章提要  466 附录A 参考文献  468 作者简介  473 关于封面  473

2018-06-02

programming in scala(第三版)

本书是programming in scala的英文第三版,高清英文原版。

2018-06-02

空空如也

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

TA关注的人

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