Skip to content

流水线执行时长 ​

image-20230503123518385

流水线吞吐率 ​

image-20230503125138499

流水线加速比计算 ​

image-20230503125204592

比如 三个指令 分别是 2ns 2ns 1ns 一共100 条指令 不使用流水线需要 500 ns ,使用 流水线 需要203ns 所以 加速比是 500/203

流水线的效率 ​

image-20230503125509865

(6*△t)/(4*△t*15) = 24 /60

缓存计算系统平均周期 ​

image-20230503220254810

比如 t1 为 1ns t2为1000ns , h 命中率 95% , 计算得到系统平均周期 50.95 ns

磁盘计算 ​

image-20230503220438338

image-20230503220501423

CB

image-20230503220530144

串联系统与并联系统的可靠性分析 ​

串联模型 ​

image-20230503220704729

所有的子系统必须都正常,系统才能正常运行, 所以 可靠度为每个结点的 可靠度相乘

并联模型 ​

image-20230503221007698

并联模型 只要有一个结点是好的 就能正常工作 ,所以他的可靠度 为 1减去 每个结点的不可靠度相乘 ,得到可靠度

海明校验码 重点 ​

我们要了解海明码编码的基本的规则,要知道如何去编码,要会计算多少位的信息位 需要多少个校验位,要了解这些知识 我们要知道海明码中 编码完成的串中 哪些位置是校验位 ,哪些位置是信息位,在这种编码体系中 明确规定了校验位的 位置是位于 整个信息编码中的 2的n次方位,比如 2^0 位 放的是校验位 2^1 位 放的是校验位 , 2^2次方位 等等 ,校验位的位置定死了,其他位置是信息位

image-20230503234205875

image-20230404225814325

上面的公式 2的r次方 大于等于 4 + r +1 里面的4 是 信息1011 位的个数 r 是 校验位的个数 计算得到 校验位有3 位

海明校验码 是一个难点 但是也是一个热点 我们要了解海明码编码的规则 要知道如何去编码 要回计算多少位的信息位 需要多少个校验位

要了解这些 首先我们要了解 海明码中 编码完成的串中 哪些位是校验位 哪些位是信息位 ,校验位的位置是位于整个信息编码完成的串中的 2的n次方的位置 比如 2的0次方 也就是第一位 应该放校验位 2的一次方位 也就是第二位 2 的2次方位 也就是第4位 应该放校验位

我们可以直接把这些位置的信息 挑出来 知道这些是校验位,其他位置 是填充信息位 。如果 我有一个信息位 最终的 编码 会有3 位

2个信息位 最终的编码 就会有5位的长度 ,3个信息位 6位的长度 , 4 个信息位 7位的长度 ,5个信息位 会是9位的长度。这个规律用数学公式表达 2的r次方 大于等于 4 + r +1 ,其中的4 就是信息位的个数 r 就是 校验位的个数 , 如果 信息位 有x 位 那么 x + r + 1 <= 2的r次方。 比如 x 信息位 有5 位 ,那么 校验位r 就得取4 。

以上 就是 就校验位的位数 和 信息位的位数的关系

信息位 直接把 信息 填到对应的位置即可 ,问题是 如何计算校验位 我们需要计算出校验位的值

我们把信息位的 位数 写成 2进制相加的形式

7这个位数 = 2的2次方 + 2的1次方 + 2的0次方 (7这个位置 会影响到 r2 r1 和 r0)

6这个位数 = 2的2次方 + 2的1 次方 (影响 r2 r1)

5这个位数 = 2得2次方+2 的0次方 (影响 r2 和 r0)

3这个位数 = 2 的1次方+2的0次方 (影响 r1 和 r0)

那么 r2 = 第四个信息位 (第七位) 异或 第三个信息位(第六位) 异或 第二个信息位(第五位) (r2 就看那个信息位 有 2的2次方 对这些信息位数字 进行异或运算)

