流水线
-
流水线周期为执行时间最长的一段
流水线的计算公式为:一条指令的执行时间+(之灵条数-1)*流水线周期 1.理论公式:
(t1+t2+..+tk)+(n-1)*🔺t
2.实践公式:k🔺t+(n-1)🔺t
-
流水线的吞吐率:TP=指令条数/流水线的执行时间
-
流水线的最大吞吐率:TP(max)=1/🔺t
层次化存储结构
-
在计算机的存储系统体系在,Cache是访问最快的层次(若有寄存器,则寄存器最快)
-
使用Cache改善系统性能的依据是程序的局部性原理
-
如果以h代表对Cache的访问命中率,t1表示Cache的周期时间,t2表示主存储器的周期时间,以读操作为例,使用“Cache+主存储器”系统的平均周期为t3,则:t3=ht1+(1-h)t2
Cache-映像
-
直接相联映像:硬件电路简单,但冲突率高。
-
全相联映像:电路难于设计和实现,只适用于小容量的cache,冲突率较低。
-
组相联映像:与前两映像的折中。
-
地址映像是将主存与Cache的存储空间化为若干大小相同的也(或称为块)。
例如:某机的主存容量为1G,划分为2048页,每页512KB;Cache容量为8MB,划分为16页,每页512K.
主存-编址与计算
-
总线的分类
-
数据总线
-
地址总线
-
控制总线
校验码
-
奇偶校验:由若干位有效信息,再加上一位二进制位(校验位)组成校验码.奇偶校验,可检查一位错误,不可纠错.
-
循环检验码(模二运算) CRC
-
海明校验码:可检错也可纠错.
公式: 2(r次方)>=m+r+1(r为检验位,m为数据位)
三层模式-两层映射
-
(视图级)外模式(外模式-概念模式映射)
-
(表级)概念模式(概念模式-内模式映射)
-
(文件级)内模式
数据库设计过程
-
需求分析(数据流图,数据字典,需求说明书)
-
概念结构设计(E-R模型)
-
逻辑结构设计(关系模式)
-
物理设计
规范化理论-求候选键
图示法求候选键:
找到入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有节点,则该属性集为关系模式的候选键.
若入度为0的属性集不能遍历图中的所有结点,则需要尝试的将中间节点(既有入度,也有出度的节点)并入入度为0的属性集中,直至该集合能遍历所有节点,集合为候选键.
规范化理论-主属性与非主属性
定义:组成候选码的属性就是主属性,其他的就是非主属性.
规范化理论-范式
-
第一范式(1NF):属性都是不可分割的原子集
-
第二范式(2NF):消除主属性对候选键的部分依赖
-
第三范式(3NF):消除主属性对候选键的传递依赖
-
BC范式(BCNF):消除主属性对候选键的部分和传递依赖
1NF>2NF>3NF>BCNF
OSI RM 七层模型
-
应用层(应用层,表示层,会话层){POP3,FTP,HTTP,Telnet,SMTP|(属于TCP)、DHCP,TFTP,SNMP,DNS|(属于UDP)}
-
传输层(传输层){TCP,UDP}
-
网际层(网络层){IP,ICMP,IGMP,ARP,RARP}
-
网络接口层(数据链路层,物理层){CSMA/CD,TokingRing}
IP地址/子网划分
IPV4(32位)
A类:8位网络号,24位主机号
B类:16位网络号(第一第二位固定为【10】),16为主机号
C类:24位网络号(第一第二第三位位【110】),8位主机号
子网划分
-
子网掩码(主机号全为1,网络号全为0)
-
将一个网路划分位多个子网(取部分主机号当子网号)
-
将多个网络合并成一个大的网络(取部分网络号当主机号)
例题
例一:将B类IP地址168.195.0.0划分位27个子网,子网掩码为?
解:由题得这个IP地址的二进制数为:
1010 1000 1100 0011 0000 0000 0000 0000
27个至少要向主机号借五位
1111 1111 1111 1111 1111 1000 0000 0000
255.255.248.0
例二:将B类IP地址168.195.0.0划分为若干子网,每个子网内有主机700台,则子网掩码为多少?
解:因为有700台所以要10位网络号就够了,其他的全借给主机号
168.195.0.0的二进制为
1010 1000 1100 0011 0000 0000 0000 0000
1111 1111 1111 1111 1111 1100 0000 0000
255.255.252.0
对称加密技术
-
对称加密技术:强度不高但效率高;分发密钥困难;常用的对称加密算法:DES,3DES,RC-5,IDEA
-
非对称加密技术:密钥必须成对使用(公钥加密,相应的私钥解密);特点:加密速度慢,单强度高;常见的非对称加密算法:RSA,ECC
-
数字签名:用自己的私钥签名,用自己的公钥验证
网络安全-主动攻击与被动攻击
-
被动攻击:监听(保密性)一>消息内容获取/业务流分析
-
主动攻击:中断(可用性)、篡改(完整性)、伪造(真实性)
网络安全-防火墙
-
网络级(包过滤、状态检测)
-
应用级(双穴主机,屏蔽主机,、屏蔽子网)
软件的开发模型-敏捷开发方法
软件开发模型:
-
瀑布模型
-
V型
-
喷泉模型(唯一一个面对对象的开发模型)层次间没有明确的界限
-
原型化模型
-
演化模型
-
螺旋模型(瀑布模型和原型化模型相结合)
-
统一模型
-
敏捷方法(4大价值观:沟通,简单,反馈,勇气)
-
极限编程(XP):对费用控制严格的公司中使用
-
水晶系列方法:更少的约束却仍能成功
连通图
一个无向图(没有自环和重边),最多包含n(n-1)/2*条边,最少包含n-1条边。
排序算法
深度优先遍历(DFS)和广度优先遍历(BFS)
DFS:从上往下遍历(不用遍历完每层)
BFS:从上往下遍历,要遍历完,每一行的元素才能往下
哈夫曼树
最优二叉树(又称哈夫曼树):在叶子节点数n以及各叶子节点的权值Wk确定的前提下,树的带权路径长度WPL值最小的二叉树称为最优二叉树
哈夫曼树的特点:没有度数为1的节点,又称为正则二叉树
n 个叶子节点的哈夫曼树,度数为2的节点数为你n-1个,所以哈夫曼树一共有2n-1个节点
结构化开发方法
-
结构化方法(用户至上;自顶向下,逐步分解)
-
原型法
-
面向对象方法(更好的复用性;分析、设计、实现三个阶段,界限不明确【喷泉模型】)
-
面向服务方法(SOA)
需求分析
需求的分类:
-
功能需求
-
非功能需求
-
设计约束
应用的工具
-
-
数据流图(DFD)
-
数据字典(DD)
-
判定树
-
判定表
软件设计(高内聚低耦合)
应用的工具:
-
IPO图
-
PDL
-
PAD(问题分析图)
-
程序流程图
-
N/S盒图
内聚性:
由高到低
-
功能内聚(完成单一一个功能,各个部分协同工作,缺一不可)
-
信息内聚(处理元素相关,而且必须顺序执行****)
-
通信内聚(所有处理元素集中在一个数据结构的区域上)
-
过程内聚(处理元素相关,而且必须按特定的次序执行)
-
时间内聚(所包含的任务必须在同一时间间隔内执行)
-
逻辑内聚(完成逻辑上相关的一组任务)
-
巧合内聚(完成一组没有关系或松散关系的任务)
耦合性
由低到高
-
-
非直接耦合(两模块之间没有直接关系,它们之间的联系完全是通过主模块的控制来实现的)
-
数据耦合(一组模块借助参数表来传递简单数据)
-
标记耦合(一组模块通过参数表来传递记录信息)
-
控制耦合(模块之间的信息中包括用于控制模块内逻辑的信息)
-
外部耦合(一组模块都访问同一全局简单变量,而且不是通过参数该全局变量的信息)
-
公共耦合(多个模块都访问同一公共数据环境)
-
内容耦合(一个模块之间访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内容;两个模块有一部分程序代码重叠;一个模块有多个入口)
软件测试
-
白盒测试(等价类划分、边界值分析、错误推测、因果图)
-
黑盒测试(语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、路径覆盖)
-
等价类划分(确定无效和有效等价类、设计用例尽可能多的覆盖有效类、设计用例值覆盖一个无效类)
-
边界值分析(处理边界情况时最容易出错、选取的测试数据一个恰好等于、稍小于或稍大于边界值)
软件测试-McCabe复杂度(环路复杂度)
计算有向图G的环路复杂度的公式为:V(G)=m(边数)-n(节点数)+2
软件维护
-
软件维护类型
-
改正性维护
-
适应性维护
-
预防性维护
-
完善性维护(最高)
开发文档
-
可行性研究和项目任务书
-
需求规格说明
-
功能规格说明
-
设计规格说明
-
开发计划
-
软件集成和测试计划
-
质量保证计划、标准、进度
-
安全和测试信息
软件工程-软件质量保证
外部和内部质量
-
功能性
-
可靠性
-
易用性
-
效率
-
维护性
-
可移植性
软件工程-软件过程改进-CMMI
-
初始级
-
可管理级(规律化过程)
-
已定义级(标准一致的过程)
-
定量管理级(可预测的过程)
-
优化管理级(不断改进的过程)
二叉树
-
二叉树第i层至多有2(i-1)个节点。深度为m的满二叉树有2m个节点。
-
在任意一颗二叉树中,度为0(即叶子节点)总比度为2的节点多一个
顶点的最晚时间:
-
(不在关键路径上)最晚时间=关键总时间-汇点逆向到该顶点的最短路径时间
-
(在关键路径上) 最晚时间=最早时间
-
某顶点的最早发生时间:从源点到该顶点的最长路程
-
松弛时间=最晚时间-最早时间
模块的内聚类型
-
如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
-
如果一个模块完成的功能必须在同一时间内执行(如系统的初始化),但这些功能只是因为时间因数关联在一起,则称为时间内聚。
-
如果一个模块的各成分和同一个功能相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
-
几个逻辑相关的功能被放在同一个模块中,则称为逻辑内聚。
-
表示对象的部分-整体层次结构描述的是组合模式。
-
想使用一个已经存在的类,而它的接口不符合要求描述的是适配器模式。
-
在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责描述的是装饰模式。
-
不希望在抽象和它的实现部分之间有一个固定判定关系描述的是桥接模式。
事务的ACID特性:
-
原子性:事务是原子的,要么做,要么什么都不做;
-
一致性:事务的执行结果必须保证数据库从一个一致状态变到另一个一致性状态;
-
隔离性:事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的;
-
持久性:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也永久有效。
UML(统一建模语言)
结构图
-
类图
-
对象图
-
包图
-
组合结构图
-
构件图
-
部署图(软硬件之间的映射)
-
制品图
行为图
-
用例图(系统与外部参与者的交互)
-
顺序图(强调时间顺序)
-
通信图(协作图)
-
定时图
-
状态图
-
活动图
类图
依赖关系:一个事物发生变化影响另一个事物。
泛化关系:特殊/一般关系。
关联关系描述了一组链,链是对象之间的连接。
聚合关系整体与部分生命周期不同;
组合关系:整体与部分生命周期相同。
实现关系:接口与类之间的关系。
面向对象设计-设计模式的分类
创建型模式
-
工厂方法(factory methed)模式
-
抽象工厂(abstract factory)模式
-
原型(prototype)模式
-
单例(singleton)模式
-
构建器(builder)模式
结构型模式
-
适配器(adapter)模式
-
桥接(bridge)模式
-
组合(composite)模式
-
装饰(decorator)模式
-
外观(facade)模式
-
享元(flyweight)模式
-
代理(proxy)模式
行为型模式
-
职业链(chain of responsibility)模式
-
命令(command)模式
-
解释器(interpreter)模式
-
迭代器(iterator)模式
-
中介者(mediator)模式
-
备忘录(memento)模式
-
观察者(observer)模式
-
状态(state)模式
-
策略(stratege)模式
-
模板方法(template method)模式
-
访问者(visitor)模式
-
-
面向对象设计-创建型模式
-
抽象工厂模式(Abstract Factory)****:提供一个接口,可以创建一系列相关或互相依赖的对象,无需指定它们具体的类。
-
构建器模式(Builder):将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不一样的表示。
-
工厂方法模式(Factory Method):定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法是的子类实例化的过程推迟。
-
原型模式(Prototype):用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。
-
单例模式(Singleton):保证一个类只有一个实例,并提供一个访问它的全局访问点
面向对象设计-结构型模式
-
适配器模式(Adapter):将一个类的接口转换成用户希望得到的另一种接口,它使原本不相容的接口得以协同工作。
-
桥接模式(Bridge):将类的抽象部分和它的实现部分分开来,使它们可以独立地变化。
-
组合模式(Composite):将对象组合成树形结构以表示“整体-部分”的层次结构,是的用户对单个对象和组合对象的使用具有一致性。
-
装饰模式(Decorator):动态地给一个对象添加一些额外的职责,它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。
-
外观模式(Facade):定义一个高层接口,为子类系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用。
-
享元模式(Flyweight):提供支持大量细粒度对象共享的有效方法。
-
代理模式(Proxy):为其他对象提供一种代理以控制这个对象的访问。
面向对象设计-行为型模式
-
职责链模式(Chain of Responsibility):通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求。
-
命令模式(Command):将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,请请求排队或记录请求日志,支持可撤销的操作。
-
解释器模式(Interpreter):给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子。
-
迭代器模式(Iterator):提供一种方法来顺序访问一个集合对象中的各个元素,而不需要暴露该对象的内部表示。
-
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互。
-
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并且在该对象之外保存这个状态,从而可以在以后该对象恢复到原先保存的状态。
-
观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,使用依赖于它的对象都得到通知并自动更新。
-
状态模式(State):允许一个对象在其内部状态改变时改变它的行为。
-
策略模式(Strategy):定义一些列的算法,把它们一个个封装起来,并且使它们之间可以相互替换,从而让算法可以独立于使用它的用户而变化。
-
模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可抽象定义算法的某些特定的步骤。
-
访问者模式(Visitor):表示一个作用于某个对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作。
-
-
-
稀疏数组
-
上三角矩形:在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为: (2n-i+1)*i/2+j
-
下三角矩形:在矩阵中下标分别为i和j的元素,对应的一维数组的下标计算公式为: (i+1)*i/2+j
数值的表示范围和浮点数的计算
-
原码(二进制数;第一位是符号集,0表示+,1表示-)
-
反码(把除符号集外的,反回去)
-
补码(在补码的基础上+1)
-
移码(在补码的基础上,对符号集取反)
原码,反码的定点整数-((2的n次方-1)-1) ~ +((2的n次方-1)-1),n表示有多少位二进制数.
补码,移码的定点整数-((2的n次方-1)) ~ +((2的n次方-1)-1),n表示有多少位二进制数。(少了(-0)).
数值1 | 数值-1 | 1+(-1) | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | |
反码 | 0000 0001 | 111111110 | |
补码 | 0000 0001 | 111111111 | 0000 0000 |
移码 | 1000 0001 | 01111111 |
浮点数的运算
N=尾数基数(指数) 如:3.14(10)3
特点:
-
一般尾数用补码,阶数用移码
-
阶码的尾数决定数的表示范围,位数越多范围越大.
-
尾数的位数决定数的有效精度,位数越多精度越高.
-
对阶时,小数向大树看齐
-
对阶是通过较小数的尾数右移实现的
如3.14*10(3)
阶符 | 阶码 | 数符 | 尾数 |
---|---|---|---|
0(正) | 10 | 0(正) | 3.14 |