代码
调试技术
数据库
- 《Getting started with impala》
- 《mysql 必知必会》
- 《mysql 性能调优与架构实践》
- 《Mysql 技术内幕 InnoDB 存储引擎》
- 《Redis 实战》
- 《Redis 深度历险核心原理和应用实践》
- 《redis设计与实现》
- 《七周七数据库》
- 《深入浅出mysql》
- 《高性能mysql第三版》
- 《MySQL是怎样运行的》
前端
GOLANG
- 《1 The Go Programming Language》
- 《2 The Go Programming Language》
- 《3 The Go Programming Language》
- 《Build Web Application With Golang》
- 《Go101》
- 《Network Programming with go》
- 《Building Microservices With Go》
- 《Building Restful Web Services with Go》
- 《Concurrency In Go》
- 《Go In Action(Go 实战)》
- 《Go学习笔记语言详解》
- 《Go学习笔记源码剖析》
- 《Go语言编程》
JAVA
网络
心理学
PYTHON
创业
UNIX/LINUX
分布式
系统设计
搜索引擎
开发工具
- 《Practical Vim》
- 《Vim8文本处理实战》
- 《Learn vim scrpt the hard way》
- 《Pro Git》
- 《Mastering Vim》
- 《Mastering Vim Quickly》
思维
源码
网站架构微服务
- 《微服务架构设计模式》
- 《从0开始学架构》
- 《web scalavility for startup engineers》
- 《designdatainstensive_application》
- 《designdatainstensive_application2》
- 《clean_architecture》
- 《微服务实战》
- 《微服务设计》
软件工程/项目管理
运维
金融理财
写作
互联网
区块链
技术演讲网课
- 《哔哩哔哩的go微服务实战》
- 《go业务基础库之Error&Context》
- 《Go同步和并发设计模式》
- 《300分钟吃透分布式缓存》
- 《DDD实战课》
- 《分布式技术原理与实战45讲》
- 《架构设计面试精讲》
- 《高并发系统设计40问》
- 《java并发编程78讲》
- 《中间件核心技术与实战讲》
职场
《敏捷技能修炼》
1.意图导向编程
意图导向编程是指:先假设当前这个对象中已经有了一个理想方法,它可以准确无误完成你想做的事情,而不是直接盯着每一点要求编写代码。 ·
2.分离构造和使用
任何时候引用对象,都应该封装它涉及的具体实现。 将对象的创建和使用分离开
3.代码未动,测试先行
考虑代码的测试性刻意创建出一个更好的设计方案。
4. Shalloway 法则和 Shalloway 原则
如果代码中有 N 个地方需要修改,并且 N > 1 ,Shalloway 最多只能找到其中的 N-1 个地方。
冗余(具备相似或者重复的特征)的种类: - 复制粘贴 - 幻数 - 其他类型:冗余行为、冗余信息、冗余实现
5. 封装
所有隐藏起来的部分,我们都是可以改变的 把困难封装起来
6. 面向接口的设计
专注于对象所提供的服务或模块的职责,而不是他们的具体实现。 接口是与其他实体(可能是一个方法、类、一个模块、或一段程序)交互的方式, 常见形式: - 一个对象可调用方法的集合 - 一种协议(FTP等) - 一种程序接口,比如 web 服务
接口约定:每个接口都应当具备明确的约定,包含前置条件和后置条件。 - 前置条件:开始执行某种操作时,认为肯定正确的东西。 - 后置条件:操作结束时,应该完成的东西
接口三大定律: - 实现应当正确完成它的方法宣称的事情(对应功能测试) - 接口的实现不得损害系统(对应能力测试) - 如果不能实现相关职责,必须通知相关调用者,使用错误代号或者异常(负面功能测试)
委派优于继承
7. 验收测试驱动开发
- 通过用户界面创建一个调用业务规则的事务
- 开发一个用户界面,并通过这个界面直接董啊用业务规则
- 通过某种语言的单元测试框架实现测试
- 通过自动化的测试用例直接与业务规则模块交互
8. 避免过度设计或者设计不足
这种的办法:花足够多的时间提高代码质量,但别花一秒时间去做你目前根本不需要要的功能
代码质量病理学,五种常见的质量分类 - 内聚:内聚涉及两个概念:高内聚的类(内部功能相互关联度搞);内聚的方法(只做一件事) - 适当耦合:对象之间的关系定义良好 - 没有冗余:在一个地方修改了代码,在别的地方也必须做出相应的改变 - 可读性:表露意图 - 封装:病理特征:你必须知道正在使用的内部代码是什么,否则无法正确使用它
9. 持续集成
持续集成意味着每次代码改动结束,就要立即把这个改动提交到主干并把这件事通知到所有人,把改动合并到他们的分之。
10. 共性和可变性分析
共性分析:识别由于其所在环境或者具备的功能相互牵连,关联在一起的因素 可变性分析:只有在给定共性的前提下,可变性才有意义。由具体类型实现 共性分析涉及问题领域的概念层面,可变性分析涉及实现层面(具体用例)。 两个简单的问题帮助找出概念和变体: - 这是概念还是实现? - 如果它是概念,它的变体是什么?如果它是实现,它是什么的变体?
分析矩阵:针对问题领域的概念模型设计 - 1.选择一个将要描述的特定用例 - 2.列出完成这个用例所需要的步骤,把第一步放在最上面,后面的步骤依次排列 - 3.在每个步骤的左边创建一列 - 4.把每一个步骤的概念和意义写在左边的列里
11. 以开闭原则为目标的重构
软件中的实体(类、模块、函数等),应该满足对扩展是开放的,对修改是封闭的 组织代码最基本和通用的方法:使用具备良好粒度的函数
12. 需求与功能接口
函数和方法的迪米特法则: 一个方法M存在一个对象 O 中,对象 O 的 M 方法只引用下面几种对象的方法: - 对象 O 的其他方法 - M 的参数 - 在M 方法中被实例化的对象 - O 所包含的子对象 - 任何 O 可以访问的全局变量
13. 何时以及如何使用继承
优先使用组合而非继承 通过继承来隐藏变量,而不是代码复用
高质量代码(容易理解、可以测试、便于修改):
内聚
- 描述:类或者方法中的所有元素都相互关联,不含有不相关的元素
- 原则:单一职责原则、关注点分离
- 实践:意图导向编程、测试先行、共性和可变性分析
- 病理症状:臃肿的类(太多职责)、冗长方法(包含多个功能)、难以命名(内聚性不强、不好命名)
- 测试中的迹象:臃肿的测试用例、多个原因导致测试失败
耦合(一个给定实体与其他实体之间的依赖是符合逻辑、显而易见和最小化的)
- 描述: - 本体耦合:一种类型和另一种已存在的类型发生关联,比如 ClassA 的方法返回了 ClassB 的一个引用 - 表象耦合:一种类型与另一种类型的接口发生关联的时候。 - 继承耦合:派生类和基类之间的关联关系,基类发生变化,子类也会发生变化 - 子类耦合:关联到某个类型具备多态的时候
- 原则:开闭原则
- 实践:封装,仅在需要的时候暴露细节;针对接口设计;继承是针对可插入性(系统应该能比较容易把一个类抽出去,同时将另一个同样接口的类加进来)
- 病理症状:边界效应
- 测试中的迹象:缓慢复杂的测试;大量的测试准备
冗余
- 描述:任何东西,只要它有可能变化,就改在系统中找到一个单独且唯一的地方放起来。
- 原则:一种规则对应一个地方;DRY;shalloway法则
- 实践:出现冗余后马上重构;测试先行
- 病理症状:多个客户端发现重复
- 测试中的迹象:测试中的冗余
封装
- 描述:把能藏的东西都藏起来(数据、状态、行为、类型、内存分配、使用顺序、接口、实体、子系统)
- 原则:封装所有的变化
- 实践:原则上都应该封装,确实有需要的时候暴露细节
- 病例症状:系统无法继续维护
- 测试中的迹象:粗粒度测试
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论