r2 = 1 异或 0 异或 1 = 0 i4 异或 i3 异或 i2 就是信息位的数字

r1 = 1 异或 0 异或 1 = 0

r0 = 1 异或 1 异或 1 = 1

所以 最终 三位校验码 为 0 0 1

异或运算:相同为0 相异 为1

海明码 不但能校验 还能纠错

如果 收到的信息 为 1010100 校验位 为 0 0 0 , 根据 信息码 推出 校验码 位 001

对二者 进行异或运算 得到 001 说明 1010100 这个信息的第 1 位 出错了 , 对第一位 取反 就是正确的 1010101

如果 收到信息为 1011101 校验码为 101 根据信息码 推出来的校验码位 001 对二者 进行异或运算 得到 100 (转10进制为4) 则 1011101 的 第四位 出错了 , 正确的应该是 1010101

如果收到信息为 1111111 校验码位 111 根据信息码 退出来的校验码位 001 异或得到 110 说明第六位出错

环路复杂度-重点 ​

解题方法:1. 弧(边)- 节点数 + 2

  1. 闭合区域个数 + 1

题型一 直接数数

image-20230428194124106

题型二 开始节点漏掉了

image-20230428194154121

题型三 箭头重复 漏掉了

image-20230428193918874

还有 结合路径覆盖的题型

对下图所示流程图扫用白盒测试方法进行测试,若要满足路径覆盖,至少需要( )个测试用例。采用McCabe度量法计算该程序的环路复杂度为( )

image-20230512154731816

A: 3 B: 4 C: 6 D: 8

前驱图 重点 ​

题型1

image-20230428200547296

题型2

image-20230428205106604

有限自动机 重点 ​

题型1,2

image-20230428211131853

image-20230428213305434

传值传址 重点 ​

image-20230428221847045

B D

image-20230428223552295

C 传值时 实参可以是变量 也可以是 常量和表达式 ,引用调用时 可以实现 形参和实参的双向传递数据效果

知识产权 ​

计算机软件保护条例 是由国务院颁布的

中华人民共和国著作权法 和 计算机软件保护条例 是构成我国保护计算机软件著作权的两个基本法律文件

著作权中 修改权 署名权 保护作品完整权 的 保护期 不受限制 (小书包)

KMP算法 ​

image-20230429231925344

image-20230507204859941

D

进制转换 ​

2 B

8 O

10 D

16 H

逻辑地址转物理地址 重点 ​

image-20230430094921128

image-20230430095512762

image-20230430095629146

image-20230430095750593

image-20230430100730634

内存按字节编址 ​

image-20230430101447779

image-20230430102013394

计算得出256kb ,第二空要注意 16k * 4bit , 需要用(256kb * 8bit )/(16k*4bit) = 32

image-20230430102252185

先用400FFFFF+1 = 40100000 , 再减去 40000000 等于 100000 除以 1024 等于 1024kb

1024kb 除以 256k*8bit 等于 4

image-20230507232208221

D

image-20230507232947379

B

Gannt (甘特图) 和(PERT) 网络图 重点 ​

image-20230430110415747

GANNT图 能表示每个任务的开始与结束 可以表示每个任务的并行(进展)情况 ,不能表示每个任务的依赖关系

PERT图能表示每个任务的开始与结束 可以表示每个任务的以来关系 不能表示每个任务的并行关系

image-20230430113944409

image-20230430120959614

image-20230430121654790

image-20230430140830605

D B

image-20230430142318991

原码反码补码移码 ​

最高位是 符号位 正数用0 表示 负数用1表示

正数的原码 反码 补码 都相同 , 移码 是在补码的基础上 符号位取反

正数的移码 是在补码的基础上 符号位取反

负数的反码 是 在 原码的基础上 符号位不变,其他位取反

负数的补码 是在反码的基础上 加1

负数的移码 是在补码的基础上 符号位取反

