一、计算机组成与结构
1、数据表示
1.1、基本单位
最小的数据单位:比特bit, b 例如:一个字节是八个比特,即:1byte = 8bit
最小的存储单位:字节byte,B 例如:1KB=1024B
1.2、进制的转换
二进制是Binary,简写为B
八进制是Octal,简写为O
十进制为Decimal,简写为D
十六进制为Hexadecimal,简写为H
1.2.1、R进制转十进制使用按权展开法
将R进制数的每一位数值用R的k平方表示,k与该位和小数点之间的距离有关。
小数点前从0开始,后从-1开始
例1: 10100.01 二进制转十进制
先把K标记上 1⁴ 0³ 1² 0¹ 0⁰ . 0⁻¹ 1⁻²
得到:1*2⁴ + 1*2² + 1*2⁻² = 16+4+(1/4)=20.25
注意:1⁰=1 2⁰=1 (任何数的0次方都等=1,0的0次方无意义。) 以及 0的任何次方都等于0
负数次方的数等于它的倒数
例2:AF0 十六进制转十进制
A*16² + F*16¹
1.2.2、十进制转R进制使用短除法
需要转换的数字/r,取余数,一直除尽(到小数位),倒序排上去
例如:900转16进制 =384
900/16=56…4
56/16=3…8
3/16=0…3
1.2.3、二进制(8进制与16进制)
2转16进制,把2进制,从右至左,每4个一组(8421),不足补0,11011=1b
8转2进制,每位数分3组,421,进行相减,如:6=110
1.2.4、进制加减法
无论是进1还是借1都要看是多少进制,
二进制就满2进1,借的那个 1当2用,
八进制满8进1,借的那个 1当8用,
十六进制就满16进1,借的那个1当16用。
1.3、数的表示
数的符号用0和1表示,小数点则隐含,不占位置。
1.3.1、码制
简化计算机运算部件的设计
最高位是符号位,0表示正号,1表示负号
注意:原码不能直接运行
正数的反码与原码相同,负数的反码则是其绝对值按位求反,符号位不变
正数的补码与其原码和反码相同,负数的补码则等于其反码的末位加 1
补码,移码0有唯一的编码
在偏移量为 2^(n-1)的情况下,只要将补码的符号位取反便可获得相应的移码
(补码的反码的补码就是原码)先把R进制转为2进制,然后求反码,再求补码最后得到原码。
例如:2X的补码是90H,求X的真值
1、90H为16进制,转2进制,10010000
2、补码的反码的补码就是原码
1 0010000,最高位为1,代表负数,它的反码为(最高位不变,其他的取反):1 1101111
1 1101111,最高位为1,代表负数,它的补码为(在末位+1):1 1110000
3、将原码1 1110000转为10进制:-(2⁶+2⁵+2⁴)= -112
4、-112 / 2 = -56
纯小数转原码
若机器字长n等于8,求十进制-5.1875的原码。
方法:与整数求原码方法一致,先求二进制数,判断符号位为正则最高位为0,为负则最高位为1。
①观察发现由整数5和小数1875组成,分两步进行求二进制。
②5的二进制为101
③计算0.1875的二进制,采用"乘2取整,顺序排列"法。
0.1875*2=0.3750 取整数部分0
0.3750*2=0.7500 取整数部分0
0.7500*2=1.5000 取整数部分1
0.5000*2=1.0000 取整数部分1
至到小数部分为0,停止计算结果从上到下为:0011
④故加上符号为最后结果为:1 101.0011(第一个1是符号位表示负数)
取值范围
n为机器字长
原码与反码一样,-127到127
补码与移码一样,因为0是一样的编码,-128到127
1.3.2、浮点数
N = F × 2^E
N = F × 2 的 E次方,其中E称为阶码,F称为尾数。
浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度则由尾数决定。
规格化就是将尾数的绝对值限定在区间[0.1,1]。
运算
1、对阶。使两个数的阶码相同,小阶向大的对,浮点数向右移。(不是小数点右移)
2、求尾数和(差)。 损失的精度小
例如: 0.1234×10² 0.5678×10⁴ 相加
1、小阶向大的对,浮点数向右移 0.1234×10² = 0.0012×10⁴
2、0.001210⁴ + 0.567810⁴ =0.569×10⁴
浮点数相乘,阶码相加,尾数相乘。
浮点数相除,阶码相减,尾数相除。
都需要进行规格化处理并判断阶码是否溢出。
1.3.3、算术运算和逻辑运算
逻辑或与非:不多解释,0非1真
逻辑异或:相同为0,相异为1;A⊕E=ĀE+AĒ;Ā是A的非,+为或者
逻辑同或:相同为1,相异为0;A⊙E=ĀĒ+AE
2、◉校验码
码距:就单个编码 A:00 而言,其码距为 1,因为其只需要改变一位就变成另一个编码。
在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00 要转换为 B:11,码距为 2。
一般来说,码距越大,越利于纠错和检错。
2.1、奇偶校验
在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为 2。
只能检查错误不能纠正错误,并且奇数校验只能检查出代码奇数个出错的编码,不能检查出偶数个出错的编码,采用模2运算。
偶校验同理。
奇校验:原始码流+校验位 总共有奇数个1
它的校验位只有一位,要么是0,要么是1。并且它的校验码还可以放在码流的前面。
原始码 奇校验(奇数个1) 偶校验(偶数个1)
1011000 10110000 10110001
1010000 10100001 10100000
应用举例
ASCII码占用一个字节,低7位是有效位,最高位用作奇偶校验。
举例:ASCII码大写字母A(10进制为 65)
十六进制 0x41
二进制 01000001 -有效位为低7位
奇校验 11000001
偶校验 01000001
最高位是奇偶校验位
错误检测能力
只能检测出奇数个错误。
例如还是ASCII码 大写字母 A
奇校验 正确码流 11000001
错1位 11000011 变成了偶数个1,能检测出错误
错2位 11000010 变成了奇数个1,检测不出错误
错3位 11001010 变成了偶数个1,能检测出错误
2.2、循环冗余校验码(CRC)
CRC只能检错,不能纠错,其原理是找出一个能整除多项式的编码,首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方。
广泛应用于数据通信领域和磁介质存储系统中。生成多项式为k个数据位产生r个校验位来进行编码,其编码长度为 k+r。
左边为信息码(数据),右边为校验码。模 2 运算
使用 CRC 编码,需要先约定一个生成多项式 G(x)。生成多项式的最高位和最低位必须是 1。
是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
如:生成多项式为 G(x) = x⁴ + x³ + x + 1,
G(x) = 1 × x⁴ + 1 × x³ + 1 × x¹ + 1 × x ⁰,任何数的0次方都等=1,0的0次方无意义。
多项中x的幂指数存在的位置 1,不存在的位置0。本题中,x的幂指数为 0,1,3,4 的变量都存在,而幂指数为 2 的不存在,因此得到串 11011。
CRC校验码位数
CRC校验码位数 R= 生成多项式位数 - 1。
本题中:CRC校验码位数 = 4位,在信息位后面+0000。
设需要发送的信息为M = 1010001101,
G(x)=X⁵+X⁴+X²+1
产生多项式对应的代码为P = 110101
R= 生成多项式位数 - 1; 校验码位R=5。
在M后加5个0为计算序列:1010001101 00000
然后对P做模2除法运算,1010001101 00000 / 110101
得余数r(x)对应的代码:01110。
注意:除法是异或,相同为0,相异为1。
故实际需要发送的数据是1010001101 01110。其中CRC校验码就为:01110。
注意:余数不足r,则余数左边用若干个0补齐
2.3、海明码
本质也是使用奇偶校验方式检验
可以检错和纠错,码距是3,公式:(2^k)-1>=n+k,其中k是检验位,n是数据位
1.校验位的位数和具体的数据位的位数之间的关系
所有位都编号,从最低位编号,从1开始递增,校验位处于2的n次方中,即处于第 1,2,4,8,16,32,……位上,其余位才能填充真正的数据位。
如:n=7
位数 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|
信息位 | d4 | d3 | d2 | d1 | |||
校验位 | x2 | x1 | x0 |
2.计算校验码
将所有信息位的编号都拆分成二进制表示
如题:7=2⁰+2¹+2²=1+2+4;所以位数7的信息位(d4)由校验位x0,x1,x2校验
3.例题
例如:求0100 1101的海明码
1、求检验位;
数据位为8,检验位为:(2k)-1>=8+k,2k>=8+k+1,k=4。
位数 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
信息位 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | ||||
校验位 | x3 | x2 | x1 | x0 |
2、将信息位的编号拆分成二进制
12=8+4
11=8+2+1
10=8+2
9=8+1
7=4+2+1
6=4+2
5=4+1
3=2+1
3、本质也是使用奇偶校验方式检验
x0(2⁰),所有信息位的编号存在1的,它都会校验。
x0为1:11、9、7、5、3;它们对应的信息位是:10101
假设我们采用偶校验,也就是1的个数为偶数,因为在信息位中1的个数是奇数,所以x0填1,让其变为偶数。
x1(2¹)为2:11、10、7、6、3;信息位是:10111;填0;
x2(2²)为4:12、7、6、5;信息位是:0110;填0;
x3(2³)为8:12、11、10、9;信息位是:0100;填1;
得出海明码:0100 1110 0101
4.检错和纠错原理
如题:收到海明码:0100 1110 0101
1、先找出r,2⁰=1,2¹=2,2²=4,2³=8
r⁰=1,r¹=0,r²=0,r³=1
2、如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确。
r⁰ ⊕ i11 ⊕ i9 ⊕ i7 ⊕ i5 ⊕ i3 = 1⊕1⊕0⊕1⊕0⊕1=0
r¹ r² r³依次类推,因为是偶校验,应该全为0,有一个为1,则校验失败。
纠错
我们将上述题目中 i6 改为0,海明码为:0100 1100 0101;
r⁰ ⊕ i11 ⊕ i9 ⊕ i7 ⊕ i5 ⊕ i3 = 1⊕1⊕0⊕1⊕0⊕1=0
r¹ ⊕ i11 ⊕ i10 ⊕ i7 ⊕ i6 ⊕ i5 ⊕ i3 = 0⊕1⊕0⊕1⊕0⊕0⊕1=1
r² ⊕ i12 ⊕ i7 ⊕ i6 ⊕ i5 = 0⊕0⊕1⊕0⊕0=1
r³ ⊕ i12 ⊕ i11 ⊕ i10 ⊕ i9 = 1⊕0⊕1⊕0⊕0=0
因为所得出的数据是:0110,不全为0,校验失败。
r¹与r²得出的数据1,r¹=2,r²=4,2+4=6,故第6位出现错误。
纠错就是找出错误位,纠错方法就是将该位逆转。
3、计算机硬件和指令
计算机的硬件基本系统由五大部分组成:运算器、控制器、存储器、输入设备和输出设备。
运算器和控制器合并称为中央处理单元,即CPU。
存储器分为内部存储器(内存)外部存储器(硬盘)
内部存储器:速度高、容量小,一般用于临时存放程序、数据及中间结果。
外部存储器:容量大、速度慢,可以长期保存程序和数据。
输入设备和输出设备合并称为外设。
3.1、CPU
组成:由运算器、控制器、寄存器组和内部总线等部件组成;
功能:程序控制、操作控制、时间控制、数据处理;
3.1.1、运算器
数据加工处理部件,完成算术和逻辑,是执行部件。
由算术逻辑单元 ALU(实现对数据的算术和逻辑运算)、累加寄存器 AC(运算结果或源操作数的存放区)、数据缓冲寄存器 DR(暂时存放内存的指令或数据)、和**状态条件寄存器 PSW(保存指令运行结果的条件码内容,如溢出标志等)**组成。
执行所有的算术运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较等。
3.1.2、控制器
不仅要保证程序的正确执行,而且要能够处理异常事件。
由指令寄存器IR(暂存 CPU 执行指令)、程序计数器PC(存放指令执行地址)、地址寄存器 AR(保存当前 CPU 所访问的内存地址)、**指令译码器 ID(分析指令操作码)**等组成。控制整个CPU 的工作,最为重要。
3.2、指令
3.2.1、指令周期的四个阶段
CPU 依据指令周期的不同阶段来区分二进制的指令和数据,因为在指令周期的不同阶段,指令会命令 CPU 分别去取指令或者数据。
1.取指阶段
将程序计数器PC中的指令地址取出,送入地址总线,CPU依据指令地址去内存中取出指令内容存入指令寄存器IR
2.译码阶段
一条指令由操作码和操作数两部分组成,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。
CPU通过对指令寄存器IR中的指令进行解码,分析出指令的含义及操作数,并将这些信息传递给执行阶段。
3.执行阶段
CPU按照指令所规定的操作进行运算,并保存结果。运算过程中需要使用到ALU等运算单元。
4.写回阶段
在写回阶段,CPU将执行阶段产生的结果写回到寄存器或内存中,以便其他指令访问这些数据。
3.2.2寻址方式
指令寻址方式
顺序寻址方式:指令地址在主存中顺序排列,当执行一段程序时,通常是一条指令接着一条指令地顺序执行。
跳跃寻址方式:下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。
指令操作数的寻址方式
立即寻址方式:指令的地址码字段指出的不是地址,而是操作数本身。
直接寻址方式:在指令的地址字段中直接指出操作数在主存中的地址。
间接寻址方式:操作数的地址的地址。
寄存器寻址:操作数存放在某一寄存器中,指令中给出存放操作数的寄存器名。
寄存器间接寻址:操作数存放在内存单元中,操作数所在存储单元的地址在某个寄存器中。
基址寻址方式:将基址寄存器的内容加上指令中的形式地址而形成操作数的有效地址,其优点是可以扩大寻址能力。
变址寻址方式:变址寻址方式计算有效地址的方法与基址寻址方式很相似,它是将变址寄存器的内容加上指令中的形式地址而形成操作数的有效。
相对寻址方式:相对于当前的指令地址而言的寻址方式。相对寻址是把程序计数器PC的内容加上指令中的形式地址而形成操作数的有效地址,而程序计数器的内容就是当前指令的地址,所以相对寻址是相对于当前的指令地址而言的。
寻址速度:立即寻址>寄存器寻址>直接寻址>寄存器间接寻址>间接寻址
注意:寄存器比内存快
4、计算机体系结构分类
按处理机的数量进行分类:单处理系统(一个处理单元和其他设备集成)、并行处理系统(两个以上的处理机互联)、分布式处理系统(物理上远距离且松耦合的多计算机系统)。
分类有两个因素,即指令流和数据流,
指令流由控制部分处理,每一个控制部分处理一条指令流,多指令流就有多个控制部分;
数据流由处理器来处理,每一个处理器处理一条数据流,多数据流就有多个处理器;
至于主存模块,是用来存储的,存储指令流或者数据流,因此,无论是多指令流还是多数据流,都需要多个主存模块来存储,对于主存模块,指令和数据都一样。
依据计算机特性,是由指令来控制数据的传输,因此,一条指令可以控制一条或多条数据流,但条数据流不能被多条指令控制,否则会出错,就如同上级命令太多还互相冲突,不知道该执行哪个,因此多指令单数据 MISD 不可能。
哈佛体系结构与传统的冯·诺依曼结构处理器相比,有两个明显的特点:
使用两个独立的存储器分别存储(程序)指令和数据,每个存储器都不允许(程序)指令和数据并存;
使用独立的两条总线,分别作为 CPU 与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。
这种分离的程序总线和数据总线可允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,提高了数据的吞吐率。
不过这种总线架构无法保证系统在一个机器周期内可以多次访问程序空间和数据空间。
多核 CPU 环境下进程的调度算法一般有全局队列调度和局部队列调度两种。
(1)全局队列调度是指操作系统维护一个全局的任务等待队列,当系统中有一个 CPU核心空闲时,操作系统便从全局任务等待队列中选取就绪任务并开始在此核心上执行,它的优点是 CPU 核心利用率较高。
(2)局部队列调度是指操作系统为每个 CPU 内核维护一个局部的任务等待队列,当系统中有一个 CPU 内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,局部队列调度可以使任务基本上无须在多个 CPU 核心间切换,有利于提高 CPU 核心局部缓存命中率,缺点是 CPU 利用率太低。
5、◉指令系统 CISC和 RISC
6、◉指令的流水处理
6.1、流水线原理
将指令分成不同段,每段由不同的部分去处理,因此可以产生叠加的效果,所有的部件去处理指令的不同段。
→取值→分析→执行→
未使用流水线执行指令情况:等到指令1执行完,才会取指令2的值;
取值 | 1 | 2 | 3 | ||||||
---|---|---|---|---|---|---|---|---|---|
分析 | 1 | 2 | 3 | ||||||
执行 | 1 | 2 | 3 |
使用流水线执行指令情况:指令1取值完,就会取指令2的值。
取值 | 1 | 2 | 3 | ||||||
---|---|---|---|---|---|---|---|---|---|
分析 | 1 | 2 | 3 | ||||||
执行 | 1 | 2 | 3 |
RISC中的流水线技术:
超流水线(在每个机器周期内能完成一个甚至两个浮点操作,以时间换空间)、
超标量(内装多条流水线同时执行多个处理,以空间换时间)、
超长指令字 VLIW(同时执行多条指令,发挥软件作用)。
超标量流水线技术:常规流水线是度为1的,即每个流水线阶段只执行一个部分,当度大于1时,就是超标量技术,当度为3时,相当于3条流水线并行执行,即取指、分析、执行每个阶段都同时处理3条指令,因此,计算时需要将:指令条数=指令条数 / 度。然后再套流水线执行时间的公式。
6.2、◉流水线时间计算
流水线周期:指令分成不同执行段,其中执行时间最长的段为流水线周期。
流水线执行时间:1条指令总执行时间 + (总指令条数-1) × 流水线周期。
流水线吞吐率:吞吐率即单位时间内执行的指令条数。公式:指令条数 / 流水线执行时间。
流水线的加速比:加速比即使用流线后的效率提升度,越高表明流水线效率越高,公式:不使用流水线执行时间 / 使用流水线执行时间。
6.3、◉单缓冲区和双缓冲区
三个阶段即:读入缓冲区→送入用户区→ 数据处理;
单缓冲区:缓冲区的数据必须先取出,才能开始下一个;所以读入缓冲区→送入用户区可以合并。
计算单缓冲区花费的时间 (T+M)*n+C
T为输入的时间,M为传输的时间,n为作业的个数,C为处理的时间
双缓冲区:有2个缓冲区交替读入,可以并行,所以是读入缓冲区→送入用户区→数据处理三段。
计算双缓冲区花费的时间 T*n+M+C
7、存储系统
主存是动态,DRAM,需要周期性刷新来保存信息
cahce静态,SRAM
7.1、计算机存储结构层次图
计算机采用分级存储体系的主要目的是为了解决存储容量、成本和速度之间的矛盾问题。
两级存储映像为:Cache-主存、主存-辅存(虚拟存储体系)。
按存储器所处的位置:内存、外存。
按存储器访问方式:按地址访问、按内容访问(相联存储器)。
按寻址方式:随机存储器、顺序存储器和直接存储器
按存储器的工作方式:可读可写存储器(RAM)、只读存储器(ROM 只能读,PROM 可写入一次,EPROM 和 EEPOM 既可以读也可以写,只是修改方式不用)。
7.2、局部性原理
在 CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内。(例如循环操作,循环体被反复执行)
时间局部性原理:如果一个数据项正在被访问,那么在近期它很可能会被再次访问,例如循环语句,即在相邻的时间里会访问同一个数据项。
空间局部性原理:在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的,例如程序顺序执行数组的访问,即相邻的空间地址会被连续访问。
工作集:进程运行时被频繁访问的页面集合。
7.3、Cache高速缓存
高速缓存用来存放当前最活跃的程序和数据,其特点是位于 CPU 与主存之间;速度比主存快 ,其内容是主存内存的副本拷贝,对程序员来说是透明的。
Cache 由控制部分和存储器组成,存储器存储数据,控制部分判断 CPU 要访问的数据是否在 Cache中,在则命中,不在则依据一定的算法从主存中替换。
7.3.1、地址映射,由硬件自动完成
将主存地址转换成 Cache 存储器的地址。
直接映像:主存的块与 Cache 块的对应关系是固定的,直接映像方式的优点是地址变换很简单,缺点是灵活性差。
Cache 中有多少块,主存的一个组就由多少块组成。
主存中每个组的第 i 块会映射到Cache中的第 i 块
Cache 与主存之间是一对多的关系,主存中的块只能存放在Cache存储器的相同块号中。
全相联映像:主存的块调入 Cache 的位置不受限制,十分灵活。其主要缺点是无法从主存块号中直接获得 Cache 的块号,变换比较复杂,速度比较慢。
Cache 中的任意一块可以存放主存中的任意一块
Cache 和主存之间是多对多的关系
组组相连映像:前面两种方式的结合,将 Cache 存储器先分块再分组,主存也同样先分页(页跟cache块是同一级别的)再分组,组间采用直接映像,即主存中组号与 Cache 中组号相同的组才能命中,但是组内全相联映像,也即组号相同的两个组内的所有块可以任意调换。
Cache 中若干个连续的块组成了一组,其中主存每个组中的第 i 块对应Cache中的第 i 组
7.3.2、◉Cache 置换算法
(1)随机替换算法:就是用随机数发生器产生一个要替换的块号,将该块替换出去。
(2)先进先出算法FIFO:就是将最先进入 Cache 的信息块替换出去。
(3)近期最少使用算法LRU:这种方法是将近期最少使用的 Cache 中的信息块替换出去。
(4)优化替换算法:这种方法必须先执行一次程序,统计 Cache 的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换。
(5)最近不经常使用LFU: 为每一个cache块设置一个计数器(初始值为0),用于记录该cache已经被访问了几次。 若cache已满,则选择计数器最小的cache块进行替换。
7.3.3、命中率及平均时间
Cache 存储器的大小一般为K或者 M 单位,很小,但是最快,仅次于 CPU 中的寄存器,而寄存器一般不算作存储器,CPU与内存之间的数据交互,内存会先将数据拷贝到 cache 里,这样,根据局部性原理,若 Cache 中的数据被循环执行,则不用每次都去内存中读取数据,会加快 CPU 工作效率。
因此,Cache 有一个命中率的概念,即当 CPU 所访问的数据在 Cache 中时,命中,直接从 Cache中读取数据,设读取一次 Cache 时间为 1ns,若 CPU 访问的数据不在 Cache 中,则需要从内存中读取,设读取一次内存的时间为 1000ns,若在 CPU 多次读取数据过程中,有 90%命中 Cache,则 CPU 读取一次的平均时间为 ( 90% × 1 + 10% × 1000 )ns
7.4、主存-编址计算
1.内存单元个数 = 内存尾地址 - 内存首地址 + 1。
2.内存容量=内存单元个数×每个内存单元容量。(按字节编址则为1字节,也即 8bit)
3.将得出来的 16 进制容量以及其他容量都化简为2的幂指数形式,再相除,不能直接硬算。
7.5、磁盘计算
7.5.1、磁盘结构和参数
磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。
磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间和等待时间。
特别注意:这里的磁头旋转是不会停的,也就是不会留下来等记录处理完
公式为:存取时间 = 寻道时间 + 等待时间(平均定位时间+转动延迟)
注意:寻道时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇区转到磁头下方所用的时间。
7.5.2、磁盘调度算法
磁盘数据的读取时间分为寻道时间+旋转时间,也即先找到对应的磁道,而后再旋转到对应的扇区才能读取数据,其中寻道时间耗时最长,需要重点调度。
先来先服务(FCFS):按照顺序
最短寻道时间优先(SSTF):让查找时间最短的那个作业先执行
扫描算法(SCAN)或电梯调度算法:先往靠近柱面的一方移动,然后反转
循环扫描算法(CSCAN)或单向扫描算法:先找到最近的那个作业,超那个方向一直执行,没有了,就反转到最靠近柱面的那个作业开始。
7.5.3、◉磁盘冗余阵列技术 RAID
RAID 即磁盘冗余阵列技术
RAID0没有提供冗余和错误修复技术;
RAID1 在成对的独立磁盘上产生互为备份的数据,可提高读取性能;
RAID2将数据条块化的分布于不同硬盘上,并使用海明码校验;
RAID3使用奇偶校验,并用单块磁盘存储奇偶校验信息;
RAID5 在所有磁盘上交叉的存储数据及奇偶校验信息(所有校验信息存储总量为一个磁盘容量),读/写指针可同时操作;
RAIDO+1(是两个 RAIDO,若一个磁盘损坏,则当前 RAID0 无法工作,即有一半的磁盘无法工作),
RAID1+0(是两个 RAID1,不允许同一组中的两个磁盘同时损坏)与 RAID1 原理类似,磁盘利用率都只有 50%。
助记:基本上是一道选择题,0是什么没有,1是50%,2是海明码,3是奇偶,5是读写分离,6是分布式。
根据关键字选择答案。
8、总线
从广义上讲,任何连接两个以上电子元器件的导线都可以称为总线,通常分为以下三类:
系统总线:是板级总线,用于计算机内各部分之间的连接,具体又可以分为三类:
数据总线:在CPU和RAM之间来回传送数据,表示系统并行传输数据的位数。
地址总线:指定在RAM之中存储的数据的地址,表示系统可管理的内存空间的大小。
控制总线:将控制器的信号传送到周边设备,代表的有ISA总线、EISA总线、PCI总线。
内部总线:内部芯片级别的总线,芯片与处理器之间通信的总线。
PCI 总线:PCI 总线是目前微型机上广泛采用的内总线,采用并行传输方式
外部总线:设备一级的总线,微机和外部设备的总线。代表的有RS232(串行总线)、SCSI(并行总线)、USB(通用串行总线,即插即用,支持热插拔)。
并行总线是含有多条双向数据线的总线,适合近距离高速数据传输。
串行总线是只有一条双向数据线的总线,适合长距离数据传输,速率低。
9、◉系统可靠性分析
可靠性指标
平均无故障时间 MTTF = 1 / 失效率。
平均故障修复时间 MTTR = 1 / 修复率。
平均故障间隔时间 MTBF = MTTF + MTTR。
系统可用性 = MTTF / (MTTF+MTTR) ×100%。
系统可用性 = (运行总时长 - 故障修复时间)/ 运行总时长
串并联系统可靠性
无论什么系统,都是由多个设备组成的,协同工作,而这多个设备的组合方式可以是串联、并联,也可以是混合模式。
串联系统:一个设备不可靠,整个系统崩溃,整个系统可靠性R = R1…R2….×Rn。
并联系统:所有设备都不可靠,整个系统才崩溃,整个系统可靠性 R=1-(1-R1)×(1-R2)×….×(1-Rn)。
混合系统:划分串联、并联,先把并算出来,在算串。
◉成熟性子特性是指系统避免因错误的发生而导致失效的能力;
容错性是指在系统发生故障或违反指定接口的情况下,系统维持规定的性能级别的能力;
易恢复性是指在系统发生失效的情况下,重建规定的性能级别并恢复受直接影响的数据的能力;
可靠性的依从性是指系统依附于与可靠性相关的标准、约定或规定的能力。
二、系统配置与性能评价
1、性能指标
计算机系统的性能指标
可靠性或可用性:计算机系统能正常工作的时间,其指标可以是能够持续工作的时间长度(例如,平均无故障时间),也可以是在一段时间内,能正常工作的时间所占的百分比。
◉处理能力或效率:又可分为三类指标,第一类指标是吞吐率(系统在单位时间内能处理正常作业的个数),第二类指标是响应时间(从系统得到输入到给出输出之间的时间),第三类指标是资源利用率,即在给定的时间区间中,各种部件(包括硬设备和软件系统)被使用的时间与整个时间之比。
计算机硬件性能指标
主频和 CPU时钟周期:主频又称为时钟频率,时钟周期是时钟频率的倒数。如主频为 1GHZ,说明1秒有 1G 个时钟周期,每个时钟周期为1/1G=1ns。
指令周期:取出并执行一条指令的时间。
总线周期:完成一次总线操作所需的时间,如访问存储器或I/0端口操作所用的时间。
关系:一个指令周期由若干个总线周架构成,一个总线周期又包含若干个时钟周期。
MIPS:百万条指令每秒,每秒处理的百万级的机器语言指令数,主要用于衡量标量机性能。
2、◉性能评价方法
时钟频率法:以时钟频率高低衡量速度。
指令执行速度法: 用加法指令的运算速度来衡量计算机的速度,表示机器运算速度的单位是 MIPS。
等效指令速度法:也称为吉普森混合法(Gibson mix)或混合比例计算法,是通过各类指令在程序中所占的比例(W)进行计算得到的,特点是考虑各类指令比例不同。
综合理论性能法 CTP:是美国政府为限制较高性能计算机出口所设置的运算部件综合性能估算方法。CTP 的估算方法是,首先算出处理部件每个计算单元的有效计算率,再按不同字长加以调整,得出该计算单元的理论性能,所有组成该处理部件的计算单元的理论性能之和即为CTP。
基准程序法:把应用程序中用得最多、最频繁的那部分核心程序作为评估计算机系统性能的标准程序,称为基准测试程序(benchmark)。基准程序法不但考虑到了CPU(有时包括主存)的性能,还将 I/0 结构、操作系统、编译程序的效率等对系统性能的影响考虑进来了,所以它是目前一致承认的测试系统性能的较好方法。
3、阿姆达尔解决方案
对系统中某组件采用某种更快的执行方式,所获得的系统性能的改变程度,取决于该组件被使用的频率,或所占总执行时间的比例。
加速比R= Tp / Ti
没优化的时间 / 优化后的时间
Tp表示不使用改进组件时完成整个任务的时间
Ti表示使用改进组件时完成整个任务的时间
加速比主要取决于两个因素:
能被改进的部分在总执行时间中所占的比例。这个值称为改进比例,记为Fe,它总是小于1。
在原来的条件下系统的执行时间与使用改进组件后系统的执行时间之比,记为Se,它总大于1。
R = 1 / (1 - Fe) + Fe / Se
三、操作系统知识
操作系统的作用:通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。
操作系统的特征:并发性、共享性、虚拟性、不确定性。
操作系统的功能:进程管理、存储管理、文件管理、设备管理、作业管理。
操作系统的分类:批处理操作系统、分时操作系统(轮流使用CPU工作片)、实时操作系统(快速响应)、网络操作系统、分布式操作系统(物理分散的计算机互联系统)、微机操作系统(Windows)、嵌入式操作系统。
嵌入式系统初始化过程按照自底向上、从硬件到软件的次序依次为:片级初始化→板级初始化→系统初始化。
计算机启动的基本流程为:BIOS→主引导记录→操作系统。
1、进程管理
1.1、进程的组成和状态
进程的组成:进程控制块 PCB(唯一标志)、程序(描述进程要做什么)、数据(存放进程执行时所需数据)。
三态模型(运行、就绪和阻塞)
五态模型(运行、活跃阻塞、静止阻塞、静止就绪、活跃就绪),活跃就绪=就绪,活跃阻塞=等待。
静止就绪和静止阻塞,需要人为的操作才会进入。
1.2、◉前趋图和进程资源图
前趋图
用来表示哪些任务可以并行执行,哪些任务之间有顺序关系。
ABC可以并行执行,但是必须ABC都执行完后,才能执行D。
图中有4个前驱关系。初始节点是ABC,终止节点是E
进程资源图
P代表进程,R代表资源,R方框中有几个圆球就表示有几个这种资源。
由进程指向资源的箭头是表示申请资源,反之表示分配资源
阻塞节点:某进程所请求的资源已经全部分配完毕,无法获取所需资源,该进程被阻塞了无法继续。
非阻塞节点:某进程所请求的资源还有剩余,可以分配给该进程继续运行。
先分配在申请
能不能化简,就是看别人释放了资源,你能不能执行完。
切记:先把你剩余的资源 - 要分配资源数 + 加上对方释放的 = 释放后你有的资源;
比如:进程A需要3个资源,你已经分配了2个给它,它尚需1个,你自己剩余2个,
此时你分配给它1个资源,等它释放后,你就有了4个资源。
1.3、进程间的同步与互斥
互斥和同步并非反义词
互斥表示一个资源在同一时间内只能由一个任务单独使用,需要加锁,使用完后解锁才能被其他任务使用;
同步表示两个任务可以同时执行,只不过有速度上的差异,需要速度上匹配,不存在资源是否单独或共享的问题。
1.4 、◉信号量操作
基本概念
临界资源:各个进程间需要互斥方式对其进行共享的资源,即在某一时刻只能被一个进程使用,该进程释放后又可以被其他进程使用。
临界区:每个进程中访问临界资源的那段代码。
信号量:是一种特殊的变量。
两类信号量
互斥信号量:对临界资源采用互斥访问,使用互斥信号量后其他进程无法访问,初值为1。
同步信号量:对共享资源的访问控制,初值是共享资料的个数。
P操作和V操作
执行P操作是主动的带有判断性质的-1,执行V操作是被动的因为某操作产生的+1。
- 信号量
P操作是对信号量减1,意味着请求系统分配一个单位资源,若系统无可用资源,则进程变为阻塞状态;
V操作是对信号量加1,意味着释放一个单位资源,加1后若信号量小于等于0,则从就绪队列中唤醒一个进程,执行V操作的进程继续执行。 - 实现互斥模型
使用信号量机制实现进程互斥时,需要为临界资源设置一个互斥信号量S,其初值通常为1。在每个进程中将临界区代码置于 P(S)和 V(S)之间。
P对它-1,表示一个资源被使用了,如果S=0了,就要等待它被释放,V对它+1,表示一个资源被释放了。 - 实现同步模型
使用信号量机制实现进程同步时,需要为进程设置一个同步信号量S,其初值通常为0。在进程需要同步的地方分别插入P(S)和 V(S)。
比如:有5个P操作,要同步V操作,首先S=5,当一个P操作完成后S-1,当S=0时,一起执行V操作。
1.5、进程调度
进程调度方式是指当有更高优先级的进程到来时如何分配CPU。分为可剥夺和不可剥夺两种,
可剥夺指当有更高优先级进程到来时,强行将正在运行进程的CPU分配给高优先级进程;
不可剥夺是指高优先级进程必须等待当前进程自动释放CPU。
三级调度
**高级调度(**又称长调度或作业调度,决定哪个作业可以调入系统中)、
中级调度(又称对换调度,决定哪个就绪进程可以调入内存中)、
低级调度(又称进程调度,决定内存中哪个就绪进程可以占用 CPU)。
调度算法
先来先服务FCFS:先到达的进程优先分配CPU。用于宏观调度。
时间片轮转:分配给每个进程CPU时间片,轮流使用CPU,每个进程时间片大小相同,很公平,用于微观调度。
优先级调度:每个进程都拥有一个优先级,优先级大的先分配CPU。
多级反馈调度:时间片轮转和优先级调度结合而成,设置多个就绪队列1,2,3.n,每个队列分别赋予不同的优先级,分配不同的时间片长度;新进程先进入队列1的末尾,按FCFS原则,执行队列1的时间片:若未能执行完进程,则转入队列2的末尾,如此重复。
1.6、◉死锁问题
当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中有多个进程处于死锁状态,就会造成系统死锁。
死锁产生的四个必要条件
- 互斥条件:任一时刻只允许一个进程使用资源。
- 不剥夺条件:进程已经占用的资源,不会被强制剥夺。
- 请求与保持条件:进程在请求其余资源时,不主动释放已经占有的资源。
- 环路条件:环路中每一条边是进程在请求另一个进程已经占有的资源。
死锁产生后,解决措施是打破四大条件,有下列方法:
- 死锁预防
死锁预防主要是针对破坏死锁的4个必要条件进行的。 - 死锁避免
是将限制条件弱化,允许死锁的存在,但不让它发生。
一般采用银行家算法来避免,就是提前计算出一条不会死锁的资源分配方法,才分配资源,否则不分配资源,
相当于借贷,考虑对方还得起才借钱。 - 死锁检测和解除
死锁检测是指判断是否存在死锁,死锁检测算法主要检查是否有循环等待。
死锁发生后的解除方法,如强制剥夺资源,撤销进程等 - ◉死锁资源计算
只要满足 m>=n×(k-1)+1 那就不会发生死锁,m为资源数量,n为进程数量,k为每个进程需要的资源数量
1.7、◉线程
传统的进程有两个属性:可拥有资源的独立单位;可独立调度和分配的基本单位。
引入线程后,线程是独立调度的最小单位,进程是拥有资源的最小单位,线程可以共享进程的公共数据、全局变量、代码、文件等资源,但不能共享线程独有的资源,如线程的栈指针等标识数据。
2、存储管理
高级语言编写,称为源程序,不能被计算机直接执行,需要编译成目标程序。
目标程序的地址不是内存的实际地址,一般称为逻辑地址(也称为相对地址或虚拟地址)
当程序运行时,它将被装入内存地址空间,称为物理地址(也称为绝对地址或实际地址)
为了保证程序的正确运行,必须将程序和数据的逻辑地址转换为物理地址。
存储器的结构:寄存器–高速缓存Cache–主存–外存。
地址重定位:将逻辑地址转换为实际主存物理地址的过程,分为静态重定位(在程序装入主存时就完成了转换)、动态重定位(边运行边转换)。
2.1、分区存储管理
所谓分区存储组织,就是整存,将某进程运行所需的内存整体一起分配给它,然后再执行。有三种分区方式:
固定分区:静态分区方法,将主存分为若干个固定的分区,将要运行的作业装配进去,由于分区固定,大小和作业需要的大小不同,会产生内部碎片。
可变分区:动态分区方法,主存空间的分区是在作业转入时划分,正好划分为作业需要的大小,这样就不存在内部碎片,但容易将整片主存空间切割成许多块,会产生外部碎片。
例如:根据分配前的内存情况,还需要分配9K空间。
算法如下:
首次适应法:按内存地址顺序从头查找,找到第一个>=9K空间的空闲块,即切割 9K空间分配给进程。
最佳适应法:将内存中所有空闲内存块按从小到大排序,找到第一个>=9K空间的空闲块,切割分配,这个将会找到与 9K 空间大小最相近的空闲块。
最差适应法:和最佳适应法相反,将内存中空闲块空间最大的,切割9K空间分配给进程,这是为了预防系统中产生过多的细小空闲块。
循环首次适应法:按内存地址顺序查找,找到第一个>=9K空间的空闲块,而后若还需分配,则找下一个,不用每次都从头查找,这是与首次适应法不同的地方,
可重定位分区:可以解决碎片问题,移动所有已经分配好的区域,使其成为一个连续的区域,这样其他外部细小的分区碎片可以合并为大的分区,满足作业要求。只在外部作业请求空间得不到满足时进行。
2.2、页式存储管理
如果采用分区存储,都是整存,会出现一个问题,即当进程运行所需的内存大于系统内存时,就无法将整个进程一起调入内存,因此无法运行,若要解决此问题,就要采用段页式存储组织,页式存储是基于可变分区而提出的。
将进程空间分为一个个页,假设每个页大小为4K,同样的将系统的物理空间也分为一个个 4K 大小的物理块,这样,每次将需要运行的逻辑页装入物理块中,运行完再装入其他需要运行的页,这样就可以分批次运行完进程,而无需将整块逻辑空间全部装入物理内存中,解决了空间极大的进程的运行问题。
逻辑页分为页号和页内地址,页内地址就是物理偏移地址,而页号与物理块号并非按序对应的,需要查询页表,才能得知页号对应的物理块号,再用物理块号加上偏移地址才得出了真正运行时的物理地址。
优点:利用率高,碎片小,分配及管理简单。
缺点:增加了系统开销,可能产生抖动现象
地址表示和转换
地址组成:页地址+页内偏移地址;(页地址在高位,页内偏移地址在低位)
物理地址:物理块号+页内偏移地址;
逻辑地址:页号+页内偏移地址;
物理地址和逻辑地址的页内偏移地址是一样的,只需要求出页号和物理块号之间的对应关系,首先需要求出页号的位数,得出页号,再去页表里查询其对应的物理块号,使用此物理块号和页内偏移地址组合,就能得到物理地址。
2.2.1、页面置换算法
进程空间分为100个页面,而系统内存只有10个物理块,无法全部满足分配,就需要将马上要执行的页面先分配进去,而后根据算法进行淘汰,使 100个页面能够按执行顺序调入物理块中执行完。
- 每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理地址
- 所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上
- 进程要知道哪些内存地址上的数据在物理内存上,哪些不在,还有在物理内存上的哪里,需要页表记录
- 页表的每一个表项分为两部分,第一部分记录此页是否在物理内存上,第二部分记录物理内存的地址
- 当进程访问某个虚拟地址,去查看页表,如果对应的数据不在物理内存中,则缺页异常
- 缺页异常的处理过程,就是把进程需要的数据从磁盘拷贝到物理内存中,如果内存已经满了 ,没有空地方,那就找一个页进行覆盖,当然如果被覆盖的页曾经被修改过,需要将此页写回磁盘。
缺页表示需要执行的页不在内存物理块中,需要从外部调入内存,会增加执行时间,因此,缺页数越多,系统效率越低。
页面置换算法如下:
最优算法:OPT,理论上的算法,无法实现,是在进程执行完后进行的最佳效率计算,用来让其他算法比较差距。原理是选择未来最长时间内不被访问的页面置换,这样可以保证未来执行的都是马上要访问的。
先进先出算法:FIFO,先调入内存的页先被置换淘汰,会产生抖动现象,即分配的页数越多,缺页率可能越多(即效率越低)。
最近最少使用:LRU,在最近的过去,进程执行过程中,过去最少使用的页面被置换淘汰,根据局部性原理,这种方式效率高,且不会产生抖动现象,使用大量计数器,但是没有LFU多。
淘汰原则:优先淘汰最近未访问的,而后淘汰最近未被修改的页面。
2.2.2、快表
是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号。
**快表是将页表存于 Cache 中;慢表将页表存于内存上。**慢表需要访问两次内存才能取出页,而快表是访问一次 Cache 和一次内存。
2.3、段式存储管理
将进程空间分为一个个段,每段也有段号和段内地址,与页式存储不同的是,每段物理大小不同,分段是根据逻辑整体分段的,因此,段表也与页表的内容不同,页表中直接是逻辑页号对应物理块号。段表有段长和基址两个属性,才能确定一个逻辑段在物理段中的位置。
优点:多道程序共享内存,各段程序修改互不影响。
缺点:内存利用率低,内存碎片浪费大。
综上:分页是根据物理空间划分,每页大小相同;分段是根据逻辑空间划分,每段是一个完整的功能,便于共享,但是大小不同。
地址表示
(段号,段内偏移):其中段内偏移不能超过该段号对应的段长,否则越界错误,而此地址对应的真正内存地址应该是:段号对应的基地址+段内偏移。
2.4 、段页式存储管理
对进程空间先分段,后分页
优点:空间浪费小、存储共享容易、存储保护容易、能动态链接。
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降。
3、文件管理
3.1、◉索引文件结构
系统中有 13 个索引节点,0-9为直接索引,即每个索引节点存放的是内容,假设每个物理盘大小为 4KB,共可存 4KB*10=40KB 数据;
10号索引节点为一级间接索引节点,大小为4KB,存放的并非直接数据,而是链接到直接物理盘块的地址,假设每个地址占 4B,则共有 1024 个地址,对应 1024 个物理盘,可存 1024*4KB=4098KB数据。
3.2、◉文件和树形目录结构
文件安全分为四级,从高到低分别为:系统安全、用户安全、目录安全、文件安全。
相对路径:是从当前路径开始的路径。
绝对路径:是从根目录开始的路径。
全文件名=绝对路径+文件名。
注意:绝对路径和相对路径是不加最后的文件名的,只是单纯的路径序列。
3.3、◉空闲存储空间的管理
空闲区表法:将所有空闲空间整合成一张表,即空闲文件目录。
空闲链表法:将所有空闲空间链接成一个链表,根据需要分配。
成组链接法:既分组,每组内又链接成链表,是上述两种方法的综合。
◉位示图法:重要,对每个物理空间用一位标识,为1则使用,为0则空闲,形成一张位示图。
例如:计算机系统字长64位,第0个逻辑编号对应的是0-63物理块。第1个对应的是64-127物理块。
将 256 号物理块分配给某文件,那么该物理块的使用情况在位示图中编号为 4 的字中
由于物理块从 0 开始,从第 0 块到第 255 块 刚好占用了 4 个字(256/64=4),第 256块应该是第五个字(编号为 4 的字)的 0 号位置。该字的 0 号位置“1” ,为1则使用了。
4、设备管理
设备的分类方式:
按数据组织分类:块设备、字符设备。
资源分配角度分类:独占设备、共享设备和虚拟设备。
数据传输速率分类:低速设备、中速设备、高速设备。
4.1、I/O 软件
I/O 设备管理软件的所有层次及每一层功能
4.2、输入输出技术
程序控制(查询)方式:CPU主动查询外设是否完成数据传输,效率极低。
程序中断方式:外设完成数据传输后,向PU 发送中断,等待CPU处理数据,效率相对较高。适用于键盘等实时性较高的场景。
中断响应时间指的是从发出中断请求到开始进入中断处理程序。
中断处理时间指的是从中断处理开始到中断处理结束。
中断向量提供中断服务程序的入口地址。多级中断嵌套,使用堆栈来保护断点和现场。
DMA方式(直接主存存取):CPU 只需完成必要的初始化等操作,数据传输的整个过程都由 DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。适用于硬盘等高速设备。
在一个总线周期结束后,CPU 会响应 DMA请求开始读取数据;CPU响应程序中断方式请求是在一条指令执行结束时;区分指令执行结束和总线周期结束。
通道:也是一种处理机,内部具有独立的处理系统,使数据的传输独立于CPU。分为字节多路通道的传送方式(每一次传送一个通道的一个字节,多路通道循环)和选择通道的传送方式(选择一个通道,先传送完这个通道的所有字节,再开始下一个通道传送)。
4.3、虚设备和 SPOOLING 技术
一台实际的物理设备,例如打印机,在同一间只能由一个进程使用,其他进程只能等待,且不知道什么时候打印机空闲,此时,极大的浪费了外设的工作效率。
引入 SPOOLING 技术,就是在外设上建立两个数据缓冲区,分别称为输入井和输出井,这样,无论多少进程,都可以共用这一台打印机,只需要将打印命令发出,数据就会排队存储在缓冲区中,打印机会自动按顺序打印,实现了物理外设的共享,使得每个进程都感觉在使用一个打印机,这就是物理设备的虚拟化。
5、微内核操作系统
微内核,就是尽可能的将内核做的很小,只将最为核心必要的东西放入内核中,其他能独立的东西都放入用户进程中,这样,系统就被分为了用户态和内核态。
单核方便进程切换,但是内核庞大,稳定性弱
微内核稳定性高,便于裁剪,但是进程间的切换消耗资源,效率低。
6、嵌入式操作系统
嵌入式操作系统特点:微型化、代码质量高、专业化、实时性强、可裁剪可配置。
实时嵌入式操作系统的内核服务:异常和中断、计时器、I/O管理。
常见的嵌入式 RTOS(实时操作系统):VxWorks、RT-Linux、QNX、pSOS。
嵌入式操作系统的特点有:
(1)微型化。从性能和成本角度考虑,希望占用的资源和系统代码量少。
(2)可定制。从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用的需求。
(3)实时性。嵌入式操作系统主要应用于过程控制、数据采集、传输通信、多媒体信息及管件要害领域需要迅速响应的场合,所以对实时性要求较高。
(4)可靠性。系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提供容错和防故障措施。
(5)易移植性。为了提高系统的易移植性,通常采用硬件抽象层和板级支持包的底层设计技术。
四、◉数据库技术
个人理解:这个图要记住,在需求分析阶段,已经有了数据流图、数据字典、需求说明书,你要经历概念结构设计,才能到逻辑结构设计。
那么第一步就是抽离数据,然后根据这些数据设计局部的视图,因为是局部的,你自然要合并,在合并的过程中有冲突,就要修改。
数据库系统 DBS 的组成:数据库、硬件、软件、人员。
数据库管理系统 DBMS 的功能:数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。
DBMS的分类:关系数据库系统RDBS、面向对象的数据库系统OODBS、对象关系数据库系统 ORDBS。
数据库系统的体系结构:集中式数据库系统(所有东西集中在DBMS电脑上)、客户端 / 服务器体系结构(客户端负责请求和数据表示,服务器负责数据库服务)、并行数据库系统(多个物理上在一起的CPU)、分布式数据库系统(物理上分布在不同地方的计算机)。
1、◉三级模式一两级映像
内模式:管理如何存储物理的数据,对数据的存储方式、优化、存放等。
模式:又称为概念模式,就是我们通常使用的表这个级别,根据应用、需求将物理数据划分成一张张表。
外模式:对应数据库中的视图这个级别,将表进行一定的处理后再提供给用户使用。
外模式一模式映像:逻辑独立性,是表和视图之间的映射,存在于概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序。
模式一内模式映像:物理独立性,是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序。
2、◉数据库的设计
需求分析:即分析数据存储的要求和边界,产出物有数据流图、数据字典、需求说明书。
概念结构设计:设计用户的数据模型,与具体DBMS(数据库管理系统)无关的概念模型,一般是设计E-R图,也即实体-属性图,与物理实现无关,就是说明有哪些实体,实体有哪些属性。
逻辑结构设计:将E-R图,转换成关系模式,也即转换成实际的表和表中的列属性,这里要考虑很多规范化的东西。
物理设计:根据生成的表等概念,生成物理数据库。
3、◉E-R 模型
数据模型的三要素:数据结构、数据操作、数据的约束条件。
在 E-R 模型中,使用椭圆表示属性(一般没有)、长方形表示实体、菱形表示联系,联系的两端要填写联系类型。
联系类型:一对一 1:1、一对多 1:N、多对多 M:N。
属性分类:简单属性和复合属性(属性是否可以分割)、单值属性和多值属性(属性有多个取值)、NULL属性(无意义)、派生属性(可由其他属性生成)。
E-R模型如何转换为关系模型(实际就是转换为多少张表)
每个实体都对应一个关系模式;
联系分为三种:1:1联系中,联系可以放到任意的两端实体中,作为一个属性(要保证 1:1 的两端关联);
1:N 的联系中,联系可以单独作为一个关系模式,也可以在 N 端中加入1端实体的主键;
M:N 的联系中,联系必须作为一个单独的关系模式,其主键是M和N端的联合主键。
4、◉关系代数运算
并∪:合一起,删除重复的。
差-:A-C;A集合有,而C集合没有的。
交∩:大家都有的。
笛卡尔积×:S1×S2,产生的结果包括 S1 和 S2 的所有属性列,并且 S1 中每条记录依次和 S2 中所有记录组合成一条记录,最终属性列为S1+S2属性列,记录数为S1×S2记录数。
列=n+m;行=n×m
D1={1,0} D2={A,B,C}
D1×D2={(1,A),(1,B),(1,C),(0,A),(0,B),(0,C)}
投影ó:实际是按条件选择某关系模式中的某列,列也可以用数字表示。selet ? from ?
选择π:实际是按条件选择某关系模式中的某条记录。where
自然连接⨝:结果显示全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录。from A,B
效率问题:关系代数运算的效率,看参与运算的两张表格的属性列数和记录数,属性列和记录数越少,参与运算的次数自然越少,效率就越高。因此,效率高的运算一般都是在两张表格参与运算之前就将条件判断完。
5、关系数据库的规范化
5.1、函数依赖
给定一个 X,能唯一确定一个Y,就称X确定 Y,或者说Y依赖于X
函数依赖又可扩展以下两种规则:
部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即 A)可以确定C,称为部分函数依赖。
传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可确定C,是传递函数依赖,若A和B等价,则不存在传递,直接就可确定C。
5.1.1、◉Armstrong 公理系统
设U是关系模式R的属性集,F是R上成立的只涉及U中属性的函数依赖集。函数依赖的推理规则有:
自反律:若属性集Y 包含于属性集 X,属性集 x 包含于 U,则 x→γ 在 R 上成立。(此处 X→Y是平凡函数依赖)
增广律:若X→Y在R上成立,且属性集Z 包含于属性集 U,则XZ→YZ 在R上成立。
传递律:若X→Y和Y→Z在R上成立,则X→Z在R上成立。
合并规则:若X→Y,X→Z同时在R上成立,则X→YZ在R上也成立。
分解规则:若X→W在R上成立,且属性集Z包含于W,则X→Z在R上也成立。
伪传递规则:若X→Y在R上成立,且WY→Z,则XW→Z。
5.2、键和约束
超键:能唯一标识此表的属性的组合。
候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
主键:任选一个候选键,即可作为主键。
外键:其他表中的主键
主属性:候选键内的属性为主属性,其他属性为非主属性
实体完整性约束:即主键约束,主键值不能为空,也不能重复。
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到150之间。
触发器:通过写脚本来规定复杂的约束。本质属于用户自定义完整性约束。
候选键的求法
根据依赖集画出有向图,从入度为0的节点开始,找出图中一个节点或者一个节点组合,能够遍历完整个图,就是候选键。
学生信息(学号 身份证号 性别 年龄 身高 体重 宿舍号)和 宿舍信息(宿舍号 楼号)
超键:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号 性别)、R2(身份证号 身高)、R3(学号 身份证号)等等都可以称为超键!
候选键:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键
主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了!
外键:宿舍号就是学生信息表的外键
5.3、◉范式
5.3.1、第一范式 1NF
关系中的每一个分量必须是一个不可分的数据项。
如:(员工编号,姓名,岗位,薪资)但是其中薪资又分为基本工资+绩效工资
第一范式就是看属性列表能不能在继续分,能继续分那就不符合第一范式;
第一范式会有数据冗余和更新异常(包括修改,删除,插入异常)这些问题并存在部分函数依赖。
如:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩),满足1NF
数据冗余:一个系有很多的学生,,同一个系的学生的系主任是相同的,所以系主任名会重复出现。
更新异常中的修改异常:当一个系换了一个系主任后,对应的这个表必须修改与该系学生有关的每个元组。
更新异常中的插入异常:如果一个系刚成立,没有任何学生,那么这个无法把这个系的信息插入表中。
更新异常中的删除异常:如果一个系的学生都毕业了,那么在删除该系学生信息时,这个系的信息也丢了。
5.3.2、第二范式 2NF
当且仅当关系模式R满足1NF,且每个非键属性(即不属于任何候选键的属性,也称为非主属性)完全依赖于候选键时,则称R满足2NF。
2NF 就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个。
如:每张表均属于 2NF。
学生(学号,学生姓名,系编号,系名,系主任)
选课(学号,课程号,成绩)
第二范式只是解决了第一范式的部分函数依赖问题,但是数据冗余和更新异常没有完全解决,因为存在传递函数依赖。
例如上面的 学号→系编号,系编号→系名,得出学号→系名。
AC为主键,把AC分开,如果A能决定B,那就不满足,但如果是AD决定B,就可以。
◉组合主键,其中的一个,不能去决定其他的非主属性
◉除了主键以外的其他列都完全依赖于这个组合键。
非主属性能不能由候选键的部分推理出来,能就符合第二范式
5.3.3、第三范式 3NF
当且仅当关系模式R满足1NF,且R中没有非键属性传递依赖于候选键时,则称R满足3NF。
如:上面的例子,学生关系模式不属于 3NF,因为学生无法直接决定系主任和系名,
是由学号→系编号,系编号→系主任,系编号→系名,因此存在非主属性对主属性的传递依赖;
进一步分解为:每张表都属于3NF
学生(学号,学生姓名,系编号)
系(系编号,系名,系主任)
选课(学号,课程号,成绩)
◉也就是:其他属性传递依赖时,不能依赖主键,上面 学号→系编号,系编号→系主任,就不行,因为 系编号→系主任 传递依赖于主键。
消除了非主属性的传递依赖
但是数据冗余和更新异常没有完全解决,因为存在主属性对候选码的部分依赖和传递依赖
5.3.4、BC范式BCNF
如果关系模式R满足1NF,且R中没有属性传递依赖于候选键时,则称R满足BCNF。
在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖
所有非键属性对每个候选键都是完全函数依赖,
所有的键属性对每个不包含它的候选键,也是完全函数依赖的;
没有任何属性完全函数依赖于非键属性,即每个函数依赖的左部都必须包含候选键。
5.3.5、第四范式
A→B,A→C,A→D,这里一个A决定了BCD三个属性,而且A不是码,也就是多值依赖。
5.4、模式分解
范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分离出来,来达到一步步优化。
保持函数依赖分解
对于关系模式 R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。
无损分解
分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。
判断是有损连接还是无损连接
直接把分解后的关系作自然连接,看看得到的结果是不是跟原来的R一致,如果不一致那就是有损连接,否则无损连接。
6、并发控制
6.1、◉事务管理
事务提交 commit,事务回滚 rollback。
事务:由一系列操作组成,这些操作,要么全做,要么全不做。
(操作)原子性:要么全做,要么全不做。
(数据)一致性:事务发生后数据是一致的,例如银行转账,不会存在A账户转出,但是B账没收到的情况。
(执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
(改变)持续性:事务操作的结果是持续性的。
事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:
丢失更新:事务1对数据A进行了修改并写回,事务2也对A进行了修改并写回,此时事务2写回的数据会覆盖事务1写回的数据,就丢失了事务1对A的更新。即对数据A的更新会被覆盖。
不可重复读:事务2读A,而后事务1对数据A进行了修改并写回,此时若事务2再读A,发现数据不对。即一个事务重复读A两次,会发现数据A有误。
读脏数据:事务1对数据A进行了修改后,事务2读数据A,而后事务1回滚,数据A恢复了原来的值,那么事务2对数据A做的事是无效的,读到了脏数据。
6.2、封锁协议
X锁是排它锁(写锁):若事务T对数据对象A加上X锁,则只允许T读取和修改 A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
其他锁都不能加了,只有它自己能读改,直到这个锁被释放了。
S锁是共享锁(读锁):若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改 A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。
加了这个锁那么就不能加排它锁,可以加共享锁,直到这个锁被释放了才可以加排它锁,能读不能改。
三级封锁协议
一级封锁协议:事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。可解决丢失更新问题。
二级封锁协议:一级封锁协议的基础上加上事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。可解决丢失更新、读脏数据问题。
三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可解决丢失更新、读脏数据、数据重复读问题。
注意:解锁的时间不同,会造成预防问题的个数不同,即为不同的封锁协议。
7、数据库安全
7.1 安全措施
措施 | 说明 |
---|---|
用户标识和鉴定 | 最外层的安全保护措施,可以使用用户帐户、口令及随机数检验等方式 |
存取控制 | 对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限. |
密码存储和传输 | 对远程终端信息用密码传输 |
视图的保护 | 对视图进行授权 |
审计 | 使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来 |
7.2、数据故障
故障关系 | 故障原因 | 解决方法 |
---|---|---|
事务本身的可预期故障 | 本身逻辑 | 在程序中预先设置Rollback语句 |
事务本身的不可预期故障 | 算术溢出、违反存储保护 | 由DBMS的恢复子系统通过日志,撤消事务对数据库的修改,回退到事务初始状态 |
系统故障 | 系统停止运转 | 通常使用检查点法 |
介质故障 | 外存被破坏 | 一般使用日志重做业务 |
7.3、数据备份
静态转储,即冷备份:指在转储期间不允许对数据库进行任何存取、修改操作;
优点是非常快速的备份方法、容易归档(直接物理复制操作);
缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
动态转储,即热备份:在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行;
优点是可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复;
缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
完全备份:备份所有数据。
差量备份:仅备份上一次完全备份之后变化的数据。
增量备份:备份上一次备份之后变化的数据。
日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
备份毕竟是有时间节点的,不是实时的,例如:上一次备份到这次备份之间数据库出现了故障,则这期间的数据无法恢复,因此,引入日志文件,可以实时记录针对数据库的任何操作,保证数据库可以实时恢复。
8、◉分布式数据库
局部数据库位于不同的物理位置,使用一个全局 DBMS 将所有局部数据库联网管理,这就是分布式数据库。
分片模式
水平分片:将表中水平的记录分别存放在不同的地方。
垂直分片:将表中的垂直的列值分别存放在不同的地方。
分布透明性
分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
位置透明性:应用程序不关心数据存储物理位置的改变。
逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
复制透明性:用户或应用程序不关心复制的数据从何而来。
分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。分布式数据库系统是在集中式数据库系统技术的基础上发展起来的
具有如下特点:
- 数据独立性。在分布式数据库系统中,数据独立性这一特性更加重要,并具有更多的内容。
除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性) - 集中与自治共享结合的控制结构。各局部的DBMS 可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。
- 适当增加数据冗余度。在不同的场地存储同一数据的多个副本,这样,可以提高系统的可靠性和可用性,同时也能提高系统性能。
- 全局的一致性、可串行性和可恢复性。
优点
- 分布式数据库可以解决企业部门分散而数据需要相互联系的问题
- 如果企业需要增加新的相对自主的部门来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
- 分布式数据库可以满足均衡负载的需要
- 当企业已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
- 相等规模的分布式数据库系统在出现故障的概率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此,就整个系统来说,它的可靠性是比较高的。
9、数据仓库
数据仓库是一种特殊的数据库,也是按数据库形式存储数据的,但是目的不同:数据库经过长时间的运行,里面的数据会保存的越来越多,就会影响系统运行效率,对于某些程序而言,很久之前的数据并非必要的,因此,可以删除掉以减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般都将这些数据从数据库中提取出来保存到另外一个数据库中,称为数据仓库。
数据仓库集成是把多种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和存储容量。
9.1、数据仓库四大特点
数据仓库主要用于决策支持,在数据处理过程中强调分析其特点是:
面向主题:按照一定的主题域进行组织的。
集成的:数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
相对稳定的:数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
反映历史变化:数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
9.2、数据仓库的结构
数据源:是数据仓库系统的基础,是整系统的数据源泉。
数据的存储与管理:是整个数据仓库系统的核心。
OLAP(联机分析处理)服务器:对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。
9.3、数据挖掘的分析方法
关联分析:发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。
序列分析:发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。
分类分析:通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。
聚类分析:聚类分析是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。
9.4、商业智能 BI
BI系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。
数据预处理是整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL过程);
建立数据仓库则是处理海量数据的基础;
数据分析是体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。
联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。
数据挖掘的目标则是挖掘数据背后隐藏的知识,通过关联分析聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;
在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
10、◉反规范化技术
反规范化技术:规范化设计后,数据库设计者希望牺牲部分规范化来提高性能。
采用反规范化技术的益处:降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,能够提高查询效率。
可能带来的问题:数据的重复存储,浪费了磁盘空间;可能出现数据的完整性问题,为了保障数据 的一致性,增加了数据维护的复杂性,会降低修改速度。
具体方法
- 增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。
- 增加派生列:在表中增加可以由本表或其它表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
- 重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
- 水平分割表:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要有放到多个介质上时使用。
- 垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少I/0次数。
11、◉大数据
特点:大量化、多样化、价值密度低、快速化。
比较维度 | 传统数据 | 大数据 |
---|---|---|
数据量 | GB或TB级 | PB级或以上 |
数据分析需求 | 现有数据的分析与检测 | 深度分析(关联分析、回归分析) |
硬件平台 | 高端服务器 | 集群平台 |
要处理大数据,一般使用集成平台,称为大数据处理系统,其特征为:
高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。
12、◉SQL语言
授权 grant…on…to,允许其将权限再赋给另一用户 with grant option;
GRANT<权限update> ON 表名[(列名)] TO 用户 WITH GRANT OPTION。
收回权限 revoke…on…from;
13、数据库新技术
13.1、联邦数据库
联邦数据库系统FDBS,是一个彼此协作却又相互独立的成员数据库的集合,它将成员数据库系统按不同程度进行集成,是对该系统整体提供控制和协同操作的软件。
和分布式数据库的区别:FDBS 仅提供对外的统一接口,内部各个成员数据库是互相独立的,而分布式数据库是数据分布在各个局部数据库内,内部实际是一个整体。
特征:分布性、异构性、自治性、透明性。
13.2、NoSQL
Not-onlySQL:是一种非关系型的数据库
关系数据库模式 | NoSQL模式 | |
---|---|---|
井发支持 | 支持井发、效率低 | 并发性能高 |
存储与查询 | 关系表方式存储、SQL查询 | 海量数据存储、查询效率高 |
扩展方式 | 向上扩展 | 向外扩展 |
索引方式 | B树、哈希等 | 键值索引 |
应用领域 | 面向通用领域 | 特定应用领域 |
特点:成熟度不够,大量关键特性有待实现;开源数据库产品支持力度有限;数据挖掘与商务智能支持不足,现有的产品无法直接使用 NoSQL数据库;NOSQL专家少,大部分都处于学习阶段。
代表:Redis、MongoDB、Flare、Oracle NoSQL DB……
13.3、内存数据库
内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。
特点:工作版本常驻内存,活动事务只与实时内存数据库的内存拷贝打交道。
常见的内存数据库:、:Redis、SQLite、Mircrosoft SQLserver compact 等。
13.4、数据库的性能优化
五、计算机网络
1、◉OSI/RM 七层模型
简单助记(巫术忘传会飙英,巫术忘记上传气得飙英语)
2、网络技术标准和协议
2.1、◉TCP/IP 协议族
TCP/IP 协议共有四层,(重点记忆分别基于 UDP 和 TCP 的应用层协议)
2.2、网络层协议
IP:网络层最重要的核心协议,在源地址和目的地址之间传送数据报,无连接、不可靠。
ICMP:因特网控制报文协议,用于在IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
IGMP:网络组管理协议,允许因特网中的计算机参加多播,是计算机用做向相邻多目路由器报告多目组成员的协议,支持组播。
ARP和 RARP:地址解析协议,ARP是将IP地址转换为物理地址,RARP是将物理地址转换为IP地址。
2.3、传输层协议
TCP 协议:可靠连接,因为有验证机制,每发送一个数据包,都要求对方回复确认;初始建立连接,有三次握手机制,即A发送连接信息给 B(SEQ=X),B收到后回复确认帧(SEQ=Y,ACK=X+1),A收到确认帧后再发送确认(SEQ=X+1,ACK=Y+1),才能建立连接
(上述 SEQ 表示本机发送的数据包序号,和 B之间的 SEQ 分别计数,而 ACK 为确认帧,ACK=X+1 表示已经收到了 A机发送的第x个数据包,期望下一个收到第 x+1 个数据包)。
UDP 协议:不可靠连接,因为数据传输只管发送,不用对方确认,因此可能会有丢包现象。
一般用于视频、音频数据传输。
TCP 传输协议
停止等待协议:TCP保证可靠传输的协议,”停止等待”就是指发送完一个分组就停止发送,等待对方的确认,只有对方确认过,才发送下一个分组。
连续 ARQ 协议:TCP 保证可靠传输的协议,它是指发送方维护着一个窗口,这个窗口中不止一个分组,有好几个分组,窗口的大小是由接收方返回的 win 值决定的,所以窗口的大小是动态变化的**,只要在窗口中的分组都可以被发送,这就使得 TCP 一次不是只发送一个分组了,从而大大提高了信道的利用率,**并且它采用累积确认的方式,对于按序到达的最后一个分组发送确认
滑动窗口协议:TCP 流量控制协议,可变的窗口是不断向前走的,该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,还可以控制流量的问题.
2.4、◉应用层协议
SMTP和POP3:邮件传输协议,邮件报文采用ASCII格式表示。SMTP主要用于发送邮件,POP3则用来接收电子邮件.
邮件客户端使用IMAP协议同步服务器和客户端之间的邮件列表。
- SMTP,简单邮件传输协议,25端口
- POP3,邮局协议3,110端口
- HTTP,超文本传输协议,WEB浏览器,80端口
- HTTPS,加密的超文本传输,443端口
- FTP,文件传输服务,20数据端口,21命令控制端口
- DNS,域名服务,53端口
- Telnet,远程登录,23端口
- SSH ssh 安全 Shell 远程登录协议,22端口
DHCP 协议
动态分配IP 地址协议,DHCP 客户端能从 DHCP 服务器获得 DHCP 服务器的IP 地址、DNS 服务器
的IP地址、默认网关的IP地址等。但是,不能获得web 服务器的IP地址和邮件服务器地址。
自动分配规则为:客户机/服务器模型,租约默认为8天,当租约过半时,客户机需要向DHCP服务器申请续租,当租约超过 87.5%时,如果仍然没有和当初提供IP地址的 DHCP 服务器联系上,则开始联系其他 DHCP 服务器。
DNS 协议
将域名解析为IP地址,输入网址(即域名)后,首先会查询本地 DNS 缓存,无果后再查询本地DNS 服务器,又分为递归查询和迭代查询两种方式。
递归查询:主机提出一个查询请求,本地服务器会自动一层一层的查询下去,直到找到满足查询请求的IP 地址,再返回给主机。即问一次,就得最终结果。
迭代查询:服务器收到一次查询请求,就回答一次,但是回答的不一定是最终地址,也可能是其他层次服务器的地址,然后等待客户端再去提交査询请求。即问一次答一次,而后再去问其他服务器,直至问到结果。
主机向本地域名服务器查询采用递归查询;
本地域名服务器向根域名服务器的查询迪常采用迭代查询。
2.5、浏览器访问网页的过程
- 浏览器本身是一个客户端,当输入URL的时候首先浏览器会去请求 DNS服务器,通过DNS 获取相应的域名对应的IP;
- 然后通过IP地址找到IP对应的服务器后,要求建立TCP连接;
- 浏览器发送HTTP Request(请求)包;
- 服务器收到请求之后,调用自身服务,返回HTTP Response(响应)包;
- 客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容后断开与该服务器之间的 TCP连接。
3.1、分类地址格式
IP地址分四段,每段八位,共32位二进制数组成。
每个IP地址由两部分组成,分别是网络号和主机号
习惯上将这个32位的数字划分成4个字节,并在每个字节之间以“.”来区分
例如:IP地址11000000 10101000 11001000 10000000,
每字节用十进制数来表示,字节之间用圆点分隔,表示为192.168.200.128。
3.2、子网划分
将主机号拿出几位作为子网号,就可以划分出多个子网,此时地址组成为:网络号+子网号+主机号。
IPv4采用的是32位IP地址设计,限制了地址空间的总容量,出现了IP地址紧缺的现象。
将IP地址划分成三个部分,分别是网络号、子网号和主机号。
也就是说,利用IP地址的主机号部分继续划分子网。
子网掩码也是一个32位的二进制数,但其 网络标识和子网标识部分全为1,主机标识部分全为0。
11111111 11111111 11110000 00000000,即255.255.240.0。
判断两台计算机是否在同一个子网内,需要用到子网掩码,
将两个IP地址与给定的子网掩码分别进行逻辑与运算,如果结果相等,则属于同一个子网。
示例:
I P 地址 192.168.0.1
子网掩码 255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
AND运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
I P 地址 192.168.0.254
子网掩码 255.255.255.0
转化为二进制进行运算:
I P 地址 11010000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000
AND运算
11000000.10101000.00000000.00000000
转化为十进制后为:
192.168.0.0
还可以聚合网络为超网,就是划分子网的逆过程,将网络号取出几位作为主机号,
此时,这个网络内的主机数量就变多了,成为一个更大的网络。
3.3、◉无分类编址
无分类编址格式为:IP 地址/网络号
示例:128.168.0.11/20
表示的 IP 地址为 128.168.0.11,其网络号占 20 位,因此主机号占 32-20=12位,也可以划分子网。
如 : 128.14.35.7/20, 表示该 IP 地址 , 前20位是网络前缀;
① 先将 128.14.35.7/20地址转为二进制形式;
10000000 00001110 00100011 00000111
前 20位是 网络前缀 , 为 :
10000000 00001110 0010
② 地址块地址 : 二进制形式如下 :
10000000 00001110 00100000 00000000
转为十进制为 :
128.14.32.0/20
③ 最小地址 : 最小地址就是 主机号 全 0; 也就是地址块地址;
④ 最大地址 : 最大地址就是 主机号 全 1 ;
10000000 00001110 00101111 11111111
⑤ 子网掩码 : 又称为 “地址掩码” , 网络前缀对应的前 20位 为 1 , 主机号对应的位数为 0 ;
11111111 11111111 11110000 00000000
转为十进制为 : 255.255.240.0
某校园网的地址是 202.115.192.0/19,要把该网络分成 32 个子网,则子网掩码应该是
解:其网络号占 19位,因此主机号占 32-19=13位;
将网络号分成32个,需要5个比特,2^n >= 32;
网络号占 19 位,要分成32个,就得再加5位,即24位。
IP都是8位一起的,24位就是前3个ip数字。
网络标识和子网标识部分全为1,主机标识部分全为0。
8个1的2进制为255
即:255.255.255.0
3.4 、特殊含义的IP 地址
4、IPv6
IPv6 地址长度为 128位,地址空间增大了2^96倍;
128bit 数据使用二进制表示太繁琐,因此采用十六进制表示,并且每4个十六进制数为一组,组组之间用冒号分开,一共有8组,又称为8组十六进制表示法。
IPv4 中的地址分为组播、广播和单播三种,而IPv6 中的地址分为多播、任播和单播三种。
过渡技术
双协议栈:主机同时运行IPv4和IPv6 两套协议栈,同时支持两套协议。
隧道技术:在IPv4 网络之上建立一条能够传输IPv6 数据报的隧道。
翻译技术:利用一台专门的翻译设备(如转换网关),在纯 IPv4 和纯 IPv6 网络之间转换 IP报头的地址
5、网络规划和设计
5.1 、网络拓扑结构
总线型(利用率低、干扰大、价格低)、星型(交换机形成的局域网、中央单元负荷大)、环型(流动方向固定、效率低扩充难)、树型(总线型的扩充、分级结构)、分布式(任意节点连接、管理难成本高)
一般来说,办公室局域网是星型拓扑结构,中间节点就是交换机,一旦交换机损坏,整个网络都瘫痪了,这就是星型结构。
同理,由路由器连接起来的小型网络也是星型结构。
5.2、网络设计流程
- 需求分析
需求分析是开发过程中最关键的阶段。通过和不同的用户(包括经理人员和网络管理员)交流收集明确的需求信息。需求分析的输出是产生一份需求说明书,也就是需求规范。 - 通信规范分析
如果当前的网络开发过程是对现有网络的升级和改造,就必须进行现有网络系统的分析工作。现有网络系统分析的目的是描述资源分布,以便于在升级时尽量保护已有的投资。在这一阶段,应给出一份正式的通信规范说明文档,作为下一个阶段的输入。 - 逻辑网络设计
网络逻辑结构设计是根据需求规范和通信规范选择一种比较适宜的网络逻辑结构,并实施后续的资源分配规划、安全规划等内容。这个阶段最后应该得到一份逻辑设计文档。 - 物理网络设计
物理网络设计是逻辑网络设计的具体实现,通过对设备的具体物理分布、运行环境等的确定来确保网络的物理连接符合逻辑设计的要求。在这一阶段,网络设计者需要确定具体的软硬件、连接设备、布线和服务的部署方案。 - 安装和维护
这个阶段是根据前面的工程成果实施环境准备、设备安装调试的过程。网络安装完成网络投入运行后,还需要做大量的故障监测和故障恢复,以及网络升级和性能优化等维护工作。
5.3、层次化局域网模型
三层模型将网络划分为核心层、汇聚层和接入层,每一层都有着特定的作用。
核心层提供不同区域之间的最佳路由和高速数据传送;
汇聚层将网络业务连接到接入层,并且实施与安全、流量、负载和路由相关的策略;
接入层为用户提供了在本地网段访问应用系统的能力,还要解决相邻用户之间的互访需要,接入层要负责一些用户信息(例如用户IP地址、MAC地址和访问 日志等)的收集工作和用户管理功能(包括认证和计费等)。
一般设计思路都是从下往上设计,即先设计接入层、汇聚层,再考虑核心层数据交换的速度以满足下面两层的要求。
5.4、建筑物综合布线系统 PDS
工作区子系统:实现工作区终端设备到水平子系统的信息插座之间的互联。
水平布线子系统:实现信息插座和管理子系统之间的连接。
设备间子系统:实现中央主配线架与各种不同设备之间的连接。
垂直干线子系统:实现各楼层设备间子系统之间的互连。
管理子系统:为连接其他子系统提供连接手段。
建筑群子系统:各个建筑物通信系统之间的互联,
6、网络管理命令
arp 命令:用于显示和修改 ARP 缓存中的表项。
netstat 命令:用来显示网络活动状态,如TCP/UDP 的IP、端口号、统计信息等。
tracert 命令:利用ICMP报文,来探测到达目标的路径,参数通常为-d。
pathing 命令:把 ping 和 tracert 结合起来,探测路径、延时、丢包率等。
nbtstat 命令:用来显示NetBl0s 的名称缓存。
netsh 命令:命令行脚本程序,可修改计算机的网络配置。
net命令:管理网络服务。
nslookup 命令:命令用于显示 DNS 查询信息,诊断和排除 DNS 故障:
7、网络接入技术
网络接入技术,就是指用户主机如何连接到网络的技术,可分为有线接入和无线接入,无线接入又包括 3G/4G 的接入技术。
PSTN 就是老式的拨号连接技术,打电话时不能上网;
ISDN是一线式,打电话和上网能同时进行;
ADSL现在仍广泛应用在老式小区,是用电话线作为网线,上传网速和下载网速不对等,下载网速一般很快;
HFC现在也广泛推广,上传和下载网速相同,主要用在电视网络中;
无源光纤技术 PON,其交换设备不需要电源,将光线折射到另外一个通道里去;帧中继接入,是租用专线的方式,采用双绞线或者同轴电缆;
光纤接入技术包括光纤到路边FTTC、光纤到大楼FTTB、光纤入户 FTTH。
8、网络新技术
8.1、物联网
是实现物物相连的互联网络,其内涵包含两个方面:
物联网的核心和基础仍然是互联网,是在互联网基础上延伸和扩展的网络;
其用户端延伸和扩展到了任何物体与物体之间,使其进行信息交换和通信。
三层结构
感知层:识别物体、采集信息,如二维码、RFID、摄像头等:
网络层:传递信息和处理信息。通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。
应用层:解决信息处理和人机交互的问题。
物联网关键技术
射频识别技术 RFID:是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触,是物联网核心技术,其组成部分包括:标签、阅读器、天线。
二维码:是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的。在代码编制上巧妙地利用构成计算机内部逻辑基础的0、1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识别以实现信息自动处理。
8.2、云计算
是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
云其实是网络、互联网的一种比喻说法。云计算的核心思想是将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。
提供资源的网络被称为云。
按照云计算服务提供的资源层次,可以分为IaaS、PaaS、SaaS 三种服务类型:
laaS (基础设施即服务),向用户提供计算机能力、存储空间等基础设施方面的服务。这种服务模式需要较大的基础设施投入和长期运营管理经验。
PaaS(平台即服务),向用户提供虚拟的操作系统、数据库管理系统、Web 应用等平台化的服务。Paas服务的重点不在于直接的经济效益,而更注重构建和形成紧密的产业生态。
SaaS (软件即服务)向用户提供应用软件(如CRM、办公软件等)、组件、工作流等虚拟化软件的服务。
六、多媒体技术
1、多媒体基本概念
1.1、媒体的分类
感觉媒体:直接作用于人的感觉器官,使人产生直接感觉的媒体。常见的感觉媒体分为文本、图形、图像、动画、音频和视频。
表示媒体:指传输感觉媒体的中介媒体,即用于数据交换的编码。如:文本编码、声音编码和图像编码等。
表现媒体:进行信息输入和信息输出的媒体。也即输入输出设备,如:键盘、鼠标和麦克风;显示器、打印机和音响等。
存储媒体:存储表示媒体的物理介质。如磁盘、光盘和内存等。
传输媒体:传输表示媒体的物理介质。如电缆、光纤、双绞线等。
1.2、声音
主要是声音的带宽来衡量声音的大小,单位是 HZ。
声音是一种模拟信号,要对其进行处理,就必须将其转化为数字信号。转换过程有三个步骤:采样、量化、编码。
人耳能听到的音频信号的频率范围是 20Hz~20KHz。
声音的采样频率一般为最高频率的两倍,才能保证不失真。
数字音乐合成方法
数字调频合成法FM:使高频振荡波的频率按调制信号规律变化的一种调制方式。采用不同调制波频率和调制指数,就可以方便的合成具有不同频谱分布的波形,再现某些乐器的音色。可以采用这种方法得到具有独特效果的"电子模拟声",创造出丰富多彩的声音,是真实乐器所不具备的音色。
波表合成法 Wavetable:将各种真实乐器所能发出的所有声音(包括各个音域、声调)录制下来,存贮为一个波表文件。播放时,根据 MIDI文件纪录的乐曲信息向波表发出指令,从"表格"中逐一找出对应的声音信息,经过合成、加工后回放出来。合成的音质更好。
声音特性
音量:即响度,表示声音的强弱程度,主要取决于声波振幅的大小。
音高:表示各种声音的高低,主要取决于声波的振动频率,振动频率越高则音越高。
音调:表示声音的调子的高低,由声音本身的频率决定。
音色:又称为音品,由声音波形的谐波频谱和包络决定。
声音文件格式:.wav、.snd、.au、.aif、.voc、.mp3、.ra、.mid 等。
1.3、图形和图像
颜色三要素
亮度:彩色明暗深浅程度。
色调(红、绿):颜色的类别。
饱和度:某一颜色的深浅程度。
彩色空间
即设备显示图片所使用的色彩空间,普通的电脑显示器是 RGB色彩空间,除了红、绿、蓝三原色外,其他颜色都是通过这三原色叠加形成的;
电视中使用 YUV 色彩空间,主要是为了兼容黑白电视,使用的是亮度原理,即调不同的亮度显示不同的颜色;
CMY(CMYK),印刷书籍时采用的色彩空间,这个采用的是和 RGB 相反的减法原理,浅蓝、粉红、黄三原色的印刷颜料实际上是吸收除了本身色彩之外的其他颜色的,因此,印刷出来才是这些颜色;
HSV(HSB),艺术家彩色空间,是从艺术的角度划分的。
图像的属性:分辨率(每英寸像素点数dpi)、像素深度(存储每个像素所使用的二进制位数)。
图像文件格式:.bmp、.gif、.jpg、.png、.tif、.wmf等。
DPI:每英寸像素点数。
图像深度是图像文件中记录一个像素点所需要的位数。
显示深度表示显示缓存中记录屏幕上一个点的位数(bit),也即显示器可以显示的颜色数。
水平分辨率:显示器在横向上具有的像素点数目。
垂直分辨率:显示器在纵向上具有的像素点数目。
矢量图的基本组成单位是图元,位图的基本组成单位是像素,视频和动画的基本组成单元是帧。
2、多媒体相关计算问题
2.1、图像容量计算
知道像素,位数:每个像素为16位,图像为640×480像素,求容量:640×480×16/8=614400B。
知道像素,色数:640×480像素,256色的图像,求容量:640×480×log2(256)/8=307200B。
2.2、音频容量计算
容量 = 采样频率(Hz) × 量化 / 采样位数(位) x 声道数 / 8
2.3、视频容量计算
容量 = 每帧图像容量(Byte) x 每秒帧数 x 时间 + 音频容量 x 时间
3、数据压缩基础
能够压缩的前提是有冗余
空间冗余(几何冗余):对于一副画面中的同样的信息,在压缩时,不需要重复存储,只记录一次信息内容,而后记录这些相同信息出现的位置即可。
时间冗余:在压缩视频时,对于一帧和下一帧,只记录变化的部分,不变的部分不记录。
视觉冗余:例如JPEG标准,就是有损压缩,对于人眼关注不到的细节就不存储,找到一个临界值,达到视觉欺骗的效果。
信息熵冗余:不同的信息编码的冗余效率是不同的,可以通过改变信息编码来改变冗余。
结构冗余:对于结构相同的模块,只记录一次。和空间冗余有点类似。
知识冗余:从知识角度来说,有些可以根据常识推导出来的东西,可以不用记录。
有损压缩和无损压缩
压缩后能够还原的编码方式称为无损压缩(熵编码法):例如 WINRAR 压缩等,最终可以还原出原数据,最经典的就是哈夫曼编码,是无损压缩。
压缩后无法还原的编码方式就是有损压缩(熵压缩法):例如JPEG格式的图片
七、系统安全分析与设计
1、信息安全概述
1.1、◉信息安全基本要素
保密性:确保信息不暴露给未授权的实体,包括最小授权原则、防暴露、信息加密、物理保密。
完整性:保证数据传输过程中是正确无误的,接收和发送的数据相同,包括安全协议、校验码、密码校验、数字签名、公证等手段。
可用性:保证合法的用户能以合法的手段来访问数据,包括综合保障(IP过滤、业务流控制、路由选择控制、审计跟踪)。
可控性:控制授权范围内的信息流向及行为方式,整个网络处于可控状态下。
不可抵赖性:信息数据参与者不能否认自己发送的数据,参与者身份真实有效。
1.2、网络攻击和威胁
被动攻击:不直接影响源站和目的站的通信内容,如监听,窃取。
主动攻击:直接影响源站和目的站的通信内容,如中断(将源站发出的数据中断,不再发送给目的站),篡改(截获二者通信数据,并修改其中内容),伪造(第三方伪装成源站和目的站进行通信)。
1.3、安全体系结构
可划分为物理线路安全、网络安全、系统安全和应用安全。
物理线路就是物理设备、物理环境;
网络安全指网络上的攻击、入侵;
系统安全指的是操作系统漏洞、补丁等;
应用安全就是上层的应用软件,包括数据库软件。
安全保护等级
用户自主保护级:适用于普通内联网的用户。
系统审计保护级:适用于通过内联网或国际网进行商务活动,需要保密的非重要单位。
安全标记保护级:适用于地方各级国家机关、金融机构、邮电通信、能源与水源供给部门、交通运输、大型工商与信息技术企业、重点工程建设单位。
结构化保护级:适用于中央级国家机关、广播电视部门、重要物资储备单位、社会应急服务部门、尖端科技企业集团、国家重点科研机构和国际建设等部门。
访问验证保护级:适用于国防关键部门和依法需要对计算机信息系统实施特殊隔离的单位。
2、◉信息安全技术
对称加密:DES(共享密钥,112位)、AES(128)
非对称加密技术:RSA(1024)
摘要算法:MD5(128位)、SHA-1(160位)。
2.1、加密技术一保密性
基本概念
明文:实际传输的真正数据。
密文:经过加密之后的数据。
加密:将明文转换为密文的过程。
解密:将密文转换为明文的过程。
加密算法:一般是公开的,包括两大规则,代换(转换成完全不同的其他数据)和置换(打乱明文顺序,进行重新置换)。
密钥:加密和解密过程中使用的密码等,是隐藏的。
对称加密技术
就是对数据的加密和解密的密钥(密码)是相同的,属于不公开密钥加密算法。
其缺点是加密强度不高(因为只有一个密钥),且密钥分发困难(因为密钥还需要传输给接收方,也要考虑保密性等问题)。
DES(共享密钥,112位)、AES
非对称加密技术
就是对数据的加密和解密的密钥是不同的,是公开密钥加密算法。
其缺点是加密速度慢(密钥有1024 位,计算量大,不适合加密大数据)。
RSA
对称加密算法密钥一般只有 56位,因此加密过程简单,适合加密大数据,也因此加密强度不高;
而非对称加密算法密钥有1024位,相应的解密计算量庞大,难以破解,却不适合加密大数据,一般用来加密对称算法的密钥,这样,就将两个技术组合使用了,这也是数字信封的原理。
数字信封原理:信是对称加密的密钥,数字信封就是对此密钥进行非对称加密;
具体过程:发送方将数据用对称密钥加密传输,而将对称密钥用接收方公钥加密发送给对方。接收方收到数字信封,用自己的私钥解密信封,取出对称密钥解密得原文。
数字信封运用了对称加密技术和非对称加密技术,本质是使用对称密钥加密数据,非对称密钥加密对称密钥,解决了对称密钥的传输问题。
2.2、信息摘要一完整性
所谓信息摘要,就是一段数据的特征信息,当数据发生了改变,信息摘要也会发生改变,发送方会将数据和信息摘要一起传给接收方,接收方会根据接收到的数据重新生成一个信息摘要,若此摘要和接收到的摘要相同,则说明数据正确。
信息摘要是由哈希函数生成的。
信息摘要的特点:不算数据多长,都会产生固定长度的信息摘要;任何不同的输入数据,都会产生不同的信息摘要;单向性,即只能由数据生成信息摘要,不能由信息摘要还原数据。
信息摘要算法:MD5(产生 128位的输出)、SHA-1(安全散列算法,产生160位的输出,安全性更高)。
可知使用信息摘要可以保证传输数据的完整性,只需要双方比对生成的信息摘要是否相同即可判断数据有没有被篡改,
但是这样会出现一个问题,就是当发送方发送的数据和信息摘要都被篡改了,那么接收方拿到错误的数据生成的信息摘要也和篡改的信息摘要相同,接收方就无能为力了,这个问题,在后面的数字签名技术会解决。
2.3、数字签名一不可抵赖性
上述技术只保证了数据传输过程的保密性和完整性,但却无法保证发送者是否非法,即在传输过程中,数据被第三方截获,即使他不能解密获取真实数据,但是他可以伪造一段数据,也用加密算法加密后再发送给接收方,那么接收方无法判断发送方是否合法,其只会用发送方告诉他的方法来解密,此时就要用到数字签名技术来验证发送方是否合法。
数字签名属于非对称加密体制,主要功能有:不可否认、报文鉴别、报文的完整性。
原理:若发送方需要发送数据,应该使用发送方的私钥进行数字签名,而其公钥是共享的,任何接收方都可以拿来解密,因此,接收方使用了发送方的公钥解密,就必然知道此数据是由发送方的私钥加密的,而发送的私钥只属于发送方,唯一标识了数据是由谁发送的,这就是数字签名的过程原理。
将数字签名技术和非对称加密技术合并使用,数据的传输过程,将明文使用A的私钥进行数字签名,再将传输数据使用B的公钥加密,到达B后,B首先使用自己的私钥解密,然后使用A的公钥来核实签名,确认发送方合法,才会取出明文。
数字签名技术与非对称加密技术使用公钥和私钥的过程是完全相反的。
当数字签名和信息摘要合用后,就能保证不会产生错误,因为数字签名确定了唯一的发送方,第三方无法伪造,如果数据被篡改,数字签名肯定错误,若数字签名无误,则数据肯定没被篡改,然后可根据信息摘要验证数据的完整性。
同时,因为数字签名本质也是基于非对称加密算法的原理,因此其对整个报文进行签名的速度也很慢,生成了信息摘要后,可以只对信息摘要进行数字签名,这就大大提高了效率,接收方收到后可以对信息摘要先核实签名,然后再将自己生成的信息摘要和核实签名后的信息摘要进行比对即可。
2.4、数字证书
数字证书又称为数字标识,由用户申请,证书签证机关CA对其核实签发的,对用户的公钥的认证。上述的技术都是在原发送方是正确的的情况下所做的加密和认证技术,然而当发送方本身就是伪造的,即发送的公钥本身就是假的,那么后续的加密、数字签名都没有意义了,因此对发送方的公钥进行验证是十分重要的。
数字证书的原理
数字证书是将持有者的公钥和持有者信息绑定起来的机制,每一个发送方都要先向 CA 申请数字证书,数字证书是经过 CA 数字签名了的,也即 CA 使用私钥加密,当发送方要发送数据时,接收方首先下载 CA 的公钥,去验证数字证书的真伪,如果是真的,就能保证发送方是真的,因为 CA 是官方权威的机构,其合法性毋庸置疑。
最安全的过程要验证两步:1、在网银系统中,使用网银时,要先下载该银行的数字证书,之后,本地客户机会用 CA 的公钥对数字证书进行解密,解密成功说明是 CA 颁发的,是该银行系统而非黑客冒充。2、确认了通信对方无误后,就可以采用上述的一系列加密和认证技术来对通信数据进行加密,确保数据不会在发送过程中被截获篡改。
3、◉网络安全
3.1、安全协议
物理层主要使用物理手段,隔离、屏蔽物理设备等,其它层都是靠协议来保证传输的安全。
SSL协议用于网银交易
三方面的服务:用户和服务器的合法性验证、加密数据以隐藏被传输的数据、保护数据的完整性。
实现过程:接通阶段→密码交换阶段(客户端和服务器之间交换双方认可的密码)→会谈密码阶段(客户端和服务器之间产生彼此交谈的会谈密码)→检验阶段→客户认证阶段→结束阶段。
SSL 被设计为加强 Web 安全传输(HTTP/HTTPS/)的协议(还有 SMTP/NNTP 等),SSH 被设计为加强Telnet / FTP 安全的传输协议。
SET安全电子交易协议主要应用于B2C模式(电子商务)中保障支付信息的安全性
3.2、◉lPSec协议
IPSec 是 IETF 为保证在 Internet 上传送数据的安全保密性而制定的框架协议。
应用在网络层,保护和认证IP 数据包。
是开放的框架式协议,各算法之间相互独立。
提供了信息的机密性、数据的完整性、用户的验证和防重放保护。
隧道技术、加密技术、认证技术、密钥管理技术于一体。
支持隧道模式和传输模式。
3.3、◉防火墙
防火墙是在内部网络和外部因特网之间增加的一道安全防护措施,防火墙技术可分为网络级防火墙和应用级防火墙。
网络级防火墙层次低,但是效率高,因为其使用包过滤和状态监测手段,一般只检验网络包外在(起始地址、状态)属性是否异常,若异常,则过滤掉,不与内网通信,因此对应用和用户是透明的。
如果遇到伪装的危险数据包就没办法过滤,就要依靠应用级防火墙,层次高,效率低,因为应用级防火墙会将网络包拆开,具体检査里面的数据是否有问题,会消耗大量时间,造成效率低下,但是安全强度高。
屏蔽子网方法,是在内网和外网之间增加了一个屏蔽子网,相当于多了一层网络,称为 DMZ(非军事区),这样,内网和外网通信必须多经过一道防火墙,屏蔽子网中一般存放的是邮件服务器、WEB 服务器这些内外网数据交互的服务器,可以屏蔽掉一些来自内部的攻击,但是完全来自系统内部服务器的攻击还是无法屏蔽掉。
根据应用防火墙一般可分为以下 6 类:
(1)包过滤型防火墙。包过滤型防火墙是在网络层对数据包进行分析、选择。
(2)电路级网关型防火墙。电路级网关型防火墙起着一定的代理服务作用,监视两台计算机建立连接时的握手信息,判断该会话请求是否合法。一旦会话连接有效后,该网关仅复制和传递数据。电路级网关型防火墙在 IP 层代理各种高层会话,具有隐藏内部网络信息的能力,且透明性高。但由于其对会话建立后所传输的具体内容不再做进一步的分析,因此安全性低。
(3)应用网关型防火墙。应用网关型防火墙是在应用层上实现协议过滤和转发功能,针对特别的网络应用协议制定数据过滤规则。
(4)代理服务型防火墙。代理服务器接收客户请求后,会检查并验证其合法性,如合法,它将作为一台客户机向真正的服务器发出请求并取回所需信息,最后再转发给客户。
(5)状态检测型防火墙。状态检测型防火墙动态记录和维护各个连接的协议状态,并在网络层对通信的各个层次进行分析与检测,以决定是否允许通过防火墙。
(6)自适应代理型防火墙。自适应代理型防火墙可以根据用户定义的安全策略,动态适应传送中的分组流量。如果安全要求较高,则最初的安全检查仍在应用层完成。而一旦代理明确了会话的所有细节,那么其后的数据包就可以直接经过速度快得多的网络层。因此,此类防火墙兼备了代理技术的安全性和状态检测技术的高效率。
3.4、无线网络安全
wifi 无线网络接入加密安全技术,安全级别从低到高分别为WEP<WPA<WPA2
WEP 使用 RC4 协议进行加密,并使用CRC-32 校验保证数据的正确性。
WPA 在此基础上增加了安全认证技术,增大了密钥和初始向量的长度,以 128 比特的密钥和 48位的初始向量用于 RC4 加密;采用了临时密钥完整性协议 TK1P,以更频繁地变换密钥来降低安全风险;强化了数据完整性保护,使用报文完整性编码来检测伪造的数据包,并且在报文认证码中包含有帧计数器,还可以防止重放攻击。
WPA2 在 WPA 的基础上,增加采用了 AES 对称加密算法,比 RC4 加密更安全可靠。
4、计算机病毒与木马
定义:编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。
病毒具有:传染性、隐蔽性、潜伏性、破坏性、针对性、衍生性、寄生性、未知性。
病毒命名规则:病毒前缀.病毒名.病毒后缀
病毒前缀包括:trojan(木马)、Hack(黑客程序)、worm(蠕虫病毒)、macro(宏病毒)、script(脚本病毒)、win32(针对DOC系统的病毒)。
八、法律法规与标准化知识
1、◉知识产权基础知识
国家版权局是国务院著作权行政管理部门,主管全国的著作权管理工作。
中国版权保护中心的主要职能之一是计算机软件著作权登记,包括软件著作权登记、软件源程序封存保符、软件著作权转让或专有许可合同登记、软件著作权质权登记等。
各国的知识产权法律都只适用于本国范围内,在其他国家不适用。
法律、法规,国家机关的决议、决定、命令和其他具有立法、行政、司法性质的文件,及其官方正式译文,不享有著作权。
如果你的作品被国家看上了,你就没有著作权了。
◉发表权有时间限制
◉署名权、修改权、保护作品完整权 不受时间限制,就是永久保护
1.1、保护期限
单位为主体时,是没有署名权和修改权等的,因为属于集体。
1.2、知识产权人的确定
单位和委托的区别在于,当合同中未规定著作权的归属时,著作权默认归于单位,而委托创作中,著作权默认归属于创作方个人。
1.3、侵权判定
一般通用化的东西不算侵权,个人未发表的东西被抢先发表是侵权。
中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。
开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。
只要不进行传播、公开发表、盈利都不算侵权
1.4、其他法律细则
商业秘密
构成条件:未公开、能为权利人带来利益、保密性。
商业秘密无固定的保密时间,一般由企业自行规定。且不能延长。
专利权
期限:发明专利权保护期限为自申请日起 20年;实用新型专利权和外观设计专利权保护期限为自申请日起 10 年。
专利权谁先申请就归谁,若同一天申请,则双方协商或者以抽签方式决定。
商标权
谁先申请就归谁,如果同一天申请,则谁先使用该商标就归谁,若都未使用或同时使用,则由双方协商或者以抽签方式决定。
2、标准化基础知识
国际标准:ISO、IEC等国际标准化组织
国家标准:GB-中国、ANSI-美国、BS-英国、JIS一日本
九、企业信息化战略与实施
1、信息化基本概念
1.1、信息系统概念
香农:信息就是不确定性的减少。
信息论的核心概念是“信息熵”,它衡量了一组信息的不确定性和随机性。熵越高,信息越不确定;熵越低,信息越确定。
跟热力学正好相反,热力学的熵是无序的度量,信息论中是有序的度量。
数据:将数据加工后可以得到信息,数据是生成信息的材料。
如:数据库有一条记录:张三,男,19,大二。
加工:有一个叫张三的男生,19岁,正在读大二。
知识:将信息加工后可以知识。
如:数据库有二条记录:赵四,湖南永州人;王五,湖南邵阳人。
加工:赵四与王五是同乡,这就是知识了。
信息化:是计算机、通信和网络技术的现代化;是从物质生产占主导地址的社会向信息产业占主导地位社会转变的发展过程;是从工业社会向信息社会演进的过程。
信息具有如下基本属性:
真伪性:真实是信息的中心价值,不真实的信息价值可能为负。
层次性:信息一般和管理层一样,可以为战略层、策略层和执行层3个层次。
不完全性:客观事实的全部信息是不可能得到的。我们需要正确滤去不重要的信息、失真的信息,抽象出有用的信息。
滞后性:信息是数据加工的结果,因此信息必然落后于数据,加工需要时间。
扩压性:信息和实物不同,它可以扩散也可以压缩。
分享性:信息可以分享,这和物质不同,并且信息分享具有非零和性。
应用层次分类
战略级(企业最高管理层);
战术级(企业中层经理及其管理部门);
操作级(服务型企业的业务部门);
事务级(企业的管理业务人员)
数据环境分类
数据文件:比较原始的数据处理方式,手工操作文件,如只使用文本、excel 等记录信息。
应用数据库:企业内部各个部门都有独立的数据库,针对不同的应用场景设计的,且相互之间无法互通。
主题数据库:企业内部只有一个集成信息化的数据库,面向业务主题,实现信息共享。
信息检索系统:数据仓库的概念,主要用于大数据分析、检索的。
1.2、◉信息化战略体系
- 一个企业他想干成什么事,这就叫企业战略规划。
- 为了达到他的目标,要进行信息化,信息系统如何支撑这些目标,这就是信息系统战略规划。
- 你设计好了系统,你就要考虑用什么技术来实现,便是信息技术战略规划。
- 你可能有多套子系统,它们之间的资源你要整合吧,不然就成了信息孤岛,便有了信息资源规划。
企业战略规划利用机会和威胁评价现在和未来的环境,用优势和劣势评价企业现状,进而选择和确定企业的总体和长远目标,制定和抉择实现目标的行动方案。
信息系统战略规划关注如何通过信息系统来支撑业务流程的运作,进而实现企业的关键业务目标,其重点在于对信息系统远景、组成架构、各部分逻辑关系进行规划。
信息技术战略规划:通常简称为IT战略规划,是在信息系统规划的基础上,对支撑信息系统运行的硬件、软件、支撑环境等进行具体的规划,它更关心技术层面的问题。
信息资源规划是在以上规划的基础上,为开展具体的信息化建设项目而进行的数据需求分析、信息资源标准建立、信息资源整合工作。
在进行信息化规划时,需要做好以下几个方面的工作:
1、明确发展目标和实施重点
2、成立领导机构
3、做好企业业务信息化需求分析
4、确定企业信息化不同发展阶段的投资预算
5、制订必要的促进企业信息化建设的规章制度
系统规划:单个项目的立项分析,是信息系统生命周期的第一个阶段,其任务是对企业的环境目标及现有系统的状况进行初步调查,根据企业目标和发展战略,确定信息系统的发展战略,对建设新系统的需求做出分析和预测,同时考虑建设新系统所受的各种约束,研究建设新系统的必要性和可能性。
1.3、◉企业战略与信息化战略的集成主要方法
有:业务与IT整合(Business-ITAlignment,BITA)和企业IT架构(Enterprise IT Architecture, EITA)。
(1)业务与IT整合。BITA是一种以业务为导向的、全面的IT管理咨询实施方法论。从制订企业战略、建立(或改进)企业组织结构和业务流程,到进行IT管理和制订过渡计划(Transition Plan),使IT能够更好地为企业战略和目标服务。BITA适用于信息系统不能满足当前管理中的业务需要,业务和IT之间总是有不一致的地方。
BITA的主要步骤是:评估和分析企业当前业务和IT不一致的领域,整理出企业的业务远景和未来战略,建立业务模型,提出达到未来目标的转变过程建议和初步计划,以及执行计划。
(2)企业IT架构。EITA分析企业战略,帮助企业制订IT战略,并对其投资决策进行指导。在技术、信息系统、信息、IT组织和IT流程方面,帮助企业建立IT的原则规范、模式和标准,指出IT需要改进的方面并帮助制订行动计划**。EITA适用于现有信息系统和IT基础架构不一致、不兼容和缺乏统一的整体管理的企业**。
2、信息系统战略规划
2.1、◉战略规划方法
第一阶段:以数据处理为核心,围绕职能部门需求
企业系统规划法 BSP:重视数据的创建和使用,以数据的创建和使用归类,提供一个信息系统规划,建立CU矩阵(创建使用矩阵)。
关键成功因素法 CSF:重视关键因素,每个企业在某阶段都有关键因素,抓住关键信息。
战略集合转化法 SST:将企业的战略信息(环境、目标等)收集起来,转换为信息系统的战略信息,全方位的注重企业的战略信息。
第二阶段:以企业内部 MIS(管理信息系统)为核心,围绕企业整体需求
战略数据规划法 SDP:强调建立企业模型和主题数据库(重点和关键,是面向业务主题,整个企业的),数据类基本上是稳定的,而业务和流程是多变的。
信息工程法IE:第一次提出以工程的方法来建立信息系统,以数据为中心的开发方法。
战略栅格法 SG:建立一个 2*2的矩阵,每个矩阵元素代表过程对数据类的创建和使用等。栅格即划分矩阵。
第三阶段:综合考虑企业内外环境,以集成为核心,围绕企业战略需求
价值链分析法 VCA:将所有对企业有影响的信息作为一个个活动,其都有可能对企业造成增值,分析其中对企业增值最大的信息。
战略一致性模型SAM:保证企业战略和信息系统战略要一致。
2.2、◉信息系统开发方法
2.2.1、结构化法
特点:
1、开发目标清晰化。结构化方法的系统开发遵循“用户第一”的原则;
2、开发工作阶段化。结构化方法每个阶段的工作内容明确,注重对开发过程的控制。严格区分工作阶段,每个阶段有任务与成果。
3、开发文档规范化。结构化方法每个阶段工作完成后,要按照要求完成相应的文档。文档资料标准化。
4、设计方法结构化。在系统分析与设计时,从整体和全局考虑,自顶向下地逐步分解;
用数据流图(DataFlow Diagram, DFD)来建立系统的功能模型,从而完成需求分析。
细分为概要设计和详细设计两个阶段,它根据模块独立性原则和系统结构准则,将DFD转换为系统结构图,用系统结构图来建立系统的物理模型,描述系统分层次的模块结构,以及模块之间的通信与控制关系。
结构化方法是目前最成熟、应用较广泛的一种工程化方法,它特别适合于数据处理领域的问题,但不适应于规模较大、比较复杂的系统开发。
缺点
1、开发周期长。采用结构化方法进行系统开发,按照顺序历经各个阶段,直到系统实施阶段结束后,用户才能使用系统。
2、难以适应需求变化。
3、很少考虑数据结构。结构化方法是一种面向数据流的开发方法,比较注重系统功能的分解与抽象,兼顾数据结构方面不多。
2.2.2、原型法
通过快速分析构造出一个小型的系统,满足用户的基本要求,使得用户可在试用原型系统的过程中得到亲身感受和受到启发,做出反应和评价,然后开发者根据用户的意见对原型加以改进。随着不断试验、纠错、使用、评价和修改,获得新的原型版本,如此周而复始。
适用于需求不明确的开发;
是否实现功能来分,可分为水平原型和垂直原型两种。
水平原型也称为行为原型,用来探索预期系统的一些特定行为,并达到细化需求的目的。只是功能的导航,但并未真实实现功能。水平原型主要用在界面上;
垂直原型也称为结构化原型,实现了一部分功能。垂直原型主要用在复杂的算法实现上。
最终结果来分,可分为抛弃式原型和演化式原型。
抛弃式原型也称为探索式原型,是指达到预期目的后,原型本身被抛弃。抛弃式原型主要用在解决需求不确定性、二义性、不完整性、含糊性等;
演化式原型为开发增量式产品提供基础,逐步将原型演化成最终系统。主要用在必须易于升级和优化的场合,适用于Web项目
2.2.3、面向对象方法
特点是系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的交流和沟通,缩短开发周期,提供系统开发的准确性和效率。
更好的复用性;
关键在于建立一个全面、合理、统一的模型;
分析、设计、实现三个阶段,界限不明确。
2.2.4、面向服务的方法
对于跨构件的功能调用,则采用接口的形式暴露出来。进一步将接口的定义与实现进行解耦,则催生了服务和面向服务
以粗粒度、松散耦合的系统功能为核心,强调系统功能的标准化和构件化,加强了系统的灵活性可复用性和可演化性。
面向服务的架构(SOA) 三个层次
基础设计层(底层服务构建)、应用结构层(服务之间的接口和服务级协定)和业务组织层(业务流程建模和服务流程编排);
SOAP(Simple Object Access Protocol,简单对象访问协议)。SOAP定义了服务请求者和服务提供者之间的消息传输规范,为两者之间的通信提供了一种标准的、与平台和语言无关的消息格式。
UDDI(Universal Description, Discovery and Integration,统一描述、发现和集成)规范。UDDI提供了一种服务发布、查找和定位的方法,是服务的信息注册规范。通过UDDI,企业可以发布自己的服务供其他企业查询和调用,也可以查询特定服务的描述信息,并动态绑定到该服务上。这样,需要服务的用户就可以发现并使用这些服务。
服务建模:分为服务发现、服务规约和服务实现三个阶段。
SO 方法三个主要的抽象级别
操作:位于最低层,代表单个逻辑单元的事物,包含特定的结构化接口,并且返回结构化的响应;
服务:位于第二层,代表操作的逻辑分组;
业务流程:最高层,是为了实现特定业务目标而执行的一组长期运行的动作或活动,包括依据一组业务规则按照有序序列执行的一系列操作。
与OO方法的比较
加强了系统的灵活性、可复用性和可演化性,并给信息系统开发带来了新的思路。
SO是OO的具有跳跃性的升级版本,强调的是业务本身,看重的是最终结果,对企业来讲,更有现实意义。
3、◉系统建模
系统分析首先要进行的工作是获取当前系统的物理模型,针对物理模型进行分析,抽象出逻辑模型,系统设计是通过调整和优化确定目标系统的逻辑模型,而系统开发的目的是建立目标系统的物理模型。
集成定义方法 IDEF
IDEF 是一系列建模、分析和仿真方法的统称,从IDEFO到IDEF14(包括IDEF1X在内)共有 16套方法,每套方法都是通过建模程序来获取某个特定类型的信息。
IDEFO:业务流程(功能)建模;
IDEF1:信息建模;
IDEFIX:数据建模(如 ER 模型);
IDEF2:仿真建模设计;
IDEF3:过程描述获取;
IDEF4:面向对象设计;
IDEF5:本体论描述获取;
IDEF6:设计原理获取;
IDEF7:信息系统审计;
IDEF8:用户界面建模;
IDEF9:场景驱动信息系统设计;
IDEF10:实施架构建模;
IDEF11:信息制品建模;
IDEF12:组织结构建模;
IDEF13:三模式映射设计;
IDEF14:网络规划。
助记:IDEF选择题,首先IDEF是系统建模的,0就是业务,业务都没有,其他的什么都不用谈了,有了业务就要有信息,1就是信息,数据是信息加工的结果,所以1X就是数据。
之后就是仿真,过程,面向对象,记住4就是面向对象,8是用户界面,12是组织结构。
3.1、◉工作流参考模型 WRM
工作流执行服务:工作流执行服务是WFMS(工作流管理系统)的核心模块,它的功能包括创建和管理流程定义,创建、管理和执行流程实例。
工作流引擎:工作流引擎是为流程实例提供运行环境,并解释执行流程实例的软件模块,即负责流程处理的软件模块。
流程定义工具:流程定义工具是管理流程定义的工具,它可以通过图形方式把复杂的流程定义显示出来并加以操作。
客户端应用:客户端应用是通过请求的方式与工作流执行服务交互的应用。
调用应用:调用应用是被工作流执行服务调用的应用,调用应用与工作流执行服务交互。
管理监控工具:管理监控工具主要指组织机构和参与者等数据的维护管理和流程执行情况的监控,管理监控工具与工作流执行服务交互。
个人理解:工作流首先就要能执行,执行就跟车子一样被点火了,要启动引擎了,之后就是一开车的一系列流程。车子会有一个显示屏,也就是客服端,你在上面可以打开应用,比如听歌、导航,也能监控车子周围的环境。
3.2、◉遗留系统模型
淘汰策略: 第三象限为低水平、低价值区,即遗留系统的技术含量较低,且具有较低的业务价值。对这种遗留系统的演化策略为淘汰,即全面重新开发新的系统以代替遗留系统。
继承策略:第二象限为低水平、高价值区,即遗留系统的技术含量较低,已经满足企业运作的功能或性能要求,但具有较高的商业价值,目前企业的业务尚紧密依赖该系统。对这种遗留系统的演化策略为继承。在开发新系统时,需要完全兼容遗留系统的功能模型和数据模型。为了保证业务的连续性,新老系统必须并行运行一段时间,再逐渐切换到新系统上运行。
改造策略:第一象限为高水平、高价值区,即遗留系统的技术含量较高,本身还有极大的生命力。系统具有较高的业务价值,基本上能够满足企业业务运作和决策支持的需要。这种系统可能建成的时间还很短,对这种遗留系统的演化策略为改造。
集成策略:第四象限为高水平、低价值区,即遗留系统的技术含量较高,但其业务价值较低,可能只完成某个部门(或子公司)的业务管理,对这种遗留系统的演化策略为集成。
4、政府信息化与电子政务
政府对政府 G2G:政府之间上级对下级。
政府对企业 G2B:企业到政府办事。
政府对公众 G2C:公众对政府信息的查询。
政府对公务员G2E:政府内部工作人员自动化办公,是其他模式的基础。
电子政务系统中有三种信息流,政务办公信息流(存在于政府工作人员内部办公中)、公共事务信息流(存在于政府机构对外办公的过程中)、政务咨询信息流(存在于社会公众和企业查询相关信息的过程中)。
5、企业信息化与电子商务
5.1、◉企业资源计划ERP
企业资源规划是指建立在信息技术基础上,以系统化的管理思想,为企业提供决策和运营手段的管理平台。ERP系统是将企业所有资源进行集成整合,并进行全面、一体化管理的信息系统。
演变过程:物料需求计划(物料单系统)→制造资源计划(增加库存、分销等)→企业资源计划(打通了供应链,加入财务、人力资源、销售管理等)。
企业有四大资源:物流(物流管理)、资金流(财务管理)、信息流(生产控制管理)、人力资源(人力资源管理)
企业的资源计划
管理思想:ERP首先是一种管理思想,将企业资源分类管理,是管理思想的变革。
软件产品:其次,ERP是个软件产品,为企业用户提供一体化的解决方案,不是买来直接用的需要个性化的开发和部署。
管理系统:ERP最后是一个管理系统,存在众多的子系统,这些子系统有统一的规划,是互联互通的,便于事前事中监控。
个人理解:企业资源计划也会提到供应链,不能看到供应链就选供应链管理。
区别在于如果提到供应链又提到企业控制和资源优化就是企业资源计划。
供应商管理主要是物流啥的。
5.2、◉客户关系管理CRM
CRM 将客户看做是企业的一项重要资产,客户关怀是CRM 的中心,其目的是与客户建立长期和有效的业务关系,在与客户的每一个“接触点”上都更加接近客户、了解客户,最大限度的增加利润。
CRM 的核心是客户价值管理,将客户价值分为既成价值、潜在价值和模型价值,通过**“一对一“营销原则**,满足不同价值客户的个性化需求,提高客户忠诚度和保有率。
CRM 的功能
客户服务:是CRM 的关键内容,对客户提供的服务,可以提高客户忠诚度。
市场营销:包括商机产生、商机获取和管理、商业活动管理和电话营销等;销售人员与潜在客户的互动行为、将潜在客户发展为真正客户并保持其忠诚度是使企业赢利的核心因素。
共享的客户资料库:是企业的一种重要信息资源,将市场营销和客户服务连接起来。也是CRM的基础和依托。
分析能力:CRM 的一个重要方面在于它具有使客户价值最大化的分析能力。对上述获取的资料库进行分析。
CRM 是企业管理的前台,必须与ERP进行良好的集成,使得信息可以及时传递给财务、生产等部门。
◉市场营销和客户服务是 CRM 的支柱性功能
◉一个有效的 CRM 解决方案应该具备以下要素:
畅通有效的客户交流渠道(触发中心)。
对所获信息进行有效分析(挖掘中心)。
CRM 必须能与ERP很好地集成。
CRM 的实现过程
客户服务与支持,即通过控制服务品质以赢得顾客的忠诚度。
客户群维系,即通过与顾客的交流实现新的销售。
商机管理,即利用数据库开展销售。
5.3、◉供应链管理 SCM
SCM 是一种集成的管理思想和方法,它执行供应链中从供应商到最终用户的物流的计划和控制等职能。从单一的企业角度来看,是指企业通过改善上下游供应链关系,整合和优化供应链中的信息流、物流和资金流,以获得企业的竞争优势。
供应链节点:供应商、制造商、分销商、零售商、仓库、配送中心、客户等。
SCM 包括计划、采购、制造、配送、退货五大基本内容。
计划:这是SCM 的策略部分,企业需要有一个策略来管理所有的资源,以满足客户对产品的需求。好的计划是建立一系列的方法监控供应链。
采购:选择能为企业提供产品和服务的供应商。
制造:安排生产、测试、打包和准备送货所需的活动,是供应链中测量内容最多的部分。
配送:即物流,是调整用户的订单收据、建立仓库网络、拍递送人员提货并送货、建立产品计价系统、接收付款。
退货:是供应链中的问题处理部分。
SCM 的设计原则
自顶向下和自底向上结合、简洁性、互补性、协调性、动态性、创新性、战略性原则。
5.4、产品数据管理 PDM
产品数据管理(Product Data Management, PDM)是一门用来管理所有与产品相关信息(包括零件信息、配置、文档、计算机辅助设计文件、结构、权限信息等)和所有与产品相关过程(包括过程定义和管理)的技术。
PDM 系统是一种软件框架,利用这个框架可以帮助企业实现对与企业产品相关的数据、开发过程以及使用者进行集成与管理,可以实现对设计、制造和生产过程中需要的大量数据进行跟踪和支持。
5.5、商业智能 BI
商业智能描述了一系列的概念和方法,通过应用基于事实的支持系统来辅助商业决策的制定。商业智能技术提供使企业迅速分析数据的技术和方法,包括收集、管理和分析数据,将这些数据转化为有用的信息,然后分发到企业各处。
BI相关的技术主要是数据仓库、数据挖掘和 OLAP(联机分析处理),强调获取数据后进行分析和决策。
BI的建设过程如下:
需求分析:第一步,明确定义企业对商业智能系统的期望和需求。
数据仓库建模:通过对企业需求的分析,建立企业数据仓库的逻辑模型和物理模型,并规划好系统的应用架构。
数据抽取:将数据从业务系统中抽取到数据仓库中,对数据进行转换和清洗。
建立 BI 分析报表。
用户培训和数据模拟测试:对用户进行培训,在实际环境中测试系统。
系统改进和完善:用户使用过程中提出的新需求,按上述步骤进行完善
5.6、◉决策支持系统 DSS
帮助决策者提高决策水平和质量,起到辅助作用。
DSS系统由四个子系统组成:
数据库子系统:建立与决策相关的信息;
推理部分:知识库,包含智能推理分析算法;
模型库子系统:是最复杂的子系统,一系列应用场景模型,用户主要根据模型来决策;
用户接口子系统:是一个人机交互界面,完美的集合上述三个子系统,供用户使用。
决策支持可以分为结构化决策、半结构化决策和非结构化决策。
结构化决策是指对某一决策过程的规则进行确定性描述与建模,以适当的算法产生决策方案,并能从多种方案中选择最优解;
非结构化决策的决策过程复杂,不可能用确定的模型和语言描述其决策过程,更无所谓最优解。
半结构化和非结构化决策一般用于企业的中、高级管理层。一般来说,决策往往不可能一次完成,而是一个迭代的过程。
DSS和 MIS(管理信息系统)的区别:
DSS 能够解决非结构化和半结构化的问题,强调发挥人的智慧,用户参与到开发过程中,最终还是用户决策,DSS 服务于企业中高层;
MIS 是企业的结构化的管理信息系统,管理公司的资源等,强调一个结构化的过程,自动化管理,人力参与的少。
5.7、◉知识管理
明确知识和信息的区别,知识是由信息推导出来的,人类智慧和经验的集合。
显性知识:例如文档、资料、视频等能够看得见的知识。
隐性知识:存在于人脑海中的知识,包括人的记忆与经验技巧,理想抱负等。
知识管理应该探寻如何将隐性知识转化为显性知识,达到共享的目的,有如下三种工具可以实现:
知识生成工具:获取知识的工具,包括知识获取、知识合成、知识创新。
知识编码工具:如何表达知识的工具。
知识转移工具:知识需要传播,达到共享的目的,传播过程中会遇到困难和差异,包括时间差异、空间差异和社会差异。
个人理解:知识是通过信息的得来的,所以知识得生成,转移就是传播出去。
5.8、企业门户
企业网站:注重消息的单向传送展示,缺乏信息互动,是企业门户的雏形。
企业信息门户EIP:在互联网模式下,将企业的各种应用系统、数据资源和互联网资源统一集成在企业门户下,提供企业的产品和用户的信息,达到信息共享,使得企业相关的供应链、客户通过此门户获得所需的信息,快速了解企业文化。
企业知识门户 EKP:企业网站的基础上增加知识性内容,企业员工可通过 EKP 了解今天企业所发生的事情,找到与自己相关的项目资源信息,建立了一个企业知识库,能够提高企业员工的工作效率。
企业应用门户 EAP:对企业业务流程的集成,以业务流程和企业应用为核心,把业务流程中功能不同的应用模块通过门户技术集成在一起,企业员工和合作伙伴可以通过 EAP 访问相应的应用系统实现移动办公。
企业通用门户:将上述四者有机的融合在一起。
5.9、电子数据交换 EDI
电子数据交换 EDI,它是一种在公司之间传输订单、发票等作业文件的电子化手段,又称为“无纸贸易”,需要统一的数据格式,成本大,主要用于批发业务。
根据功能,EDI可分为四类:订货信息系统(用电子数据文件来传输订单、发货票和各类通知)、电子金融汇兑系统(银行和其他组织之间实行电子费用汇兑)、交互式应答系统(机票预订系统)、带有图形资料自动传输的EDI(计算机辅助设计图形的自动传输)。
EDI系统三要素:EDI软件和硬件、通信网络、数据标准化。
EDI的特点
EDI使用对象是不同的组织之间,传输的是企业间的报文,是企业间信息交流的一种方式;
EDI所传送的资料是一般业务资料,如发票、订单、而不是指一般性的通知;
EDI传输的报文是格式化的,是符合国际标准的,这是计算机能够自动处理报文的基本前提;
EDI使用的数据通信网络一般是增值网、专用网;
数据传输由收送双方的计算机系统直接传送、交换资料,不需要人工介入操作;
EDI与传真或电子邮件的区别:传真与电子邮件,需要人工的阅读判断处理才能进入计算机系统,人工将资料重复输入计算机系统中,既浪费人力资源,也容易发生错误,而EDI不需要再将有关资料人工重复输入系统。
5.10、◉企业应用集成 EAI
企业信息系统中容易产生信息孤岛,即在一个企业内部有多个子系统,且不互通,一个信息需要反复多次输入,为了解决信息孤岛的问题,提出了企业应用集成 EA1 的概念,可以将企业的多个信息系统联系起来,让使用者感觉在使用一个系统。企业的价值取向是推动 EAI技术发展的原动力,而 EAI的实现反过来也驱动企业竞争优势的提升。
企业集成分类
表示集成:即界面集成,是最原始的集成,将多个信息系统的界面集成在一起,统一入口,为用户提供一个看上去统一,但是由多个系统组成的应用系统的集成。
数据集成:是其他集成方法的基础,把不同来源、格式、特点性质的数据在逻辑上或者物理上有机的集中,从而为企业提供全面的数据共享。如数据仓库可视为数据集成;但仍没有解决业务逻辑的问题。
控制集成(功能集成、应用集成):业务逻辑层次的集成,可以借助于远程过程调用或远程方法调用、面向消息的中间件等技术,将多个应用系统功能进行绑定,使之像一个实时运行的系统一样接受信息输入和产生数据输出,实现多个系统功能的叠加。
业务流程集成:即过程集成,最彻底的集成,企业必须对各种业务信息的交换进行定义、授权和管理,以便于改进操作、减少成本、提高响应速度。
门户集成:企业将组织内部的部分资源和功能发布到互联网上,放在企业门户网站上。
应用集成数据交换方式
共享数据库:在应用集成时,让多个应用系统通过直接共享数据库的方式,来进行数据交换,实时性强,可以频繁交互,属于同步方式;但是安全性、并发控制、死锁等问题突出。
消息传递:消息是软件对象之间进行交互和通信时所使用的一种数据结构,可以独立于软件平台而存在,适用于数据量小、但要求频繁、立即、可靠、异步地数据交换场合。
文件传输:是指在进行数据交换时,直接将数据文件传送到相应位置,让目标系统直接读取数据,可以一次性传送大量信息,但不适合频繁进行数据传送。适用于数据量大、交换频度小、即时性要求低的情况。
5.11、电子商务
参与电子商务的实体有四类:顾客、商户、银行、认证中心。
分为下列三种模式:企业对消费者B2C(网上商城);企业对企业B2B(天猫);消费者对消费者C2C(如淘宝上的个人卖家)。
目前,我国电子商务标准体系包含4方面,分别是基础技术标准、业务标准、支撑体系标准和监督管理标准。
其中,服务质量属于监督管理标准范畴;注册维护属于业务标准范畴;在线支付属于支撑体系标准范畴;信息分类编码属于业务标准范畴。
5.12、信息资源管理IRM
信息资源与人力、物力、财力和自然资源一样,都是企业的重要资源。
目的是通过企业内外信息流的畅通和信息资源的有效利用,来提高企业的效益和竞争力。
包括数据资源管理 和 信息处理管理
基础是数据管理:确定数据规划、数据应用、数据标准、数据内容、数据范围等。
起点和基础是:建立信息资源目录。
信息资源规划(Information Resource Planning, IRP)是将需求分析与系统建模紧密结合起来。
IRM系统的建设,首先要做好IRP工作。
6、信息化体系
信息化体系六要素
信息技术应用:是信息化体系六要素中的龙头,是国家信息化建设的主阵地,集中体现了国家信息化建设的需求与利益。
信息资源的开发利用是国家信息化的核心任务,是国家信息化建设取得实效的关键,也是我国信息化的薄弱环节。
信息网络是信息资源开发利用和信息技术应用的基础,是信息传输、交换、共享的必要手段。
信息技术和产业是我国进行信息化建设的基础。
信息化人才是国家信息化成功之本,对其他各要素的发展速度和质量起着决定性的影响,是信息化建设的关键。
信息化政策法规和标准化规范用语规范和协调信息化体系六要素之间关系,是国家信息化快速、持续、有序、健康发展的根本保障。
十、◉系统规划
1、概述
系统规划步骤
- 对现有系统进行初步调查。根据企业战略和发展目标,从类似企业和本企业内部收集各种信息,站在管理层的高度观察企业的现状,分析现有系统的运行状况。
- 分析和确定系统目标。系统目标应包括服务的质量和范围、政策、组织和人员等,它不仅包括信息系统的目标,还要反映整个企业的目标。
- 分析子系统的组成和基本功能。自顶向下对系统进行划分,并且详细说明各个子系统应该实现的功能。
- 拟定系统的实施方案:可以对子系统的优先级进行设定,以便确定子系统的开发顺序。
- 进行系统的可行性研究,编写可行性研究报告,召开可行性论证会。
- 制订系统建设方案。对可行性研究报告中提出的各项技术指标进行分析、比较,落实各项假设的前提条件,制订系统建设方案,并根据该方案及其实施计划编写成系统设计任务书。系统设计任务书经上级主管部门批准后,正式作为系统建设的依据。
项目机会选择
立项目标和动机→立项价值判断→项目选择和确定→初步调査→可行性分析。
2、可行性分析
可行性是指在企业当前的条件下,是否有必要建设新系统,以及建设新系统的工作是否具备必要的条件。也就是说,可行性包括必要性和可能性。
步骤如下:
- 复查系统目标和规模
- 分析现有系统
- 导出新系统的高层逻辑模型:上下文关系图,ER图,用例图
- 用户复核
- 提出并评价解决方案
- 确定最终推荐的解决方案
- 草拟开发计划
- 编制和提交可行性研究报告
在信息系统建设项目中,可行性研究通常从经济可行性、技术可行性、法律可行性和用户使用可行性四个方面来进行分析,其中经济可行性通常被认为是项目的底线。
经济可行性
经济可行性也称为投资收益分析或成本效益分析,主要评估项目的建设成本、运行成本和项目建成后可能的经济收益。多数项目只有建设成本能控制在企业可接受的预算内的时候,项目才有可能被批准执行。而经济收益的考虑则非常广泛,可以分为直接收益和间接收益、有形收益和无形收益,还可以分为一次性收益和非一次性收益、可定量的收益和不可定量的收益等。
要注意的是,在系统开发初期,由于用户需求和候选系统方案还没有确定,成本不可能得到准确的估算。因此,此时的经济可行性分析只能大致估算系统的成本和收益,判断信息系统的建设是否值得。
技术可行性
技术可行性也称为技术风险分析,研究的对象是信息系统需要实现的功能和性能,以及技术能力约束。技术可行性主要通过考虑以下问题来进行论证:
(1)技术:现有的技术能力和信息技术的发展现状是否足以支持系统目标的实现。
(2)资源:现有的资源(例如,掌握技术的员工、企业的技术积累、构件库、软硬件条件等)是否足以支持项目的实施。
(3)目标:由于在可行性研究阶段,项目的目标是比较模糊的,因此技术可行性最好与项目功能、性能和约束的定义同时进行。在可行性研究阶段,调整项目目标和选择可行的技术体系都是可以的,而一旦项目进入开发阶段,任何调整都意味着更多的开销。
需要特别指出的是,技术可行性绝不仅仅是论证在技术手段上是否可实现,实际上包含了在当前资源条件下的技术可行性。
法律可行性
法律可行性也称为社会可行性,具有比较广泛的内容,它需要从政策、法律、道德、制度等社会因素来论证信息系统建设的现实性。
用户使用可行性
用户使用可行性也称为执行可行性,是从信息系统用户的角度来评估系统的可行性,包括企业的行政管理和工作制度、使用人员的素质和培训要求等,可以细分为管理可行性和运行可行性。
(1)管理可行性。管理可行性是指从企业管理上分析系统建设可行性。主管领导不支持的项目一般会失败,中高层管理人员的抵触情绪很大,就有必要等一等,先积极做好思想工作,创造条件。另外,还要考虑管理方法是否科学,相应的管理制度改革的时机是否成熟,规章制度是否齐全等。
(2)运行可行性。运行可行性也称为操作可行性,是指分析和测定信息系统在确定环境中能够有效工作,并被用户方便使用的程度和能力。例如,ERP 系统建成后的数据采集和数据质量问题,企业工作人员没有足够的IT技能等。
3、成本效益分析
3.1、基本概念
成本分类
固定成本:是指其总额在一定期间和一定业务量范围内,不受业务量变动的影响而保持固定不变的成本。例如,管理人员的工资、办公费、固定资产折旧费、员工培训费等。
变动成本:也称为可变成本,是指在一定时期和一定业务量范围内其总额随着业务量的变动而成正比例变动的成本。例如,直接材料费、产品包装费、外包费用、开发奖金等。
混合成本:就是混合了固定成本和变动成本的性质的成本。例如,水电费、电话费等。这些成本通常有一个基数,超过这个基数就会随业务量的增大而增大。
直接成本:直接投入在项目上。
间接成本:分摊到项目上。
沉没成本:已经投入到项目中,无法挽回的成本,不需要再去考虑。
收益分类
有形收益:能够直接带来营业额和利润增长的收益。
无形收益:不一定能导致营业额和利润增长,但能够增加公司名气、信誉等。
3.2、计算问题
盈亏平衡点
利润 = 销售额 - 成本 = 销售额 - (固定成本+可变成本)
当利润=0 时,就是盈亏平衡点。
盈亏平衡点销售额 = 总固定成本 + 总可变成本
= 总固定成本 +【 可变成本占销售额的比例 × 盈亏平衡点销售额 】
注意:可变成本与销售收入(销量)成正比,固定成本一直不变
净现值计算
静态收益计算方式:不考虑金钱的时间价值,只看项目周期内投入和产出的绝对数字。
动态收益计算方式:考虑金钱具有时间价值,现在的钱比未来值钱。
有以下相关概念和公式:
设每年折现率为 i,原价值为F的东西,在n年后的价值为:现值P = F / ( 1 + i )ⁿ
NPV有助于公司判断项目是否盈利。
NPVR有助于公司选择投入小,产出高的项目
假设某项目有甲、乙、丙三个解决方案,投资总额均为500万,建设期均为2年,运营期均为4年,运营期各年末净现金流入量总和为1000万,年利率为10%。
按照公式1/(1+i)ⁿ计算各年度的折现系数,由各年初投资额和各年末净现金流入量,按照公式P = F / ( 1 + i )ⁿ计算折现值
NPV甲 = 692.5 - 486.5 = 206万元
NPV乙 = 685 - 482 = 203万元
NPV丙 = 709.5 - 491 = 218.5万元
方案丙的净现值最大,所以是最优方案。
NPVR甲 = 206 / 486.5 = 42.34%
NPVR乙 = 203 / 482 = 42.12%
NPVR丙 = 218.5 / 491 = 44.50%
投资回收期
静态投资回收期:不考虑金钱的时间价值,只看项目周期内绝对投入和产出,需要多长时间才能收回所有的投入成本。
动态投资回收期:使用净现值做分析,需要多长时间能够收回所有投入成本(净现值)。
公式
静态投资回收期 = 累计净现金流量开始出现正值的年份数 - 1 + ( (之前累计总成本 - 之前累计总收益) / 当年收益 - 当年成本)。
动态投资回收期 = 累计折现值开始出现正值的年份数 - 1 + (之前总成本折现值-之前总收益折现值) / (当年收益折现值-当年成本折现值)。
投资回收率 = 1 / 投资回收期 × 100%。
投资收益率 = 投资收益 / 投资成本 × 100%。
(1)甲方案的静态投资回收期为: (4-1) + |-150| / 250 = 3.6年。
(2)乙方案的静态投资回收期为: (4-1) + |-200| /300 = 3.67年。
(3)丙方案的静态投资回收期为: (4-1) + |-50| /250 = 3.2年。
(1)甲方案的动态投资回收期为: (5-1) + |-42| / 248 = 4.17年。
(2)乙方案的动态投资回收期为: (5-1) + |-45| / 248 = 4.18年。
(3)丙方案的动态投资回收期为: (4-1) + |-137.5| / 170 = 3.81年。
(1)甲方案的投资回收率为 1 / 4.17 x 100% = 23.98%。
(2)乙方案的投资回收率为 1 / 4.18 x 100% = 23.92%。
(3)丙方案的投资回收率为 1 / 3.81 x 100% = 26.25%。
(1)甲方案的投资收益率为 692.5 / 486.5 x 100% = 142.34%。
(2)乙方案的投资收益率为 685 / 482 x 100% = 142.12%。
(3)丙方案的投资收益率为 709.5 / 491 x 100% = 144.50%。
十一、软件工程
1、生命周期模型
软件工程基本原理:用分析阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清楚的审查、开发小组的人员应少而精、承认不断改进软件程实践的必要性。
软件工程的基本要素:方法、工具、过程。
2、能力成熟度模型
2.1、◉能力成熟度模型 CMM
对软件组织化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。
- 初始级。初始级是未加定义的随意过程,软件过程的特点是无秩序的,有时甚至是混乱的。软件过程定义几乎处于无章法和步骤可循的状态,软件产品所取得的成功往往依赖于极个别人的努力和机遇。
- 可重复级。可重复级是规则化和纪律化的过程,软件过程已建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。对类似的应用项目,有章可循并能重复以往所取得的成功。
- 已定义级。已定义级是标准的和一致的过程,用于管理的和工程的软件过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。全部项目均采用与实际情况相吻合的、适当修改后的标准软件过程来进行操作。
- 已管理级。已管理级是可预测的过程,软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。
- 优化级。优化级是持续改进的过程,通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续性地对过程进行改进。
个人理解:刚开始啥都不行,就是初始;
到后来你重复完了很多次,有了大概的思路,形成了如何对项目规则化的想法。
之后你就可以根据形成的规则化的思路去定义每一个项目,在你心里对一个好的软件有了一个标准化的准则。
随着你的提升,你不仅仅能做好自己的项目,也能对其他项目提出建议,这时候你就可以管理多个项目了,因为一个有了一套度量标准。
优化,这是一个持续不断的过程,不能放弃成长。
2.2、能力成熟度模型 CMMI
是若干过程模型的综合和改进,是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。
CMMI两种表示方法:
(1)阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型如下:
初始的:过程不可预测且缺乏控制。
已管理的:过程为项目服务。
已定义的:过程为组织服务。
定量管理的:过程已度量和控制。
优化的:集中于过程改进。
成熟度等级 | 过 程 域 |
---|---|
可重复级 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证 |
已定义级 | 需求开发、技术解决方案、产品集成、验证、确认、组织级过程焦点、组织级过程定义、组织级培训、 集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
已管理级 | 组织级过程性能、定量项目管理 |
优化级 | 组织级改革与实施、因果分析和解决方案 |
当组织通过了某一等级过程域中的全部过程,即意味着该组织的成熟度达到了这一等级。利用阶段式模型对组织进行成熟度度量,概念清晰、易于理解、便于操作。
(2)连续式模型:将24个过程域按照功能划分为过程管理、项目管理、工程和支持4个过程组。关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。
连续式分组 | 过 程 域 |
---|---|
过程管理 | 组织级过程焦点、组织级过程定义、组织级培训、组织级过程性能、组织级改革与实施 |
项目管理 | 项目计划、项目监督与控制、供应商合同管理、集成项目管理、风险管理、集成化的团队、定量项目管理 |
工程 | 需求管理、需求开发、技术解决方案、产品集成、验证、确认 |
支持 | 配置管理、度量和分析、过程和产品质量保证、决策分析和解决方案、组织级集成环境、因果分析和解决方案 |
3、软件开发模型
3.1、◉基本模型
瀑布模型(SDLC):结构化方法中的模型,是结构化的开发,开发流程如同瀑布一般,一步一步的走下去,直到最后完成项目开发,只适用于需求明确或者二次开发(需求稳定),当需求不明确时,最终开发的项目会错误,有很大的缺陷。
原型:与瀑布模型相反,原型针对的就是需求不明确的情况,首先快速构造一个功能模型,演示给用户看,并按用户要求及时修改,中间再通过不断的演示与用户沟通,最终设计出项目,就不会出现与用户要求不符合的情况,采用的是迭代的思想。不适合超大项目开发。
增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付,但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不用的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。
螺旋模型:将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。包括计划指定、风险分析、工程实施、客户评估四个主要活动。
V模型:特点是增加了很多轮测试,并且这些测试贯穿于软件开发的各个阶段,不像其他模型都是软件开发完再测试,很大程度上保证了项目的准确性。
喷泉模型:特点是面向对象的模型,而上述其他的模型都是结构化的模型,使用了迭代思想和无间隙开发。
基于构件的开发模型 CBSD:特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。
形式化方法模型:建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明。
3.2、统一过程 UP
是一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。
三大特点
用例和风险驱动、以架构为中心、迭代并且增量。
开发的四个阶段
起始(初始):确认需求和风险评估,确定系统的边界问题,产出物是项目蓝图文档、用例模型、项目计划。
精化(细化):完成架构设计,淘汰高风险因素。
构建:开发剩余构件,组装构件,产出物是UML模型、测试用例。
移交(交付):进行测试,交付系统,产出物是可运行的软件产品、用户手册、用户支持计划。
UP 的每一次迭代都是一次完整的软件开发过程,包括整个软件开发生命周期,有五个核心工作流(需求、分析 、设计 、实现 、测试)。
3.3、◉敏捷开发
针对中小型项目,主要是为了给程序员减负,去掉一些不必要的会议和文档。指代一组模型(极限编程、自适应开发、水品方法……),这些模型都具有相同的原则和价值观。
开发宣言:个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文档、客户合作 胜过 合同谈判、响应变化 胜过 遵循计划。
敏捷软件开发方法是一种增量式开发方法,它将实现和测试视为软件过程的中心活动,将其他开发活动融入其中。
重要概念
结对编程:一个程序员开发,另一个程序在一旁观察审查代码,能够有效的提高代码质量,在开发同时对代码进行初步审查,共同对代码负责。
自适应开发:强调开发方法的适应性(Adaptive)。不象其他方法那样有很多具体的实践做法,它更侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
水晶方法:每一个不同的项目都需要一套不同的策略、约定和方法论。
特性驱动开发:是一套针对中小型软件开发项目的开发模式。是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、 易于被开发团队接受,适用于需求经常变动的项目。
极限编程 XP:核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP 无需开发人员在软件开始初期做出很多的文档。XP 提倡测试先行,为了将以后出现 bug 的几率降到最低。
并列争球法 SCRUM:是一种迭代的增量化过程,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。
4、◉逆向工程
拆解分析现有系统,基于现有系统的基础上,考虑新需求,进行开发得到新系统的过程。
四个级别
实现级:包括程序的抽象语法树、符号表、过程的设计表示。
结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。
功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流型。
领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如E-R模型。
其中,领域级抽象级别最高,完备性最低,实现级抽象级别最低,完备性最高。
抽象级别:与具体需求无关,抽象出来的上层逻辑概念。
完备性:与具体系统相关,具体系统需求是否完善,与抽象级别相反。
(1)重构(restructuring)。重构是指在同一抽象级别上转换系统描述形式。
(2)设计恢复(design recovery)。设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
(3)再工程(re-engineering)。再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。
(4)正向工程(Forward Engineering)。正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
5、净室软件工程
净室软件工程是软件开发的一种形式化方法,可以开发较高质量的软件。
它使用盒结构规约进行分析和建模,并将正确性验证作为发现和排除错误的主要机制,采用统计测试来获取验证软件可靠性所需要的信息。
净室软件工程强凋在规约和设计上的严格性,以及使用基于数学的正确性来证明对设计模型的每个元素进行形式化验证。
6、软件开发工具与环境
软件环境分为两个,主要是开发支持环境(环境信息库,过程控制和消息服务,用户界面规范),对应的机制和工具。
软件开发环境共有三代:早期的CASE采用的集成方式是点到点的数据转换;
第二代的CASE是在一致的界面下调用众多不同的工具,是公共用户界面;
第三代的 ICASE 信息库是一组实现数据-工具(可以被环境中所有工具访问的数据模型) 和 数据-数据 (面向对象的数据库管理系统) 集成的机制和数据结构。
7、系统测试与维护
7.1、测试基础
测试原则
应尽早并不断的进行测试;
测试工作应该避免由原开发软件的人或小组承担;
在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果;
既包含有效、合理的测试用例,也包含不合理、失效的用例;
检验程序是否做了该做的事,且是否做了不该做的事;
严格按照测试计划进行;
妥善保存测试计划和测试用例;
测试用例可以重复使用或追加测试。
测试类型分为两大类:
动态测试:程序运行时测试,分为
黑盒测试法:功能性测试,不了解软件代码结构,根据功能设计用例,测试软件功能。
白盒测试法:结构性测试,明确代码流程,根据代码逻辑设计用例,进行用例覆盖。
灰盒测试法:既有黑盒,也有白盒。
静态测试:程序静止时,即对代码进行人工审查,分为
桌前检查:程序员检查自己编写的程序,在程序编译后,单元测试前。
代码审查:由若干个程序员和测试人员组成评审小组,通过召开程序评审会来进行审查。
代码走查:也是采用开会来对代码进行审查,但并非简单的检查代码,而是由测试人员提供测试用例,让程序员扮演计算机的角色,手动运行测试用例,检查代码逻辑。
测试策略
自底向上:从最底层模块开始测试,需要编写驱动程序,而后开始逐一合并模块,最终完成整个系统的测试。优点是较早的验证了底层模块。
自顶向下:先测试整个系统,需要编写桩程序,而后逐步向下直至最后测试最底层模块。优点是较早的验证了系统的主要控制和判断点。
三明治:既有自底向上也有自顶向下的测试方法,二者都包括。兼有二者的优点,缺点是测试工作量大。
7.2、测试用例设计
黑盒测试用例:将软件看作是一个不透明的黑盒,完全不考虑(或不了解)程序的内部结构和处理算法,而只检查软件功能是否能按照SRS的要求正常使用。、
划分为:
等价类划分:把所有的数据按照某种特性进行归类,而后在每类的数据里选取一个即可。
等价类测试用例的设计原则:设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
边界值划分:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值。
如年龄范围为 0-150,边界值为 0,150,-1,151 四个。
错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方,作为测试用例进行测试。
因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法。
白盒测试用例:知道程序的代码逻辑,按照程序的代码语句,来设计覆盖代码分支的测试用例。
覆盖级别从低至高分为下面六种:
语句覆盖:所有语句都要被执行一遍,覆盖层级最低,因为执行了所有的语句,不代表执行了所有的条件判断。
判定覆盖:每个判定表达式都有一真一假,你都要取到一次,这里的判定是指判定整体一真一假;
条件覆盖:判定表达式的所有条件都要最少取得一真一假,AND的左右条件
判定/条件覆盖:2,3的组合
条件组合覆盖:AND的左右条件,每种情况都要试一遍
路径覆盖:最强的,覆盖被测试程序中所有可能的路径
7.3、测试阶段
单元测试:对单个模块进行测试,由程序员自己测试模块内部的接口、信息、功能,测试依据是软件详细说明书。在单元测试中,**驱动模块(上层)**用来调用被测模块,自顶向下的单元测试中不需要另外编写驱动模块。**桩模块(底层)**用来模拟被测模块所调用的子模块。
集成测试:将模块组合起来进行测试,分为
一次性组装(简单,节约时间,发现错误少,只适合于小项目)
和增量式组装(能够发现更多错误,耗时长,又可分为:自顶向下、自底向上、混合式)。
确认测试:对已完成的软件进行功能上的测试,分为内部确认测试(无用户情况)、Alpha 测试(用户在开发环境下进行测试)、Beta 测试(用户在实际使用时进行的测试)、验收测试(用户根据SRS 对项目进行验收)
系统测试:对软件进行性能测试,主要测试三个方面,即负载测试(在极限情况下,系统各项性能指标)、强度测试(系统资源特别低的情况下)、容量测试(并发测试,系统可以处理的同时在线的最大用户数量)。其他还有可靠性等性能测试,系统测试采用的是黑盒测试方法。
回归测试:软件修改错误或变更后,进行回归测试以验证之前正确的代码是否引入了错误。
面向对象的测试
算法层:对应单元测试,包括等价类划分测试、组合功能测试、递归函数测试和多态消息测试等。
类层:又称模块测试,面向对象测试独有,针对模块功能进行测试,包括不变式边界测试、模态类测试和非模态类测试。
类树层(模块层):对应集成测试,包括多态服务测试和展平测试。
系统层:对应系统测试。
7.4、软件调试
软件调试方法
- 蛮力法:主要思想是“通过计算机找错”,低效,耗时
- 回溯法:从出错处人工沿控制流程往回追踪,直至发现出错的根源。复杂程序由于回湖路径多,难以实施
- 原因排除法:主要思想是演绎和归纳,用二分法实现
软件调试与测试的区别
- 测试的目的是找出存在的错误,而调试的目的是定位错误并修改程序以修正错误
- 调试是测试之后的活动,测试和调试在目标、方法和思路上都有所不同
- 测试从一个已知的条件开始,使用预先定义的过程,有预知的结果;调试从一个未知的条件开始,结束的过程不可预计
- 测试过程可以事先设计,进度可以事先确定;调试不能描述过程或持续时间
7.5、软件评审
评审原则
不应以测试代替评审;
评审人员应关注产品而不应评论开发人员;
评审人员应关注与实质性问题;
评审会议不应变为问题解决方案讨论会;
评审应被安排进入项目计划;
评审参与者应了解整个评审过程;
评审人员事先应对评审材料充分了解;
应重视评审的组织工作。
验证与确认
验证:是指在软件开发周期中的一个给定阶段的产品是否达到在上一阶段确立的需求的过程。
确认:是指在软件开发过程结束时对软件进行评价以确定它是否和软件需求相一致的过程。
测试:是指通过执行程序来有意识的发现程序中的设计错误和编码错误的过程,测试时验证和确认的手段之一。
8、系统运行与维护
8.1、◉系统转换
系统转换是指新系统开发完毕,投入运行,取代现有系统的过程,需要考虑多方面的问题,以实现与老系统的交接。
有以下三种转换计划:
直接转换就是在原有系统停止运行的某一时刻,新系统立即投入运行,中间没有过渡阶段。
并行转换就是新系统和现有系统并行工作一段时间,经过这段时间的试运行后,再用新系统正式替换下现有系统。
分段转换策略也称为逐步转换策略,这种转换方式是直接转换方式和并行转换方式的结合,采取分期分批逐步转换。
数据转换与迁移
将数据从旧数据库迁移到新数据库中。
要在新系统中尽可能的保存旧系统中合理的数据结构,才能降低迁移的难度。
也有三种方法:系统切换前通过工具迁移、系统切换前采用手工录入、系统切换后通过新系统生成。
转换的过程称为ETL,有三个步骤:抽取(旧数据库数据)一转换(三种转换方法)一装载(装入新数据库,并校验数据)。
8.2、◉系统维护概述
软件维护是生命周期的一个完整部分,可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动。交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等。
可维护性的评价指标
易测试性:指为确认经修改软件所需努力有关的软件属性;
易分析性:指为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性;
易改变性:指与进行修改、排错或适应环境变换所需努力有关的软件属性;
稳定性:指与修改造成未预料效果的风险有关的软件属性。
软件维护类型
正确性维护:发现了 bug而进行的修改。
适应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级。
完善性维护:基于用户主动对软件提出更多的需求,修改软件,增加更多的功能,使其比之前的软件功能、性能更高,更加完善。
预防性维护:对未来可能发生的bug进行预防性的修改
8.3、系统评价
系统评价指标:系统性能评价、系统效益评价、系统建设评价。
系统评价分类
立项评价:系统开发前的预评价,分析是否立项开发,做可行性评价。
中期评价:项目开发中期每个阶段的阶段评审。或者项目在开发中途遇到重大变故,评价是否还要继续。
结项评价:系统投入正式运行后,了解系统是否达到预期的目的和要求而对系统进行的综合评价。
系统评价步骤
确定评价对象,下达评价通知书,组织成立评价工作组和专家咨询组
拟定评价工作方案,收集基础资料
评价工作组实施评价,征求专家意见和反馈给企业,撰写评价报告
评价工作组将评价报告报送专家咨询组复核,向委托人送达评价报告和选择公布评价结果,建立评价项目档案
系统评价的指标
(1)从信息系统的组成部分出发,信息系统是一个由人机共同组成的系统,所以可以按照运行效果和用户需求(人)、系统质量和技术条件(机)这两条线索构造指标。(2)从信息系统的评价对象出发,对于开发方来说,他们所关心的是系统质量和技术水平;对于用户方而言,关心的是用户需求和运行质量:系统外部环境则主要通过社会效益指标来反映。
(3)从经济学角度出发,分别按系统成本、系统效益和财务指标3条线索建立指标。
十二、需求工程
软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。
需求层次:①业务需求(范围) ②用户需求(做什么) ③系统需求(功能、性能、约束)
从客户角度分类
基本需求:需求明确规定的功能。
期望需求:除了基本需求外,客户认为理所应当包含在内的其他功能。
兴奋需求:客户未要求的其他功能需求,会浪费项目开发时间和成本。
需求获取方法:
①用户访谈
②问卷调查
③采样
④情节串联板 :通常就是一系列图片,系统分析师通过这些图片来讲故事。具向用户说明(或演示)系统如何适合企业的需要,并表明系统将如何运转。
⑤联合需求计划
1、◉需求分析
是发现、求精、建模、规约的过程,主要就是建立系统模型,创建所需数据、信息和控制流以及操作行为的模型,而后对模型进行分析,主要包括两种分析方法:结构化的分析方法SA,面向对象的分析方法 OOA。
1.1、结构化需求分析 SA
自顶向下,逐步分解,是面向数据的,强调分析对象的数据流,需要建立:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)
以及数据字典(数据元素、数据结构、数据流、数据存储、加工逻辑、外部实体)
数据元素也称为数据项,是数据的最小组成单位;
数据结构的描述重点是数据元素之间的组合关系,即说明数据结构包括哪些成分;
外部实体是数据的来源和去向。
1.2、SA-数据流图和数据字典
数据流图描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模。
数据字典是用来定义在数据流图中出现的符号或者名称的含义,在数据流图中,每个存储、加工、实体的含义都必须定义在数据流图中,并且父图和子图之间这些名称要相同。
数据字典中一般有6类条目,分别是数据元素、数据结构、数据流、数据存储、加工逻辑和外部实体。
异常现象
黑洞:一个加工只有输入数据流而无输出数据流。
奇迹:一个加工只有输出数据流而无输入数据流。
灰洞:若一个加工的输入数据流无法通过加工产生输出流。
1.3、面向对象需求分析 OOA
面向对象基本概念
对象:基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。
类:是对象的抽象,定义了一组大体相似的对象结构,定义了数据和行为。
包括实体类(用于对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类)、
边界类(系统内部与系统外部的业务主角之间进行交互建模的类)、
控制类(用于对一个或几个用例所特有的控制行为进行建模,在用例执行过程中被动出现的特定行为的类)。
在领域类模型中会涉及描述类自身情况的属性与操作,还会有描述类与类之间的关联,但不会有对象层次的内容。
消息:对象之间进行通信的一种构造称为消息。
多态:不同的对象收到同一个消息时产生完全不同的反应。包括参数多态(不同类型参数多种结构类型)、**包含多态(**父子类型关系)、过载多态(类似于重载,一个名字不同含义)、强制多态(强制类型转换)四种类型。多态由继承机制支持。
静态成员是不同的对象之间共享数据的方式,值可修改,静态方法只能访问静态成员。
静态类型是指一个对象的类型在编译时就确定,动态类型指对象类型在运行时才能确定。
静态绑定(静态分配)是基于静态类型,在程序执行前方法已经被绑定;
动态绑定是基于动态类型的,运行时根据变量实际引用的对象类型决定调用哪个方法,动态绑定支持多态。
封装:一种信息隐蔽技术,其目的是使对象的使用者和生产者分离,也就是使其他开发人员无需了解所要使用的软件组件内部的工作机制,只需知道如何使用组件。
1.4、OOA-UML-视图
UML组成
从总体上来看,UML的结构包括构造块、规则和公共机制三个部分。
(1)构造块。UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图(diagram)。事物是 UML的重要组成部分,关系把事物紧密联系在一起,图是多个相互关联的事物的集合。
(2)公共机制。公共机制是指达到特定目标的公共UML方法。
(3)规则。规则是构造块如何放在一起的规定。
1.5、OOA-UML-事务
结构事物:模型的静态部分,如类、接口、用例、构件等;
行为事物:模型的动态部分,如交互、活动、状态机;
分组事物:模型的组织部分,如包;
注释事物:模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号
1.6、◉OOA-UML-关系
依赖:一个事物的语义依赖于另一个事物的语义的变化而变化。
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。
泛化:一般 / 特殊的关系,子类和父类之间的关系。
实现:一个类元指定了另一个类元保证执行的契约。
1、只有出现一个对象消失时,另一个对象会怎么样才从组合或者聚合里考虑
2、类的方法中定义了另外一个类的对象,那是这个类依赖另一个类
3、一个类需要用到什么,那就是依赖
1.7、◉OOA-UML-图
做题思路:在脑海中先构建出那图的模型
类图
- 【概念】类图是一切面向对象方法的核心建模工具。类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
- 【目的】描述一组类、接口、协作和它们之间的关系。
泛化(Generalization)
- 【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
- 【箭头指向】带三角箭头的实线,箭头指向父类。
实现(Realization)
- 【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
- 【箭头指向】带三角箭头的虚线,箭头指向接口。
关联(Association)
- 【关联关系】是一种拥有关系,它使得一个类知道另一个类的属性和方法。
- 【代码体现】成员变量
- 【箭头指向】带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有一个箭头。
- 自己买的车,想什么时候开就开。但是车是车,人是人,没有整体与部分的关系。
聚合(Aggregation)
- 【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
- 【代码体现】成员变量
- 【箭头指向】带空心菱形的实线,空心菱形指向整体。
- 电脑有键盘才能输入信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。
组合(Composition)
- 【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
- 【代码体现】成员变量
- 【箭头指向】带实心菱形的实线,实心菱形指向整体。
- 鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。
依赖(Dependency)
- 【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。
- 【箭头指向】带普通箭头的虚线,普通箭头指向被使用者。
- 老司机只管开车,车是谁的不重要,给什么车开什么车。
个人理解:表示一个类,有什么属性,它与其他类之间的静态关系。
对象图
- 【概念】对象图是类图的一个实例,是系统在某个时间点的详细状态的快照。
- 【目的】用来表示两个或者多个对象之间在某一时刻之间的关系。
个人理解:对象就是类的实例化,可以被销毁的,所以是某一时间的关系
用例图
-
【概念】用例图是指由参与者、用例,边界以及它们之间的关系构成的用于描述系统功能的视图。
-
【目的】用来描述整个系统的功能。一组用例、参与者及它们之间的关系。
- 包含关系使用符号**《include》**,想要查看订单列表,前提是需要先登录。
-
扩展关系使用符号**《extend》**,基于查询订单列表的功能,可以增加一个导出数据的功能
- 泛化关系,子用例继承父用例所有结构、行为和关系。
个人理解:时钟也可以是一个用例,如果它触发了什么事件的话。描述的是整个系统都要干什么事。
可以理解为,一个用户就是用例,它进入系统都能干什么。整个系统
序列图 / 顺序图(重点)
- 【概念】序列图根据时间序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。
- 【目的】描述了以时间顺序组织的对象之间的交互活动。
- 场景的图形化表示
- 同步消息(进行阻塞调用,调用者中止执行,等待控制权返回,需要等待返回消息,用实心三角箭头表示)。
- 异步消息(发出消息后继续执行,不引起调用者阻塞,也不等待返回消息,由空心箭头表示)。
- 返回消息(由从右到左的虚线箭头表示)。
个人理解:从一个模块指向其他模块,按顺序的流程图,相当于在流程图里面的增加通道图,我经常画的。多个用例的交互
通讯图
- 【概念】描述了收发消息的对象的组织关系,强调对象之间的合作关系而不是时间顺序。
- 【目的】用来显示不同对象的关系。
- 对象间,调用方法的顺序
状态图
- 【概念】状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
- 【目的】用来表示指定对象,在整个生命周期,响应不同事件的不同状态。
- 转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。
- 箭头上的代表触发事件,实心圆点为起点和终点。
- 方框代表组合状态
个人理解:是一个对象的生命周期,调用不同事件的不同状态。比如:门对象,有开门,有关门,有上锁。
活动图
- 【概念】描述了具体业务用例的实现流程。
- 【目的】用来表示用例实现的工作流程。
- 展现了在系统内从一个活动到另一个活动的流程
- 分岔和汇合线是一条水平粗线
- 每个分岔的分支数代表了可同时运行的线程数
个人理解:是描述用例是怎么实现工作的,比如:登录用户,先登录然后判断密码,才能才看订单。用例内的工作流程
构件图 / 组件图
- 【概念】描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
- 【目的】用来展示各个组件之间的依赖关系
- 圆是供接口,半圆是需接口
个人理解:组件就是一个模块吗,那肯定是加工作用,要有输出与输入流,即供接口、需接口。
部署图(重点)
- 【概念】描述了系统内部的软件如何分布在不同的节点上。
- 【目的】用来表示软件和硬件的映射关系。
个人理解:就是你发布的时候,先Nginx在到网关,最后是具体微服务。内部的软件是如何分布的。
包图
包图描述由模型本身分解而成的组织单元,以及它们之间的依赖关系。
组合结构图
组合结构图描述结构化类(例如,构件或类)的内部结构,包括结构化类与系统其余部分的交互点。组合结构图用于画出结构化类的内部内容。
将每一个类放在一个整体中,从类的内部结构来审视一个类。
比如:汽车类,有发动机有传动装置,它们之间是怎么交互的
1.8、OOA-需求建模
2、需求定义
目的是为了将用户的需求表现出来,形成定义,编写需求规格说明书,有以下两种定义方法:
严格定义法
前提是所有需求都能够被预先定义;
开发人员与用户之间能够准确而清晰的交流;
采用图形 / 文字可以充分体现最终系统。
原型法
前提是并非所有的需求都能在开发前被准确的说明;
项目参加者之间通常都存在交流上的困难
需要实际的、可供用户参与的系统模型;
有合适的系统开发环境;
反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法。
3、需求验证
需求验证也称为需求确认,其活动是为了确定以下几个方面的内容:
(1)SRS正确地描述了预期的、满足项目干系人需求的系统行为和特征。
(2)SRS中的软件需求是从系统需求、业务规格和其他来源中正确推导而来的。
(3)需求是完整的和高质量的。
(4)需求的表示在所有地方都是一致的。
(5)需求为继续进行系统设计、实现和测试提供了足够的基础。
目的是与用户一起确认需求无误,对需求规格说明书SAS 进行评审和测试,包括两个步骤:
需求评审:正式评审和非正式评审。
需求测试:设计概念测试用例。
需求验证通过后,要请用户签字确认,作为验收标准之一,此时,这个需求规格说明书就是需求基线,不可以再随意更新,如果需要更改必须走需求变更流程。
4、需求管理
4.1、定义需求基线
通过了评审的需求说明书就是需求基线,下次如果需要变更需求,就需要按照流程来一步步进行。
4.2、需求变更和风险
需求变更是不可避免的,那么,项目管理人员就应该采取规范的流程去管理变更,而不是一味地避免变更和拒绝变更。
①无足够用户参与 ②忽略用户分类 ③需求不断增 ④模棱两可 ⑤不必要特性 ⑥SRS过于精简 ⑦不准确估算
变更产生的原因:外部环境的变化、需求和设计做的不够完整、新技术的出现、公司机构重组造成业务流程的变化。
变更控制委员会CCB:也称为配置控制委员会,其任务时对建议的配置项变更做出评价、审批,以及监督已经批准变更的实施。
4.3、需求跟踪
正向跟踪是指检查SRS中的每个需求是否都能在后继工作成果中找到对应点;
反向跟踪也称为逆向跟踪,是指检查设计文档、代码、测试用例等工作成果是否都能在SRS中找到出处。
箭头表示需求跟踪能力联系链,它能跟踪需求使用的整个周期,即从需求建议到交付的全过程。
可以用原始需求和用例表格(需求跟踪矩阵)来表示
若原始需求和用例有对应,则在对应栏打对号,若某行都没有对号,表明原始需求未实现,正向跟踪发现问题;
若某列都没有对号,表明有多余功能用例,软件实现了多余功能,反向跟踪发现问题。
十三、◉系统设计
系统**分析阶段解决“做什么”的问题,而系统设计阶段解决“怎么做”**的问题。
◉系统设计的每个步骤都相互关联,共同构成了完整的系统构建过程。
通过合理的技术手段和处理流程选择(详细设计),
将功能需求分配给软件模块(概要设计),并形成清晰的模块结构图(系统结构图),
可以确保最终构建出的系统能够满足预期的功能和性能要求。
在系统模块结构设计中,一个模块应具备的要素包括输入和输出、处理功能,以及内部数据和程序代码。
个人理解:系统的流程是最重要的,所以要详细设计。
至于子模块,还会有结构化设计,面向对象设计,只要概要下就可以了。
1、◉处理流程设计
业务流程分析方法
(1)价值链分析法。找出或设计出那些能够使顾客满意,实现顾客价值最大化的业务流程。
(2)客户关系分析法。是把CRM用在业务流程的分析上。CRM的目标是建立真正以客户为导向的组织结构,以最佳的价值定位瞄准最具吸引力的客户,最大化地提高运营效率,建立有效的合作伙伴关系。从CRM的角度分析业务流程,企业的业务流程应当是以客户与企业的关系,以及客户行为为依据的,而不是传统的按照企业内部管理来实施的。
(3)供应链分析法。是从企业供应链的角度分析企业的业务流程,它源于SCM。供应链是指用一个整体的网络用来传送产品和服务,从原材料开始一直到最终客户(消费者),它凭借一个设计好的信息流、物流和资金流来完成。供应链分析法主要从企业内部供应链和外部供应链两个角度来分析企业的业务流程,分析哪些流程处于供应链的核心环节。
(4)基于ERP的分析法。ERP的基本思想是将企业的业务流程看作是一个紧密联接的供应链,将供应商和企业内部的采购、生产、销售,以及客户紧密联系起来,对供应链上的所有环节进行有效管理,实现对企业的动态控制和各种资源的集成和优化,从而提升企业基础管理水平,追求企业资源的合理、高效利用。
(5)业务流程重组。通过重新审视企业的价值链,从功能成本的比较分析中,确定企业在哪些环节具有比较优势。在此基础上,以顾客满意为出发点进行价值链的分解与整合,改造原有的业务流程,实现业务流程的最优化。
业务流程重组 BPR
BPR是对企业的业务流程进行根本性的再思考和彻底性的再设计,从而获得可以用诸如成本、质量、服务和速度等方面的业绩来衡量的显著性的成就。
战略规划:明确企业的战略目标,使得信息系统的战略目标和企业战略目标相同。
业务流程:对企业业务流程进行分析,选出关键的业务流程,对其进行改进。
数据规划:对业务流程所需要用到的数据进行分类,类似于BSP(企业系统规划法),产生不同的数据类。
功能规划:对数据建立CU矩阵,对数据的创建和使用建立一个关系,然后对数据总体建立一个逻辑规划,划分功能模块。
实施规划:制定企业开发目的,项目开发计划。
业务流程管理 BPM
BPM 是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法。
PDCA 闭环的管理过程
明确业务流程所欲获取的成果
开发和计划系统的方法,实现以上成果
系统地部署方法,确保全面实施
根据对业务的检查和分析以及持续的学习活动,评估和审查所执行的方法.并进一步提出计划和实施改进措施
BPM与BPR管理思想最根本的不同就在于流程管理并不要求对所有的流程进行再造。
构造卓越的业务流程并不是流程再造,而是根据现有流程的具体情况,对流程进行规范化的设计
流程管理包含三个层面:规范流程、优化流程和再造流程
2、软件架构设计
软件架构的概念
架构设计就是需求分配,即将满足需求的职责分配到组件上。
构件(component)也称为组件,是一个功能相对独立的具有可复用价值的软件单元。在OO方法中,一个构件由一组对象构成,包含了一些协作的类的集合,它们协同工作来提供一种系统功能。
**可复用性(可重用性)**是指系统和(或)其组成部分能在其他系统中重复使用的程度。软件开发的全生命周期都有可复用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例,都是可以被重复利用和借鉴的有效资源。
需要进行客户化的构件称为抽象构件,而可以直接复用的构件称为具体构件。
架构是项目干系人进行交流的手段。软件架构代表了系统的高层抽象。
高级阶段:以描述系统的高层抽象结构为中心,不关心具体的建模细节,划分了架构模型与传统软件结构的界限,该阶段以Kruchten提出的“4+1”模型为标志。
经典架构:助记词输掉钩机仓
①数据流风格:批处理序列(一个一个处理,顺序结构)、管道/过滤器(数据进出管道都要经过过滤器处理,分阶段的数据处理,常见于网络数据处理)。
②调用/返回风格:主程序/子程序、数据抽象和面向对象,以及层次结构
③独立构件风格:进程通信、事件驱动的系统
④虚拟机风格:解释器、基于规则的系统
⑤仓库风格:数据库系统、黑板系统和超文本系统
二层架构缺点:
(1)开发成本较高
(2)客户端程序设计复杂
(3)用户界面风格不一,使用繁杂,不利于推广使用
(4)软件移植困难
(5)软件维护和升级困难
(6)新技术不能轻易应用
(7)可扩展性差
(8)系统安全性难以保证
三层架构:表示层、功能层、数据层
三层优点:
(1)允许合理地划分三层的功能,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能ᨀ高系统的可维护性和可扩展性。
(2)允许更灵活、有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层,并且这些平台和各个组成部分可以具有良好的可升级性和开放性。
(3)系统的各层可以并行开发,各层也可以选择各自最适合的开发语言,使之能并行且高效地进行开发,达到较高的性能价格比。对每一层的处理逻辑的开发和维护也会更容易些。
(4)利用功能层可以有效地隔离表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,这就为严格的安全管理奠定了坚实的基础。
三层 B/S 架构
是三层 C/S 架构的变种;将客户端变为用户客户端上的浏览器;将应用服务器变为网络上的 WEB服务器,又称为0客户端架构,虽然不用开发客户端,但有很多缺点,主要是数据处理能力差:
B/S 架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能;
安全性难以控制;
在数据查询等响应速度上,要远远低于C/S架构;
数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用。
ATAM是一种旨在解决软件架构问题的评估方法它对软件系统进行全面的分析和评估,考虑了软件系统的多个方面,如质量属性、可行性、风险等。而在ATAM的方法中,通过收集和分析场景,确定软件系统的需求和相关的质量属性,来评估架构的可行性和可靠性。
3、◉结构化设计
结构化设计(Structured Design, SD)是一种面向数据流的方法,它以SRS和SA阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。
耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示模块之间联系比较弱,非耦合则表示模块之间无任何联系,是完全独立的
内聚表示模块内部各成分之间的联系程度,是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做目标单一的一件事情。
高内聚低耦合:耦合低使得模块间尽可能相对独立,从而各模块可以单独开发和维护,可以提高软件质量;内聚高使得模块的可理解性和维护性大大增强。
系统设计主要目的:为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方法。
系统设计方法:结构化设计方法,面向对象设计方法。
系统设计的主要内容:概要设计、详细设计。
概要设计基本任务:又称为系统总体结构设计,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。
详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计(代码、输入/输出格式、用户界面)、编写详细设计说明书、评审。
系统设计基本原理
抽象化;
自顶而下,逐步求精;
信息隐蔽;
模块独立(高内聚,低耦合)。
系统设计原则
保持模块的大小适中;
尽可能减少调用的深度;
多扇入,少扇出;
单入口,单出口;
模块的作用域应该在模块之内;
功能应该是可预测的。
扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。
扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;
单入口单出口:指为了保证开发程序的质量,要求过程中的数据流控制是必须在固定的程序段入口进入,固定的出口返回,不允许在编程中随意使用数据。
4、面向对象设计
4.1、◉面向对象设计基本过程
面向对象设计的原则
开闭原则、里氏替换原则、依赖倒置原则、组合/聚合复用原则、接口隔离原则和最少知识原则等。
开闭原则是指软件实体应对扩展开放,而对修改关闭,即尽量在不修改原有代码的情况下进行扩展。
对于已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的系统有一定的稳定性和延续性,这样的系统同时满足了可复用性与可维护性。
里氏替换原则由Barbara Liskov提出,其基本思想是,一个软件实体如果使用的是一个基类对象,那么一定适用于其子类对象,而且觉察不出基类对象和子类对象的区别,即把基类都替换成它的子类,程序的行为没有变化。反过来则不一定成立,如果一个软件实体使用的是一个子类对象,那么它不一定适用于基类对象。
运用:尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程。由于子类继承基类并实现其中的方法,程序运行时,子类对象可以替换基类对象,如果需要对类的行为进行修改,可以扩展基类,增加新的子类,而无需修改调用该基类对象的代码。
依赖倒置原则是指抽象不应该依赖于细节,细节应当依赖于抽象。
要针对接口编程,而不是针对实现编程。
在程序代码中传递参数时或在组合(或聚合)关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明和方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。
一个具体类应当只实现接口和抽象类中声明过的方法,而不要给出多余的方法,否则,将无法调用到在子类中增加的新方法。
组合/聚合复用原则又称为合成复用原则,是在一个新的对象中通过组合关系或聚合关系来使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。
就是要尽量使用组合/聚合关系,少用继承。
首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少;
其次才考虑继承,在使用继承时,需要严格遵循里氏替换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度,以及系统的复杂度。
通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是透明的
组合或聚合关系可以将已有的对象(也可称为成员对象)纳入到新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象是不可见的
◉如果两个类之间是Has-A的关系,则应使用组合或聚合;
◉如果是Is-A关系,则可使用继承。
Is-A是严格的分类学意义上的定义,意思是一个类是另一个类的“一种”。
而Has-A则不同,它表示某一个角色具有某一项责任。
接口隔离原则是指使用多个专门的接口,而不使用单一的总接口。每个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。
最少知识原则也称为迪米特法则(Law of Demeter),是指一个软件实体应当尽可能少地与其他实体发生相互作用。
当一个模块修改时,就会尽量少地影响其他的模块,扩展会相对容易。
在狭义原则中,如果两个类之间不必彼此直接通信,那么这两个类就不应当发生直接的相互作用;如果其中的一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。可以降低类之间的耦合,但是会在系统中增加大量的小方法并散落在系统的各个角落。
广义原则是指对对象之间的信息流量、流向和信息的影响的控制,主要是对信息隐藏的控制。信息的隐藏可以使各个子系统之间解耦,从而允许它们独立地被开发、优化、使用和修改。
4.2、◉设计模式
创建型:目的就是创建新的对象,并不明确指向功能。
结构型:不同结构 来实现不同的功能。扩展性(外观、组成、代理、装饰)封装性(适配器,桥接)。
助记:是桥组装代外元
适配器即是类结构模式也是对象结构模式。
行为型:描述对象之间的通信方式和职责划分,即用来干什么的问题
解释器与模板方法是类行为模式。
5、◉人机界面设计
人机界面设计的三大原则:置于用户控制之下、减少用户的记忆负担、保持界面的一致性。
置于用户的控制之下
以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式;
提供灵活的交互;
允许用户交互可以被中断和取消;
当技能级别增加时可以使交互流水化并允许定制交互;
使用户隔离内部技术细节;
设计应允许用户和出现在屏幕上的对象直接交互。
减少用户的记忆负担
减少对短期记忆的要求;
建立有意义的缺省;
定义直觉性的捷径;
界面的视觉布局应该基于真实世界的隐喻;
以不断进展的方式揭示信息。
保持界面的一致性
允许用户将当前任务放入有意义的语境
在应用系列内保持一致性
如过去的交互模型已建立起了用户期望,除非有迫不得已的理由,不要去改变它。
6、Web 应用设计
6.1、Web 技术与演变
Web 应用技术分类
从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。
从缓存来看:MemCache,Redis,Squid。
从并发分流来看:集群(负载均衡)、CDN。
从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NOSQL,分区(分表)技术,视图与物化视图。
从持久化来看:Hibernate,Mybatis。
从分布存储来看:Hadoop,FastDFS,区块链
从数据编码看:XML,JSON。
从 Web 应用服务器来看:Apache,WebSphere,Weblogic,Tomcat,JBOss,llS.
其它:静态化,有状态与无状态,响应式 Web 设计。
6.2、负载均衡技术
应用层负载均衡技术
1、http 重定向。HTTP 重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务嚣,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。
特点:实现简单,但性能较差。
2、反向代理服务器。在用户的请求到反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的 apache,nginx 都可以充当反向代理服务器
特点:部署简单,但代理服务器可能为性能的瓶颈,
传输层负载均衡技术
1、DNS 域名解析负载均衡。DNS 域名解析负载均衡就是在用户请求 DNS 服务器,获取域名对应的IP 地址时,DNS服务器直接给出负载均衡后的服务器IP。
特点:效率比 HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知 DNS, 而且 DNS 负载均衡的控制权在域名服务商那里, 网站无法做更多的改善和更强大的管理。
2、基于 NAT 的负载均衡。基于 NAT 的负载均衡将一个外部IP 地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址。
特点:技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用了这种技术。
用缓存缓解库读取压力
MemCached 是一个自由开源的,高性能,分布式内存对象缓存系统。简洁的 key-value 存储系统。
通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web 应用的速度、提高可扩展性。
有状态和无状态
无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。
有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的
6.3、CDN
CDN 的全称是 Content Delivery Network,即内容分发网络
CDN 是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN 的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
6.4、Web 架构
MVC
用户操作 → View(负责接收用户的输入操作) → Controller(业务逻辑处理) → Model(数据持久化) → View(将结果反馈给 View)。
MVP
MVP 是把 MVC 中的 Controller 换成了 Presenter(呈现),目的就是为了完全切断 View 跟 Model之间的联系,由 Presenter 充当桥梁,做到 View-Model 之间通信的完全隔离。
MVVM
如果说 MVP 是对 MVC的进一步改进,那么 MVVM 则是思想的完全变革。
它是将“数据模型数据双向绑定”的思想作为核心,因此在 View和 Model之间没有联系,通过 ViewModel 进行交互,而目 Model 和 ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到 View 上。
REST(表述性状态传递)
REST (Representational State Transfer,表述性状态转移)是一种只使用 HTTP 和 XML 进行基于 Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。
REST的5个原则
(1)网络上的所有事物都被抽象为资源。
(2)每个资源对应一个唯一的资源标识。
(3)通过通用的连接件接口对资源进行操作。
(4)对资源的各种操作不会改变资源标识。
(5)所有的操作都是无状态的。
微服务
微服务架构建议将大型复杂的单体架构应用划分为一组微小的服务,每个微服务根据其负责的具体业务职责提炼为单一的业务功能;每个服务可以很容易地部署并发布到生产环境里隔离和独立的进程内部,它可以很容易地扩展和变更;对于一个具体的服务来说可以采用任何适用的语言和工具来快速实现;服务之间基于基础设施互相协同工作。
微服务的优势:
(1)解决了复杂性问题。它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变。
(2)让每个服务能够独立开发,开发者够自由选择可行的技术,让服务来决定API约定。
(3)每个微服务都能独立配置,开发者不必协调对于本地服务配置上的变化,这种变化一旦测试完成就被配置了。
(4)让每个服务都可以独立调整,你可以给每个服务配置正好满足容量和可用性限制的实例数。
微服务架构带来的挑战:
(1)并非所有的系统都能转成微服务。例如一些数据库层的底层操作是不推荐服务化的。
(2)部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部署的复杂度,容器技术能够解决这一问题。
(3)性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错。例如一个服务需要访问另一个服务的数据,只能通过服务间接口来进行数据传输,如果是频繁访问,则可能带来较大的延迟。
(4)数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加闲难。
6.5、缓存技术
MemCache:Memcache 是一个高性能的分布式的内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。
Memcache 通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、规频、文件以及数据库检索的结果等。
Redis:Redis 是一个开源的使用 ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
Squid: Squid 是一个高性能的代理缓存服务器,Squid 支持 FTP,gopher、HTTPS 和 HTTP 协议。和一般的代理缓存软件不同,Squid 用一个单独的、非模块化的、I/O 驱动的进程来处理所有的客户端请求。
Redis与Memcache的差异
1、Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。他们都支持 key-value 数据类型。同时 Memcache 还可用于缓存其他东西,例如图片、现频等等,Redis 还支持 list、set、hash等数据结构的存储。
2、Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,Memcache 挂掉之后,数据就没了。
3、灾难恢复:Memcache 挂掉后,数据不可恢复;Redis 数据丢失后可以恢复。
4、在 Redis 中,并不是所有的数据部一直存储在内存中的。这是和 Memcache 相比一个最大的区别。当物理内存用完时,Redis 可以将一些很久没用到的 value 交换到磁盘。
5、Redis 在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而 Memcache 只是简单地 K/V 缓存。
所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择 Redis。
如果简单的 key/value 存储应该选择 Memcache。
6.6、XML和JSON
扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML 的优点
格式统一,符合标准;
容易与其他系统选行远程交互,数据共享比较方便
XML 的缺点
XML文件庞大,文件格式复杂,传输占带宽;
服务器端和客户端都需要花费大量代码来解析 XML,导致服务器端和客户端代码变得异常复杂且不易维护;
客户瑞不同浏览器之间解析 XML的方式不一致,需要重复编写很多代码;
服务器端和客户端解析XML花费较多的资源和时间。
**JSON(JavaScript Object Notation)**一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。
JSON 的优点
数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
易于解析,客户端 JavaScript 可以简单的通过 eval()进行 JSON 数据的读取;
支持多种语言,包括服务器端语言,便于服务器端的解析;
因为 JSON 格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,旦完成任务不变,并且易于维护。
JSON 的缺点
没有 XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性。
6.7、Web 应用服务器
WEB 应用服务器可以理解为两层意思:
(1)WEB 服务器:其职能较为单一,就是把浏览器发过来的 Reques 位请求,返回 Html 页面
(2)应用服务器:进行业务逻辑的处理。
Apache: Web 服务嚣,市场占有率达 60%左右。它可以运行在几乎所有的 Unix、Windows、Linux系统平台上。
IIS 早期 Web 服务器,目前小规模站点仍有应用。
Tomcat:开源、运行 servlet 和 JSPWeb 应用软件的基于 Java 的 Web 应用软件容器。
JBOSS:JBOSS 是基于 J2EE 的开放源代码的应用服务器,一般与 Tomcat 或 Jetty 绑定使用。
Jetty:jetty 是一个开源的 servlet 容器,是基于 Java 的 web 容器。
Websphere:一种功能完善、开放的 Web 应用程序服务穗,它是基于Java 的应用环镜,用于建立、部署和管理 Internet 和 IntranetWeb 应用程序。
Weblogic: BEA Weblogic Server 是一种多功能、基于标准的 web 应用服务器,为企业构建自己的应用提供了坚实的基础。
6.8、其他
响应式 web 设计
是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。
方法与策略
(1)采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。
(2)响应式图片:不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率。
十四、项目管理
1、范围管理
确定项目的边界(需求),哪些工作是项目应该做的,分为五个过程:
范围计划编制:产品范围(软件技术相关)和工作范围(管理相关),当产品范围发生变化,工作范围必然受到影响。范围计划包括了对下面四个步骤该如何进行。
范围定义:定义项目范围,包括产品范围和工作范围。
创建工作分解结构 WBS:WBS 分解的六个层次
(工作包就是具体的工作,至于努力水平是一些难以衡量具体工作量的其他工作,如与客户联系)
工作分解成功后,还要编写 WBS 字典(包括详细内容、WBS 编码、工作说明、负责人、进度里程碑清单)。
范围确认:让项目干系人来确认项目的范围是否正确。检查可交付成果是否确认的,每个可交付的成果是否有里程碑,是否有明确的质量标准,项目范围是否准确,项目范围的风险性。
范围控制:当项目范围发生变化时,如何控制管理此变化。主要是控制范围变更,对范围变更因素施加影响,控制变更风险,使变化向好的方向发展。
2、时间(进度)管理
确保能够在给定的时间内交付产品,有六个过程
活动定义:在 WBS 分解的基础上对活动进行定义,是对最底层的工作包进行进一步的分解,分解为一个个活动。
活动排序:识别各项活动之间的逻辑关系和数学关系,对各个活动进行排序。
活动资源估算:确定各项活动需要什么资源,需要资源的数量,什么时候使用资源
活动历时估算:估算完成每项活动所需要的具体的时间。包括专家判断法、三点估算法、功能点估算法、自上而下的估算、自下而上的估算。
制定进度计划:确定整个项目在每个阶段应该完成哪些活动。采用网络规划技术,求出关键路径,作为整个项目的工期。
进度控制:制定了计划后,就可以开始项目实施,在实施的过程中,要进行进度控制,将实施过程与进度计划进行比较,当有偏差时就进行调整,判断是否影响了项目总工期。若影响了项目总工期,就要进行调整,采用赶工或者快速跟进的方法,保证项目在计划的工期内完成。
关键路径-双代号图(PERT图)
类似于前趋图,是有向图,反应活动之间的依赖关系,有向边上标注活动运行的时间,但无法反应活动之间的并行关系。
关键路径(项目总工期):项目中耗时最长的一条线路。
松弛时间(总时差):某活动的最晚开始时间-最早开始时间(或最晚完成时间-最早完成时间),也即该活动最多可以晚开始多少天。
甘特图 Gantt
又称为横道图,横轴表示时间,纵轴表示活动,以时间顺序表示活动,能反应活动间的并行关系,但无法反应活动之间的依赖关系,因此也难以清晰的确定关键任务和关键路径。
3、成本管理
成本估算:与进度管理里的活动资源估算一起进行,包括自顶向下的估算(先确定项目的总成本,再一步步向下确定每个工作包的成本,又称为类比估算法,要求估算人有类似的项目经验)、
自底向上的估算(从工作包开始,一层层向上估算出项目的总成本,要求估算人对项目的细节十分了解)、
差别估算法(是上述两种方法的综合,通过与类似项目进行比较,确定相同的部分和不同的部分,对于不同的部分,进行重点估算)。
成本预算:将估算成本分散到 WBS的每个工作包中,建立总体预算成本;将每个工作包所分配得到的成本,再二次分配到每个工作包所包含的具体活动上;确定每项成本预算支出的时间计划,即每个时间点的支出计划。得出成本预算计划的表格。
成本控制:与进度控制类似,在项目实施过程中,对应每个时间点所消耗的成本与计划的时间点成本进行比较和调整。
4、质量管理
质量是软件产品特性的综合,表示软件产品满足明确(基本需求)或隐含(期望需求)要求的能力。
质量管理是指确定质量方针、目标和职责,并通过质量体系中的质量计划、质量控制、质量保证和质量改进来使其实现的所有管理职能的全部活动。
质量规划:识别项目及其产品的质量要求和标准,并书面描述项目将如何达到这些要求和标准的过程。
质量保证:一般是每隔一定时间(例如,每个阶段末)进行的,主要通过系统的质量审计(软件评审)和过程分析来保证项目的质量。
质量控制:实时监控项目的具体结果,以判断它们是否符合相关质量标准,制订有效方案,以消除产生质量问题的原因。
5、配置管理
5.1、配置管理流程
配置基本概念
基线:软件开发过程中特定的点,是项目生存期各开发阶段末尾的特定点,又称为里程碑,反应阶段性成果。
分为功能基线(系统规格说明)、**分配基线(**软件规格说明)、产品基线(软件产品所有配置项);
发行基线(交付给外部客户);构造基线(企业内部使用)。
配置项:配置管理的基本单位。软件开发过程中的所有文档、代码、工具都可作为配置项,主要包括六种类型:环境类(系统开发环境)、定义类(需求分析与系统定义阶段)、设计类(设计阶段)、编码类(编码及单元测试阶段)、测试类(系统测试完成后的工作)、维护类(维护阶段)。即产品组成部分的工作成果 + 项目管理和机构支撑过程域产生的文档。
检查点:指在规定的时间间隔内对项目进行检查,比较实际与计划之间的差异,并根据差异进行调整。
里程碑:完成阶段性工作的标志,不同类型的项目里程碑不同。
软件配置管理是贯穿整个软件生存周期的一项技术。它的主要功能是控制软件生存周期中软件改变,减少各种改变所造成的影响,确保软件产品的质量。包括下面活动:编制配置管理计划、配置标识、配置控制、配置状态报告、配置评价、发行管理和交付。
5.2、版本控制
即软件配置项的版本控制,配置项有三个状态:草稿、正式、修改
处于草稿状态的配置项的版本号格式为:0.YZ,其中 YZ 数字范围为 01~99。随着草稿的不断完善,YZ的取值应递增。Z的初值和增幅由开发者自己把握。
处于正式发布状态的配置项的版本号格式为:X.Y。其中X为主版本号,取指范围为19;Y为次版本号,取值范围为1 9。配置项第一次正式发布时,版本号为1.0。
如果配置项的版本升级幅度比较小,一般只增大Y值,X值保持不变。只有当配置项版本升级幅度比较大时,才允许增大X值。
处于正在修改状态的配置项的版本号格式为:X.YZ。在修改配置项时,一般只增大Z值,XY值保持不变。
5.3、变更控制
软件开发过程中的每一次修改都要纳入变更,以防止版本混乱,需要用到基线和配置数据库的概念。配置数据库分为下面三种:
开发库(动态库、程序员库、工作库;动态系统、开发者系统、开发系统、工作空间)。
受控库(主库、系统库;主系统、受控系统)。
产品库(备份库、静态库、软件仓库;静态系统)。
变更控制流程
变更申请:所有变更请求应该由书面申请书提出。
变更评估:对变更的影响范围,经济技术可行性进行分析。
变更决策:决定变更是否实施,若拒绝要给出理由,若实施则给出方案。
变更实施:由管理者指定的工作人员在受控状态下进行实施。
变更验证:由配置管理人员对变更结果进行评价,决定结果与预期是否相符
沟通存档:将变更后的内容通知可能会受到影响的人员,并将变更记录汇总到文档中。
6、风险管理
风险分类
项目风险威胁到项目计划,如果项目风险发生,有可能拖延项目的进度和增加项目的成本。
指预算、进度、人员、资源、利益相关者、需求等方面的潜在问题以及它们对软件项目的影响。
技术风险威胁到要开发软件的质量和交付时间,如果技术风险发生,开发工作就变得很困难或者不可能。
指设计、实现、接口、验证和维护等方面的潜在问题。
商业风险威胁到要开发软件的生存能力
市场风险、策略风险、销售风险、管理风险、预算风险
风险管理过程
风险管理计划编制:如何安排与实施项目的风险管理,制定下列各步的计划。
风险识别:识别出项目中已知和可预测的风险,确定风险的来源、产生的条件、描述风险的特征以及哪些项目可以产生风险,形成一个风险列表。
风险定性分析:对已经识别的风险进行排序,确定风险可能性与影响、确定风险优先级、确定风险类型。
风险定量分析:进一步了解风险发生的可能性具体由多大,后果具体有多严重。包括灵敏度分析、期望货币价值分析、决策树分析、蒙特卡罗模拟。
风险应对计划编制:对每一个识别出来的风险来分别制定应对措施,这些措施组成的文档称为风险应对计划。包括消极风险(避免策略、转移策略、减轻策略);积极风险(开拓、分享、强大)。
风险监控:监控风险计划的执行,检测残余风险,识别新的风险,保证风险计划的执行,并评价这些计划对减少风险的有效性。
风险曝光度 = 风险发生的可能性 × 风险发生会带来的损失。
十五、数学与经济管理
1、图论应用
1.1、◉最小生成树
有两种方法:普里姆算法和克鲁斯卡尔算法,实际计算建议采用克鲁斯卡尔算法。
克鲁斯卡尔算法:将图中所有的边按权值从小到大排序,从权值最小的边开始选取,判断是否为安全边(即不构成环),直至选取了n-1条边,构成了最小生成树。
最小生成树并不唯一,但权值之和都相等且最小,只要求出一个就可以。
个人理解:在实际的刷题中,会碰上这种题目,题型为:要铺设水管,要经过所有村子,怎么样铺才能是里程最短?
首先把存在的距离从小到大排序,然后从最小的开始连,不能形成闭环,把所有的村子都连上,即解题。
1.2、◉最短路径
求两个顶点间长度最短的路径,路径上各边的权值总和。
关键路径是松弛时间为0的那条线,它们相反,最长路径,不可压缩工期。
1.3、◉网络与最大流量
求出最大流量的路径,它的最小值就是此路径的流量。把此路径上其他的边减掉最小值,再找下一条路径,依次类推,直至没有通路,它们的最小值之和就是最大流量。
个人理解:在实际的刷题中,会碰上这种题目,题型为:要运输货物,优先选择费用最少的,要花费多少运输多少流量?
首先找出费用最少的,每个节点的流量不一样,最少的那个就是整条路线的流量,然后把这条路线都减去这个流量,以此类推。
2、运筹方法
2.1、◉线性规划
在一组约束条件下寻找目标函数的极值问题,求极大值(或极小值)。
它的最优解:无穷多最优解(多重解),无界解(无最优解),无可行解,唯一最优解。
线性规划的标准型其主要特征为:
(1)目标函数为极大化类型
(2)所有的约束条件都是等式
(3)所有约束方程右端的常数都是非负的,
(4)所有决策变量都是非负的。
个人理解:由目标函数和约束条件组成。约束条件的所有解的集合称为可行解区。满足约束条件,目标函数达到极值的解称为最优解。
增加线性约束条件,则可行解区会缩小。如果有一个最优解则从可行解区顶点处比较目标函数值来求解。
2.2、动态规划
求解给定多种方案求出最佳方案的问题
直接运用动态规划法的原理来解题非常复杂,因此一般采用穷举法解题(列举所有可能情况来找出问题答案的方法)
2.3、博弈论
也称为竞赛论或对策论,是研穷具有竞争(或斗争)性质现象的数学理论和方法。
参加竞争的各方各自具有不同的目标和利益。为了达到各自的目标和利益,各方必须考虑对手的各种可能的行动方案,并力图选取对自己最为有利或最为合理的方案。
对策论就是研究对策行为中竞争各方是否存在最合理的行动方案,以及如何找到这个合理的行动方案的数学理论和方法。
赢得矩阵:讨论二人有限零和对策,田忌赛马。
各自都有6个策略,分别为(上,中,下)、(上,下,中)、(中,上,下)、(中,下,上)、(下,中,上)、(下,上,中)。
S1={α1,α2,α3,α4,α5,α6}
S2={β1,β2,β3,β4,β5,β6}
α1依次跟β1-β6比,α2也依次跟β1-β6比,策略αi和S2的任一策略βj就决定了一个局势sij。
注意:由于双方都是不能信任的,也不存在合作,所以只会采用对自己有用的。
比如:降价能增加销量,但减少利润。
如果对方不降价,你选择降价,那么就是吞噬对方市场。
双方都不降价和双方都降价的结果是一样的。
在这种情况下,最终结果只有双方都降价,尽管不是最优解,但由于互相不信任,只能这样。
2.4、排队论
排队论也称为随机服务系统理论。服务系统既能满足服务对象的需要,又能使机构的费用最经济或某些指标最优。
(1)队长和排队长。队长是指系统中的顾客总数;排队长也称为队列长,是指队列中等待服务的顾客数。显然,队长=排队长+正被服务的顾客数。
(2)逗留时间和等待时间。逗留时间是指顾客在系统中的停留时间;等待时间是指顾客在队列中的等待时间。显然,逗留时间=等待时间+服务时间。
(3)忙期。忙期是指顾客到达空闲服务机构起到服务机构再次为空闲这段时间的长度,即服务机构连续繁忙的时间长度,它关系到服务员的工作强度。忙期和一个忙期中平均完成服务的顾客数都是衡量服务机构效率的指标。
(4)服务强度。服务强度是指单位时间平均到达的顾客数与服务机构的平均服务率的比值。
μ表示单位时间能被服务完成的顾客数,称为平均服务率
例如:task1,占用1个资源,该处理平均服务时间为2.5分钟,单位时间内到达20个任务。
λ=20,
单位时间能被服务完成的顾客数(平均服务率) μ=60/2.5=24
每个资源的利用率,表示服务强度 ρ=λ/μ = 20/24=0.833
每个处理中的平均任务数(队长的期望值) L= λ/μ-λ = p/1-p = 0.833/(1-0.833) = 4.988
在队列中等待的平均顾客数(队列长期望值) lq = p²/1-p = pλ/μ-λ = 0.833×20/24-20 = 4.165
平均系统时间(逗留时间的期望值) S = 1/μ-λ = 1/24-20 = 1/4 =0.25
每个处理的平均等待时间的期望值 W = p/μ-λ = 0.833/24-20 = 0.208
2.5、◉决策论
按决策环境分类
确定型决策:决策环境是确定的,结果也是确定的。
风险决策:决策环境是不确定的,但是结果发生的概率是一致的。
不确定型决策:决策环境不确定,且结果也不确定,完全凭主观意识来决定。
决策的六个要素
决策者、
可供选择的方案(包括行动、策略)、
衡量选择方案的准则(目的、目标、正确性等)、
事件(被决策的对象)、
每一事件的发生将会产生的某种结果、
决策者的价值观。
不确定型决策
决策者对环境一无所知,任意猜测,完全凭借与决策者自身价值观,有五种准则(建立环境与方案的表格,每个环境每种方案对应一个收益):
- 乐观主义准则。乐观主义准则也称为最大最大准则(maxmax准则),原则是“大中取大”。
对事物总抱有乐观和冒险的态度,决不放弃任何获得最好结果的机会, - 悲观主义准则。悲观主义准则也称为最大最小准则(maxmin准则),原则是“小中取大”。
对事物抱有悲观和保守的态度,在各种最坏的结果中选择最好的。 - 折中主义准则。折中主义准则也称为赫尔威斯(Harwicz)准则,这种决策方法的特点是对事物既不乐观冒险,也不悲观保守,而是从中折中平衡一下。用一个系数α(称为折中系数)来表示,并规定0 ≤ α ≤ 1,α接近于1,则偏向于乐观;α接近于0,则偏向于悲观。
- 等可能准则。等可能准则也称为拉普拉斯(Laplace)准则,把每个状态出现的概率定为1/n(n是自然状态数),然后按照最大期望值准则决策。也就是说,把一个不确定型决策转换为风险决策。
- 后悔值准则。后悔值(遗憾值)准则也称为萨维奇(Savage)准则、最小机会损失准则。
不能符合理想情况,必然有后悔的感觉,最大收益值作为理想目标,并将该状态的其他值与最大值相减所得的差作为未达到理想目标的后悔值。计算出后悔值矩阵,按照最大后悔值里面选择最小后悔值的方法进行决策,因此,也称为最小最大后悔值(minmax)。
积极方案的最大后悔值为350,稳健方案的最大后悔值为250,保守方案的最大后悔值300。三者的最小值为250,因此,选择其对应的稳健投资方案。
2.6、风险决策
决策者对客观情况不甚了解,但对将发生各事件的概率是已知的。
一般采用期望值作为决策准则,常用的有最大期望收益决策准则(ExpectedMonetary Value,EMV)和最小机会损失决策准则(Expected Opportunity Loss,EOL)。当EMV为最大时,EOL便为最小。因此,在决策时用这两个决策准则所得的结果是一致的。
例如:走水路时,成本为7000元的概率为75%,成本为16000元的概率为25%。水路用天气因素。
走水路的期望成本为(7000×75%)+(16000×25%)=9250元。
走陆路时,其成本为(10000×75%)+(10000×25%)=10000元。
所以,走水路的期望成本小于走陆路的成本,应该选择走水路
灵敏度分析
实际情况不断发生变化。因此,需要分析决策所用的数据可在多大范围内变动,原最优决策方案继续有效,这就是灵敏度分析。
在上述例子中:设ρ为出现晴天的概率,1-ρ为出现暴雨的概率。当这两个方案的期望值相等时,即
ρ × 7000+(1-ρ)×(16000)= ρ ×(10000)+(1-ρ)×10000
求得ρ=0.67。称它为转折概率。
2.7、存贮论
叫做存贮论或库存理论
存贮策略
常见的存贮策略有以下3种:
(1**)to-循环策略**:每隔如时间补充存贮量为0,使库存水平达到 S。这种策略的方法有时称为经济批量法。
(2)(s,S)策略:每当存贮量x>s 时不补充,当x>=s时补充存贮,补充量 Q=S-x,使库存水平达到S。其中s称为最低库存量。
(3)(to,s,S)混合策略:每经过to时间检査存贮量x,当x>s 时不补充,当 x<=s 时补充存贮,补充量Q=S-x,使库存水平达到S。
2.8、◉分配
这道题目是求最小值的,如果是求最大值就要把表格里面最大的常数减去其他数字,使其变为求最小值。
设三个煤场 A、B、C 分别能供应煤 12 万吨、14 万吨、10 万吨,三个工厂 X、Y、Z分别需要煤 11 万吨、12 万吨、13 万吨,从各煤场到各工厂运煤的单价(百元/吨)见下表方框内的数字,只要选择最优的运输方案,总的运输成本就能降到(53)百万元。
X | Y | Z | |
---|---|---|---|
A | 5 | 1 | 6 |
B | 2 | 4 | 3 |
C | 3 | 6 | 7 |
解题思路:使不同行、列都达到最小值。
所有行都减去最小数字
A:5 1 6 | 都减去1 | A:4 0 5 |
---|---|---|
B:2 4 3 | 都减去2 | B:0 2 1 |
C:3 6 7 | 都减去3 | C:0 3 4 |
所有列都减去最小数字
A:4 0 5
B:0 2 1
C:0 3 4
变为
X Y Z
A:4 0 4
B:0 2 0
C:0 3 3
先对矩阵为0的开始分配,很明显,A只能分配至Y,C只能分配给X,B分配给Z;
A12吨全部给Y,成本为12
C10吨全部给X,成本为30
B1吨分给X,13吨分给Z,成本为2+39=41
总成本为:83
3、数学建模
数学建模是一种数学的思考方法,是运用数学的语言和方法,通过抽象和简化,建立能近似刻画并解决实际问题的模型的一种强有力的数学手段。
数学建模的过程
(1)模型准备:了解问题的实际背景,明确其实际意义,掌握对象的各种信息。用数学语言来描述问题。
(2)模型假设:根据实际对象的特征和建模的目的,对问题进行必要的简化,并用精确的语言提出一些恰当的假设。
(3)模型建立:在假设的基础上,利用适当的数学工具来刻划各变量之间的数学关系,建立相应的数学结构。只要能够把问题描述清楚,尽量使用简单的数学工具。
(4)模型求解:利用获取的数据资料,对模型的所有参数做出计算(估计)。
(5)模型分析:对所得的结果进行数学上的分析。
(6)模型检验:将模型分析结果与实际情形进行比较,以此来验证模型的准确性、合理性和适用性。如果模型与实际较吻合,则要对计算结果给出其实际含义,并进行解释。如果模型与实际吻合较差,则应该修改假设,再次重复建模过程。
(7)模型应用:应用方式因问题的性质和建模的目的而异。
数学建模的方法
(1)直接分析法:根据对问题内在机理的认识,直接构造出模型。
(2)类比法:根据类似问题的模型构造新模型。
(3)数据分析法:通过试验,获得与问题密切相关的大量数据,用统计分析方法进行建模。
(4)构想法:对将来可能发生的情况给出逻辑上合理的设想和描述,然后用已有的方法构造模型,并不断修正完善,直至比较满意为止。
4、算法
衡量算法优劣的标准有两个层次,其一是算法的正确性、可靠性和易理解性,其二为执行算法所需的时间和空间。后者也被称为算法的效率,算法的复杂性主要指的就是算法的效率。
查找算法
- 顺序查找。从表中的第1个记录开始,逐个进行记录关键字与给定值的比较。这种方法比较简单,适用于任何表结构,其缺点是查找效率比较低。查找成功时,平均査找长度为(n+1)/2;查找不成功时,平均查找长度为n+1。
- 折半查找。也称为二分法查找,首先确定待查记录所在的范围(区间),与中间元素进行比较,然后再逐步缩小范围直到找到或查找不到该记录为止。这种方法只适用于对有序表的查找,查找效率较高,平均查找长度为log2(n+1)-1,查找成功时和给定值进行比较的关键字个数最多不超过[log2n]+1。
- 分块查找。首先确定要查找的关键字所在的数据块号,一般可采用顺序查找或折半查找方法;然后再在已确定的数据块内进行顺序查找。在进行分块查找时,必须先将数据元素组织成索引表和顺序表,索引表按关键字排序,顺序表分块排序。
- 哈希(Hash)查找。通过计算数据元素的存储地址进行查找的一种方法,首先用给定的哈希函数构造哈希表,然后根据选择的冲突处理方法解决地址冲突,再在哈希表的基础上执行哈希查找。哈希查找的效率与装填因子有关,装填因子=哈希表中填入的记录数/哈希表的长度。装填因子越小,发生冲突的可能性也就越小,反之亦然。
除留去余法:H(key)=key%m=地址;(m一般取接近n,但不大于n的质数,n为记录数)
处理冲突,开放定址法:(H(key)+di)%m;(di为增量序列,i取1,2,—m-1)
排序算法
- 插入排序。每一步都将一个待排序记录按其排序码的大小插入到前面已排好序的序列的适当位置上,直到全部记录插完为止。如果在已排好序的序列中找插入位置时用顺序查找方法,则称为直接插入排序;如果在已排好序的序列中找插入位置时用折半查找方法,则称为折半插入排序。直接插入排序的比较次数为O(n²),移动次数也为O(n²),平均时间复杂度和最坏情况下的时间复杂度均为O(n²);折半插入排序的比较次数为O(nlog₂n),移动次数仍为O(n²),平均时间复杂度和最坏情况下的时间复杂度均为 O(n²)。
–直接插入:第2个跟第1个比较,第3个跟2,1比较,依次类推
–折半插入:mid=(low+high)/2,要插入的数据跟min比较 - 简单选择排序。反复从还未排好序的记录中选出排序码最小(或最大)的记录,顺序地放在已排序的记录序列的最后,直到全部排完。选择排序的比较次数为O(n²),移动次数也为O(n²),平均时间复杂度和最坏情况下的时间复杂度均为O(n²)。
–从头到尾扫一遍,找出最小的,放在最前面,视它已经排好了,再在剩下的元素里找出最小的,放它后面。 - 冒泡排序。将待排序的记录顺次两两比较,若为逆序则进行交换。将序列照此方法从头到尾处理一遍,称作一趟冒泡。一趟冒泡的效果是将排序码最大(或最小)的记录交换到了最后的位置,即该记录的排序最终位置。若某一趟冒泡过程中没有发生任何交换,则排序过程结束。冒泡排序的比较次数为O(n²),移动次数也为O(n²),平均时间复杂度和最坏情况下的时间复杂度均为 O(n²)。
–1跟2比,如果1大于2就换位置,2在跟3比,大于在换位置,一趟下来,最大的就在最后面了 - 快速排序。又称为分区交换排序,是对冒泡排序的一种改进。其基本方法是:在待排序序列中任取一个记录,以它为基准用交换的办法将所有的记录分成两部分,排序码比它小的在一个部分,排序码比它大的在另一个部分。再分别对两个部分实施上述过程,一直重复到排序完成。快速排序的平均时间复杂度为O(nlog2n),在最坏情况下的时间复杂度同为 O(n²)。
–找一个基准,一般为最后一个数字,分成比它大和比它小的2部分,再在这2部分里继续找基准 - 希尔排序。又称为缩小步长法,是对插入排序的一种改进。使用插入排序法,如果原来的顺序好,排序效率就高。但在插入排序中,每插入一个记录,有序序列的长度仅增加1,且对插入下一个记录没有提供任何帮助。希尔排序法的基本思路是,将插入排序按某种规则分为若干趟进行,使后一趟的插入排序可以充分利用前一趟的排序结果。希尔排序的分析是一个复杂的问题,因为它的时间是所取增量序列的函数,这涉及一些数学上尚未解决的问题。
–增量序列为5,3,1;由第一个数,跟它后面第5个数相比,并排序,第二个数也跟它后面的第5个数相比,由此类推。
得到一轮排序后的结果,在由第一个数,跟它后面第3个数相比,由此类推。
第二轮排序后,此结果为基本有序的数组,第三轮排序为插入排序。对于基本有序的数组,最适宜采用的算法便是插入排序,时间复杂度为O(n)。 - 堆排序。堆排序是一种树形选择排序,是对选择排序的有效改进。如果把堆看作是一棵完全二叉树节点的层次序列,则此完全二叉树任一结点的值都小于或等于它的两个子结点的值。显然,具有此特性的完全二叉树的任何一棵子树都对应于一个堆。堆排序的基本思想是:对一组待排序的记录,首先将其排序码按堆的定义排成一个序列(称为建堆),这就找到了排序码最小(最大)的记录。将此记录取出,用其余的记录再建堆,便**得到排序码次最小(次最大)的记录****。如此反复进行,直到将全部记录排好序为止。堆排序平均时间复杂度和最坏情况下的时间复杂度均为O(nlog2n)。
- 归并排序。归并排序是指将两个或两个以上的有序子序列合并成一个新的有序序列的过程。其基本思想是:归并时只要比较各子序列的第一个记录的排序码,最小的一个就是排序后的第一个记录。取出这个记录,继续比较各子序列的第一个记录,便可找出排序后的第二个记录。如此继续下去,只要经过一遍扫描,就得结果。归并排序平均时间复杂度和最坏情况下的时间复杂度均为O(nlog2n)。
–把每个元素都看成一个组,两两对比并排序,将排序后的看成一个组,用他们的头部元素与第二组比较。 - 外排序。排序过程中,内存只存储文件的一部分记录,整个排序过程需进行多次内外存间的交换。外排序多使用归并排序法,一般分两步进行。第一步,建立外排序所用的内存缓冲区,并根据其大小将输入文件划分为若干段,用某种有效的内排序方法,对各段进行排序。这些经过排序的段叫做初始归并段,当它们生成后就被写到外存中去:第二步,对第一步形成的归并段用某种归并方法进行一趟趟的归并,使文件中的有序段越来越长,直到整个文件成为一个有序段为止。
数值算法
- 迭代法是用于求方程或方程组近似根的一种常用算法。其基本思想是:从某个点出发,通过某种方式求出下一个点,此点应该离方程(组)的解更近一步,当两者之差接近到可以接受的精度范围时,就认为找到了问题的解。迭代法又分为精确迭代和近似迭代,二分法和牛顿迭代法都属于近似迭代法。
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。利用迭代算法解决问题需要做好以下三个方面的工作:确定迭代变量、建立迭代关系式、对迭代过程进行控制。重复反馈。 - 递归:程序设计中的递归分为定义递归和过程递归。定义递归是指在数据结构或函数的定义中使用了递归;过程递归是指在程序执行过程中使用了递归。程序执行过程中有时只在满足某种条件的情况下才能执行递归,这种递归被称为有条件递归;有些递归并不以直接的形式表现出来,而是通过“第二者”、“第三者”(另外的数据结构或函数)以间接形式表现出来,这种递归称为间接递归。
**设计递归时要注意,应确保每次递归后都朝既定目标更近了一步,而且经过有限步就能达到目标。**考虑到计算机的速度和容量,这有限步的步数也要根据实际情况加以限制。 - 分治法的基本思想是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即子问题解的合并。这个技巧是很多高效算法的基础,例如,快速排序、归并排序、傅立叶变换等都使用了这个方法。
分治法需要把大问题分解成许多小问题,而小问题若仍不够小还得不到解时,需要再分解成更小的问题,因此,分治法经常需要与递归法结合使用。
分治法所能解决的问题一般具有几个特征:
(1)该问题的规模缩小到一定的程度就可以容易地解决;
(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质
(3)利用该问题分解出的子问题的解可以合并为该问题的解;
(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
分治法在每一层递归上都有3个步骤:
(1)分解:将原问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题;
(2)解决:若子问题规模较小而容易被解决则直接解,否则,递归地解各个子问题;
(3)合并:将各个子问题的解合并为原问题的解。
–子问题相互独立但与原问题相同 - 回溯法又称为试探法,基本思路是:在用某种方法找出解的过程中,若中间项结果满足所解问题的条件,则一直沿这个方向搜索下去,直到无路可走或无结果,则开始回溯,改变其前一项的方向(或值)继续搜索。若其上一项的方向(或值)都已经测试过,还无路可走或无结果,则再继续回溯到更前一项,改变其方向(或值)继续搜索。若找到了一个符合条件的解,则停止或输出这个结果;否则,继续回溯下去,直到回溯到问题的开始处(不能再回溯),此时已经找到了全部的解。如果仍没有找到符合条件的解,则表示此问题无解。
- 贪心法是一种不追求最优解,只希望得到较为满意解的方法。贪心法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以,贪心法不要回溯。
贪心法与动态规划法的不同之处在于,它对每个子问题的解决方案都做出选择,不能回溯。动态规划法则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回溯功能。
贪心法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。 - 动态规划法:某些复杂问题不能简单分解成几个小问题,然后在小问题解的基础上简单综合得到问题的解,这样费时费力,重复度高。动态规划法的基本思想是:引入一个数组,把所有子问题的解存在其中,问题的最后解将从这个序列中得到,往往是选取概率最大的、得分最高的子问题的解综合得到问题的最后解。
动态规划法是系统分析中的一种常用方法,是解决多阶段决策过程问题的一种最优化方法。所谓多阶段决策过程,就是把研究问题分成若干个相互联系的阶段,每个阶段都作出决策,从而使整个过程达到最优化。许多实际问题利用动态规划法处理,常比线性规划法更为有效,特别是对于那些离散型问题。
动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。由此可知,动态规划法与分治法和贪心法类似,它们都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。