作者 |
居瓦·洛瑞 李智慧 |
丛书名 |
架构师书库 |
出版社 |
机械工业出版社 |
ISBN |
9782108101770 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8082990 - 架构之道:软件构建的设计方法--------------------------- 本课程通过自顶向下的程序设计演示和解释,教授学生如何在机器层面上编写和调试程序,并将有效的设计技巧应用于多种程序设计课程。这种方法简化并消除了学生在学习更高级的计算机体系结构和操作系统课程之前需要掌握的概念。 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 本书共38章,分四个部分。 第 一部分是架构师的基础知识修炼。软件的基础知识原理主要是操作系统、数据结构、数据库原理等,书中会从常见的问题入手,直达这些基础技术本质的原理,并覆盖这些基础技术的关键技术点,帮助读者理解这些基础技术原理和日常开发工作的关联关系,对这些基础技术有一个全新的认知。 第二部分是架构师的程序设计修炼。讲述如何设计一个强大灵活、易复用、易维护的软件,在这个过程中,应该依赖哪些工具和方法,遵循哪些原则和思想,使用哪些模式和手段。 第三部分是架构师的架构方法修炼。围绕目前主要的互联网分布式架构以及大数据、物联网架构分析这些架构背后的原理,详解它们都遵循了怎样的驱动力和设计思想,以及如何通过这些技术实现系统的高可用和高性能。 第四部分是架构师的思维修炼。软件开发是一个实践性很强的活动,如果只是学习技术,那就是在纸上谈兵。只有将知识技能应用到工作实践中,才能真正体会到技术的关键点在哪里。如何在工作中处理好各种关系,得到充分的授权和信任,在工作中实践自己的技术思想,并为公司创造更多的价值,使自己的技术成长和职业发展进入互相促进的正向通道,也是架构师需要修炼与提升的。 |
目录 |
[套装书具体书目] 8079921 - 架构师的自我修炼:技术、架构和未来 - 9787111679363 - 机械工业出版社 - 定价 89 8082990 - 架构之道:软件构建的设计方法 - 9787111687702 - 机械工业出版社 - 定价 199 ---------------------------8082990 - 架构之道:软件构建的设计方法--------------------------- 赞誉 译者序 前言 作者介绍 第1章 元设计方法 / 1 1.1 什么是元设计方法 / 2 1.1.1 设计验证 / 3 1.1.2 紧迫的时间 / 3 1.1.3 消除分析瘫痪 / 4 1.1.4 沟通 / 5 1.2 元设计方法不是什么 / 6 |第一部分| 系统设计 第2章 分解 / 8 2.1 避免功能分解 / 9 2.1.1 功能分解带来的问题 / 9 2.1.2 关于功能分解的思考 / 13 2.1.3 避免领域分解 / 15 2.1.4 错误的动机 / 17 2.1.5 可测试性和设计 / 17 2.1.6 示例:功能型交易系统 / 19 2.2 基于易变性的分解 / 21 2.2.1 分解、维护和开发 / 22 2.2.2 普遍性原则 / 23 2.2.3 基于易变性的分解与测试 / 24 2.2.4 易变性的挑战 / 24 2.3 识别易变性 / 26 2.3.1 易变性与可变性 / 26 2.3.2 易变轴 / 27 2.3.3 伪装成需求的解决方案 / 29 2.3.4 易变列表 / 30 2.3.5 示例:基于易变性的交易系统 / 30 2.3.6 抵制“塞壬之歌” / 34 2.3.7 易变性与业务 / 35 2.3.8 为竞争对手设计 / 37 2.3.9 易变性和寿命 / 38 2.3.10 实践的重要性 / 38 第3章 结构 / 40 3.1 用例和需求 / 41 3.2 分层方法 / 43 3.3 典型分层 / 44 3.3.1 客户端层 / 44 3.3.2 业务逻辑层 / 45 3.3.3 资源访问层 / 46 3.3.4 资源层 / 47 3.3.5 实用工具库栏 / 48 3.4 分类指南 / 48 3.4.1 命名的玄机 / 48 3.4.2 四个问题 / 49 3.4.3 管理器与引擎比 / 50 3.4.4 关键观察 / 51 3.5 子系统和服务 / 52 3.5.1 增量构造 / 52 3.5.2 关于微服务 / 54 3.6 开放和封闭式架构 / 56 3.6.1 开放式架构 / 56 3.6.2 封闭式架构 / 56 3.6.3 半封闭/半开放架构 / 57 3.6.4 放宽规则 / 57 3.6.5 设计禁忌 / 59 3.6.6 力求对称 / 61 第4章 组合 / 62 4.1 需求与变更 / 62 4.1.1 憎恨变更 / 63 4.1.2 设计基本准则 / 63 4.2 可组合设计 / 64 4.2.1 核心用例 / 64 4.2.2 架构师的使命 / 65 4.3 这里没有功能 / 68 4.4 处理变更 / 69 第5章 系统设计示例 / 71 5.1 系统概述 / 72 5.1.1 遗留系统 / 73 5.1.2 新系统 / 74 5.1.3 公司 / 74 5.1.4 用例 / 74 5.2 反设计工作 / 80 5.2.1 巨型系统 / 80 5.2.2 颗粒化构建块 / 80 5.2.3 域分解 / 81 5.3 业务对齐 / 82 5.3.1 愿景 / 82 5.3.2 业务目标 / 83 5.3.3 使命陈述 / 84 5.4 架构 / 84 5.4.1 TradeMe词汇表 / 84 5.4.2 TradeMe易变区域 / 85 5.4.3 静态架构 / 88 5.4.4 操作概念 / 90 5.4.5 工作流管理器 / 92 5.5 设计验证 / 93 5.5.1 添加技工/承包商用例 / 94 5.5.2 请求技工用例 / 95 5.5.3 匹配技工用例 / 96 5.5.4 分配技工用例 / 98 5.5.5 终止技工用例 / 100 5.5.6 支付技工用例 / 101 5.5.7 创建项目用例 / 101 5.5.8 结束项目用例 / 102 5.6 接下来会是什么 / 103 |第二部分| 项目设计 第6章 动机 / 106 6.1 项目设计的背景和基本动机 / 106 6.1.1 项目设计和项目稳健 / 107 6.1.2 组装说明 / 108 6.2 软件项目的需求层级 / 108 第7章 项目设计综述 / 111 7.1 定义成功 / 111 7.2 项目初始人员配备 / 113 7.2.1 一个架构师,非一群架构师 / 113 7.2.2 核心团队 / 114 7.3 明智的决定 / 116 7.3.1 计划,不计划 / 116 7.3.2 软件开发计划评审 / 117 7.4 服务和开发人员 / 117 7.4.1 设计和团队效率 / 119 7.4.2 任务连续性 / 120 7.5 工作量的估算 / 120 7.5.1 经典错误 / 121 7.5.2 估算技术 / 123 7.5.3 总体项目估算 / 124 7.5.4 活动估算 / 126 7.6 关键路径分析 / 127 7.6.1 项目网络图 / 127 7.6.2 关键路径 / 130 7.6.3 分配资源 / 131 7.7 安排活动 / 134 7.8 项目费用 / 140 7.9 挣值计划 / 143 7.9.1 经典错误 / 144 7.9.2 浅S曲线 / 145 7.10 角色和责任 / 148 第8章 网络和浮动时间 / 149 8.1 网络图 / 149 8.1.1 节点图 / 150 8.1.2 箭头图 / 150 8.1.3 箭头图与节点图 / 151 8.2 浮动时间 / 152 8.2.1 总浮动时间 / 153 8.2.2 自由浮动时间 / 153 8.2.3 计算浮动时间 / 154 8.2.4 可视化浮动时间 / 155 8.3 基于浮动时间的进度安排 / 157 第9章 时间和成本 / 159 9.1 加速软件项目 / 159 9.2 进度压缩 / 162 9.2.1 利用更好的资源 / 162 9.2.2 并行工作 / 162 9.2.3 并行工作和成本 / 164 9.3 时间-成本曲线 / 164 9.3.1 时间-成本曲线上的要点 / 165 9.3.2 离散建模 / 167 9.3.3 避免经典错误 / 168 9.3.4 项目可行性 / 168 9.3.5 找到常规方案 / 169 9.4 项目成本要素 / 171 9.4.1 直接成本 / 171 9.4.2 间接成本 / 172 9.4.3 会计与价值 / 172 9.4.4 总成本、直接成本和间接成本 / 172 9.4.5 压缩和成本要素 / 173 9.4.6 人员配备和成本要素 / 176 9.4.7 固定成本 / 178 9.5 网络压缩 / 178 第10章 风险 / 181 10.1 选择选项 / 181 10.2 时间-风险曲线 / 182 10.3 风险建模 / 184 10.3.1 标准化风险 / 185 10.3.2 风险和浮动 / 185 10.3.3 风险和直接成本 / 186 10.3.4 临界风险 / 186 10.3.5 斐波那契风险 / 188 10.3.6 活动风险 / 189 10.3.7 临界风险与活动风险 / 191 10.4 压缩和风险 / 191 10.5 风险缓解 / 192 10.5.1 如何缓解 / 192 10.5.2 缓解目标 / 193 10.6 风险指标 / 194 第11章 实践中的项目设计 / 196 11.1 使命 / 196 11.1.1 静态架构 / 197 11.1.2 调用链 / 197 11.1.3 活动清单 / 199 11.1.4 网络图 / 200 11.1.5 计划假设 / 201 11.2 寻找常规的解决方案 / 203 11.2.1 无限的资源(迭代1) / 203 11.2.2 网络和资源问题 / 204 11.2.3 基础设施优先(迭代2) / 204 11.2.4 有限的资源 / 205 11.2.5 亚临界化(迭代7) / 208 11.2.6 选择常规的解决方案 / 211 11.3 网络压缩 / 211 11.3.1 使用更好的资源进行压缩 / 211 11.3.2 引入并行工作 / 213 11.3.3 压缩迭代结束 / 219 11.3.4 产出分析 / 219 11.4 效率分析 / 221 11.5 时间-成本曲线 / 221 11.5.1 时间-成本相关模型 / 222 11.5.2 死亡区域 / 224 11.6 规划与风险 / 225 11.6.1 风险缓解 / 226 11.6.2 重建时间-成本曲线 / 228 11.6.3 风险模型化 / 230 11.6.4 风险包含与排除 / 232 11.7 SDP评审 / 232 第12章 高级技巧 / 234 12.1 上帝活动 / 234 12.2 风险交叉点 / 235 12.3 找到缓解目标 / 238 12.4 几何风险 / 240 12.4.1 几何临界风险 / 241 12.4.2 几何斐波那契风险 / 241 12.4.3 几何活动风险 / 242 12.4.4 几何风险行为 / 243 12.5 执行复杂度 / 244 12.5.1 圈复杂度 / 244 12.5.2 项目类型与复杂度 / 245 12.5.3 项目压缩与复杂度 / 246 12.6 超大型项目 / 247 12.6.1 复杂系统与脆弱性 / 248 12.6.2 网络群 / 250 12.6.3 设计网络群 / 250 12.7 小项目 / 253 12.8 基于层次设计 / 253 12.8.1 基于层次设计的利弊 / 254 12.8.2 层次与构造 / 255 第13章 项目设计示例 / 256 13.1 估算 / 257 13.1.1 单个活动估算 / 257 13.1.2 总体项目估算 / 258 13.2 依赖关系和项目网络 / 259 13.2.1 行为依赖 / 259 13.2.2 非行为依赖 / 259 13.2.3 覆盖某些依赖 / 260 13.2.4 完整性检查 / 260 13.3 常规方案 / 261 13.3.1 网络图 / 261 13.3.2 计划进度 / 263 13.3.3 计划的人员配备分布 / 263 13.3.4 成本和效率 / 264 13.3.5 结果总结 / 264 13.4 压缩方案 / 264 13.4.1 添加启用活动 / 264 13.4.2 分配资源 / 265 13.4.3 计划进度 / 266 13.4.4 计划的人员配备分布 / 266 13.4.5 成本和效率 / 266 13.4.6 结果总结 / 267 13.5 分层设计 / 268 13.5.1 分层设计和风险 / 268 13.5.2 人员配备分布 / 269 13.5.3 结果总结 / 269 13.6 亚临界方案 / 269 13.6.1 持续时间、计划进度和风险 / 270 13.6.2 成本和效率 / 270 13.6.3 结果总结 / 270 13.7 比较选项 / 271 13.8 计划与风险 / 271 13.8.1 风险缓解 / 271 13.8.2 重新计算成本 / 274 13.9 为SDP评审做准备 / 274 第14章 总结 / 276 14.1 项目设计时间 / 276 14.1.1 真实的答案 / 277 14.1.2 迈向未来 / 278 14.2 一般性指导 / 279 14.2.1 架构与估算 / 279 14.2.2 设计立场 / 280 14.2.3 可选性 / 280 14.2.4 压缩 / 281 14.2.5 计划与风险 / 283 14.3 项目设计的设计 / 283 14.4 不同的视角 / 285 14.5 交接 / 287 14.5.1 初级交接 / 287 14.5.2 高级交接 / 287 14.5.3 资深开发人员作为初级架构师 / 288 14.6 实践 / 289 14.7 项目设计的口头汇报 / 290 14.8 关于质量 / 291 14.8.1 质量控制活动 / 291 14.8.2 质量保证活动 / 292 14.8.3 质量与文化 / 293 |附录| 附录A 项目跟踪 / 296 附录B 服务契约设计 / 310 附录C 设计标准 / 323 ---------------------------8079921 - 架构师的自我修炼:技术、架构和未来--------------------------- 前言 第一部分 架构师的基础知识修炼 第1章 操作系统原理:程序是如何运行和崩溃的 2 1.1 程序是如何运行起来的 2 1.2 一台计算机如何同时处理数以百计的任务 4 1.3 系统为什么会变慢,为什么会崩溃 5 1.4 小结 7 第2章 数据结构原理:Hash表的时间复杂度为什么是O(1) 8 2.1 数组的结构 8 2.2 链表的结构 9 2.3 Hash表的结构 10 2.4 栈的结构 12 2.5 队列的结构 13 2.6 树的结构 14 2.7 小结 14 第3章 Java虚拟机原理:JVM为什么被称为机器 16 3.1 JVM的构造 17 3.2 JVM的垃圾回收 19 3.3 Web应用程序在JVM中的执行过程 22 3.4 小结 24 第4章 网络编程原理:一个字符的互联网之旅 25 4.1 DNS域名解析原理 26 4.2 CDN 27 4.3 HTTP的结构 28 4.4 TCP的结构 29 4.5 链路层负载均衡原理 32 4.6 小结 33 第5章 文件系统原理:用1分钟遍历一个100TB的文件 34 5.1 硬盘结构原理 35 5.2 文件系统原理 36 5.3 RAID硬盘阵列原理 37 5.4 分布式文件系统架构原理 39 5.5 小结 40 第6章 数据库原理:SQL为什么要预编译 42 6.1 数据库架构与SQL执行过程 43 6.2 使用PrepareStatement执行SQL的好处 45 6.3 数据库文件存储与索引工作原理 46 6.4 小结 48 第7章 编程语言原理:面向对象编程是编程的终极形态吗 49 7.1 软件编程的远古时代 49 7.2 机器与汇编语言时代 51 7.3 高级编程语言时代 51 7.4 面向对象编程时代 52 7.5 编程语言的未来 53 7.6 小结 54 第二部分 架构师的程序设计修炼 第8章 软件设计的方法论:软件为什么要建模 56 8.1 什么是软件建模 57 8.2 4+1视图模型 58 8.3 UML建模 59 8.4 小结 60 第9章 软件设计实践:使用UML完成一个设计文档 61 9.1 用类图设计对象模型 61 9.2 用序列图描述系统调用 62 9.3 用组件图进行模块设计 63 9.4 用部署图描述系统物理架构 64 9.5 使用用例图进行需求分析 65 9.6 用状态图描述对象状态变迁 66 9.7 用活动图描述调用流程 66 9.8 使用合适的UML模型构建一个软件设计文档 67 9.9 软件架构设计文档示例模板 68 9.10 小结 74 第10章 软件设计的目的:糟糕的程序差在哪里 75 10.1 糟糕的设计有多糟糕 76 10.2 一个设计“腐坏”的例子 77 10.3 解决之道 78 10.4 小结 80 第11章 软件设计的开闭原则:不修改代码却能实现需求变更 81 11.1 什么是开闭原则 81 11.2 一个违反开闭原则的例子 82 11.3 使用策略模式实现开闭原则 84 11.4 使用适配器模式实现开闭原则 85 11.5 使用观察者模式实现开闭原则 86 11.6 使用模板方法模式实现开闭原则 88 11.7 小结 89 第12章 软件设计的依赖倒置原则:不依赖代码却可以复用它的功能 91 12.1 依赖倒置原则 91 12.2 依赖倒置的关键是接口所有权的倒置 93 12.3 使用依赖倒置来实现高层模块复用 94 12.4 小结 96 第13章 软件设计的里氏替换原则:正方形可以继承长方形吗 97 13.1 里氏替换原则 98 13.2 一个违反里氏替换原则的例子 99 13.3 正方形可以继承长方形吗 100 13.4 子类不能比父类更严格 101 13.5 小结 102 第14章 软件设计的单一职责原则:一个类文件打开后最好不要超过一屏 104 14.1 单一职责原则 107 14.2 一个违反单一职责原则的例子 107 14.3 从Web应用架构演进看单一职责原则 108 14.4 小结 110 第15章 软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法 112 15.1 接口隔离原则 113 15.2 一个使用接口隔离原则优化的例子 114 15.3 接口隔离原则在迭代器设计模式中的应用 117 15.4 小结 117 第16章 设计模式基础:不会灵活应用设计模式,就没有掌握面向对象编程 119 16.1 面向对象编程的本质是多态 119 16.2 设计模式的精髓是对多态的使用 121 16.3 小结 123 第17章 设计模式应用:编程框架中的设计模式 125 17.1 什么是框架 125 17.2 Web容器中的设计模式 127 17.3 JUnit中的设计模式 129 17.4 小结 132 第18章 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应 133 18.1 反应式编程 135 18.2 反应式编程框架Flower的基本原理 135 18.3 反应式编程框架Flower的设计方法 138 18.4 反应式编程框架Flower的落地效果 140 18.5 小结 141 第19章 组件设计原则:组件的边界在哪里 143 19.1 组件内聚原则 144 19.2 组件耦合原则 145 19.3 小结 147 第20章 领域驱动设计:35岁的程序员应该写什么样的代码 148 20.1 领域模型模式 149 20.2 领域驱动设计 151 20.3 小结 154 第三部分 架构师的架构方法修炼 第21章 分布式架构:如何应对高并发的用户请求 156 21.1 垂直伸缩与水平伸缩 157 21.2 互联网分布式架构演化 157 21.3 小结 163 第22章 缓存架构:减少不必要的计算 165 22.1 通读缓存 166 22.2 旁路缓存 168 22.3 缓存注意事项 171 22.4 小结 173 第23章 异步架构:避免互相依赖的系统间耦合 174 23.1 使用消息队列实现异步架构 175 23.2 消息队列异步架构的好处 178 23.3 小结 180 第24章 负载均衡架构:用10行代码实现一个负载均衡服务 181 24.1 HTTP重定向负载均衡 181 24.2 DNS负载均衡 183 24.3 反向代理负载均衡 184 24.4 IP负载均衡 184 24.5 数据链路层负载均衡 186 24.6 小结 187 第25章 数据存储架构:改善系统的数据存储能力 188 25.1 数据库主从复制 188 25.2 数据库分片 190 25.3 关系数据库的混合部署 193 25.4 NoSQL数据库 196 25.5 小结 197 第26章 搜索引擎架构:瞬间完成海量数据检索 199 26.1 搜索引擎倒排索引 199 26.2 搜索引擎结果排序 202 26.3 小结 205 第27章 微服务架构:微服务究竟是“灵丹”还是“毒药” 206 27.1 单体架构的困难和挑战 206 27.2 微服务框架原理 208 27.3 微服务架构的落地实践 210 27.4 小结 211 第28章 高性能架构:除了代码,还可以在哪些地方优化性能 212 28.1 性能指标 212 28.2 性能测试 213 28.3 性能优化 215 28.4 小结 219 第29章 高可用架构:淘宝应用升级时,为什么没有停机 220 29.1 高可用的度量 221 29.2 高可用的架构 222 29.3 小结 225 第30章 安全性架构:为什么说用户密码泄露是程序员的问题 227 30.1 数据加密与解密 227 30.2 HTTP攻击与防护 230 30.3 小结 233 第31章 大数据架构:思想和原理 234 31.1 HDFS分布式文件存储架构 235 31.2 MapReduce大数据计算架构 236 31.3 Hive大数据仓库架构 238 31.4 Spark快速大数据计算架构 240 31.5 大数据流计算架构 242 31.6 小结 242 第32章 AI与物联网架构:从智能引擎到物联网平台 243 32.1 大数据平台架构 244 32.2 智能推荐算法 245 32.3 物联网大数据架构 249 32.4 小结 250 第33章 区块链技术架构:区块链到底能做什么 251 33.1 比特币与区块链原理 251 33.2 联盟链与区块链的企业级应用 255 33.3 小结 257 第四部分 架构师的思维修炼 第34章 技术修炼之道:同样工作十几年,为什么有的人成为资深架构师,有的人失业 260 34.1 德雷福斯模型 261 34.2 如何在工作中成长 263 34.3 小结 264 第35章 技术进阶之道:你和世界上顶级的程序员差几个等级 265 35.1 软件技术的生态江湖与等级体系 265 35.2 技术进阶之捷径 267 35.3 小结 269 第36章 技术落地之道:你真的知道自己要解决的问题是什么吗 270 36.1 确定会议真正要解决的问题是什么 271 36.2 不需要去解决别人的问题,提醒他问题的存在即可 272 36.3 去解决那些被人们习以为常而忽略了的问题 273 36.4 小结 273 第37章 技术沟通之道:如何解决问题 275 37.1 让有能力解决问题的人感受到问题的存在 275 37.2 “直言有讳” 276 37.3 想解决一个大家都不关注的问题,可以等问题变得更糟 277 37.4 如果不填老师想要的答案,你就得不了分 278 37.5 小结 278 第38章 技术管理之道:真的要转管理吗 280 38.1 彼得定律 281 38.2 用目标驱动 282 38.3 小结 283 附录A 软件开发技术的第一性原理 284 附录B 我的架构师成长之路 287 附录C 无处不在的架构之美 293 附录D 软件架构师之道 298 |