image-20230430184321343

image-20230430184815122

image-20230430190358588

负数 的 补码 的 补码 为原码

image-20230430192108257

image-20230430192325795

注意 看清楚 是可以表示几个数 还是 表示 数的范围,这个是 数的范围

媒体 ​

感觉媒体:作用于人的器官,能够感受到的媒体,视听嗅味触的媒体,语言 音乐 图形 文字 动画都是感觉媒体

表示媒体:表述感觉媒体的数据编码, 如 JPG PNG GIF MP3 MP4 ASCLL

表现媒体: 媒体输入输出设备 如鼠标 键盘 麦克风 为 输入表现媒体 音响 显示器 打印机 为输出表现媒体

存储媒体:存储表示媒体的物理介质 如 硬盘 光盘

传输媒体: 纯属表示媒体的物理介质 如 电缆 光缆

image-20230430193611253

  • 使用150DPI的扫描分辨率扫描3*4英寸的彩色照片 ,得到原始24位真彩色图像的数据量是( )byte.

​ A :1800 B:90000 C:270000 D810000

理解:DPI:(Dots Per Inch ) 每英寸点数 通常用来描述数字图像输入设备(如图像扫描仪)或点阵图像输出设备(点阵打印机)输入或输出点阵图像的分辨率。一幅3×4英寸的彩色照片在150DPI的分辨率下扫描得到原始的24位真彩色图像的数据量是(150×3)×(150×4)×24/8=810000字节

  • 使用( )DPI的分辨率扫描一副2*4 英寸的照片,可以得到一副300 * 600 像素的图像

    • A 100 B 150 C 300 D 600 x*2 *x *4 = 180000
  • 以下媒体中,( )是表示媒体,(/) 是表现媒体

    • A 图像 B 图像编码 C 电磁波 D 鼠标

树 ​

有且仅有一个根节点

具有相同父节点的节点 互为兄弟节点

节点的度: 一个节点的子树的个数 就是该节点的度

树的度:树中节点的度的最大值

叶子结点:度为0的结点 没有子树的结点

结点的层次:根节点为第一层 根节点的孩子为第二层

二叉树 ​

每个节点 最多只有两个子树 也就是不存在 度>2 的结点

对于二叉树的第i层 最多有 2^(i-1)次方个节点

深度为k的二叉树 一共有 2^i次方 - 1 个节点

度为0的结点 一定比度为2的结点多一个

满二叉树

所有分支都存在左子树个右子树,并且最后一层叶子结点为满

非叶子节点的度一定为2

叶子结点只能在最后一层

完全二叉树

和满二叉树类似,但是除了最后一层 其他节点都为满

叶子结点只能出现在最后一层,并且 不满的叶子结点 只能在左侧

哈夫曼树 重点 ​

每次会选择权值最小 的两个节点 构造出一个新的节点 左小 右大

image-20230501022354925

image-20230501093749413

image-20230501102722441

这个题不太懂 6 个 字符 2^n 这个大于6 是啥意思?

image-20230501103952200

image-20230501105252171

(3-2.2)/3 =0.266666≈C

image-20230501105909138

前缀中缀后缀表达式 ​

中缀表达式 就是 运算法在 数据之间 例如 3 + (4*7) -2

前缀表达式 运算符在数字的前面

后缀表达式 运算符放在 数据后面

image-20230501114351553

image-20230501114554894

image-20230501114904104

image-20230501120129788

A

image-20230501121002064

公钥私钥 ​

公钥:加密和验证

私钥:解密和签名

CA机构:权威机构

公家宴 私借钱

image-20230501123706025

image-20230501135536374

image-20230501141057559

image-20230501141129260

image-20230501141320283

image-20230501141403098

image-20230501143239586

image-20230501143348615

甲的 数字签名 相当于 甲用私钥进行签名

image-20230501143735592

上下文无关文法 ​

image-20230502102027007

B

