R进制转十进制:按权展开,位置上的数与权相乘
十进制转R进制:短除法
二进制转八进制与十六进制数:三位一转/四位一转
码 | 负数 |
---|---|
原码 | 正常二进制 |
反码 | 原码除了符号位,取反 |
补码 | 反码基础上+1 |
移码 | 补码首位取反(为了体现出正数比负数大) |
整数范围 | |
---|---|
原码 | -(2n-1-1)~ 2n-1-1 |
反码 | -(2n-1-1)~ 2n-1-1 |
补码 | -2n-1 ~ 2n-1-1 |
浮点数的表示:N=M*Re
浮点数的运算:低阶对高阶,结果格式化
主机:CPU(运算器,控制器) + 主存储器/内存
运算器:①算术逻辑单元ALU ②累加寄存器AC ③数据缓冲存储器DR ④状态条件寄存器PSW
控制器:①程序计数器PC ②指令寄存器IR ③指令译码器 ④时序部件
※※※重要!计算经常考!
首先理论公式,理论公式没有才选实践
看成第一条指令执行完以后,剩下n-1条指令才执行,剩下n-1条执行的周期都是流水线周期(一条指令max的时间部分),而第一条指令可能是n x t,也可能是t1+t2+t…+tk
寄存器在运算器,控制器之中,运算最快。
速度快的容量小,是速度慢的容量大。
cache是除了寄存器以外计算速度最快的,可以提高cpu数据输入输出的速率。使用cache改善系统性能的依据是程序的局部性原理。
时间局部性/空间局部性
int i,s=0
for(i=1;i<1000;i++)
for(i=1;j<1000;j++)
s+=j;
printf(s);
例如s+=j这段操作放入cache中执行
空间局部性:连续访问相邻的空间
1、 分类
随机存取存储器RAM:(比如内存)掉电后信息丢失
只读存储器ROM:掉电后信息不丢失
磁盘存取时间=寻道时间+等待时间(平均定位时间+转动延迟)
寻到时间是指磁头移动到此道所需的时间,等待时间为等待读写的扇区转到磁头下方所用的时间
正常处理:走过R0以后,R0在缓存区处理需要3ms,这时候磁头走到了R2,为了读取R1必须再转一圈,所以读完R0并且指向R1需要3+33=36s,接下来读完R1指向R2…读完R9指向R10,都是一样的,所以(33+3)* 10 ,最后读取R10并处理需要6秒,所以总的是(33+3)* 10 + 6 = 336
如果要重新分布,最理想的情况应该是读取R0并且处理完以后刚好到R1,所以最好隔块分布R0,R1…这样读取一个区块就需要3+3=6s,每个区块都是这个时间就是6 * 11 = 66s
总线的分类
根据总线所处的位置不同,总线通常被分成三种类型
0.概念:总线是连接计算机有关部件的一组信号线,是计算机中用来传送信息代码的公共通道。
1.内部总线:微机内部的,各个外围芯片与处理器之间的总线,属于芯片级别
2.系统总线:系统总线即为各个插线板和系统板之间的总线;包括(1)数据总线:如32位,64位等一次性能够传输的位(2)地址总线:假设该计算机的地址总线为32位,那就代表它的地址空间为2^32个字节(3)控制总线:发送相应的控制信号的总线
3.外部总线:即微机和外部设备的总线
注:总线上的多个部件之间只能分时向总线发送数据,但可以同时从总线接收数据
1.串联系统的结构:只要一个子系统失效,则整个系统都将失效
2.串联系统可靠性的计算:即各个串联子系统可靠性相乘,如上图,其中R为可靠性,此外,1-可靠性即为失效率,而总的失效率即为串联各个部件的失效率作和(近似计算)
2.并联系统可靠性的计算:通过计算失效率来求得可靠性,即各个子系统的失效率相乘,再由1减去它,即可得到系统可靠性
1.结构
图片解释:数据输入n个子系统中,它们各自得出自己的结果,然后汇总到表决器,表决器将遵循少数服从多数的原则,输出大多数子系统得到的那个答案然后进行输出
1.检错:将错误检查出来
2.纠错:将错误检查出来的同时并进行纠正
码距及其作用
1.码距的概念:指整个编码系统中任意两个码字的最小距离,如A变化X个位得到B,则X就为码距,如:若使用2位长度的二进制编码,若以A=11,B=00为例,A,B之间的最小码距为2
2.码距的作用:增大码距能够起到检错的作用,因为数据在传输的过程中如果链路出现了
问题,那么将会使得接收到的二进制数发生变化,若码距过小,则很可能造成信息的混淆,增大码距就使得被改变的二进制数混淆信息的概率极大的降低;若码距再进行增大,则能够起到纠错的作用,因为数据链路出错的概率比较低,只能造成传输中极少二进制数的改变,我们可以根据该传输失真的二进制数中大部分二进制数的构成来进行推断,推断出结果就达到了纠错的目的。
注:在一个码组内为了检测e个误码,要求最小码距d应满足:d>=e+1
在一个码组内为了纠正t个误码,要求最小码距d应该满足:d>=2t+1
(无需深究)
这是一种可以检错但不能纠错的一种编码
1.CRC的概念:在对信息进行编码的时候在其尾部加入一些校验信息,让编码后的数据能够与循环校验码的生成多项式相除余数为零,若不为零则说明传输过程出现了错误,其中,原码加上(增添在右方)校验信息加(做加法)上余数所得的码即为CRC,
注(1):生成多项式是一个二进制数,如"X4+X3+X+1",这个生成多项式实际上就是二进制数11011;在相除时,需在原码后方添加一些0,添加的0的个数等于生成多项式的位数减去1,增加的0即为校验信息。
注(2):二进制的除法与算术除法相似,唯一不同的是所得除数在作减法时,减得的值要取绝对值,即0-1=1;这样使得整个除法运算中不存在借位。
1.概念:海明码是一种利用奇偶性进行检错和纠错的校验码,是一种插入到信息中的编码,一般为多个码,其插入的位置满足规律:2r>=x+r+1;其中,x为信息的二进制数的位数,r为校验码的个数,而插入信息的位置则是2r-1,2r-2……20;如r=3时,校验码就插在1,2,4位置
2.校验码的计算:如信息1011,根据公式得出其校验码分别放在1,2,4位,因此其海明码将有7位数,其中3,5,6,7位即为信息位,将3写为20……21;将5写为20+22…将四个信息的位数用此方法表示以后可得到校验位的值的计算公式:r0=i4&i3&i2;r1=i4&i3&i1.r2=i4&i3&i2;其中,r表示校验位的值,且从0开始计数;在信息位被2^ 表示以后,将都有22的信息位进行异或操作并将值赋给r2,将都有2^1的信息位进行异或操作并将值赋给r1,ro也一样操作,&符号即为异或,在异或操作中,二者值相同即等于1,不同即等于0,而ix则是将其信息位施以一种运算:信息位所处的位置为奇数就将其赋值为1,信息位所处的位置为偶数就将其赋值为0,因此i4=1,i3=0,i2=1,i1=1;
3.海明校验码的作用:将信息转换为海明校验码形式以后,我们就能进行纠错,如信息1011,其海明校验码的正确形式为1010101,若收到了1011101,我们可以将两个数的校验码位的数提取出来,并在对应位置进行异或运算,如该例得到了001,则说明第1位’(左数第一个信息位)出错了,若得到了010,则说明第二个信息位出错了。
校验码——奇偶校验码
1.概念:一个码距为1的编码系统加上一位奇偶校验码后,码距就变成了2。产生奇偶校验时将信息数据的各位进行模二加法(即异或运算,相同则和为0,相反则和为1),直接使用这个加法的结果称为奇校验。把这个加法值取反后作为校验码的称为偶校验。从直观的角度而言,奇校验的规则是:信息数据中各位中1的个数为奇数,校验码为1,否则校验码为0,偶校验则相反
2.奇偶校验码的作用:使用一位奇偶校验码的方法可以检测出一个奇数或偶数位的错误,但无法判断是哪一位出现错误,当错误数超过一个时奇偶校验就无法检测出来,所以奇偶校验常用于对少量数据的校验,这种校验方式在通信领域被广泛采用
操作系统与计算机体系结构之间的关系
操作系统具备的管理职能
1.进程管理:包括(1)进程的状态;(2)前趋图;(3)pv操作;(4)死锁问题。
2.存储管理:包括(1)段页式存储;(2)页面置换算法。
3.文件管理:包括(1)索引文件;(2)位示图。
4.作业管理 (少)
5.设备管理 包括:数据传输控制方式 (少)
6.微内核操作系统:包括虚设备与SPOOLING技术
程序的三种基本状态(三态模型)
图注:等待状态下的程序缺少除cpu资源以外的其他资源,如用户指令或外设支持等资源;就绪状态的程序除了CPU资源以外的所有资源都已经准备就绪;处于就绪状态的程序需要排队获取CPU资源,且即使获取到了CPU资源,他们的运行时间也是有限的,因此,时间片到了以后就会从运行状态退出到就绪状态,而程序在运行时出现了某些资源的缺失则会退出至等待状态.
程序进程的五态模型(三态模型的发展)
图注:该模型是三态模型的发展,将就绪状态分为了静止就绪和活跃就绪,静止就绪是该进程已经获得了CPU资源,但由于人为需要,由运行状态将其退出至就绪状态,如我们在听歌时突然来了电话,我们暂时将音乐关闭,这种人为的将程序由运行态转至的就绪态,即为静止就绪,再次调动该程序时,该程序就将由静止就绪转至活跃就绪进而被调用;此外,阻塞态即为三态模型中的等待态
前趋图的概念
1.概念:前趋图是将一个完整的进程所需的工序按照是否具有先后关系将进程进行再次区分的图象
2.模型示例:
图注:该前趋图以包饺子这一工序为例,首先将包饺子分为了五大步骤,并根据步骤间是否具有先后约束关系将其分为三个大的步骤,这样做的好处是明确了A,B,C三个步骤是平行的,他们之间可以并行,这样可以增大CPU的处理效率。
ps.进程的同步与互斥是进行pv操作分析的前提
进程的互斥与同步
2.进程同步的实际应用示例:
与pv操作相关的几个概念
1.临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机,磁带机等。
2.临界区:每个进程中访问临界资源的那段代码称为临界区。
3.信号量:是一种特殊的变量,符号为s,只用于pv操作
p操作
图注:S代表信号量,该操作表示:S自减一,然后判断是否小于零,若小于零则将该进程阻塞起来,并将其放入进程队列中,让进程处于等待状态,若不小于零,则表示可以往下面执行;该操作即为将进程“挂起”或“申请资源”,该操作一般用于”运行需要条件的操作“
v操作
图注:该操作表示:S自增一,然后判断S是否小于等于零,若是,则从进程队列中拿出一个进程,并唤醒该进程,使其继续执行;若不是,则可以继续往下面的步骤执行;该操作即将进程“唤醒”或“释放资源”,一般将该操作用于“没有任何约束的上来就可以运行的操作”(s<=0说明还有进程在等待,比如本来不为0,被用成0,然后还有一个进程要用,就变成了-1,这时候如果执行了v操作释放了一个缓冲区,-1+1=0说明还有进程在等待所以会从进程队列取一个进程出来)
即pv操作与前趋图结合起来考察
死锁
1.问题描述:进程管理是操作系统的核心,但如果设计不当,就会出现死锁问题,如果一个进程在等待一件不可能发生的事,则进程就死锁了,此时该进程将一直占用部分系统资源,而如果多个进程产生死锁,就会造成系统资源被占用完毕,进而造成系统死锁
2.解决方案:提高系统资源容量;常见习题:计算机系统至少需要多少资源将不可能发生死锁问题;例如:
图解:一个进程在得到所有所需资源之后将释放自身占用的资源,因此该例题至少需要13个资源则不可能发生死锁。计算方法:将每个进程所需资源减去一然后把他们相加,总数再加一,即为避免死锁所需的最少资源
1.进程互斥
2.保持和等待:在资源总量并未满足完成进程所需资源的总量前提下,每个进程都保持自身占用的资源不变并且一直等待其他进程完成以获取其释放的系统资源
3.不剥夺:系统不会把已分配给一个进程的资源剥夺掉分配给其他进程
4.环路等待:如总共有三个进程,A等待B,B等待C,C等待A;诸如此类的,等待的进程形成了一个闭合环状
死锁的预防:通过打破四大条件来进行
死锁的避免:
有两大方法,分别是:
1.有序资源分配法:将系统资源按照顺序分配给进程,一个进程完成后才将资源分配给下一个进程
2.银行家算法
该方法是避免死锁问题的常用方法
1.银行家算法的内容:它的内容即为分配资源的原则,包括:
(1).当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
(2)进程可以分期请求资源,但请求的总数不能超过最大需求量
(3).当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使该进程在有限的时间里得到资源
2.银行家算法涉及到的题型:
图解:解决该类问题,首先将系统所剩资源数计算出来,然后将每个进程还差的资源数计算出来,进行比较之后,将系统资源分配给差的最少的进程,进而让其释放资源,然后进行下一个所需资源较少的进程的分配,,由此将进程执行的顺序计算出来
以一个例题为例,描述四个算法:首次适应法,最佳适应法,最差适应法,循环首次适应法;它们的概念及关系;例题:某计算机系统的内存大小为128k,采用可变分区分配方式进行内存分配,现有作业4申请内存9k,几种不同的存储分配算法在分配中,会产生什么样的结果呢?
首次适应法:首次适应法会把即将执行的作业安排在第一个能够容纳它的空间
最佳适应法:该算法会把即将执行的作业安排在内存空间与它最接近的空间进行存放,如该例子中,作业4占据空间9k,通过该算法,计算机就将其存放在了空间为10的地址中;由于在每次存放作业以后内存空间剩余量极低,长期以后该算法会造成内存空间碎片化,降低内存地址的利用率
最差适应法:该算法能够解决内存空间碎片化的问题,如图所示:该算法优先将作业存放至内存空间最大的地址.
循环首次适应法:该算法是将空闲的区域连成环状,将作业在环状区域内顺次进行分配(从第二个空闲区域开始分配)
1.提出背景:为了解决碎片化的存储
2.概念:把用户程序分成等分大小的n个“页”(并将其编号),再在地址空间中以nk为基数划分等大小的块(同样将其编号,块号又称页帧号),运行用户程序时不再将整个程序进行运行,而是根据需要分批次将页调入到块中运行,而页和块之间的对应关系用页表来记录
3.页式存储组织的优缺点:优点:利用率高,碎片小,分配及管理简单
缺点:增加了系统开销(系统每次读取程序都需要先读取页表将其定位,再进行程序的读取);可能产生抖动现象
4.如图:
图注:页号与页帧号的关系必须通过表来进行查询
5.逻辑地址和物理地址
图注:要求物理地址,要先把逻辑地址(由图可知,逻辑地址由页号和页内地址组成)当中逻辑的页号和页内地址分开,要把它们分开,首先将页面大小写成二进制的形式,等于2^n;则说明一个页的页内地址有n位,而在逻辑地址中高于(从右往左)n位的部分就是页号,得到页号之后进行查表,得到相应的页帧号,而物理地址=页帧号+页内地址(该式子中的“+“是拼接,并非做加法)
1.概念:按逻辑结构进行内存的划分,划分为n个段,每一个段的大小无要求,可以相等也可以不等,包括段号和段内地址,例如:可以将main主函数作为一个段,然后将第一个子函数作为一个段,然后将第二个子函数作为一个段…
图注:该种存储方法按函数之间的逻辑对内存进行划分,大小差异较大,存在段表,段表的内容包括段号,段长以及基址,基址:就是该段在地址的起始位置。优点:多道程序共享内存,各段程序修改互不影响。缺点:内存利用率低,内存碎片浪费大
图注:段页式存储是结合了段式和页式的一种存储组织,将内存先分段,再分页;优点:空间浪费小,存储共享容易,存储保护容易,能够动态连接;缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降(程序在执行时要先查段表,再查页表,使得系统资源消耗增加)
1.概念:快表是一块小容量的相联存储器,由高速缓存器(放在cache之中)组成,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号
1.产生背景:当程序的需要与系统资源的供给发生矛盾时的一种解决方案,即将不用的页面淘汰掉,置换为需要执行的页面
2.页面置换算法的内容:
(1)最优算法:尚处于理论层面
(2)随机算法:随机淘汰一个页面
(3)先进先出算法(FIFO):即淘汰时按照之前执行的先后顺序进行淘汰,有可能产生“抖动”(抖动即:把经常用到的页置换出去,要用的时候发现没有内存了,造成进程中断。资源↑,效率↓)。例如,432143543215用3个页面,比4个缺页要少
(4)最近最少使用算法(LRU):即在保证最近使用的页面不被中断的情况下,将最少使用的页面淘汰,不会产生“抖动”
1023:分页处
1023+1024=2047:分页处
2047+1024=3071:分页处
图注:”没有使用快表“即表示每读一次程序的块,需要先在内存上面查表,才能读取相应的内存块,所以每一个块需要两次内存的访问,所以6个块(在页式存储结构中,每一个页面对应一个块)总共会产生12次对内存的访问;一个内存单元占据1b的内存,所有的指令(无论占据了几个页面)都只产生一次缺页中断,而操作数A和操作数B则各自产生两次缺页中断,因此总共产生了5次缺页中断
索引一般会有13个节点(默认情况下),从0开始编号,其中索引0到9这十个索引称为直接索引,直接对应物理盘块,每一个物理盘块都对应了索引文件的内容,而索引10则称为间接索引,里面只存储地址,如一个物理盘块的地址大小为4个字节,而一个物理盘块的大小为4k,则4k\4字节等于1024,代表着1024个物理盘块的地址,因此该索引内可以存储的文件大小为4k1024;该10号索引称之为一级间接索引;索引11则是二级间接索引,即索引的内容还是索引,再索引的内容才是物理盘块,二级简介索引存储的文件大小即为:4k1024*1024;虽然分级越多存储的内容越多,但相应的,效率也会更低
树型目录结构的路径
1.绝对路径:是从盘符开始的路径
2.相对路径:是从当前路径开始的路径
图注:在该文件树型图中,若文件目录的位置是D1,若要求f2的路径,则绝对路径:/D1/W2/F2;相对路径:W2/F2
文件属性及文件名的组成
1.文件属性:R:只读文件属性 A:存档属性 S:系统文件 H:隐藏文件
2.文件名的组成:驱动器号;路径;主文件名;扩展名
总共有四种管理方法,分别是:空闲区表法;空闲链表法;位示图法;成组链接法
空闲区表法
1.概念:我们可以用一个表来记录哪些地方是空闲的,以便将其管理起来
空闲链表法
1.概念:把空闲区域都链起来,链成一条链表,然后需要空间分配的时候,从这条链表中划出一部分出来即可
位示图法(重点)
常以计算题方式考察
1.概念:将所有存储区域分成无数个物理块,然后以1表示被占用,0表示空闲,将所有空间进行标记
2.例题:
图注:4195号是第4196个位,因此4196/32=131.125;因此物理块的使用情况应该在第132个字中描述。位置也是从0开始算的,所以4195对应第三个位置。
(第几个字:1开始算。第几个位置:0开始算。)
成组链接法
主要是指内存和外设之间的数据传输控制问题,解决方式包括:程序控制方式;程序中断方式;DMA方式;通道;输入输出处理机;前三种要求重点掌握
1.概念:也称程序查询方式,由这种方式是最为低级的,也是CPU介入最多的一种机制,即整个数据的传输控制很多时候都要CPU的介入,此时外设会处于非常被动的位置,即不会主动的去返回信息,如是否完成等信息,而是由CPU主动发出查询指令,进而对信息进行查询
1.概念:大部分与程序控制方式相同,但相较于程序控制方式,由于增加了中断方式,主动性更强,即:如果外设完成了数据的传输等操作,外设会发出中断指令,效率比程序控制方式更高
1.概念:也称直接存储器存取方式,在该方式中,会有专门的DMA控制器,只要是外设和内存之间的数据交换过程,就由这个控制器进行管控了,CPU只需要在开头的时候做一些介入,如初始化等操作
设备管理的五个层次
由上到下依次是:用户进程、与设备无关的系统软件、设备驱动程序、中断处理程序、硬件
SPOOLING技术
1.概念:例如:四个人通过远程手段准备使用一台打印机,而这台打印机在同一段时间内只能让一个用户使用,若一个用户正在使用该打印机,另一名用户试图使用该打印机时就会提示该打印机被占用,,事实上这样做使得打印机的技术非常的低,而面对这个问提,采用了SPOOLING技术的打印机会进行如下操作:给打印机创建一个缓存区,每一个用户在打印时都会进入缓存区,而从缓存区到真正打印则需要挨个排队,即打印机在打印时不再排斥其他用户的打印操作,而是将其缓存起来,在将当前操作完成后立即进行第二个操作,这样做不仅使得用户的操作界面变得更为友好,也极大的提高了打印机的打印效率
即把内核做得更小的操作系统
1.概念:把内核做的更小具有许多好处与优势,如提高了可靠性,稳定性,安全性;因为操作系统作为核心的系统软件,如果操作系统出现故障,就会影响整个系统的运行,将内核做的更小就会降低故障的发生率
2.单体内核和微内核的区别及各自优缺点如下图所示
数据库系统分为了三个级别的层次,即:内模式,概念模式,外模式
1.内模式:(又称物理数据库模式);它是和物理层次数据库直接关联的,负责管理存储数据的方式,即数据应以什么格式存放在物理文件上面,以及如何优化这些存储方式;该模式的关注点在于数据如何存放上面
2.概念模式:即数据库中的”表“,在该模式中,根据业务以及应用,数据被分成了若干张”表“,表之间会有相应的关联
3.外模式:处于用户的应用层次,即数据库中的“视图”,使用户在对数据的控制上有了更多的手段,有了更为灵活的处置方式
1.外模式—概念模式映射:外模式和概念模式具有映射关系,该关系即“视图”和“表”之间的映射关系
2.概念模式—内模式映射:即用户想要改变存储结构,我们只需要调整这种映射关系,而不需要去修改用户的应用程序
图注:数据流图,数据字典以及需求说明书都是需求分析阶段的产物,ER模型则为概念结构设计层次的产物,关系模式即为逻辑结构设计层次的产物
图注:在ER模型中,矩形表示实体(如学生,课程),椭圆表示属性(如学号,姓名,性别,年龄),菱形表示联系(如选课);其中学生和课程之间具有多对多关系
R模型由局部到全局的合成方式
我们在绘制数据库的ER图时,常常从局部开始绘制,然后将许多局部的ER图合成位全局的ER图,而局部的ER图合成全局的ER图时可以有两种方式:逐步集成和一次集成
1.集成的方法:即逐步集成或者一次集成,逐步集成即首先将两个局部图集成在一起,然后与第三个合并在一起…;一次集成即将所有ER图一次集成;集成的优点:方式简单,不易出错;缺点:一次集成容易出错,出错后难以纠错,逐步集成步骤繁锁
注:集成产生的冲突,即局部ER模型在继承时的冲突,如属性冲突,命名冲突(如一名多意),结构冲突(不同抽象级别的冲突)
1.一个实体型转换为一个关系模式
·1:1联系:即一一对应的关系中,一个实体型转换为一个关系模式,再把这种联系放在任意一个其他实体中,因此在此种转换中需要两个实体的参与
·1:n联系:即一对多的关系中,如部门实体与和员工实体之间;仍然是一个实体型转换为一个关系模型,但这种联系只能记录在多这边,如员工
·m:n联系,即多对多的关系中,联系也要转成一个实体(联系转成一个关系模式)
以选择题的形式出现;有如下运算:并;交;差;笛卡尔积;投影;选择;联接
概念:即得到A集合中B所没有的元素,如A-B即得到B在A中所没有的元素
图注:笛卡尔积中若AXB,则将A第一行记录写下,然后将其重复记录三次,然后将B的三行记录与A重写的记录一一对应的写下,然后对A的第二行记录进行同样的重写,以及将B对应的记录重写…
概念:该操作即将所选的“列”记录下来
概念:该操作将所选的“行”记录下来
概念:自然连接的结果以左侧关系为主,右侧关系去除重复列,如R(A,B,C,D,E)和E(C,D,E,F)进行自然连接的结果为:(A,B,R.C,R.D,R.E,F)
如图:
联接符号下面写条件,s1的sno=s2的sno,如果不写的话默认就是按相同的列也就是Sno联接。注意联接的时候,用来联接的那列只会出现一次。
各个运算的表示符号
并(∪)、差(-)、笛卡尔积(×)、投影(σ)、选择(π)
函数依赖:即函数关系,如学号对应姓名,姓名可以重复,但学号是唯一的,且唯一的学号对应相应了可重复的姓名
部分函数依赖(部分依赖):主键是两个属性的组合键,若主键中的一部分可以确定某个属性,则为部分函数依赖
传递函数依赖(传递依赖):即:若A可以确定B,B可以确定C,则A可以确定C(注意:B不能确定A,因为此时二者即为等价)
在非规范化的关系模式中,可能存在的问题包括:数据冗余,更新异常,插入异常,删除异常
价值包括:解决数据冗余,如在记录大学生所属系别时,记录为计算机系就比计算机科学系更为简便,在大量数据的处理中,这一点的改进极为重要
逆规范化:增加冗余等
元组:在关系中,记录称为元组。元组对应表中的一行;表示一个实体。
键
1.概念:属性的集合
超键
1.概念:唯一能够标识元组(实体,即数据库的一行)的键,可以是单个的属性,也可以是属性的组合
候选键
1.概念:是一种特殊的超键,它是在超键的基础上消除多余属性后的键,可以有多个
2.求解候选键步骤:
(1)将关系模式的函数依赖关系用“有向图”的方式表示
(2)找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能遍历图中所有结点,则该属性集即为关系模式的候选键。注:入度即为第一个只有指向箭头,没有被指箭头的属性
(3)若入度为0的属性集不能遍历图中所有结点(或没有入度为0的属性),则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,该集合即为候选键
(例题3:无入度为0,选择有入度又有出度的)
主键
概念:只能有一个,如学号和身份证号都能标识一个学生,而主键则是在两个属性集合之中则其一
外键
概念:外键是其他关系的主键,因为许多时候我们需要对表做关联
1.范式概念:范式符号为NF;范式分为一级范式。二级范式,三级范式…;随着范式等级的提高,规范程度就会越高,数据表的拆分也将越来越细,而数据表拆分过细会造成性能方面的问题,因此,我们通常对范式的等级采取折中的方式,即做到三级范式
2.第一范式的概念:在关系模式R中,当且仅当所有域(列的取值范围,如性别的取值范围就是男和女)列的取值范围只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式
3.第二范式的概念:当且仅当R是1NF,且每一个非主属性完全依赖(即:主键中的所有属性共同作用才能决定该属性)主键(且不存在部分依赖)时,则称R是第二范式
第二范式:消除部分依赖(CREDIT可以只由CNO决定,是部分依赖,移出去)
4.第三范式的概念:当且仅当R是2NF,且E中没有非主属性传递依赖于码时,则称R是第三范式
第三范式:消除传递依赖(DNO->DNAME->LOCATION,把DNO->DNAME->LOCATION额外作为另一个关系,原来的关系只留下SNO,SNAME,DNO)
5.BC范式的概念:设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每一个依赖的决定因素必定包含R的某个候选码
依赖T->J中T不是候选码(候选码是SJ和ST),所以它不是BC范式
6.主属性的概念:
图解:主属性即为构成候选键的属性,在该关系图中,ST和SJ都是候选键,因此,S,J,T三个属性都属于主属性
第二题,关系要加在多的这一边,部门对职工是一对多,所以加在职工表而非部门表。
第三题,商品名称相对于商品号来说冗余了。
范式级别不够时我们采取模式的拆分
模式拆分时要保持的原则
1.保持函数依赖分解(不需要保持冗余的函数依赖,如A->B,B->C,A->C,那么A->C就是冗余依赖)
2.无损分解:有损即不能还原;无损即可以还原
注:无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的模式
1.表格法:(行:所有的属性 列:关系模式)
ab代表有无:a有b无
数字代表行列:a1:第一列,b12 1行2列
第一行有ab,第二行a1a2那么可以把第一行的b12也变成a2,相当于做关联了可以关联起来,
a3a4同理
图注:当有任意一行全为a时,该关系模式的分解即为无损分解
2.计算法(只有一分为二可以用,两个关系模式以上就不能用了)
事物的概念:
1.概念:把多个操作封装起来,将其看成一个整体来进行操作,可以便于并行并发的处理一些事情;具有的特性:
(1) 原子性:即事务的内容操作要么全部做,要么全不做;
(2) 一致性:在事务执行之前,数据保持一致的状态,执行之后数据也是一致的状态
(3) 隔离性:事务之间的执行是独立进行的
(4) 持续性:事务执行之后,其结果造成的影响是持续的,即使数据库崩溃,其对数据库的更新操作也永久有效
并发并行带来的问题
图注:在这两个事务中,T1执行的结果为5,T2执行的结果为2,我们想要得到的是A减去5再减去8的结果,但最终结果为2,因为下一个执行的事务结果会覆盖上一个事务执行的结果
2.不可重复读:
图注:在T1运算中,求A与B的和时,为了提高准确率,程序会再次进行验算,但在第一次运算和第二次运算的间隙,将进行T2运算,T2运算的结果会将A与B的值进行覆盖,这将会产生死锁问题
3.读“脏”数据:
脏数据不是真正的数据,不是我们执行过程中真的产生的数据,只是一个临时值
图注:值70是计算过程产生的数据,属于临时数据,该数据被恢复为了20,使得T2操作将会出错
1.一级封锁协议:事务T在修改数据R之前必须先对其加X(写锁或排他锁)锁,直到事务结束才释放。可防止丢失修改,该锁可以使得除了T以外的所有事务将不能访问R,而事务T则可以阅读或者修改R
2.二级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S(读锁或共享锁)锁,读完后即可释放S锁。可防止丢失修改,还可防止读"脏"数据,该锁的作用是,所有的事务都可以访问R,但包括T在内的所有事务都不能修改R
3.三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改,防止读"脏"数据与防止数据重复读
4.两段锁协议:可串行化(通过加锁解锁两个阶段使并发事务排队进行)的。可能发生死锁
主要有三种约束:实体完整性约束,参照完整性约束,用户自定义完整性约束;约束的作用是提高数据的可靠性
※ 实体完整性约束
概念:即我们在使用数据库时,给数据表定义主键
※ 参照完整性约束
概念:即外键中的约束,如:我们设置了一个员工表,其中含有部门号,若部门号设置了参照完整性约束,则在设置部门号时,其内容必须是主键中的内容,若不是,则会报错
※ 用户自定义完整性约束
概念:即用户可以设置属性的值的要求,如属性“年龄”;用户可以自行设置“不能输入负数”限定
触发器
概念:即:写脚本来约束数据库,用来设置更为复杂的约束
数据备份按备份方式可分为热备份和冷备份;按备份的量可分为:完全备份,差量备份,增量备份;
冷备份(不可备份表)
1.概念:冷备份也称静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来
2.优点:非常快速的备份方法(只需要复制文件);容易归档(简单复制即可);容易恢复到某个时间点上(只需将文件再复制回去);能与归档方法结合,做数据库“最佳状态”的恢复;低度维护,高度安全
3.缺点:单独使用时,只能提供到某一时间点上的恢复;在实施备份的全过程中,数据库必须要作备份而不能做其他工作;若磁盘空间有限,只能复制到磁带等其他外部存储设备上,速度会很慢;不能按表或按用户恢复
热备份(可备份表)
1.概念:热备份也称动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来
2.优点:可在表空间或数据库文件级备份,备份的时间短;备份时数据库仍然可以使用;可达到秒级恢复(恢复到某一时间节点上);可对几乎所有数据库实体做恢复;恢复是快速的
3.缺点:不能出错,否则后果严重;若热备份不成功所得结果不可用于时间点的恢复;因难于维护,所以要特别小心,不允许“以失败告终”
1.完全备份:备份整个数据库的内容
2.差量备份:仅备份上一次完全备份之后变化的数据(可以解决增量备份可能出现的错误) 针对完全备份
3.增量备份:备份上一次备份之后变化的数据
恢复增量备份的时候,必须先恢复完全备份,再把增量备份按顺序还原。如果是差量备份,直接先恢复完全备份,再恢复差量备份。
1.静态海量转储:在系统中无事务运行时进行,每次转储全部数据库
2.静态增量转储:在系统无运行事务时进行,每次只转储上一次转储后更新过的数据
3.动态海量转储:转储期间允许对数据库进行存取或修改,每次转储全部数据库
4.动态增量转储:转储期间允许对数据库进行存取或修改,每次只转储上一次转储后更新的内容
不可能一直在备份,(比如规定一天在十二点备份),那还没备份的那些东东咋办呢?
↓
日志文件
先写日志(记录sql),再写数据文件。
事务日志是针对数据库改变所做的记录,它可以针对数据库的任何操作(如插入,更新),并将记录结果保存在独立的文件中
1.概念:数据仓库是一种特殊的数据库;数据库系统在刚刚建立时运行速度很快,但随着时间的推移,其存储的数据量越来越大,速度也将逐步下降,而为了提高速度,人们会优化存储,通常采用删除较久远历史数据来进行优化,而这些数据仍然具有部分价值,因此我们会专门用一个数据库来对其进行存放,而用来存放这种数据的数据库并不需要插入,添加,修改等操作,更多的操作是查询,因此我们将这种特殊用途的数据库称之为数据仓库
2.数据仓库的特点——面向主题:不同与一般数据库的面向业务,数据仓库的数据是面向主题的
3.数据仓库的特点——集成性:数据仓库会存储诸如月报表,周报表等集成式的数据,而普通数据库并不会这么干
4.数据仓库的特点——相对稳定性:进去的数据将不会进行修改,删除等操作
5.数据仓库的特点——反映历史变化(随着时间变化):隔一段时间会将数据导入进来
图注:首先是从数据源中抽取,清理(使数据格式一致),装载(放到数据仓库中),刷新(定期向仓库中添加数据);数据集市即部门级的数据仓库,因为数据仓库的建立从企业全局的战略上讲具有非常大的风险,因此只建立部分数据库最后再将其整合则会降低风险,而其中部门级的数据库则称为数据集市
7.OLAP服务器的概念:即联机分析处理服务器,专门做分析处理工作的,最表层是数据的前端工具,前端工具最普通的如查询工具,报表工具,分析工具以及比较独特的数据挖掘工具
1.数据挖掘方法分类——关联分析:挖掘出隐藏在数据间的相互关系
2.数据挖掘方法分类——序列模式分析:侧重点是分析数据间的前后关系(因果关系)
3.数据挖掘方法分类——分类分析:为每一个记录赋予一个标记再按标记分类
4.数据挖掘方法分类——聚类分析:分类分析法的逆过程
5.数据挖掘方法:
(1)决策树
(2)神经网络
(3)关联规则挖掘算法
1.反规范化的提出:数据库规范化程度不高会有过多的数据冗余,插入异常,删除异常但规范化程度过高会造成数据表过多,查询时的效率会极大的降低,因此提出了反规范化
2.反规范化的技术:
(1)增加派生性冗余:增加冗余
(2)增加冗余列
(3)重新组表:依据查询效率重新组表
(4)分割表:包括垂直分割和水平分割
图注:中继器:信号会随着距离的增加而逐渐衰减,而中继器则接受一端的信息再将其原封不动的发给另一端,起到延长传输距离的作用,而集线器就是多端口的中继器;
网桥是用于连接两个同类型网络的设备,交换机则是多端口的网桥,用来将多个设备联网起来,而三层交换机则是添加了路由功能的交换机;局域网只能在两层设备内进行交流,第三层的设备则不能进行交流
(中间那三个用TCP和UDP都可以的是文件共享协议)
图注:
(1)IGMP:称之为因特网的控制协议
(2)ARP:是地址解析协议(即IP转MC)
(3)RARP:是反向地址解析协议(MC转IP)
(4)TCP:被称为可靠的协议,因其在通信时会建立连接(通过三次握手来建立连接,即A与B三次互发信息),且在传输信息时有验证机制,以验证数据包是否顺利传输,其上方的FTP,Telnet等协议都是建立在TCP基础上的
(5)UDP:称为不可靠的协议,因其在建立时不会建立连接,因其在传输数据时,会直接将数据发送给另一方
(6)DHCP:用来做动态的IP地址的分配工作
(7)TFTP:是小文件传输协议
(8)SNMP:是简单网络管理协议
(9)DNS:是域名解析协议
(10)位于中间部分的Samba协议、CIFS协议、NFS协议则是可基于两种基本协议
(11)TCP和UDP均提供了端口寻址能力
(12)MIML:是一个互联网标准,扩展了电子邮箱标准,使其能够支持电子邮箱的使用
(13)PGP:是一套用于信息加密、验证的应用程序,可用于加密电子邮件内容
(14)Https:是HTTP的安全版,它是在HTTP的基础上加上了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密
常用的端口号
使用TCP协议常见端口主要有以下几种
1)FTP——文件传输协议——21
2)Telnet——远程登陆协议——23
3)SMTP——简单邮件传送协议——25
4)POP3——接收邮件——110
5)HTTP——超文本传输协议——80
使用UDP协议常见端口主要有以下几种:
1)DNS——域名解析服务——53
2)SNMP——简单网络管理协议——161
3)TFTP——简单文件传输的协议——69
1.概念:负责动态的分配IP地址,客户机在接入网络之后,向DHCP服务器提出IP地址的分配请求,服务器会根据网络IP地址资源情况给客户机分配IP地址
图注:DHCP服务器向客户机分配的IP地址会有租约,租约默认为八天,若客户机的地址一直未改变,DHCP服务器就会将之前的IP地址重新分配给客户机,而DHCP服务器的分配方式则有三种:固定分配,动态分配,自动分配;较特殊的IP地址: 169.254.X.X(windows系统中分配该IP);0.0.0.0(lilux系统中分配该IP),这两个IP地址称之为假地址,即未与DHCP服务器连接上时即会被分配这两个地址
IP地址是唯一标识计算机的方式,而一大串数字对于用户的记忆并不友好,域名的出现就是为了解决这个问题,而DNS服务器则是负责将域名转为IP地址
1.查询域名的基本方式:
(1)递归查询: 如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份, 向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。 因此,递归查询返回的查询结果是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
(2)迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。(一问一答) 然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机
注:
(1)主机向本地域名服务器的查询一般都是采用递归查询。
(2)本地域名服务器向根域名服务器的查询采用迭代查询。(根域名服务器压力大)
2.DNS服务器域名请求流程:
(1)客户机提出域名请求,并将该请求发送给本地的域名服务器
(2)当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地域名服务器就直接把查询的结果返回
(3)如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询的域(根的子域)的主域名服务器的地址
(4)本地服务器再向上一步返回的域名服务器发送请求,然后接收请求的服务器查询自己的缓存,如果没有记录,则返回相关的下级的域名服务器的地址
(5)重复第四步,直到找到正确的记录
(6)本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将返回结果到客户机
3.Hosts:是一个没有扩展名的系统文件,可以用记事本打开,其作用就是将一些常用的网址与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登陆的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,系统将会把网址提交给DNS域名解析服务器进行IP地址的解析
注意:Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则不能访问
诊断DNS故障的命令
nslookup:是一个检测网络中DNS服务器是否能正确实现域名的命令行工具
PING命令:常用于测试连通性,在此过程中可看出是直接ping的目标地址
注:nslookup、ping、tracert都可以加上一个主机域名作为其命令参数来诊断DNS故障,nslookup还可以看到本地DNS服务器地址,rp命令是与arp记录有关,与DNS无关联
常见协议的默认端口
https:443
http:80
sql数据库:8080
开放:统一性、国际化标准
核心层只负责高速数据的交换,且采用冗余设计,即采用几台设备处理这些数据,这样做可以提高安全性,因此对设备的性能有较高要求
汇聚层:层次比较多,寻址啥的都在这儿
IP地址的概念及其发展
图注:在IP地址发展的第一阶段中,IP地址被划分为ABC三个类别:在A类地址中,后三个字节用来表示主机号,第一个字节表示网络号,A类地址包含2^24-2台主机,减掉的2是全零的地址和全1的地址,因为全零代表着一个网络的地址而非主机,全1则代表网络中的广播地址,且其首字节的首个位为0,包含的网络号是从0 ~ 127;B类地址则是主机号与网络号1:1,网络号的范围是128 ~ 191;C类地址则是网络号与主机号为1:3,网络号的范围是192~223;IP地址发展的第二阶段则是将ABC类IP地址各自再划分为数个范围;IP地址发展的第三阶段则是采用了无分类编址,如该表示方式:如172.18.129.0/24;”/“号后面的24表示“前24个位都是网络号
1.子网掩码的概念:将一个IP地址划分为n个子网或者将n个子网合并都需要利用子网掩码,用于区分一个IP地址哪些部分是网络号,哪些部分是主机号,为1则对应网络号,为0则对应主机号
2.子网划分的步骤:首先将十进制划分为二进制数,再将网络号的二进制数全部转换为1,再取主机号的二进制数,取二进制数的数量k与子网划分的个数N满足:2^k>=N;再将取到的主机号的二进制数转换为1,最终将该转换过的IP地址二进制数化为十进制数即为子网掩码。现在的设备,子网不用减去全0和全1。
172.18.129.0/24(代表前24位是网络号)
6~9:局域网内部使用ip,不用在公网。
10:假地址,防止你一直和DHCP发送请求。
无线网可分为无线局域网、无线城域网、无线广域网、无线个人网;覆盖范围:个人<局域<城域<广域;优势:移动性、灵活性、成本低、容易扩充;无线局域网的接入方式有两种:接入点模式、无接入点模式;蓝牙属于无线个人网
网络接入技术分为有线接入和无线接入以及3G/4G接入
PSTN:在十多年前非常流行,其上网和通话功能不能同时进行,目前基本被淘汰,但pos机和传真依旧在使用;
ISDN:解决了上网和通话不能同时进行的问题,速度达到128KB;
ADSL:是ISDN的发展,目前是主流的有线网络接入方式,速度达到了8MBS;ADSL上网拨号有三种方式,即专线方式(静态IP)、pppoA和pppoE。非对称:上下行(上传下载)不对称(速度不同),HFC解决了这个问题。
HFC:目前广泛用于电视机接入网络;主干是光纤。同轴电缆接入。
TD—SCDMA:是国产的技术,只在中国应用,由移动公司主导推广;目前最为广泛应用的技术是WCDMA,而FDD则是其发展版本,
TDD:是LTE—Advanced发展而来,是4G时代智能机的主流接入网络的方式
IPv6是设计用于替代现行版本IP协议(IPv4)的下一代IP协议,提出的背景是IP资源不够用以及IP地址分配的不公平,因为世界上百分之70的IP地址都在美国,但目前应用并不广泛
IPv6相较于IPv4的优势:
保密性:最小授权原则(只给应用维持其基本职能最基本的权限)、防暴露(如在命名时可以将名称设置为乱码)、信息加密(防止信息在传输时被截获后破解)、物理保密
完整性(即保证数据在传输过程中不受损耗):安全协议、校验码、密码校验、数字签名、公证
可用性(只允许合法用户使用这些资源):综合保障(IP过滤、业务流控制、路由控制选择、审计跟踪)
不可抵赖性:数字签名
是信息加密部分最为基础和核心的部分,对称加密技术即加密和解密的时候使用相同的密钥;非对称加密技术即加密与解密时使用不同的密钥,二者配合使用
非对称加密技术(用于简单信息传输,又称公开密钥加密)
图注:替换:即将替换前后的符号对应关系绘制成为一张表,翻译时直接读表进行替换
3DES更难破解;优点:加密速度快、效率高。缺点:加密强度不高、密钥分发困难
对称加密技术:加密强度不高、密钥分发困难(直接QQ传,可能被截取)
↓提出非对称加密
:每个人都有自己的公钥,而公钥是明文公开的,大家都知道的,而私钥则是发送方与接受方各自独有且不能被别人知道的,如甲的公钥加密的信息只能由甲的私钥来解密,甲想要把信息发送给乙则可以用乙的公钥加密后再发送给乙,乙收到后再用自己的私钥来解密;该加密方式一般采用1024位加密,因此极为庞大的信息若采用该加密方式则极难解密
1.概念:在信息中,摘要是信息的特征值,原始信息发生变化则特征值会改变。
2.应用:在信息传输中,若A与B进行信息传输,内容被丙截获,进而篡改后再发送给乙,则会造成信息错误,因此,若A在将信息传输给乙时可以同时传输一个摘要,B收到信息后将摘要翻译出并与之比较,则能够判断信息是否被篡改。
3.算法:信息摘要采用的算法是单向散列函数(单向Hash函数),即将明文转换为摘要。而摘要不能转换为明文,常用的信息摘要算法还有MD5、SHA等,市场上广泛使用的MD5,SHA算法的散列值分别为128和160位,由于SHA通常采用的密钥长度较长,因此安全性高于MD5。
用数字化的一种方式给发送者在摘要上签名,证明这个信息是某人发出来的。(如果明文和摘要都被篡改怎么办?答:利用数字签名技术)
图注:私钥在非对称技术中用来解密,在数字签名中则用来签名,B在收到A的信息后用A的公钥解密即验证,则信息发自A是不可抵赖的。也就是说A发给B,A的私钥加密,A的公钥解密。因为只有A能加密,无法抵赖。(此时A的加密成为数字签名,B的解密称为数字签名的验证)
对摘要进行签名(原文太大)
概念:发送方将原文用对称密钥加密传输,而将对称密钥用接收方公钥加密发送给对方,接收方收到电子信封后,用自己的私钥解密信封,取出对称私钥解密得原文。
因为对称加密用于大数据量,非对称加密用于小数据。所以用对称秘钥加密原文,再用非对称秘钥加密对称秘钥。
1.概念:可以用于电子邮件加密,也可以以用于文件存储加密,采用了杂合算法,包括IDEA、RSA、MD5、ZIP数据压缩算法
2.特性:PGP承认两种不同的证书格式:PGP证书和X.509证书;PGP证书包含PGP版本号、证书持有者的公钥、证书持有者的信息、证书拥有者的数字签名、证书的有效期、密钥首选的对称加密算法。
3.X.509证书:包含证书版本、证书的序列号、签名算法标识、证书有效期、以下数据:证书发行商的名称、证书主体名、主体公钥信息、发布者的数字签名。
用户可以通过使用CA的公钥验证CA的签名的真伪来确定一个网站的合法性
要求邮件以加密方法传输,邮件最大附件内容可达500MB,发送者不可抵赖,若邮件被第三方截获,第三方无法篡改
答:发送方A(公钥:Ea,私钥:Da) 接收方B(公钥:Eb,私钥:Db)
(1)A用随机密钥将明文加密(对称加密技术)
(2)A再用B的公钥Eb将随机密钥加密
(3)A用自己的私钥将明文的摘要签名
(4)A将被签名的摘要与加密后的信息传输给B
(5)B用B的私钥将A的随机密钥解密出来,并使用随机密钥读取正文
(6)B将正文提取摘要并用A的公钥解密A的摘要(若成功解密,则A发送该信息不可抵赖),然后将两个摘要进行对比,若相同,则证明整个过程中信息未被篡改
HTTP+SSL=HTTPS
PPTP/L2TP:隧道协议,加密机制
IPSec:IP包加密
SSL不一定在哪个层,一直从传输层到应用层都有
PGP:邮件or文件加密
从第二层开始实行协议保障安全,IPSec是对IP包进行加密的协议
SSH:是建立在应用层基础上的安全协议,SSH是目前较为可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题
SSL:SSL是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密,目前被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
业务流分析比起窃听:多了长期监听和分析
图注:防火墙技术大体可分为网络级和应用级的防火墙技术,其中网络级的防火墙层次较低,但效率比较高,主要做法是拒绝接受指定IP段的信息,不管其内容;应用级防火墙则是层次较高,效率较低,主要做法是:不论信息的来源而直接将信息开箱进行检查,若有问题则拒绝接收;被屏蔽子网(DMZ)则是一块既不属于内网也不属于外网的隔离区,其目的是为了防止防火墙内部的攻击
应用级多考屏蔽子网。
即元素先以上下三角矩阵方式排列,然后将其存入数组
采用代入法:i=0,j=0 => M[1] 排除BC ; i=1,j=1 => M[3] 排除D
1.数据结构的概念:数据结构即计算机存储、组织数据的方式
2.数据逻辑结构:分为线性结构与非线性结构;非线性结构又可以分为树型结构(不存在环路)和“图”(可能存在环路)。
线性表是线性结构的基本表现
顺序表:(连续的空间下存储数据):开辟一系列的连续的空间,然后采用一维数组的方式来顺次存储信息
链表(不连续的空间下存储数据):每一个存储单元都包含了存储数据的空间及存储指针的空间(因为这一系列的空间不一定是连续的,指针的作用则是作为箭头,在两个空闲的空间之中起到指引作用)
单链表:即只有一种指针在空间之间依次指向的链表,在单链表中用头指针作为栈顶指针时,入栈和出栈都不需要遍历链表
循环链表:把尾元素的指针指向头结点(好处是:若当前结点是在尾元素,想要再次经过之前的某个元素,则可以继续next往下走,,直至遇到那个元素,而无需重新定位)的链表
双向链表:是可以双向的移动的链表(绝大部分结点都必须要有两个指针),即可以通过头节点往尾结点移动,也可以通过尾结点向头节点移动的链表
链表的操作
1.单链表的删除结点:如a1——>a2——>a3;这三个结点,若要删除a2,则是让指针P的next=指针Q的next;P的next表示指针P(指向a1的指针)的下一个指针。
2.单链表的插入结点:如a1——>a2;若要在a1与a2之间插入一个结点a3;则是令S(指向a3的指针)的next=P的next以及P的next=S
3.双向链表的删除结点
4.双向链表的插入结点
空间性能的比较
1.存储密度:顺序存储的存储密度为1(更优),而链式存储的密度则小于1(因为还要存储指针)
2.容量分配:顺序存储需要事先确定,而链式存储则是动态更改(更优)
时间性能的比较
1.查找运算:普遍情况下二者时间复杂度一样,但特殊情况下顺序表更为方便(二分查找)
2.读运算:顺序存储更优
3.插入运算:链表更优
队列与栈的概念
1.队列的概念及特点:结点的存储及读取遵循先进先出的规律,原因是队列可以对两端进行操作
2.栈的概念及特点:结点的存储及读取遵循先进后出的规律,原因是栈只能对一端进行操作
3.特殊队列——循环队列:即一种呈圆形的队列,尾指针会随着结点的依次存储而逐渐后移直至与头指针重合;因此:队满条件=队空条件=“头指针等于尾指针”;解决队满与队空判断条件容易混淆的方法:方法(1)少存一个结点:此时的队满条件为(tail+1)%size=head
3.特殊队列——循环队列:即一种呈圆形的队列,尾指针会随着结点的依次存储而逐渐后移直至与头指针重合;因此:队满条件=队空条件=“头指针等于尾指针”;解决队满与队空判断条件容易混淆的方法:方法为少存一个结点:此时的队满条件为(tail+1)%size=head
队列与栈的练习
图注:对A选项,让四者依次从左边进入,然后依次从左边出去即可实现;对B选项,先让e1和e2依和e4依次先从左边进入,再让e3从右边进入,然后出去的顺序就可以是e4、e2、e1、e3;对C选项,让e1和e2从右边进入,e3和e4从左边进入,然后就可以实现C选项;因此答案为:D
注:栈和队列都属于线性表,不过他们都是操作受到限制的线性表
考察广义表的长度计算、深度计算、head及tail运算
1.概念:广义表是n个表元素组成的有限序列,是线性表的推广,通常用递归的形式进行定义,即表里面可以包含表(嵌套)
2.表示:LS=(a0,a1…,an)。注:其中LS是表名,ai是表元素,它可以是表(称作子表),也可以是数据元素(也称原子).其中n是广义表的长度(最外层包含的元素个数),n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观的说,就是定义中嵌套的次数(原子的深度为0,空表的深度为1)
1.head运算:即“取表头”(表头就是最外层的第一个表元素)
2.tail运算:即取“表尾”(表尾就是除了表头以外的所有其他元素组成的新广义表)
结点:图中的1、2、3…数字圆形都表示结点,
结点的度:指一个结点所有的孩子结点数(如结点1的度就是2,结点3的结点度即为1),
树的度:即一个树当中,结点的度最高的那个结点的度数;
叶子结点:如7、8等没有孩子结点的结点都称之为叶子结点;
分支结点:即有分支的结点
内部结点:非叶子结点又非根节点(最上面的那个结点)
父节点和子节点:这是一个相对概念,如2就是4的父节点,4就是2的子节点
兄弟结点:同属于一个父节点的子节点间称之为兄弟结点
层次:行数即为层次,该图中的层次即为4
1.满二叉树的概念:整个树可以构成一个完成的三角形即为满二叉树
2.完全二叉树的概念:最后一行的叶子结点的父节点必须要有兄弟结点且它要么也是叶子结点要么只有一个结点且该结点和最后一行的叶子结点紧挨着
分为两大类的遍历方法:层次遍历与(前序遍历、中序遍历、后序遍历)
遍历:将结点按照一定顺序打印出来
1.层次遍历:从根节点开始,按照从上到下,从左到右的顺序依次遍历结点
2.前序遍历(根左右):即将根节点的访问放在最前面。然后访问左右子树节点
3.中序遍历(左根右):先访问左子树结点(左子节点以及它的所有子节点构成的新二叉树),再访问根节点,再访问右子树结点
4.后序遍历(左右根):先访问左子树结点,再访问右子树结点,再访问根节点
1.概念:知道二叉树的遍历序列,然后反向推出二叉树的构造
由于树的应用主要是二叉树的应用,所以我们需要将树转化为二叉树
1.树转二叉树的基本原则:某个结点的孩子结点都会成为它的左子树结点,某个结点的兄弟结点都会成为它的右孩子结点
1.概念:(每一个)根节点的左子树结点的键值都小于根节点,根节点的右子树结点都大于根节点的一类二叉树即被称之为查找二叉树(或排序二叉树)
3.插入运算:(1)若该键值已存在,则不再插入
(2)若查找二叉树为空树,则以欲插入的新结点为查找二叉树
(3)将要插入结点键值与插入后父结点键值比较,就能确定新结点的位置是父结点的左子结点,还是右子结点
4.删除结点:(1)若待删除结点是叶子结点,则直接删除
(2)若待删除结点只有一个子结点,则将这个子结点与待删除结点的父结点直接连接
(3)若待删除结点p有两个子结点,则在其左子树上,用中序遍历寻找键值最大的结点s,用结点s的值代替结点p的值,然后删除原结点s,结点s必属于上述(1)或(2)
考察哈夫曼树的构造
这种二叉树是一种工具,用于哈夫曼编码,哈夫曼编码是一种无损压缩的方式,哈夫曼树中每一个父结点的键值都等于其子结点之和(不是子树结点);
1.树的路径长度:即在树中指定一条路径,将路径的段数相加
2.权:在最优二叉树中即某个叶子结点的键值(该键值将代表某个字符出现的频度)
3.带权路径长度:分为结点和二叉树的带权路径长度,结点的带权路径长度等于路径长度乘以权,二叉树的带权路径长度即为所有结点的带权路径长度之和
4.哈夫曼树设计的基本思想:让二叉树的带权路径长度尽可能小(选两个权值最小的当左右孩子节点,然后往上构造)
图注:红线代表推出,绿线代表由来;如图一中二叉树的前序遍历为:ABDEHCFGI;
左指针指向前序,右指针指向后序
即更为平衡、更为饱满的二叉树
1.概念:任意结点的左右子树深度不能相差超过1,即每结点的平衡度(该结点的左右子树结点的深度之差)只能为-1、0或1
图分为有向图和无向图
1.无向图:在该图中,若每一个顶点与其他所有顶点都有一条边相连,则称该图为无向图
2.有向图:若每一个顶点与其他所有顶带都有两条有向边相互联系,则称该图为有向图
3.完全图:任意两个节点之间都双相连接
1.矩阵的大小:若有a个结点,则该矩阵为aXa阶矩阵
2.矩阵的内容:矩阵内只有0和1两种数字,以矩阵的第一个行为例,第一个结点按照与后续每一个结点是否有边来确定矩阵的内容,若有边则对应的该行该列值为1,无边则为0
v1,到v2,距离6,到v4,距离1……
图的遍历分为深度优先遍历和广度优先遍历
1.深度优先遍历:首先一条路径试探到底,然后再回退回来继续深入下一条路径
2.广度优先遍历:即从顶点开始,一行一行遍历
用一个序列来表达哪些事件可以先执行,哪些事件可以后执行
1.AOV网络:我们把用有向边表示活动之间开始的先后关系,这种有向图称之为用顶点表示活动网络,简称AOV网络
普利姆算法
1.最小生成树:如图若有a个顶点,则在图中取a-1条边,用这些顶点和边重新构成一个树,而路径值最短的情况下的树即为最小生成树
2.求最小生成树——普利姆算法(最近点法):任选一个结点A并将其标定为红点集,其余所有结点标定为蓝点集,然后将离红点集A距离最短的结点B连接起来并将其也纳入红点集,然后继续寻找蓝点集和红点集之间的最短距离结点并将其纳入红点集,重复该操作直至所有结点被纳入红点集(将结点纳入红点集时注意不能形成环)
3.求最小生成树——克鲁斯卡尔算法(最近边法):先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直到森林中只有一棵树,也即子图中含有 n-1 条边为止。
1.有穷性:算法必须在执行有穷步之后结束
2.确定性:算法中每一条指令都必须有确切的含义,不能含糊不清
3.算法必须有0个及以上的输入
4.算法必须有1个及以上的输出
5.有效性:算法的每个步骤都能有效执行并能得到确定的结果。例如a=0,b/a就无效
包括时间的复杂度(必考)和空间的复杂度
1.时间复杂度的概念:时间复杂度是指程序运行从开始到结束所需要的时间。
2.时间复杂度的分析:通常分析时间复杂度的方法时从算法中选取一种对于所研究的问题来说是基本运算的操作,以该操作重复执行的次数作为算法的1时间度量。
3.时间复杂度的计算:一般来说,在算法中,原操作重复执行的次数是规模n的某个函数T(n)。由于许多情况下要精确计算T(n)是困难的,因此引入了渐进时间复杂度在数量上估计一个算法的执行时间,其定义如下
如T(n)=3n3+2n2+n,则T(n)=O(n3)
且:O(1)
注:二叉树的复杂度采用O(log2n),循环的复杂度采用O(2n)
4.空间复杂度:是指对一个算法在运行过程中临时占用存储空间大小的度量。一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小
1.概念:将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功;否则,则查找失败
2.顺序查找的平均查找长度:n+1/2
3.顺序查找的空间复杂度:O(n)
4.顺序查找的优缺点:方法简单但效率较低
不是所有序列都能用二分查找法,能使用该方法的前提是该序列是有序排列的(如从大到小或从小到大)
1.概念:首先将n个有序排列数组的元素最小索引值(非零)和最大索引值相加除以二,然后对其进行向下取整,然后查询该取整后的索引值对应的键值并与待查询键值进行比较,若小于键值则对其右边数组继续使用二分法(从小到大排列的数组中)
((1+12)/2向下取整)
2.二分取整的时间复杂度:O(log2n)
3.优势:效率高
在数据进行存储时遵循一定的规则
1.散列表的概念:散列表查找的基本思想是:已知关键值集合U,最大关键字为m。设计一个函数Hash,它以关键字为自变量x,关键字的存储地址为因变量y,将将关键字映射到一个有限的、地址连续的区间T中,这个区间就称为散列表,散列查找中使用到的转换函数称为散列函数
2.散列表中可能遇到的问题:由于关键值和地址是函数关系,所以可能出现两个关键值对应同一个地址的情况
3.解决办法——线性探测法:按出现顺序来定义函数中y值相同的关键值的处理,如b和a冲突,则将b放在a的下一个空单元
4.解决办法——伪随机数法
1.概念:即当插入第i个记录时,r1、r2、…ri-1都已经排好序,因此,将第i个记录ri依次与ri-1…r2、r1进行比较,找到合适的位置插入,它简单明了,但速度很慢
2.直接插入排序的步骤:如这样一个序列:57 68 59 52;
(1)68>57;不做处理
(2)57<59<68;则68应在59之后(仍未做处理)
(3)52<57,插在57之前(此时开始处理):57 59 68 52
属于插入排序的一种,效率高于直接插入排序,善于应对大量数据的排序
1.概念:先取一个小于n的整数a1,然后把文件的全部记录分成a1个组,分组方法为:所有距离为d1的的倍数的记录放在同一个组中。分好组后再在各自的组内进行直接插入排序,排序完成以后解除分组,再取第二个小于a1的整数a2,再对该文件的所有记录进行相同方法的分组并同样进行直接插入排序,再取第三个小于a2的整数a3重复该操作…直至所取的整数an等于1为止
1.概念:首先在所有记录中选出排序码最小的记录,把它与第一个记录交换,然后在其余的记录内选出排序码最小的记录,与第二个记录交换…依次类推,直到所有记录排完为止
1.堆的概念:设有n个元素的序列(K1、K2、…Kn),当且仅当满足下列关系之一时,称之为堆:
(1)ki<=k2i且ki<=k2i+1;(即每一个结点的孩子结点都比自己大) (2)ki>=k2i且ki>=k2i+1;(即每一个结点的孩子结点都比自己小);其中(1)称为小顶堆(2)称之为大顶堆
2.堆排序的基本思想:先将序列建立堆,然后输出堆顶元素,再将剩下的序列建立堆,然后再输出堆顶元素,依次类推,直到所有元素均输出为止,此时元素输出的序列就是一个有序序列
3.初建堆的过程:先写成完全二叉树
对于一个二叉树,要将其调整为大顶堆,应有如下步骤:
(1)取树中的非叶子结点
(2)将非叶子结点各自与其子结点的键值进行比较(从下往上),如果比其中一个小,则与其交换位置,若比两个都小,则与最大的交换位置
4.堆排序的过程:
(1)初建堆
(2)输出堆顶
(3)取一个叶子结点(最后一个节点)为新根结点
(4)再次进行堆的重建
(5)输出堆顶…
2.步骤:一个数组中若有n个元素,对其采用冒泡排序:将第n个元素与第n-1个元素进行比较,若第n个元素较小,则将其与n-1个元素交换位置,再将n-1位置的元素与第n-2位置的元素进行比较…重复该操作
1.概念:快速排序采用的是分治法,其基本思想是将原问题分解成若干个规模更小但结构与原问题相似的子问题。通过递归地解决这些子问题,然后再将这些子问题的解组成原问题的解(通俗的讲:就是把一个数组拆成了俩个数组)
2.步骤:
(1)在数组中任取一个数为基准
(2)定义一个指针,先指向左边第一个数,再指向右边第一个数,再指向左边第二个数,再指向右边第二个数…
(3)将基准与指针指向的数进行比较,若该数大于基准,则和基准交换位置,若小于基准则位置不变
(4)最后将得到一个以基准为分割数的,右边大于基准的数组集合,左边小于基准的数组集合
1.概念:归并也称合并,是将两个或两个以上的有序子表合并成一个新的有序表。若将两个有序表合并成一个有序表,则称为二路合并
2.步骤:合并的过程是:比较A[i]与A[j]的排序码大小,若A[i]的排序码小于等于A[j]的排序码,则将第一个有序表中的元素A[i]复制到R[k]中,并令i和k分别加1;如此循环下去,直到第一个有序表比较和复制完,然后再将另一个有序表的剩余元素复制到R中
1.概念:将关键字拆分为个位、十位、百位…并对其各自位进行排序最后得出结果
2.步骤:对于一个数组R
(1)先收集其个位并对其个位进行排序(个位相同的则按照出现顺序紧挨着)
(2)按照个位排序的顺序将数组元素进行排序
(3)对刚刚排好序的数组收集其十位进行排序
(4)再将数组按照十位排序的顺序将数组元素进行排序
重点:正规式(必考)、表达式(高频)、传值与传址(高频)
编译过程分为解释型和编译型两类,编译方式生成逻辑上与源程序等价的目标程序,解释方式不生成
图注:词法错误:从左到右逐个扫描源程序中的字符,识别其中如关键字(或保留字)、标识符、常数、运算符以及分隔符(标点符号和括号)等
语法错误:主要是分析句子结构的错误,如非法字符,关键字或标识符拼写错误,语法结构错误,if endif不匹配,缺分号等
语义错误:死循环,零循环,其他逻辑错误等
词法分析的输出是“记号流”;也就是语法分析的输入,而语法分析的输出是“语法树”
词法分析的任务是把源程序的字符串转换为单词符号序列
注:
(1)符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统之中
(2)在对源程序进行编译的过程中,常生成与源程序等价的中间代码,以利于进行优化,常见的中间代码包括:后缀式、三地址码和树等
(3)中间代码的生成与具体的机器没有任何关系,但目标代码的生成与具体的机器有着密切的关系
(4)编译过程中,中间代码生成和代码优化并不是每一个编译编译器都必须的
一个形式文法是一个有序四元组G=(V,T,S,P),其中:
V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符
T: 终结符。是语言的组成部分,是最终结果。
S:起始符。是语言的开始符号
P:产生式。用终结符替代非终结符的规则
分为0型、1型、2型、3型
零型又称短语文法
1型又称上下文有关文法
2型又称上下文无关文法
3型又称正规文法
可以用来进行语法规则的推导,通过推导树,我们可以了解到一种语法能够表达的串以及能够构造的句型是什么样子
有限自动机
图注:(S,0)=B表示S通过路径0可以得到B,而S即为初态,f即为终态
考察形式:设定一个值:如10或01或001,问是否能够构建这样一条通路?,实际上该题即问终态与初态相连,求出其路径,再看其路径值是否与与题意相符
正规式
正规式是描述程序语言单词的表达式
注:“ | ”代表“或”;“ * ”代表循环多次,如在或运算中,可以任意选择左式和右式的循环次数,循环次数可以从零到无穷大,该题的答案为A和C
表达式按照树的遍历分为了前缀表达式、中缀表达式、后缀表达式
考察形式:
图注:首先将表达式(括号无需构造)构造为一颗中序表达树,然后再进行下一步运算,该题答案即为D
函数调用的方式分为两种:传值调用和传址调用
概念及特点
1.传值调用:形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变,调用时实际上是把调用的值复制给了一个变量
2.传址调用(也称引用调用):形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值,调用时实际上是将实参的地址的指针赋值给了变量,因此它的改变会引起实参的改变
C++
1.特点:既支持面向对象程序设计的概念,也支持原来在c语言中的过程式程序设计,因此有人称其为混合式的面向对象语言,属于面向对象的编译型语言
2.适用场景:系统程序的设计,包括嵌入式、桌面式和服务器操作系统的设计,大型软件系统的核心模块的设计,以及各类桌面软件的设计
Java
1.特点:java是一个纯面向对象的程序设计语言,属于半解释型语言
2.适用场景:互联网信息系统的开发
Lisp
1.特点:属于函数式程序设计语言
2.适用场景:用于符号演算、微分和积分演算,游戏推演、以及人工智能的其他领域
Prolog
1.特点:以特殊的逻辑推理形式回答用户的查询
2.应用:多用于数据库和专家系统
Python
1.特点:是一种面向对象、解释型计算机程序设计语言
2.适用场景:快速生成程序的原型,然后对其中有特别要求的部分,用更适合的语言改写,比如3D游戏中的图形渲染模块
C#
1.特点:是一种面向对象的、运行于.NEX Framwork之上的高级程序设计语言
2.适用场景:由微软公司发布的,主要用于构件.NET Windows网络框架
汇编语言
汇编语言是面向机器的程序设计语言,使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言反映成机器语言,这种起翻译作用的程序叫做汇编程序,汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序,汇编语言的指令语句必须具有操作码字段,可以没有操作数字段
重点:保护期限、知识产权人确定、侵权判断(重点)
彩色空间:
RGB(彩色显示器)
YUV(电视,兼容)
CMY(CMYK,K是额外加的黑色的原料) 印刷三原色
HSV(HSB) 从艺术欣赏角度划分
空间冗余(集合冗余):比如一张图片大面积白色,就记录哪些区域是白色
时间冗余:一帧和下一帧动作都相同
视觉冗余:人的视觉关注不到
信息熵冗余:信息编码冗余度不一样,通过合理的编码降低冗余
结构冗余:某个结构部件有大量冗余,记录某个地板砖的花纹
知识冗余:可以通过知识得到的数据
有损压缩/无损压缩:
工程图(重点)、各开发方法(只需要知道哪个用于哪个)、概要&详细设计、敏捷开发方法
注:重要程度依次递减
开发模型是软件工程当中指导开发的一种开发思想、开发体系
缺点:需求分析很难把控,因此一般适用于需求明确或者二次开发
注:瀑布模型适用于软件需求很明确的工程
(1)原型和瀑布模型是互补关系,原型是为了解决用户需求分析难以把控即需求不明确而提出的,该模型即:先做出初步模型,然后让用户使用,以便于用户进一步明确自己的需求,是一种抛弃式的模型,因为需求一旦明确就会被抛弃
(2)演化模型即是一种渐进式的原型,即它采取原型的设计模式,但不会将其抛弃,而是在此基础上进一步进行设计
(3)增量模型:是一种递增式设计,将产品一步一步进行设计,每完成一步就交由客户审视,这样也可以使得下一步的设计更为明确
图注:螺旋模型综合了瀑布模型和演化模型的优点,还增加了风险分析,螺旋模型包含四个方面的活动:制定计划、风险分析(是螺旋模型最为显著的特征)、实施工程、客户评估
(注:如果选择需求不明确的模型?有原型就选原型,因为要选最贴近的,而螺旋模型最显著的特征之一是风险分析)
图注:该模型极为强调测试的作用,测试始终贯穿流程的始终,如:需求分析完成后就进行验收测试和系统测试,概要设计完成后就进行集成测试
喷泉模型
1.概述:该模型最大的特点是面向对象
2.特点:基于面向对象的迭代和无间隙
RAD模型
1.概述:该模型最大的特点是能够快速构建业务系统
2.内容:包括:业务建模、数据建模、过程建模、应用生成、测试与交付
图注:该模型将软件开发过程中的各个模块都做成构件,最后再将构件进行组装,基于构件的软件开发,主要强调在构建软件系统时复用已有的软件“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验适应性修改,然后集成到新系统中
优点:极大的提高了软件开发当中的复用性,缩短时间、节省成本、增强可靠性
建立软件架构基础:完成架构
β测试:用户环境测试 α测试:生产环境测试
图注:该方法是一类方法,其特点是快捷,该类方法包括:自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程;他们都遵循一些基本原则和价值观,该类方法适用于做小型项目
1.极限编程(XP)特点:测试先行、结对编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时
2.并列争球法特点:使用迭代的方法,其中把每三十天一次的迭代成为一个冲刺,并按需求的优先级来实现产品,多个自组织和自治小组递增实现产品,并通过简短的日常情况会议进行协调
3.水晶法特点:该方法认为每一个不同的项目都需要一套不同的策略、约定和方法论
4.敏捷开发方法的重要技术
·重构:重构是一种重新组织技术,重新审视需求和设计,重新明确的描述他们的需求和现有的需求,可以简化构件的设计而无需改变其功能或行为
图注:该类方法包括四种:结构化法、原型法、面向对象方法、面向服务方法;其中结构化方法的典型代表是瀑布模型,原型法的典型代表是原型和演化模型,目前应用最广的方法是面向对象方法,而面向服务方法尚处于摸索阶段
软件需求包括三类:业务需求、用户需求、系统需求;系统需求是用户需求的发展,而系统需求包括功能需求、性能需求、设计约束(即开发语言的选用)
即结构化方法中的软件设计问题,包括概要设计和详细设计,其设计原则是:自顶向下、逐步求精,信息隐蔽、模块独立(通过:高内聚、低耦合、复杂度)
图注:功能内聚内聚程度最高,耦合是指模块与模块之间的关系,内容耦合的在耦合中程度最高
结构化设计的原则
1.保持模块的大小适中
2.尽可能减少调用的深度
3.多扇入,少扇出(上层模块调用自己称之为扇入,自己调用其他模块称之为扇出)
4.单入口,单出口
5.模块的作用域应该在模块之内
6.功能应该是可预测的
结构化分析的结果
包括:一套分层的数据流图、一本数据词典、一组小说明(又称加工逻辑说明)、补充说明
概要设计
概要设计包括四个项目
1.设计软件系统总体结构
2.数据结构设计
3.数据库设计
4.编写概要设计文档:文档中应有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划
注:需求分析确定软件要完成的功能及非功能要求,概要设计将需求转化为软件的模块划分,确定模块之间的调用关系;详细设计将模块进行细化,得到详细的数据结构和算法;编码根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试
1.原则:(1)尽早、不断的进行测试;
(2)程序员避免测试自己设计的程序
(3)既要选择有效、合理的数据,也要选择无效、不合理的数据
(4)修改后应进行回归测试
(5)尚未发现的错误数量与该程序已发现错误数成正比
2.类型:软件测试类型分为动态测试(利用到了计算机的测试)和静态测试(纯手工的测试)
(1)动态测试包括:黑盒测试法(即看不到程序内部,只管输入的是什么,输出的是什么)、白盒测试法(从程序结构方面进行测试)、灰盒测试法
(2)静态测试包括:桌前检查、代码走查、代码审查(交叉检查)
图注:测试阶段可分为四个步骤:单元测试、集成测试、确认测试、系统测试;许多项目只需做到确认测试
单元测试:模块性的测试,即对于一个函数,是否达到了其目的,每个模块的功能是否完善
集成测试:即模块间的衔接测试,不衔接的模块就将其组装起来,组装方式有两种:一次性组装(一次全部组装)和增量式组装(组装两个模块时测试一下、组装到三个模块时再测试一下…)
确认测试:即对需求进行确认,测试该程序是否满足需求,测试包括:内部确认测试、Alpha测试(即项目在开发环境进行测试)、Beta测试(即用户在自己的本地计算机自行测试)、验收测试
系统测试:主要是压力、性能、可靠性的测试,而性能测试包括:负载测试、强度测试(即系统资源缺失的情况下系统能否正常运行)、容量测试,压力测试则是测试同时访问人数的极限
计算有向图的环路复杂度公式为:V(G)=m-n+2;说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数(边数),n是G中的节点数(点数)
软件维护的概念
软件维护即需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及在交付后完成的活动,交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等
可维护性
包括稳定性、易分析性(即代码应该容易看懂)、易改变性、易测试性
维护类型
包括:
1.改正性维护:即用户发现bug,然后我就修改bug
2.适应性维护:即解决运行平台版本更迭的问题、软硬件适应外界环境
3.完善性维护:指在运行过程中发现了一些不足,进而对系统的性能等方面进行完善和扩充
4.预防性维护:对将来可能导致的问题进行预防工作
注:系统设计中,人机交互“黄金三原则”包括:置于用户控制之下、减少用户的记忆负担、保持界面的一致性
软件的质量特性及其子特性
1.功能性:适合性、准确性、互操作性、依从性、安全性
2.可靠性:成熟性、容错性、易恢复性
3.易用性:易理解性、易学性、易操作性
4.效率:时间特性、资源特性
5.可维护性:易分析性、易改变性、稳定性、易测试性
6.可移植性:适应性、易安装性、遵循性、易替换性
软件维护工具
包括:
1.版本控制工具
2.文档分析工具
3.开发信息库工具
4.逆向工程工具
5.再工程工具
CMMI是一个软件开发团队的评级标准,该评级标准分为了阶段式和连续式两种分组
阶段式
一级为混乱级,即未通过CMMI认证的团队都是该等级
二级为项目级,即对某个具体的项目有相关开发经验和开发能力,但只限于模仿和套用
三级为定义级,该进别下的团队有了自己的改进能力,能对他人的项目提出不同的看法,隐形->显性,文档
四级:管理量化
五级:持续优化
连续式
CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标
CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特别目标
CL2(已管理的):其共性目标是已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都将被监控、控制、和审评
CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并且用于将来对过程的改进
CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化,使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则
CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效
图注:该章节只需要掌握时间管理的概念及计算以及风险管理的概念;右图为Gantt图,其最为直观的特点是简洁明了,可以很清楚的看到计划的开展,缺点是不能看出计划间的逻辑关系,无法看出哪个任务先做,哪个任务后做
图注:PERT图的缺点是不能清晰地描述各个任务之间的并行关系,每一个原型的左侧是事件执行的顺序号,右上角是最早时间,右下角是最晚时间;事件六的最晚开始时间的计算步骤:先从事件1逐步进行推进,如事件1到事件2最早需要时间加2,事件2到事件5则再需要加2(此时最早时间等于4),而事件1到事件6需要的最早执行时间为3,事件4到事件6的最早时间为4,因此取时间长的为事件6的执行时间(原因是事件六的执行需要事件3和4共同作用),以此类推,事件9所需最早时间为15,再由事件9逆推回来15-4-1=10即为事件6的最晚开始时间
1.风险:指“损失或伤害的可能性”,风险可以分为项目风险和技术风险以及商业风险,特点是关心未来、关心变化、关心选择
2.风险曝光度:计算方法是:风险出现的概率乘以风险可能造成的损失;风险曝光度常用于风险的管控
单一职责原则:设计目的单一的类
开放—封闭原则:对扩展开放,对修改封闭(多扩展,少修改)
李氏替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的
迪米特原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
主要考察UML相关的一系列图的概念
构造块
构造块中包含事务、关系、图
图:可以分为结构图和行为图或者分为静态图和动态图
静态图/结构图包括:
类图:类之间关系的图
对象图:对象之间关系的图
包图:包之间关系的图
组合结构图
构件图:在该类图中存在两种类似棒棒糖和插座的符号,棒棒糖符号表示“供接口”;插座式的符号表示“需接口”,该图是描述系统构件与构件之间、类与接口之间的关系图
部署图:软件的部件应该部署在哪个硬件的节点上面
制品图
动态图/行为图包括:
用例图:该图的归类有分歧,大部分时候归结为动态,小部分时候归结为静态,该图的内容是系统和外部的交互关系
顺序图/序列图:强调了时间顺序的通信图
通信图/协作图
定时图
状态图:表达的是状态的变迁、转移的情况
活动图:与流程图的结构一致
交互概览图
1.架构模式:是软件设计中的高层决策,例如C/S结构就属于架构模式
2.设计模式:
反映了开发软件系统过程中所作的基本设计决策,而设计模式则是主要关注软件系统的设计,与具体的实现语言无关,是在软件开发过程中,经过验证的,用于解决在特定环境下的、重复出现的、特定问题的解决方案
3.惯用法:
是最底层的模式,关注软件系统的设计与实现,实现时通过特定的程序设计语言来描述构件与构建之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如c++语言的惯用法就是:引用–计数
设计模式可以被分成三种:创建型模式、结构型模式、行为型模式
所有设计模式图+解释
创建型模式
结构型模式
行为型模式
是一种在需求分析阶段用到的一种工具,是结构化开发方法中最为主流的开发工具,它的作用是在逻辑上描述系统的功能输入、输出和数据存储等,是系统逻辑模型的重要组成部分
数据流图基本概念及四大组成元素
·数据存储在题干描述时,要么是某某表,要么是某某文件,是存储了信息的文件
·加工即操作的名称,一般是动词+名词的结构
·数据流即信息
·外部实体一般是人员或组织以及系统
1.加工:数据流图中对每一个加工都必须有加工规格说明,该说明必须描述把输入数据流变换为输出数据流的加工规则,而加工规则的说明有三种方式:结构化语句、判断表(决策表)、判断树(决策树)
2.数据流:数据流类型在一般情况下包括变换流型和事务流型,不同类型的数据流有不同的映射方法
数据流图的分层(适应结构化开发)
1.数据字典的概念:数据字典是配合数据流图的使用,对数据流图中的一些数据进行进一步的诠释,其内容包括:数据流、数据项、基本加工、数据存储
该平衡有两个维度,分别是:父图与子图之间的平衡、子图内平衡
1.父图与子图之间的平衡
即已知父图或者子图,将其子图或者父图补充完整
2.子图内平衡
概念:数据流的正常加工必须是既有输入,也有输出,而且每条数据流的起点或终点必须是加工,而只有输入没有输出的数据流称之为黑洞,只有输出没有输入的数据流被称之为奇迹,二者都属于不正常的数据流
q1:系统之外的东西就是实体,中间件位于操作系统之上,应用之下
q2:数据存储:xx表,xx文件
q3:
q4:数据流不平衡问题(黑洞、奇迹)、数据流命名问题(输出流输入流名字一致等)
数据库设计答题技巧:
详细分析实体说明
熟练掌握基本知识
考察:ER模型补充,ER模型转关系模式,关系模式补充
ER模型:数据层面建模 数据流图:功能层面建模
往往把联系整合到某一端去
(4)员工号、部门号(联系需要整合)
包含关系:include关键字 用例会使用到用户登录,必须=>包含
扩展关系:intend关键字 非必须
带泳道的活动图:指示了不同的对象,可以更加明确哪个活动归属于谁
其基本思想是把一个比较大的、复杂的问题,拆分成一些比较小的子问题,如快速排序算法
基本原则
1.该问题的规模缩小到一定的程度就可以容易地解决
2.该问题可以分解为若干个规模较小的相同问题
3.利用该问题分解出的子问题的解可以合并为该问题的解
4.该问题所分解出的各个子问题是相互独立的
分治法——递归技术
递归,就是在运行的过程中调用自己
图注:该算法的目的是求这样一个数列,由零开始的,每一个数都等于前面两个数之和的数列,该算法操作即:将F(3)转换为F(1)和F(2)之和,F(4)转换为F(2)和F(3)之和…这样可以使所有的F(n)都能化为F(1)和F(0)的和
分治法——二分法查找
概念:回溯法是一种选优搜索法,按选优条件向前搜索,以达成目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新进行选择。这种走不通就退回一步再继续往下走的技术就是回溯法
基本原则
1.概念:总是做出在当前来说是最好的选择,而并不从整体上加以考虑,它所做的每一步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有可能解,因此其耗费时间少,一般可以快速得到满意的解,但得不到最优解
图注:有三个物品(每种物品仅存一个),其容量分别为:20,30,40;其价格分别为:140,180,200;而背包可容纳的总量为70,我们希望背包中能容纳尽可能多的物品,其容纳的物品价值最高,而贪心法则会根据单位容量价值最高的原则优先将这个物品进行容纳,如物品1的每10个容量其价值为70,物品2则为60,物品3则为50;因此,若采用贪心法,其将会优先放入物品1到背包中,然后放入物品2,此时空间只剩下20,无法装下物品3,因此,方案到此结束,采用该方法得到了总价320的物品,但这显然不是最优解,我们将物品3和物品1装入背包,得到的物品总价值为340
基本原则
1.概念:在求解问题时,对于每一步决策,列出各种可能的局部解,再根据某种判定条件,舍弃那些肯定不能得到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局是最优解,在动态规划法中,基本上都要用到查表这一步骤