大家好,我是 Snow Hide,作为《左耳听风》这个专栏的学员之一,这是我打卡的第 49 天,也是我第 62 次进行这种操作。
今天我温习了该专栏里叫《分布式系统架构的冰与火》、《从亚马逊的实践,谈分布式系统的难点》、《分布式系统的技术栈》、《分布式系统关键技术:全栈监控》、《分布式系统关键技术:服务调度》、《分布式系统关键技术:流量与数据调度》、《洞悉 PaaS 平台的本质》、《弹力设计篇之“认识故障和弹力设计”》、《弹力设计篇之“隔离设计”》、《弹力设计篇之“异步通讯设计”》、《弹力设计篇之“幂等性设计”》、《弹力设计篇之“服务的状态”》、《弹力设计篇之“补偿事务”》、《弹力设计篇之“重试设计”》、《弹力设计篇之“熔断设计”》、《弹力设计篇之“限流设计”》、《弹力设计篇之“降级设计”》、《弹力设计篇之“弹力设计总结”》、《管理设计篇之“分布式锁”》、《管理设计篇之“配置中心”》、《管理设计篇之“边车模式”》、《管理设计篇之“服务网格”》、《管理设计篇之“网关模式”》、《管理设计篇之“部署升级策略”》、《性能设计篇之“缓存”》、《性能设计篇之“异步处理”》、《性能设计篇之“数据库扩展”》、《性能设计篇之“秒杀”》、《性能设计篇之“边缘计算”》、《高效学习:端正学习态度》、《高效学习:源头、原理和知识地图》、《高效学习:深度,归纳和坚持实践》、《高效学习:如何学习和阅读代码》、《高效学习:面对枯燥和量大的知识》的文章。
关键词总结:增大系统容量、提高系统可用性、分布式系统的发展和由来、单体应用、SOA 架构、微服务、服务接口、亚马逊的应用架构规定、分布式架构问题、分布式架构方案、分布式架构关注点、分布式架构可用性、分布式架构性能、分布式架构稳定性、分布式架构关键技术、全栈监控、多层监控、应用层监控、平台层监控、中间层监控、基础层监控、监控系统常见问题、监控系统的作用、监控系统适用场景、监控系统的实现、服务关键程度、服务依赖关系、服务发现、服务状态管控、服务生命周期管控、服务架构版本管控、服务调度、服务状态维持、服务状态拟合、服务弹性伸缩、服务故障迁移、服务工作流、服务编排、分布式流量调度功能、分布式流量调度技术、分布式服务状态数据调度、分布式事务一致性问题、分布式数据节点方案、软件工程能力、PaaS 平台的本质、PaaS 平台的总体架构、PaaS 平台的生产和运维、分布式系统中关键的设计模式、系统可用性评估、故障分类、为故障而准备的设计、隔离设计概念、服务种类间隔离、用户请求间隔离、隔离设计关键点、同步通讯、同步通讯问题、异步通讯、异步通讯方式、事件驱动设计优点、事件驱动设计缺点、异步通讯设计关注点、异步通讯注意事项、幂等性、幂等性方案、全局 ID、幂等性处理流程、HTTP 幂等性、幂等性设计、服务的状态、Stateless / 无状态服务、Stateful / 有状态服务、服务状态容错设计、ACID、BASE、业务补偿、靠谱的业务补偿机制、业务补偿的设计重点、重试的场景、重试的策略、Spring 的重试策略、重试设计的重点、熔断设计、熔断器实现逻辑、熔断设计的重点、限流的策略、限流的实现方式、限流的设计要点、降级的牺牲、降低数据一致性、降级设计要点、弹力设计概览、服务界耦合拆分、容错设计、弹力设计开发和运维、分布式锁服务的特点、Redis 的分布式死锁服务、分布式锁服务的一个问题、从乐观锁到 CAS、分布式锁设计的重点、配置中心的设计、配置中心的设计重点、边车模式设计、边社设计重点、边车设计注意事项、边车设计适用的场景、边社设计不适用的场景、服务网格是什么、网格服务相关开源软件、网格服务设计重点、网关模式设计、网关的其他作用、网关 & 边车以及服务网格、网关设计重点、网关运维设计原则、整体架构注意事项、网关安全相关、服务部署模式种类、应用场景以及优缺点、部署模式种类比较、Cache Aside 更新模式、Read/Write Through 更新模式、Write Behind Caching 更新模式、缓存设计的重点、异步处理设计、事件溯源、异步处理分布式事务、异步处理设计要点、读写分离 CQRS、分库分表 Sharding、数据库扩展设计重点、秒杀流程、秒杀技术挑战、秒杀解决方案、边缘计算的意义、边缘计算业务场景、边缘计算关键技术、主动学习和被动学习、浅度学习和深度学习、学习是为了找到方法、学习是为了找到原理、学习是为了了解自己、学习是为了改变自己、挑选知识和信息源、注重基础和原理、使用知识地图、系统地学习、举一反三、总结和归纳、实践出真知、坚持不懈、读文档还是读代码、如何阅读源代码、阅读代码的方法、如何面对枯燥的知识、如何面对大量的知识、认真阅读文档、其他几个实用的技巧。
所学总结:
提炼 Day 1-7
Day 1 - 分布式系统架构的冰与火
《查看原文》
- 增大系统容量
- 提高系统可用性
- 分布式系统的发展和由来
- 单体应用
- SOA 架构
- 微服务
Day 2 - 从亚马逊的实践,谈分布式系统的难点
《查看原文》
- 服务接口
- 亚马逊的应用架构规定
- 分布式架构问题
- 分布式架构方案
- 分布式架构关注点
Day 3 - 分布式系统的技术栈
《查看原文》
- 分布式架构可用性
- 分布式架构性能
- 分布式架构稳定性
- 分布式架构关键技术
Day 4 - 分布式系统关键技术:全栈监控
《查看原文》
- 全栈监控
- 多层监控
- 应用层监控
- 平台层监控
- 中间层监控
- 基础层监控
- 监控系统常见问题
- 监控系统的作用
- 监控系统适用场景
- 监控系统的实现
Day 5 - 分布式系统关键技术:服务调度
《查看原文》
- 服务关键程度
- 服务依赖关系
- 服务发现
- 服务状态管控
- 服务生命周期管控
- 服务架构版本管控
- 服务调度
- 服务状态维持
- 服务状态拟合
- 服务弹性伸缩
- 服务故障迁移
- 服务工作流
- 服务编排
Day 6 -分布式系统关键技术:流量与数据调度
《查看原文》
- 分布式流量调度功能
- 服务流控
- 流量控制
- 流量管理
- 分布式流量调度技术
- 高性能
- 高并发
- 基本业务能力
- 服务化
- 分布式服务状态数据调度
- 分布式事务一致性问题
- 主-从
- 主-主
- 2PC/3PC
- TCC
- PRC
- 分布式数据节点方案
- 数据库层面
- 文件层面
Day 7 -洞悉 PaaS 平台的本质
《查看原文》
- 软件工程能力
- 提高服务的 SLA(服务级别协议)
- 能力和资源重用或复用
- 过程自动化
- PaaS 平台的本质
- 服务化
- 分布式
- 自动化
- PaaS 平台的总体架构
- 调度层(aPaaS)
- 能力服务层(iPaaS)
- 流量调度层
- 运营管理层
- 运维管理层
- PaaS 平台的生产和运维
提炼 Day 8-12
Day 8 - 弹力设计篇之“认识故障和弹力设计”
《查看原文》
- 分布式系统中关键的设计模式
- 容错设计/弹力设计
- 系统可用性评估
- 故障分类
- 无计划宕机
- 有计划宕机
- 为故障而准备的设计
- 当系统无法自动修复故障时
Day 9 - 弹力设计篇之“隔离设计”
《查看原文》
- 隔离设计概念
- Bulkheads/隔板
- 服务种类间隔离
- 多板块数据获取
- 大数据平台
- 跨板块业务逻辑/流程步骤
- 跨板块交互
- 多板块分布式事务
- 用户请求间隔离
- 服务/数据独立
- 服务共享/数据独立
- 服务/数据共享
- 隔离设计关键点
- 隔离粒度定义
- 取舍评估
- 设计模式选用
- 自动化管控工具
- 监控系统
Day 10 - 弹力设计篇之“异步通讯设计”
《查看原文》
- 同步通讯
- 同步通讯问题
- 调用链依赖
- 调用链阻塞
- 串行通讯
- 骨牌效应
- 异步通讯
- 异步通讯方式
- 请求响应
- 发送订阅
- 代理
- 事件驱动设计优点
- 可重用性
- 高度隔离
- 无阻塞
- 适配器接入
- 访问量处理
- 事件驱动设计缺点
- 流程管控
- 顺序问题
- 事务复杂度
- 异步通讯设计关注点
- 解耦
- 隔离
- 并发
- 异步通讯注意事项
- 顺序
- 丢失率
- 记录
- 幂等
Day 11 - 弹力设计篇之“幂等性设计”
《查看原文》
- 幂等性
- 作用
- 幂等性方案
- 上游系统负责
- 下游系统负责
- 全局 ID
- 幂等性处理流程
- HTTP 幂等性
- GET
- HEAD
- OPTIONS
- DELETE
- POST
- PUT
- 幂等性设计
- PRG 模式
Day 12 - 弹力设计篇之“服务的状态”
《查看原文》
- 服务的状态
- Stateless / 无状态服务
- 函数式编程
- 无状态服务的状态表现
- 无状态服务的状态存储
- 非关键数据
- 关键数据
- Stateful / 有状态服务
- 有状态服务的好处
- 数据本地化 Data Locality
- 高可用性/一致性
- Sticky Session / 粘滞会话/会话保持
- 分布式长连接
- Gossip
- 有状态服务的好处
- 服务状态容错设计
- 运行时复制
- 全部/大部分一致
- 服务与文件系统分离
提炼 Day 15-20
Day 15 - 弹力设计篇之“补偿事务”
《查看原文》
- ACID
- BASE
- 业务补偿
- 靠谱的业务补偿机制
- 业务补偿的设计重点
- 两个最重要的事情
- 其余设计重点
Day 16 - 弹力设计篇之“重试设计”
《查看原文》
- 重试的场景
- 重试的策略(Exponential Backoff / 指数级退避)
- Spring 的重试策略
- 一般策略
- Backoff 相关策略
- 重试设计的重点
- 确定重试的触发
- 重试时间/次数
- 被调用方幂等性设计
- 重试代码无侵入
- 事务相关的重试
Day 17 - 弹力设计篇之“熔断设计”
《查看原文》
- 熔断设计
- 闭合 / Closed
- 断开 / Open
- 半开 / Half-Open
- 熔断器实现逻辑
- 是否存在熔断中?
- 调用成功和失败的次数?
- 是否进行熔断?
- 元素是否超过设置的时长?
- 熔断设计的重点
- 错误类型
- 日志监控
- 测试服务是否可用
- 手动重置
- 并发问题
- 资源分区
- 重试错误的请求
Day 18 - 弹力设计篇之“限流设计”
《查看原文》
- 限流的策略
- 拒绝服务
- 服务降级
- 特权请求
- 延迟处理
- 弹性伸缩
- 限流的实现方式
- 计数器方式
- 队列算法
- 漏斗算法 / Leaky Bucket
- 令牌桶算法 / Token Bucket
- 基于响应时间的动态限流
- 很难设定限流值的原因
- 拥塞控制算法设计要点
- 限流的设计要点
- 限流的目的
- 需要考虑的地方
Day 19 - 弹力设计篇之“降级设计”
《查看原文》
- 降级的牺牲
- 降低一致性
- 停止次要功能
- 简化功能
- 降低数据一致性
- 失效
- 命中
- 更新
- 降级设计要点
- 梳理和分析业务
- 降级的关键条件
- 可简化业务流程设计
- 流水账记录法
- 降级开关
- 限流程度参数
- 降级标签
- 降级演练
Day 20 - 弹力设计篇之“弹力设计总结”
《查看原文》
- 弹力设计概览
- 负载均衡
- 服务发现
- 自动化运维
- 服务界耦合拆分
- bulkheads 模式
- 自包含系统
- 异步通讯
- 自动化运维
- 容错设计
- 错误方面
- 一致性方面
- 流控方面
- 自动化运维方面
- 弹力设计开发和运维
- 比较 Spring Cloud 和 Kubernetes
- 服务涵盖面比较
- 服务的功能特性
提炼 Day 22-27
Day 22 - 管理设计篇之“分布式锁”
《查看原文》
- 分布式锁服务的特点
- 安全性
- 避免死锁
- 容错性
- Redis 的分布式死锁服务
- 避免死锁的问题
- 不区分 Client 会出现的一种问题
- 分布式锁服务的一个问题
- 实际应用时的问题
- 解决问题的栅栏(fence)技术
- 从乐观锁到 CAS
- 分布式锁设计的重点
- 设计初衷
- 设计考量
Day 23 - 管理设计篇之“配置中心”
《查看原文》
- 配置中心的设计
- 区分软件的配置
- 按运行环境区分
- 按依赖区分
- 按层次区分
- 配置中心的模型
- IaaS 层以及 PaaS 层配置
- SaaS 层配置
- 配置中心的架构
- 经济的数据交换方式
- 订阅的好处
- 配置变更控制器部署
- 平台层配置变更
- 配置变更模块化
- 应用服务配置更新标准化
- 区分软件的配置
- 配置中心的设计重点
- 配置中心主要用处
- 配置的本质
- 配置更新事务处理
- 配置更新控制器
- 服务启动角色
Day 24 - 管理设计篇之“边车模式”
《查看原文》
- 边车模式设计
- 实现方式
- 优缺点
- 边社设计重点
- 解决的问题
- 边车设计注意事项
- 进程间通讯
- 服务协议标准化
- 应用容器技术
- 边车职责
- 边车操作
- 上下文传递机制
- 边车设计适用的场景
- 扩展历史遗留系统
- 多语言环境
- 多个服务供应商
- 控制以及逻辑分离
- 边社设计不适用的场景
- 架构不够复杂
- 服务间协议不统一
- 单体架构
Day 25 - 管理设计篇之“服务网格”
《查看原文》
- 服务网格是什么
- 服务网格特点
- 服务网格的出现
- 网格服务相关开源软件
- Linkerd
- Istio/Conduit
- Mixer/Pilot/Envoy
- istio-Auth
- 网格服务设计重点
- 服务网格与容器编排的区别
- 集中式边车
- 流量调度网关
- 网格服务即基础设施
Day 26 - 管理设计篇之“网关模式”
《查看原文》
- 网关模式设计
- 请求路由
- 服务注册
- 负载均衡
- 弹力设计
- 安全方面
- 网关的其他作用
- 灰度发布
- API 聚合
- API 编排
- 网关 & 边车以及服务网格
- 网关设计重点
- 集群化
- 服务化
- 持久化
- 网关运维设计原则
- 业务松耦合,协议紧耦合
- 应用监视,提供分析数据
- 用弹力设计保护后端服务
- DevOps
- 整体架构注意事项
- 不内置服务功能
- 靠近后端服务
- 容量扩展
- 服务发现
- 舱壁设计
- 网关安全相关
- 加密数据
- 校验用户请求
- 检测异常访问
Day 27 - 管理设计篇之“部署升级策略”
《查看原文》
- 服务部署模式种类
- 停机部署(Big Bang / Recreate)
- 蓝绿部署(Blue/Green /Stage)
- 滚动部署(Rolling Update / Ramped)
- 灰度部署/金丝雀(Canary)
- AB 测试(A/B Testing)
- 应用场景以及优缺点
- 停机部署
- 蓝绿部署
- 滚动部署
- 部署的问题
- 灰度部署/金丝雀
- AB 测试
- 可以用来选择用户的技术
- 部署模式种类比较
提炼 Day 29-33
Day 29 - 性能设计篇之“缓存”
《查看原文》
- Cache Aside 更新模式
- 失效
- 命中
- 更新
- 问题
- 解决方案
- Read/Write Through 更新模式
- Read Through
- Write Through
- Write Behind Caching 更新模式
- Write Back
- 套路
- 问题
- 复杂度
- 缓存设计的重点
- 外部缓存集群
- 数据分片
- 命中率
- 一致性问题
- 缓存生命周期
- LRU 策略
- 锁竞争
- 爬虫保护机制
Day 30 - 性能设计篇之“异步处理”
《查看原文》
- 异步处理设计
- 异步任务处理
- 前台系统
- 任务处理系统
- Push 推模型
- Pull 拉模型
- Pull 的好处
- 推拉结合
- 事件溯源
- 解决的问题
- 事件回放
- 事件重播
- 事件可变性
- 事件记录
- 结合异步处理
- 异步处理分布式事务
- 一致性
- 交易凭证
- 注意点
- 异步处理设计要点
- 故障导致的问题
- 幂等性支持
- 整体业务事务问题
- 是否适合异步处理
- 任务积压情况
- 异步处理本质
Day 31 - 性能设计篇之“数据库扩展”
《查看原文》
- 读写分离 CQRS
- 优点
- 缺点
- CQRS / 命令与查询职责分离
- 语义区分
- 语义区分好处
- 分库分表 Sharding
- 影响数据库性能的两个大问题
- 数据库操作
- 数据库数据量
- 两个关注点
- 分库策略
- 数据访问层
- 分片策略
- 分片模式注意点
- 影响数据库性能的两个大问题
- 数据库扩展设计重点
- 水平分片注意事项
Day 32 - 性能设计篇之“秒杀”
《查看原文》
- 秒杀流程
- 用户角度
- 技术角度
- 秒杀技术挑战
- 百万 TPS
- 热点数据
- 秒杀解决方案
- 引入 CDN
- CDN 边缘节点
- 统计数据
- 概率值
- 放行的数据量
- 更多思考
- 不适合使用边缘节点的场景
- 适合使用边缘节点的场景
Day 33 - 性能设计篇之“边缘计算”
《查看原文》
- 边缘计算的意义
- 趋势方面
- 数字化革命
- 硬件发展
- 信息量以及数据量
- MB 时代
- GB 时代
- TB 时代
- PB 时代
- 成本方面
- 非线性成长
- 增长后的投入比
- 趋势方面
- 边缘计算业务场景
- 实时响应
- 业务逻辑单一
- 收集并结构化数据
- 实时设备监控
- 去中心化应用
- 云资源调度
- 云资源聚合
- 边缘计算关键技术
- 应用程序接口网关
- 无服务器/函数为服务 / Serverless/FaaS
提炼 Day 36-40
Day 36 - 高效学习:端正学习态度
《查看原文》
- 主动学习和被动学习
- 被动学习
- 主动学习
- 浅度学习和深度学习
- 深度学习关键点
- 学习三步骤
- 学习是为了找到方法
- 学习是为了找到原理
- 学习是为了了解自己
- 学习是为了改变自己
Day 37 - 高效学习:源头、原理和知识地图
《查看原文》
- 挑选知识和信息源
- 信息源特质
- 第一手资料
- 有佐证/数据以及引用
- 加入了自己的经验以及思考
- 信息源特质
- 注重基础和原理
- 使用知识地图
- 联想记忆法
- 第一部分:解决什么问题
- 第二部分:知识的特性
- 进行联想
- 第三部分:更高层次的联想
- 知识树
- 联想记忆法
Day 38 - 高效学习:深度,归纳和坚持实践
《查看原文》
- 系统地学习
- 技术出现背景
- 技术优势和劣势
- 技术适用场景
- 技术组成部和关键点
- 技术底层原理和实现
- 已有实现对比
- 举一反三
- 联想能力
- 抽象能力
- 自省能力
- 训练建议
- 总结和归纳
- 信息重构
- 知识的积累
- 对知识持开放的态度
- 方法
- 如何训练
- 实践出真知
- Eat your own dog food/吃自己的狗粮
- 带着痛成长/Grow up through the pain
- 坚持不懈
Day 39 - 高效学习:如何学习和阅读代码
《查看原文》
- 读文档还是读代码
- 代码
- 文档/书
- 人人对话
- 人机对话
- 看书或代码的目的
- 看代码而不看文档的原因
- 从感性认识到理性认识
- 如何阅读源代码
- 阅读代码的前提
- 基础知识
- 软件功能
- 相关文档
- 代码的组织结构
- 阅读代码的前提
- 代码组成部分
- 接口抽象定义
- 模块粘合层
- 业务流程
- 具体实现
- 代码逻辑
- 出错处理
- 数据处理
- 关键算法
- 底层交互
- 运行时调试
- 阅读代码的方法
Day 40 - 高效学习:面对枯燥和量大的知识
《查看原文》
- 如何面对枯燥的知识
- 解决办法
- 如何面对大量的知识
- 认真阅读文档
- 其他几个实用的技巧
- 用不同的方式来学习同一个东西
- 不要被打断
- 总结压缩信息
- 把未知关联到已知
- 用教的方式来学习
- 学以致用
- 不要记忆
- 多犯错误
末了
重新总结了一下文中提到的内容:亚马逊在分布式服务系统方面的实践和经验积累所获取的成效、分布式系统中需要注意的几个问题以及方案、全栈/多层系统监控的重要性、监控系统需要关注的指标、监控系统的作用以及监控系统的实现方法参考、服务关键程度、服务依赖关系、服务架构版本管理、服务资源调度、流量调度的功能、流量调度的关键技术、状态数据调度、数据节点问题、主要问题、解决方案、弹力设计的目的、系统可用性衡量指标、故障的起因及分类、船体水密舱的设计、分布式系统的隔离设计、常见的隔离种类、同步通讯的问题、异步通讯的好处以及种类、事件驱动设计和异步通讯设计、幂等性含义、幂等性副作用(不取决于调用次数)、服务调用结果(成功、失败、超时)、可能产生不幂等的问题(超时)、幂等性方案(轮询处理结果、下游系统做幂等处理)、分布式系统幂等性(Snowflake 全局 ID)、幂等性接口处理流程、无状态服务、无状态服务和函数的类比、分布式数据库支持、有状态服务、Sticky Session、一致性哈希算法、分布式哈希表(DHT)、可在实例间随意进行切换的分布式文件系统、ACID、BASE、一致性、强一致性、最终一致性、业务补偿逻辑、业务补偿设计重点、重试的场景、重试的策略、指数及退避策略、Spring 实现的多种策略、重试设计的重点、基于 Java Annotation 实现策略、基于 Service Mesh 实现策略、熔断设计、闭合、断开、半开、正常、故障、故障后检测、熔断器实现、熔断器设计、限流的目的、限流的策略、限流的算法、计数器、队列、漏斗、令牌桶、基于响应时间限流、限流的设计要点、降级设计本质、资源不足、访问量过大、降级的方法、降低一致性、停止次要功能、简化功能、降级设计要点、弹力设计、弹力设计总概览、开发运维实践、分布式锁、加锁和解锁、锁超时、乐观并发控制、CAS 源自操作、分布式锁服务同步、配置中心、配置的区分、静态动态区分、运行环境区分、依赖区分、IaaS 层面、PaaS 层面、SaaS 层面、外部依赖配置、开发环境和生产环境日志级别配置、配置管理工具、配置管理架构、配置中心设计重点、边车模式、控制逻辑与业务逻辑分理解耦、遗留老系统的低风险改造、进程间通讯、Docker 打包边车和服务、边车模式适用/不适用的场景、边车模式进化、标准化集群、服务网格、七层网络模型中的传输层协议、应用层协议、服务网格开源软件、服务网格设计重点、网关模式、网关模式代替边车模式、网关不管理服务节点、服务集群配上网关、网关之上的网关、星形结构、网关模式功能特性、网关模式设计重点、常见的部署升级策略、停机、蓝绿、滚动、灰度、AB 测试、部署策略的含义以及优缺点、部署策略的比较、加速数据访问、典型的缓存模式、Cache Aside 更新模式、Read/Write Through 更新模式、Write Behind Caching 更新模式、各模式的优缺点、缓存设计重点、缓存集群、数据一致性、LRU 锁竞争、爬虫问题、异步通讯、提高系统稳定性及容错能力、统筹任务、提高系统吞吐量、异步通讯设计、推拉结合模型‘配合事件溯源、存储事务一致性、异步处理事务一致性、最终一致性、异步处理设计要点、秒杀业务流程、技术挑战、解决方案、抢车票问题、双十一问题、高并发架构、CDN 边缘节点计算、适合使用边缘节点的场景、边缘计算的意义、因发展趋势而新生的产物、大数据中心成本问题、边缘计算降低成本、边缘计算业务场景、边缘计算关键技术、学习是逆人性的、像锻炼身体一样需要持续付出、克服自己 DNA 的弱点、学习是为了找到方法、学习是为了思考和理解、学习是为了找到自己的未知为了了解自己、学习是为了改变自己、挑选知识和信息源的重要性、优质的信息源可以让学习者事半功倍、注重基础和原理、打牢基础学东西就快、学得快就学得多、学得多就思考得多、思考得多对比得多学得就更快、实用知识地图进行学习、学习不是为了记忆知识点、学习是为了找到知识地图、系统学习、举一反三、总结归纳、实践出真知、坚持不解、读文档读代码、读书/文档以了解思想/方法/原理、读代码以了解具体细节、阅读代码的方法以及技巧、为什么会有枯燥的知识、如何面对枯燥的知识、如何面对大量的知识、要学以致用学习原理、认真阅读文档、实用的学习技巧。