循环队列 ​

image-20230502102108635

image-20230502102153522

计算机网络计算 ​

image-20230502102222855

D

image-20230502102607253

image-20230502102739025

这里的网络地址说的应该就是 主机地址 ,不是网络号, 可以有 不是 可用 那么 就不用减2 了 所以是 2^24

image-20230502102923028

image-20230502102952344

image-20230502103353618

image-20230502103459116

CD

image-20230502103522891

image-20230508000151619

image-20230502104247936

关系模式无损连接 ​

image-20230502104314667

image-20230502104613164

面向对象技术 ​

面相对象的方法有 Booch Coad 和 OMT 方法 , Jackson 方法是一种面向数据结构的开发方法

面向对象分析 主要强调 理解问题是什么 不考虑问题的解决方案 描述软件要做什么

面向对象设计 侧重问题的解决方案 并且需要考虑实现细节问题饿

抽取和整理用户需求 并建立问题域精确模型的过程 叫 面向对象分析

多态 有 参数多态 包含多态 过载多态(同一个名字在上下文中所代表的含义不同) 强制多态

在领域模型中 不包含 领域对象

xml是标记型语言

python 是面向对象 解释型语言

Prolog 是逻辑型程序设计语言

C++ 是面向对象 编译型语言

软件开发模型 ​

瀑布模型 适合需求明确 或者 二次开发的场景

原型模型 适合需求不明确的场景 因为可以画原型图

增量模型

螺旋模型 包含了 原型模型的迭代特征 还包含了风险分析 这个特征 使软件无法排除重大风险时 有机会停止 螺旋模型适合大型昂贵的系统级软件应用

喷泉模型 属于 面向对象的开发模型

风险的优先级通常是根据 风险暴露 设定

逆向工程工具属于 软件维护 工具

软件工程 ​

需求分析 确定软件要完成的功能及非功能性要求

概要设计 将需求转化为软件的模块划分 确定模块之前的调用关系

详细设计 将模块进行细化 得到详细的结构和算法

编码 根据详细设计 进行代码编写 得到可运行的软件 并进行单元测试

在概要设计阶段 选择适当的解决方案 将系统分解为若干个子系统 建立整个系统的体系结构

极限编程 ​

  • 敏捷开发方法是一种强调灵活性和快速开发的一种方法,有多种具体的方法,其中极限编程时敏捷开发中一种普遍的方法,极限编程包含12个实践操作,其中,集体所有权表示任何开发人员可以对系统任何部分进行改变,结对编程实际上存在一个非正式的代码审查过程,可以获得更高的代码质量。据统计,结对编程的编码速度与传统的单人编程相当

系统设计知识 ​

  • 在软件设计中,人们总结了一些启发式原则,根据这些原则进行设计,可以设计出较高质量的软件系统。其中,模块的扇入扇出适中,模块大小适中以及完善模块功能都可以改进设计质量。而将相似功能的模块合并可能会降低模块内聚和提高模块之间的耦合,因此并不能改进设计质量 , 模块的功能越单纯越好 也不能改进设计质量

    模块的内聚是一个模块内部各个元素彼此结合的紧密程度的度量。

    ①(偶然内聚)巧合内聚:指一个模块内的各处理元素之间没有任何联系。

    ②逻辑内聚:指模块内执行考干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。

    ③时间内聚:把需要同时执行的动作组合在一起形成的模块。

    ④过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。

    ⑤通信内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。

    ⑥顺序内聚:指一个模块中的各个处理元素都密切相关于同—个功能且必须顺序执行,前一个功能元素的输出就是下一功能元素的输入。

    ⑦:功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可。

    其中 巧合内聚 该内聚类型具有最低的内聚性,是最不好的一种内聚类型。具有该类内聚类型的模块具有不易修改、不易理解和不易维护等特点,同时会影响到模块间的耦合关系。

​

模块独立性是创建良好设计的一个重要原则,一般采用模块间的耦合和模块的内聚两个准则来进行度量。耦合程度越低,内聚程度越高,则模块的独立性越好。存在多种模块之间的耦合类型,从低到高依次为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。其中, 公共耦合是指一组模块都访问同一公共数据环境; 控制耦合是指一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一个模块的功能; 标记耦合是一组模块通过参数表传递记录信息; 数据耦合是一个模块访问另一个模块时,彼此之间通过数据参数(不是控制参数,公共数据结构或外部变量),来交换输入输出信息。

标准化和知识产权 ​

1.软件著作权中的翻译权 是指 以不同于原软件作品的一种程序语言转换该作品原使用的程序语言,而重现软件作品内容的创作的产品权利 简单说 就是将原软件从一种程序语言 转换成另一种程序语言的权利

利用商业秘密权 可以对软件的技术信息 经营信息提供保护

王某买了一副美术作品 他享有该作品的 所有权预与其览权

网络安全 ​

数据库容灾属于 系统安全 和 应用安全

机房安全属于物理安全

入侵检测属于网络安全

漏洞补丁管理属于系统安全

数据库安全属于应用安全

ARP攻击(ARP欺骗)是欺骗攻击的一种,通过伪造IP地址和MAC地址,能够在网络中产生大量的ARP通信量使网络阻塞,如果伪造网关的IP地址和MAC地址对,则所有发往网关的IP包将因为MAC地址错误而无法到达网关(ARP攻击一般会将MAC地址改为发起ARP攻击的主机地址),造成无法跨网段通信。 处理ARP攻击的方法为首先断开ARP攻击主机的网络连接,然后用“arp-d”命令清除受攻击影响的ARP缓存。

IE浏览器中 安全级别最高的区域设置是 受限站点

FTP服务器控制端口 21 数据端口20

媒体 ​

矢量图中的图形元素称为图元。而另一类图具有代表性的图像表示形式是位图图像,该图采用像素来表示图像

VCD使用了MPEG-1标准作为其音、视频信息压缩编码方案,而MPEG-2标准中的音、视频压缩编码技术被应用到DVD中。

声音信号时模拟信号,要使声音信号数字化并传递 首先要进行A/D转换

操作系统原理 ​

存储管理

若计算机系统的IO接口与主存采用统一编址 ,则输入输出操作是通过 访存 指令 来完成的

CPU是在 一个总线周期 结束时响应DMA请求的

虚拟存储体系由 主存-辅存 两级存储器构成

在机器指令的地址字段只中,直接指出操作数本身的寻址方式是 立即寻址

中间代码生成和代码优化 并不是每个编译器都必须的,与编译器相比 解释器 参与运行控制,程序执行的速度慢

解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

主存与Cache 的地址映射方式中 全相联 方式 可以实现主存任意一块装入Cache 中任意位置,只有装满 才需要替换

直接相联映射 : 主存中 一块 只能映射到Cache 的一个特定块中

组相联映射 : 各区中的某一块 只能存入缓存的同组号的空间内 ,但组内各块地址之间 则可以任意存放

直接映射: 从主存的组 到 Cache 的组之间 采用直接映射方式 两个对应的组内部 采用全相联映像方式

将高级语言程序转换为一种中间代码是现代编译器的常见处理方式 常用的中间代码 有 后缀式 三地址码 语法树 等

指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。CPU执行指令的过程中,根据时序部件发出的时钟信号按部就班进行操作。在取指令阶段读取到的是指令,在分析指令和执行指令时,需要操作数时再去读操作数。 CPU首先从程序计数器(PC)获得需要执行的指令地址,从内存(或高速缓存)读取到的指令则暂存在指令寄存器(IR),然后进行分析和执行。

算法 ​

若数据基本有序 插入排序是 最佳选择

输入 数据是否有序 对 归并 和 计数排序 算法没有影响

对传统的快速排序 输入数据有序 反而使其效率降低

若关键字取值范围较小 则计数排序是最佳选择

0 1 背包 是动态规划算法 自底向上 递推 从小范围 推到大范围

结构化分析与设计 ​

数据流图是结构化分析的一个重要模型,描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能,用于功能建模。 数据流图中有四个要素:外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;数据流表示数据沿箭头方向的流动;加工是对数据对象的处理或变换;数据存储在数据流中起到保存数据的作用,可以是数据库文件或者任何形式的数据组织。

结构化分析模型包括数据流图、实体联系图、状态迁移图和数据字典,因此这些模型是需求分析阶段的输出。而确定软件体系结构是在软件设计阶段进行的。

UML ​

活动图(activity diagram)是一种特殊的状态图,它展现了在系统内从一个治动到另一个活动的流程,专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程。

如下图所示:

image-20230512122329497

活动图一般包括活动状态和动作状态、转换和对象。活动图有开始、结束和一系列动作,可以表示分支、合并、分岔和汇合。分支描述基于布尔表达式的可选择路径,可有一个入流和2个或多个出流,在每个出流上放置一个布尔表达式条件(监护表达式),每个出流的条件不应该重叠,但需要覆盖所有可能性。合并描述当两条控制路径重新合并,不需要监护条件,只有一个出流。分岔描述把一个控制流分成两个或多个并发控制流,可以有一个进入转移和两个或多个离去转移,每个离去的转移表示一个独立的控制流,这些流可以并行的进行。汇合表示两个或多个并发控制流的同步,可以有两个或多个进入转移和一个离去转移,意味着每个进入流都等待,直到所有进入流都达到这个汇合处。

注意 中括号 那玩意叫 监护表达式

设计模式 23 种设计模式 ​

单原建工象 ----- 创建型设计模式

单例模式

原型模式

(Prototype)模式用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。原型模式适用于以下几种情况: ①当一个系统应该独立于它的产品创建、构成和表示时; ②当要实例化的类是在运行时刻指定时,例如,通过动态装载; ③为了避免创建一个与产品类层次平行的工厂类层次时; ④当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

构建者(建造者)模式

(Builder)模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式适用于以下几种情况: ①当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时; ②当构造过程必须允许被构造的对象有不同的表示时。

工厂(方法)模式

(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。工厂方法适用于以下几种情况: ①当一个类不知道它所必须创建的对象的类的时候; ②当一个类希望由它的子类来指定它所创建的对象的时候; ③当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

抽象工厂模式

(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。适用于:一个系统要独立于它的产品的创建、组合和表示时;一个系统要由多个产品系列中的一个来配置时;要强调一系列相关的产品对象的设计以便进行联合使用时;当提供一个产品类库,而只想显小'它们的接口而不是实现时。如为图形用户界面(GUI)组件定义不同平台的并行类层次结构,适合采用此模式,其中抽象工厂声明一个创建抽象界面组件的操作接口,具体工厂实现创建产品对象的操作。

代式乔装外组享 ------结构型

代理模式

适配器模式

桥接模式

装饰模式

(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加~些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。

外观模式

(Facack)模式为子系统中的一组接口提供一个-致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。

组合模式

享元模式

(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象而造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象;应用程序不依赖于对象标识。

状观中叠备解仿 ----- 行为型

状态模式

观察者模式

(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

中介模式

迭代器模式

备忘录模式

解释器模式

访问者模式

命责莫测

命令模式

Command)将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

责任链模式

(Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

模版方法模式

策略模式

(Strategy)定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。

6大设计原则

开里依 单迪离

开闭原则 对拓展开放 对修改关闭

里氏替换原则 父类引用 指向子类对象

依赖倒置 面相接口编程

单一职责 不要让类太累

迪米特法则 最少知道原则 对象与对象之间 尽量减少引用 不要互相引用

接口隔离 接口的粒度 要合适