软件设计师知识体系归纳总结

历年考点

上午题

下午题

第一章 计算机组成原理及体系结构

1.数据的表示

1.1进制转换

(1) R进制转十进制

(2) 十进制转R进制

(3) 二进制 八进制 十六进制的转换

2.原码 反码 补码 移码

2.1相互关系

原码->反码->补码->移码

原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

移码:不管正负数,只要将其补码的符号位取反即可。

例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101

2.2表示范围

3.浮点数运算(小阶向大阶看齐,尾数向右移n位)

(1)对阶
首先计算两个数的指数差,把指数小的向指数大的对齐,并将尾数右移指数差的位数,这样两个浮点数就完成了对阶的操作。可以看出,对阶的过程可能使得指数小的浮点数失去一些有效位。
如果两个浮点数阶数相差很大,大于指数小的浮点数的尾数宽度,那么对阶后那个浮点数的尾数就变成了0,即当做机器零处理了。

(2)尾数计算
对阶完成后,两个浮点数尾数就如同定点数,计算过程同定点数计算。

(3)结果格式化
尾数计算后,可能会产生溢出,此时将尾数右移,同时指数加1,如果指数加1后发生了溢出,则表示两个浮点数的运算发生了溢出。
如果尾数计算没有溢出,则尾数不断左移,同时指数减1,直到尾数为格式化数。如果这个过程中,指数小于机器能表达的最小数,则将结果置“机器零”,这种情况称为下溢。

4.校验码

为了实现数据的自动检错与纠错,引入了校验码。而最简单的就是奇偶校验码,它分为奇校验和偶校验两种,均是添加1位校验位,根据信息码中1的个数来决定校验位的取值,使得填入校验位后,使得1的个数为奇数(奇校验)或偶数(偶校验)。

1.海明码(可检错 可纠错)

对于信息位为m的原始数据,需加入k位的校验码,它满足m+k+1<2

要能够纠正n位错误,则所需最小的码距应该是“2n+1

根据海明的研究发现,可以发现“≤码距-1”位的错误

2.CRC校验码(可检错 不可纠错)

要计算CRC校验码,需根据CRC生成多项式进行。例如:原始报文为“11001010101”,其生成多项式为:“x4+x3+x+1”。在计算时,是在原始报文的后面若干个0(等于校验码的位数,而生成多项式的最高幂次就是校验位的位数,即使用该生成多项式产生的校验码为4位)作为被除数,除以生成多项式所对应的二进制数(根据其幂次的值决定,得到11011,因为生成多项式中除了没有x2之外,其他位都有)。然后使用模2除,得到的商就是校验码。

5.计算机的硬件组成

其中运算器和控制器组成中央处理器(CPU)。

运算器负责完成算术、逻辑运算功能,通常由ALU(算术/逻辑单元)、寄存器、多路转换器、数据总线组成。

控制器则负责依次访问程序指令,进行指令译码,并协调其他设备,通常由程序计数器(PC)、指令寄存器、指令译码器、状态/条件寄存器、时序发生器、微操作信号发生器组成。

几个主要部件的功能:

程序计数器:用于存放下一条指令所在单元的地址的地方。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。当遇到转移指令时,后继指令的地址(即PC的内容)必须从指令寄存器中的地址字段取得。在这种情况下,下一条从内存取出的指令将由转移指令来规定,而不像通常一样按顺序来取得。因此程序计数器的结构是具有寄存信息和计数两种功能的结构。

指令寄存器:用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器中,然后再传送至指令寄存器。指令划分为操作码和地址码字段,由二进制数字组成。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。

指令译码器:译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义“翻译”出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。

5.1计算机体系结构分类(Flynn分类法)

6.指令集(复杂指令集和精简指令集)

7.流水线技术(计算指令执行的总时间,平均时间,计算机运行速度)

7.1基本概念

流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。指令流水线是将指令执行分成几个子过程,每一个子过程对应一个工位,我们称为流水级或流水节拍,这个工位在计算机里就是可以重叠工作的功能部件,称为流水部件。

流水线要求所有的流水级部件必须在相同的时间内完成各自的子过程。在流水线中,指令流动一步便是一个机器周期,机器周期的长度必须由最慢的流水级部件处理子过程所需的时间来决定。

计算流水线执行时间

7.2计算流水线执行时间

假定有某种类型的任务,共可分成N个子任务,执行每个子任务需要时间t,则完成该任务所需的时间即为Nt。若以传统的方式,则完成k个任务所需的时间是kNt;而使用流水线技术执行,花费的时间是Nt+(k-1)t。也就是说,除了第一个任务需要完整的时间外,其他都通过并行,节省下了大量的时间,只需一个子任务的单位时间就够了。

另外要注意的是,如果每个子任务所需的时间不同,则其速度取决于其执行顺序中最慢的那个(也就是流水线周期值等于最慢的那个指令周期),要根据实际情况进行调整。

7.3 流水线吞吐率计算

7.4 流水线加速比

7.5 流水线的效率

8.Cache

8.1基本概念

由于在CPU与存储系统间存在着数据传送带宽的限制,因此在其中设置了Cache(高速缓冲存
储器,通常速度比内存快),以提高整体效率。但由于其成本更高,因此Cache的容量要比内存小
得多。Cache是一种相联存储器(即按内容进行存储的存储器)。

8.2原理 命中率 失效率

使用Cache改善系统性能的主要依据是程序的局部性原理。通俗地说,就是一段时间内,执行的语句常集中于某个局部。而Cache正式将访问集中的内容放在速度更快的Cache上,以提高性能。
引入Cache后,CPU在需要数据时,先找Cache,如果没有再找内存。
如果Cache的访问命中率为h(通常1-h就是Cache的失效率),而Cache的访问周期时间是t1,主存储器的访问周期时间是t2,则整个系统的平均访存时间就应该是:t3 = h * t1+(1-h) * t2

8.3Cache映射

CPU发生访存请求时,会先让Cache判断是否包括,如果命中(即包括请求的内容)就直接使用。

直接映射:是一种多对一的映射关系,但一个主存块只能够复制到Cache的一个特定位置上去。Cache的行号i和主存的块号j有函数关系:i=j%m(其中m为Cache总行数)。

相联映射:将主存中一个块的地址与块的内容一起存于Cache的行中。速度更快,但控制复杂。

组相联映射:是前两种方式的折中方案。它将Cache中的块再分成组。然后通过直接映射方式决定组号,再通过相联映射的方式决定Cache中的块号。

8.4Cache淘汰算法

当Cache数据已满,并且出现未命中情况时,就是淘汰一些老的数据,更新一些新的数据。而选择淘汰什么数据的方法就是淘汰算法,常见的方法有三种:随机淘汰、先进先出(FIFO)淘汰(淘汰最早调入Cache的数据)、最近最少使用(LRU)淘汰法。其中平均命中率最高的是LRU算法。

8.5Cache存储器的写操作

在使用Cache时,需要保证其数据与主存一致,因此在写Cache时就需要考虑与主存间的同步问题,通常使用以下三种方法:写直达(写Cache时,同时写主存)、写回(写Cache时不马上写主存,而是等其淘汰时回写)、标记法。

9.主存

9.1主存储器的种类

RAM:随机存储器,可读写,断电后数据无法保存,只能暂存数据。
SRAM:静态随机存储器,在不断电时信息能够一直保持。
DRAM:动态随机存储器,需要定时刷新以维持信息不丢失。
ROM:只读存储器,出厂前用掩膜技术写入,常用于存放BIOS和微程序控制。
PROM:可编程ROM,只能够一次写入,需用特殊电子设备进行写入。
EPROM:可擦除的PROM,用紫外线照射15~20分钟可擦去所有信息,可写入多次。
E2PROM:电可擦除ERPOM,可以写入,但速度慢。
闪速存储器:现在U盘使用的种类,可以快速写入。

记忆时,抓住几个关键英文字母。A,即Access,说明读写都行;O,即Only,说明只读;P,即Programmable,说明可通过特殊电子设备写入;E,即Erasable,说明可擦写;E平方说明是两个E,第二个E是电子。

9.2主存储器的组成

实际的存储器总是由一片或多片存储器配以控制电路构成的(如图1-7所示)。其容量为W×B,W是存储单元(word,即字)的数量,B表示每个word由多少bit(位)组成。如果某一芯片规格为w×b,则组成W×B的存储器需要用(W/w)×(B/b)个芯片。

9.3主存储器的地址编码

主存储器(内存)采用的是随机存取方式,需对每个数据块进行编码,而在主存储器中数据块是以word来标识的,即每个字一个地址,通常采用的是16进制表示。例如,按字节编址,地址从A4000H到CBFFFH,则表示有(CBFFF-A4000)+1个字节,28000H个,也就是163840个字节,等于160KB。

要注意的是,编址的基础可以是字节,也可以是字(字是由1个或多个字节组成的),要算地址位数,首先应计算要编址的字或字节数,然后求2的对数即可得到。

10.可靠性

10.1串联系统

假设一个系统由n个子系统组成,当且仅当所有的子系统都能正常工作时,系统才能正常工作,这种系统称为串联系统,如图所示。可靠性为R = R1 * R2 * … * Rn

10.2并联系统

假如一个系统由n个子系统组成,只要有一个子系统能够正常工作,系统就能正常工作.R = 1-(1-R1) * (1 - R2) * … * (1-Rn).

第二章 操作系统知识

1.进程管理

1.1进程状态转换

1.2PV操作

P操作:也称为down()、wait()操作,使S=S-1,若S<0,进程暂停执行,放入信号量的等待队列。
V操作:也称为up()、signal()操作,使S=S+1,若S≤0,唤醒等待队列中的一个进程。

1.3死锁问题

死锁是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。

四个必要条件:
(1)互斥条件:即一个资源每次只能被一个进程使用,在操作系统中这是真实存在的情况。
(2)保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
(4)环路等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。

对待死锁的策略主要有:

(1)死锁的预防。不让任一产生死锁的必要条件发生就可以预防死锁。
(2)死锁的避免。这种策略不对用户进程的推进顺序加以限制,在进程申请资源时先判断这次分配安全否,只有安全才实施分配,典型的算法是银行家算法。
(3)死锁的检测。这种策略采用资源请求分配图的化简方法来判断是否发生了不安全状态。资源请求分配图是一种有向图,表示进程与资源之间的关系。死锁的检测是在需要的时刻执行的,当发现系统处于不安全状态时,即执行死锁的解除策略。
(4)死锁的解除。解除死锁的基本方法是剥夺。一种方法是把资源从一些进程处剥夺分给别的进程,被剥夺资源的进程则需回退到请求资源处重新等待执行;另一种方法是终止一个进程,剥夺其全部资源,以后再重新运行被终止的进程。

1.4银行家算法

当某个进程提出申请时,必须判断将资源分配给该进程后,会不会引起死锁。若不会,则进行分配;否则就不分配。这样做能保证在任何时刻至少有一个进程可以得到所需的全部资源而执行结束,并将归还资源加入到系统的剩余资源中,这些资源又至少可以满足一个进程的最大需求,于是保证所有进程都能在有限的时间内得到需求的全部资源。

2.存储管理

1.三种虚拟存储技术

2.页面置换算法

由于实际主存是小于虚存的,因此可能会发生内存中已满,但需要使用的页不在主存中这一情况。这时就需要进行置换,即将一些主存中的页淘汰到外存,腾出空间给要使用的页,这个过程也称为Swapping。其工作原理与Cache调入相类似。

最优算法(OPT):淘汰不用的或最远的将来才用的页。这是一种理想算法,不可能实现,只是用来作为衡量算法效率的参照物。

随机算法(RAND):随机淘汰。这种算法开销小,但性能不稳定。

先进先出算法(FIFO):选择最早调入(也是驻留时间最长)的页。

最近最少使用算法(LRU):选择离当前时刻最近的一段时间内使用得最少的页。

3.磁盘调度算法

先来先服务(FCFS):该算法根据进程请求访问磁盘的先后次序进行调度。其优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。

最短寻道时间优先(SSTF):该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。

扫描算法(SCAN):SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。

循环扫描(CSCAN)算法:该算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

3.设备管理

1.数据传输控制方式

程序控制方式:CPU直接利用I/O指令编程,实现数据的I/O。CPU发出I/O命令,命令中包含了外设的地址信息和所要执行的操作,相应的I/O系统执行该命令并设置状态寄存器;CPU不停地(定期地)查询I/O系统以确定该操作是否完成。由程序主动查询外设,完成主机与外设间的数据传送,方法简单,硬件开销小。

中断方式:CPU利用中断方式完成数据的I/O,当I/O系统与外设交换数据时,CPU无需等待也不必去查询I/O的状态,当I/O系统完成了数据传输后则以中断信号通知CPU。CPU然后保存正在执行程序的现场,转入I/O中断服务程序完成与I/O系统的数据交换。然后返回原主程序继续执行。与程序控制方式相比,中断方式因为CPU无需等待而提高了效率。在系统中具有多个中断源的情况下,常用的处理方法有:多中断信号线法、中断软件查询法、雏菊链法、总线仲裁法和中断向量表法。

DMA方式:使用DMA控制器(DMAC)来控制和管理数据传输。DMAC和CPU共享系统总线,并且具有独立访问存储器的能力。在进行DMA时CPU放弃对系统总线的控制而由DMAC控制总线;由DMAC提供存储器地址及必须的读写控制信号,实现外设与存储器之间进行数据交换。
DMAC获取总线方式主要有三种,分别是暂停方式、周期窃取方式和共享方式。

通道:通道是一种通过执行通道程序管理I/O操作的控制器,它使主机与I/O操作之间达到更高的并行程度。在具有通道处理机的系统中,当用户进程请求启动外设时,由操作系统根据I/O要求构造通道程序和通道状态字,将通道程序保存在主存中,并将通道程序的首地址放到通道地址字中,然后执行“启动I/O”指令。按照所采取的传送方式,可将通道分为字节多路通道、选择通道和数组多路通道三种。

输入输出处理机(IOP):也称为外围处理机(PPU),它是一个专用处理机,也可以是一个通用的处理机,具有丰富的指令系统和完善的中断系统。专用于大型、高效的计算机系统处理外围设备的I/O,并利用共享存储器或其他共享手段与主机交换信息。从而使大型、高效的计算机系
统更加高效地工作。与通道相比,IOP具有比较丰富的指令系统,结构接近于一般的处理机,有自己的局部存储器。

2.虚设备与SPOOLING技术

SPOOLING(Simultaneous Peripheral Operation On Line)的意思是外部设备同时联机操作,又称为假脱机输入输出操作,采用一组程序或进程模拟一台I/O处理器。SPOOLING系统的组成,如图所示。

4.文件管理

1.树型目录结构

2.位示图

位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况,如图2-12所示。当其值为“0”时,表示对应的盘块空闲;为“1”时表示已分配。由所有盘块对应的位构成一个集合,称为位示图。位示图也可描述为一个二维数组map:Var map:array[1…m,1…n]of bit;

3.索引文件

索引文件是一种对文件存储不连续分配的方法。为每个文件建立一张索引表,索引表中的每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。

索引文件的优点是既适用于顺序存取,又适用于随机存取。缺点是索引表增加了存储空间的开销。另外,在存取文件时需要访问两次磁盘,一次是访问索引表,另一次是根据索引表提供的物理块号访问文件信息。为了提高效率,一种改进的方法是,在对某个文件进行操作之前,预先把索引表调入内存。这样,文件的存取就能直接从在内存的索引表中确定相应的物理块号,从而只需要访问一次磁盘。

第三章 :程序语言和语言处理程序基础知识

1.汇编、编译、解释系统基础

1.解释与编译

解释型:接受所输入的用程序语言编写的源程序,然后直接解释执行;这类语言中的最典型代表是BASIC。

编译型:它是将用某种程序语言编写的源程序直接翻译成为另一种语言(目标语言程序),而且两者在逻辑上等价。如:C语言。

2.编译过程

3.语言及文法的概念

乔姆斯基分类法

4.词法分析

词法分析是整个分析过程的一个子任务,它把构成源程序的字符串转换成语义上关联的单词符号(包括关键字、标识符、常数、运算符和分界符等)的序列。词法分析可以借助于有限自动机的理论与方法进行有效的处理。

4.1有限自动机

有限自动机是一种自动识别装置,能够准确地识别正规集。它与3型文法对应,可以分为确定的有限自动机和不确定的有限自动机两种。

确定的有限自动机DFA

不确定的有限自动机NFA

NFA图中一个状态结点可能有一条以上的边到达其它状态结点

5.数据类型

要求源程序中的数据必须具有类型的目的主要有以下几个方面:

第一是方便为数据合理分配存储单元;第二是规定了数据类型,就知道了其占用的字节数,从而也就规定了数据对象的取值范围及能够进行的运算;第三是对参与表达式求值的数据对象可以进行合法性检查,比如浮点数就不能进行自加操作。

6.表达式

前缀表达式(波兰式) 中左右

中缀表达式 左中右

后缀表达式(逆波兰式) 左右中

7.程序调用的实现机制

第四章 数据结构

1.数组

2.稀疏矩阵

3.线性表

线性结构是n个结点的有穷序列。通常表示为(a1,a2,…,an),a1称为起始结点,an称为结束结点,i称为ai在线性表中的序号或位置,线性表所含结点的个数称为线性表的长度,长度为0的线性表称为空表。

线性表主要的存储结构有两种:顺序存储结构和链式存储结构。采用顺序存储结构,就称为顺序表(常用数组实现);采用链式存储结构则称为线性链表(即链表)。

顺序表

顺序存储是最简单的存储方式,通常用一个数组,从数组的第一个元素开始,将线性表的结点依次存储在数组中,即线性表的第i个结点存储在数组的第i(0≤i≤n–1)个元素中,用数组元素的顺序存储来体现线性表中结点的先后次序关系。

链表

链表就是采用链式存储实现的线性表。它是动态分配链表结点,通过链接指针,将各个节点按逻辑顺序连接起来。根据其存储结构的不同,可以分为单链表、循环链表和双链表三种.

单链表

循环链表

循环链表与单链表的区别仅仅在于其尾结点的指针域值不是null,而是指向头结点的指针。这样做的好处是,从表中的任一结点出发都能够通过后移操作扫描整个循环链表。

两者的比较

4.队列(先进先出)

队列也是一种特殊的线性表,只允许在一端进行插入,另一端进行删除运算。允许删除运算的那一端称为队首,允许插入运算的一端称为队尾。称队列的结点插入为进队,结点删除为出队。因最先进入队列的结点将最先出队,所以队列具有先进先出的特征。实现队列,可以使用顺序存储(如:数组方式)也可以用链表。

循环队列

循环队列就是将实现队列的数组a[N]的第一个元素a[0]与最后一个元素a[N–1]连接起来。队空的初态为 head=tail=0。在循环队列中,当tail 赶上head时,队列满。反之,当head赶上tail时,队列变为空。这样队空和队满的条件都同为head=tail,这会给程序判别队空或队满带来不便。因此,可采用当队列只剩下一个空闲结点的空间时,就认为队列已满的简单办法,以区别队空和队满。即队空的判别条件是head=tail,队满的判别条件是head=tail+1。

试题

解析

5.栈(先进后出)

栈是另一种特殊的线性表,栈只允许在同一端进行插入和删除运算。允许插入和删除的一端称为栈顶,另一端为栈底。称栈的结点插入为进栈,结点删除为出栈。因为最后进栈的结点必定最先出栈,所以栈具有后进先出的特征。

6.字符串

字符串是由某字符集上的字符所组成的任何有限字符序列。当一个字符串不包含任何字符时,称它为空字符串。一个字符串所包含的有效字符个数称为这个字符串的长度。一个字符串中任一连续的子序列称为该字符串的子串。

字符串通常存于足够大的字符数组中,每个字符串的最后一个有效字符之后有一个字符串结束标志,记为“\0”。通常由系统提供的库函数形成的字符串的末尾会自动添加“\0”,但当由用户的应用程序来形成字符串时,必须由程序自行负责在最后一个有效字符之后添加“\0”,以形成字符串。

7.树

树是一种典型的非线性数据结构,它能够很好地应用于描述分支和层次特性的数据集合。树是由一个或多个结点组成的有限集合T,它满足以下两个条件:
(1)有一个特定的结点,称为根结点;
(2)其余的结点分成m(m≥0)个互不相交的有限集合。其中每个集合又都是一棵树,称T1,T2,…,Tm–1为根结点的子树。

涉及到的概念

在用图形表示的树中,对两个用线段连接的相关联的结点而言,称位于上端的结点是位于下端的结点的父结点或双亲结点,称位于下端的结点是位于上端的结点的(孩)子结点,称同一父结点的多个子结点为兄弟结点,称处于同一层次上、不同父结点的子结点为堂兄弟结点。

定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1。树中各结点的层次的最大值称为树的层次。

7.1树的遍历

前序遍历:“根左右”,即先访问根结点,然后再从左到右按前序遍历各棵子树。

后序遍历:“左右根”,即从左到右遍历根结点的各棵子树,最后访问根结点。

层次遍历:首先访问处于0层的根结点,然后从左到右访问1层上的结点,以此类推,层层向下
访问

7.2二叉树

二叉树是一个有限的结点集合,该集合或者为空,或者由一个根结点及其两棵互不相交的左、右二叉子树所组成。

二叉树的结点中有两棵子二叉树,分别称为左子树和右子树。因为二叉树可以为空,所以二叉树中的结点可能没有子结点,也可能只有一个左子结点(右子结点),也可能同时有左右两个子结点。如图所示是二叉树的4种可能形态(如果把空树计算在内,则共有5种形态)。

总结 已知节点求能构造多少种二叉树

(2n)! / (n! * (n-1)! )

7.3满二叉树

一棵深度为k且有2k-1(k≥1)个结点的二叉树就称为满二叉树。

7.4完全二叉树

如果深度为k、有n个结点的二叉树中各结点能够与深度k的顺序编号的满二叉树从1到n标号的结点相对应即为完全二叉树。

7.5叉树的性质

  1. 在二叉树的第i层上最多有2i-1个结点(i≥1);
  2. 深度为k的二叉树最多有2k-1个结点(k≥1);
  3. 对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1;
  4. 具有n个结点的完全二叉树的深度为,[log2n];
  5. 如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到 +1层,每层从左到右),则对任一结点i(1≤i≤n),有:
    如果i=1,则结点i无父结点,是二叉树的根;如果i>1,则父结点是
    如果2i>n,则结点i为叶子结点,无左子结点;否则,其左子结点是结点2i;
    如果2i+1>n,则结点i无右子结点,否则,其右子结点是结点2i+1。

7.6二叉树的遍历

前序遍历 中序 后序 层次遍历

7.7二叉查找树

二叉查找树,它或者是一棵空树;或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉查找树;
当对这样的二叉树进行中序遍历,就可以得到一个排好序的结点序列,因此,二叉查找树也称为二叉排序树。

7.8平衡二叉树

平衡二叉树又被称为AVL树,它具有以下性质:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。满二叉树就是一种平衡二叉树。

7.9线索二叉树

二叉树在通常情况下是无法直接找到某结点在某种遍历序列中的前驱和后继结点的。而线索二叉树则通过利用二叉树上空的指针域来存放些“线索”信息,

通常其采用以下做法:

若前驱结点不为空,而且其右指针域为空,则将根结点的地址赋给前驱结点的右指针域,并将前驱结点的右线索标志置1;
若根结点的左指针域为空,则把前驱结点的地址赋给根结点的左指针域,同时将根结点的左线索标志置1;
将根结点地址赋给保存前驱结点指针的变量,以便当访问下一个结点时,此根结点成为前驱结点。

7.10 哈夫曼树(最优二叉树)

在权值相同的n个叶子结点构成的所有二叉树中,带权路径长度最小的二叉树称为最优二叉树,也称为哈夫曼树。

8.图

有向图:若一个图中的每条边都是有方向的,则称为有向图。在有向图中,<Vi,Vj>表示一条有向边,Vi是始点(起点),Vj是终点。<Vi,Vj>和<Vj,Vi>表示的是两条不同的边。有向边也称为弧,边的始点称为弧头,终点称为弧尾。

无向图:若一个图中的每条边都是无方向的,则称为无向图。无向图的边是顶点的无序对,通常使用(Vi,Vj)来表示一条边,无向图的边没有起点和终点,(Vi,Vj)和(Vj,Vi)表示的是同一条边。

无向完全图:如果限定任何一条边的两个顶点都不相同,则有n个顶点的无向图至多有n(n-1)/2条边,这样的无向图称为无向完全图。

有向完全图:恰好有n(n-1)条边的有向图称为有向完全图。

连通图:如果图中两个顶点间存在路径,则称它们是连通的;而如果图中任意两个顶点间都是连通的,则称该图为连通图。

8.1图的存储结构

8.2图的遍历

8.3最小生成树

对一个带权的图,在一棵生成树中,各条边的权植之和为这棵生成树的代价,其中代价最小的生成树称为最小生成树。普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)是求连通的带权无向图的最小代价树的常用算法。

第五章 数据库

1.数据库模式及ER模型

1.三级模式与两级映射

数据库系统由外模式、概念模式和内模式三级构成

三级模式

外模式也称为子模式或用户模式,它对应的是我们平时所用到的数据库视图。外模式用来描述用户(包括程序员和最终用户)看到或使用的那部分数据的逻辑结构,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。

概念模式也称为模式或逻辑模式,它对应我们平时所用到的数据表。概念模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,用以描述现实世界中的实体及其性质与联系,定义记录、数据项、数据的完整性约束条件及记录之间的联系。概念模式通常还包含有访问控制、保密定义和完整性检查等方面的内容,以及概念/物理间的映射。一个数据库只有一个概念模式。

内模式对应于物理级数据库,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。内模式不同于物理层,它假设外存是一个无限的线性地址空间。内模式定义的是存储记录的类型、存储域的表示和存储记录的物理顺序,以及索引和存储路径等数据的存储组织。一个数据库只有一个内模式。

在数据库系统的三级模式中,模式是数据库的中心与关键;内模式依赖于模式,独立于外模式和存储设备;外模式面向具体的应用,独立于内模式和存储设备;应用程序依赖于外模式,独立于模式和内模式。

两级映射

外模式与概念模式之间的映射:用于维护数据库的逻辑独立性。也就是说,有了这个映射,使得数据的逻辑结构改变时,应用程序不需要改变,只需要改变映射中的对应关系即可达到目的。

概念模式与内模式之间的映射:用于维护数据库的物理独立性。也就是说当数据的物理存储改变时,应用程序不需要改变。

2.ER模型

实体:客观存在并可相互区别的事物,可以是具体的人、事、物,也可以是抽象的概念或联系。图中的“学生”与“课程”便是实体。

属性:实体所具有的某一特性称为属性,通常一个实体可以由多个属性来描述。图中“学生”实体旁边的“学号”、“姓名”、“班级号”便是属性。

联系:实体内部的联系通常是指组成实体的各属性间的关系。图中“选课”便是联系。

联系

一对一联系(1:1):对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系。例:一个班级只有一个班主任,一个班主任也只在一个班级中任职。

一对多联系(1:n):对于实体集A中的每一个实体,实体集B中有n(n>0)个实体与之联系。反之,实体集B中的每一个实体,实体集A中至多只有一个实体与之联系。例:一个班级中有许多学生,而每个学生只在一个班级中学习。

多对多联系(m:n):对于实体集A中的每一个实体,实体集B中有n(n>0)个实体与之联系。反之,实体集B中的每一个实体,实体集A中有m(m>0)个实体与之联系。一门课程同时有许多学生选修,而一个学生也可以选修多门课程。如图5-2所示,该ER模型便属于m:n型。

ER图之间的冲突

属性冲突。属性冲突包括属性域冲突和属性取值冲突。属性冲突理论上好解决,只要换成相同的属性就可以了,但实际上需要各部门协商,解决起来并不简单。

命名冲突。命名冲突包括同名异义和异名同义。处理命名冲突通常也像处理属性冲突一样,通过讨论和协商等行政手段加以解。

结构冲突。结构冲突包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。对于前者的解决办法是将属性变换为实体或实体变换为属性,使同一对象具有相同的抽象。对于后者的解决办法是使该实体的属性取各局部E-R图中属性的并集,再适当调整属性的次序。

2.关系运算

并。计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合

差。计算两个关系的区别的集合,即给出关系R和S(两者有相同元/列数),R-S的元组包括R中有而S中没有的元组的集合,

交。计算两个关系集合理论上的交集,即给出关系R和S(两者有相同元/列数),R∩S的元组包括R和S相同元组的集合,

笛卡尔积。计算两个关系的笛卡尔乘积,令R为有m元的关系,S为有n元的关系,则R×S是m+n元的元组的集合,其前m个元素来自R的一个元组,而后n个元素来自S的一个元组

投影。从一个关系中抽取指明的属性(列)。

选择。从关系R中抽取出满足给定限制条件的记录,

3.规范化理论

解决存储异常问题

(1)数据冗余:如果某门课程有100个学生选修,那么在R的关系中就要出现100个元组,这门课程的任课教师姓名和地址也随之重复出现100次。

(2)修改异常:由于上述冗余问题,当需要修改这个教师的地址时,就要修改100个元组中的地址值,否则就会出现地址值不一致的现象。

(3)插入异常:如果不知道听课学生名单,这个教师的任课情况和家庭地址就无法进入数据库;否则就要在学生姓名处插入空值。

(4)删除异常:如果某门课程的任课教师要更改,那么原来任课教师的地址将随之丢失。

4.键

超键:在关系模式中,能唯一标识元组的属性集称为超键。

候选键:如果一个属性集能唯一标识元组,且又不含有多余属性。

主键:关系模式中用户正在使用的候选键称为主键。

外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。

5.范式

第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称实体E是第一范式。

第二范式(2NF):当且仅当实体E是第一范式(1NF),且每一个非键属性完全依赖主键(没有不完全依赖)时,则称实体E是第二范式。

第三范式(3NF):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于码时,则称实体E是第三范式。

BCNF:如果关系模型R∈1NF,且R中每一个函数依赖关系中的决定因素都包含码,则R是满足BC范式的关系。

为了准确的界定某关系模式是否为BCNF,我们需要引入另外的一些判别方
法。

6.关系模式分解

6.1无损连接分解

方法一:公式法
优点:速度快。
缺点:只能应用于一分为二的情况,一个关系模式要分解为三个关系模式就用不上了。
判定定理:设ρ={R1,R2}是R的一个分解,F是R上的函数依赖集,那么分解ρ相对于F是无损联接分解的充要条件是(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。要注意的是,这两个条件只要有任意一个条件成立就可以了。

方法二:表格法。
优点:速度慢。
缺点:适用于所有形式的模式分解。

原表

由于A→B,属性A的第1行和第3行相同,可以将第1行b12改为a2;又由于B→D,属性B的第1行和第3行相同,所以需要将属性D第1行b14和第3行b34,改为同一符号,即取行号值最小的b14。

修改后的表

6.2保持函数依赖分解

设数据库模式δ={R1,…,RK}是关系模式R的一个分解,F是R上的函数依赖集,δ中每个模式Ri上的函数依赖集是Fi。如果{F1,F2,…,Fk}与F是等价的(即相互逻辑蕴涵),则称分解δ保持函数依赖。如果分解不能保持函数依赖,则δ的实例上的值就可能有违反函数依赖的现象。

7.SQL语句

单表查询

结果处理

数据更新操作

第六章 计算机网络

1.OSI模型

2.TCP/IP协议族

3.IP地址

3.1 IP地址

3.2 子网掩码

子网掩码是相对特别的IP地址而言的,如果脱离了IP地址就毫无意义。它的出现一般跟着一个特定的IP地址,用来为计算这个IP地址中的网络号部分和主机号部分提供依据,换句话说,就是在写一个IP地址后,再指明哪些是网络号部分,哪些是主机号部分。

3.3 ipv6

现在的IP协议的版本号为4,所以也称为IPv4。它已经有了20年漫长的历史,为计算机网络互联做出了巨大的贡献。然而,互联网以人们不可想像的速度在膨胀,IPv4不论从地址空间上,还是协议的可用性上都无法满足互联网的新要求。这样一个新的IP协议开始孕育而生,这个新版本IP协议,早先被称为IPng,现在一般被叫做IPv6。

IPv6将原来的32位地址扩展成为128位地址,彻底解决了地址缺乏的问题

ipv6所能表示的IP地址为ipv4 的2^96倍

4.层次化网络设计

接入层:网络中直接面向用户连接或访问网络的部分。其目的是允许终端用户连接到网络,因此接入层交换机具有低成本和高端口密度特性。

汇聚层:位于接入层和核心层之间的部分。汇聚层用于完成网络访问策略控制、数据包处理、过滤、寻址,以及其他数据处理的任务。

核心层:网络主干部分。其主要目的在于通过高速转发通信,提供优化、可靠的骨干传输结构,因此核心层交换机应拥有更高的可靠性,性能和吞吐量。

5.域名

xinu.cs.purdue.edu中,xinu是主机名、cs和purdue是子域名(分别代表计算机系、普渡大学)、edu是主域名。

常用域名

5.1 DNS系统

5.2 DHCP(动态主机配置协议)

6.常见的网络命令

ping
ping命令的作用是检查网络是否通畅或者网络连接速度,ping命令只有在安装了TCP/IP协议以后才可以使用。
例如:ping 192.168.0.4 –l 65000 –t
-l 设置数据包大小,用最大值65000字节(原来为32字节)
–t 不停地执行这个命令,除非人为中止

ipconfig
ipconfig命令用于显示计算机中网络适配器的IP地址、子网掩码及默认网关等信息。该命令有多种参数,不同参数可起到不同作用。
例如:
1直接输入ipconfig,然后回车,显示用户主机IP协议的配置信息。
2ipconfig –all ,更详细地显示机器的网络信息。
3ipconfig /release,归还DHCP服务器自动分配给本机的IP地址。
4ipconfig /renew,向DHCP服务器重新申请一个新的IP地址。
5ipconfig/flushdns,清理并重设DNS客户解析器缓存的内容。

tracert
tracert命令是路由跟踪命令,用于跟踪路由信息,使用此命令可以查出数据从本地机器传输到目标主机所经过的所有途径,这对我们了解网络布局和结构很有帮助。
例如:
1输入tracert www.csai.cn,然后回车,显示本机至www.csai.cn所经路径信息。
2输入tracert –d www.csai.cn,然后回车,效果与之前略有差异,–d的意思是不解析对方主机的名称,加快查询速度。

netstat
netstat命令用于查看网络状态。
例如:
1输入netstat –r命令,显示本机的路由状况。
2输入netstat –s命令,显示每个协议的使用状态,其中包括途中的TCP、UDP、IP等协议。
3输入netstat –n命令,以数字、表格形式显示IP端口,本机没有联入互联网,所以显示为空。
4输入netstat –a命令,显示所有主机的端口号。

第七章 软件工程

1.开发模型

1.1瀑布模型

瀑布模型:严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。其优点是:可以使过程比较规范化,有利于评审;缺点在于:过于理想,缺乏灵活性,容易产生需求偏差。所以瀑布模型的应用场合为:需求明确的项目、二次开发项目以及原型法配合使用。

1.2快速原型模型

采用了一种动态定义需求的方法,通过快速地建立一个能够反映用户主要需求的软件原型,让用户在计算机上使用它,了解其概要,再根据反馈的结果进行修改,因此能够充分体现用户的参与和决策。原型化人员对原型的实施很重要,衡量他们的重要标准是能否从用户的模糊描述中快速地获取实际的需求。所以快速原型模型很好的弥补了瀑布模型的缺陷,它适合于需求不够明确的项目。

1.3演化模型

也是一种原型化开发,但与快速原型不同的是,快速原型模型在获得真实需求时,就将抛弃原型。而演化模型则不然,它将从初始的模型中逐渐演化为最终软件产品,是一种“渐进式”原型法。其应用场合也是需求不明确的项目。

1.4增量模型

它采用的是一种“递增式”模型,它将软件产品划分成为一系列的增量构件,分别进行设计、编码、集成和测试。相对于原型法而言,这种模型其实是从系统开发的另一个方面看待问题,原型法关注点是“制作一个原型”,而增量模型的关注点是“系统的功能模块不是一次完成的,而是一块一块开发,以增加的方式进行的”。在现实开发中,我们会发现,一个项目开发过程既用了原型模型也用了增量模型。所以增量模型仍有利于进行需求不明确的项目开发。

1.5螺旋模型

结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。

1.6喷泉模型

主要用于描述面向对象的开发过程,最核心的特点是迭代。所有的开发活动没有明显的边界,允许各种开发活动交叉进行。

1.7 up(统一过程)

既是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,UP使用的是统一建模语言UML。与其他软件过程相比,UP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量。

UP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。

1.8 XP 敏捷开发

2.信息系统开发方法

结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。

2.1结构化分析基础

结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。

2.2结构化设计基础

结构化设计是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程。其主要工作内容是进行概要设计与详细设计

概要设计的主要任务是把需求分析得到的数据流图转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的
设计。显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。在概要设计过程中常常会使用结构图(包括模块、调用、数据)、层次图、HIPO(层次图加输入/处理/输出图)来描述程序的结构。

详细设计是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。经常使用的工具包括程序流程图、盒图、PAD图(问题分析图)、PDL(伪码)。

2.3模块设计原则

信息隐蔽:在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。这样做的好处是:让所有的操作都通过标准的接口进行,这样避免了随意调用模块内部变量产生的混乱与错误。通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性。所以不仅在结构化方法中有信息隐蔽原则,在面向对象方法中,也有相应机制进行信息隐蔽。

模块独立:每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。保持模块的高度独立性,也是在设计时的一个很重要的原则。通常我们用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是高内聚、低耦合。

2.3.1内聚类型

2.3.2耦合类型

3.面向对象概念

1.基本概念

类 对象 继承与泛化 封装 多态 模板 消息通信

2.面向对象开发方法

2.1OOA(面向对象的分析)

OOA即面向对象的分析,它的任务是了解问题域所涉及的对象、对象间的关系和操作,然后构造问题的对象模型。问题域是指一个包含现实世界事物与概念的领域,这些事物和概念与所设计的系统要解决的问题有关。在这个过程中,抽象是最本质和最重要的方法针对不同的问题,可以选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。

2.2OOD(面向对象的设计)

OOD即面向对象的设计,它在分析对象模型的基础上,设计各个对象、对象之间的关系(例如,层次关系、继承关系等)和通信方式(例如,消息模式)等,其主要作用是对OOA的结果作进一步的规范化整理,以便能够被OOP直接接受。

设计原则

单一职责原则:设计目的单一的类;
开放-封闭原则:对扩展开放,对修改封闭;
李氏(Liskov)替换原则:子类可以替换父类;
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程;
接口隔离原则:使用多个专门的接口比使用单一的总接口要好;
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的;
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。

2.3OOP

OOP指系统功能的编码,实现在OOD阶段所规定的各个对象所应完成的任务。它包括每个对象的内部功能的实现,确立对象哪一些处理能力应在哪些类中进行描述,确定并实现系统的界面、输出的形式等。

4.软件测试

1.测试原则

(1)尽早、不断的进行测试;
(2)程序员避免测试自己设计的程序;
(3)既要选择有效、合理的数据,也要选择无效、不合理的数据;
(4)修改后应进行回归测试;
(5)尚未发现的错误数量与该程序已发现错误数成正比。

2.测试分类

软件测试按阶段划分,可分为:单元测试,集成测试,确认测试,系统测试。

2.1单元测试

单元测试,也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的错误,单元测试计划应该在详细设计阶段制定。

单元测试期间着重从以下几个方面对模块进行测试:模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件等。

2.2集成测试

集成测试,也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。例如,数据穿过接口可能丢失;一个模块对另一个模块可能由于疏忽而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有问题等。集成测试主要发现设计阶段产生的错误,集成测试计划应该在概要设计阶段制定。

2.3确认测试

确认测试(Validation Testing)主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。确认测试计划应该在需求分析阶段制定。软件配置复查是确认测试的另一项重要内容。复查的目的是保证软件配置的所有成分都已齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节。

如果一个软件是为某个客户定制的,最后还要由该客户来实施验收测试(acceptancetesting),以便确认其所有需求是否都已得到满足。由于软件系统的复杂性,在实际工作中,验收测试可能会持续到用户实际使用该软件之后的相当长的一段时间。

2.4系统测试

系统测试的对象是完整的、集成的计算机系统,系统测试的目的是在真实系统工作环境下,验证完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。系统测试的技术依据是用户需求或开发合同,除应满足一般测试的准入条件外,在进行系统测试前,还应确认被测系统的所有配置项已通过测试,对需要固化运行的软件还应提供固件。

一般来说,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。功能测试主要采用黑盒测试方法,性能测试主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合客户的需要,主要指标有响应时间、吞吐量、并发用户数和资源利用率等。

3.白盒测试(从程序设计者的角度)

白盒测试可以应用于单元测试、集成测试和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。

白盒测试主要是从覆盖源程序语句的详尽程度来分析。逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、路径覆盖。

3.1McCabe复杂度

McCabe复杂度属于白盒测试技术。McCabe复杂度包括环路复杂度(Cyclomaticcomplexity)、基本复杂度、模块设计复杂度、设计复杂度和集成复杂度等。

计算有向图G的环路复杂度公式为:
V(G)=m-n+2
说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。

4.黑盒测试

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据
而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

常用的黑盒测试法包括:等价类划分、边值分析、错误推测和因果图。

5.软件维护

软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改。在修改时应充分利用源程序,修改后应填写程序改登记表,并在程序变更通知书上写明新旧程序的不同之处。

改正性维护:是指改正在系统开发阶段已发生而系统测试阶尚未发现的错误。

适应性维护:是指使用软件适应信息技术变化和管理需求变化而进行的修改。

完善性维护:这是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。

预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。

6.软件质量特性

6.1IEO/IEC 9126模型

6.2McCall质量模型

6.3软件技术评审

制订计划:确定谁参加,一般需要将人数控制在7人之内;确定准备哪些内容。
总体会议:确定评审的背景、假设及目标。
做准备:评审员预先阅读评审的材料。
评审会议:主持人引导,根据预先准备的检查表进行评审。
返工:评审会议是为了发现问题,问题应在会后进行返工。
跟踪:确定错误已经修改,并通知所有的评审人。

6.4能力成熟度模型集成(CMMI)

第八章 信息安全

1.安全基础信息

1.1对称加密

对称加密是指加密系统的加密密钥和解密密钥相同,或者虽然不同,但从其中的任意一个可以很容易地推导出另一个。
对称加密算法的优点是:使用简单、加密解密快捷高效,其致命弱点是:加密强度不高、密钥分发困难。
常见对称密钥加密算法包括:DES、3DES、RC-5、IDEA。

1.2非对称加密

在非对称加密体系中,密钥是成对出现的,一对密钥包括一个公钥和一个私钥。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
非对称加密算法的优点在于:解决了对称密钥加密强度不高及密钥分发困难的问题,其缺点是:加密速度极慢。所以非对称加密算法通常只对极小的数据量进行加密,如对信息摘要进行加密,或用于加密对称密钥。
常见非对称密钥加密算法:RSA、ECC。

1.3Hash函数和信息摘要

Hash函数又称为杂凑函数、散列函数,它提供了这样的一种计算过程:输入一个长度不固定的字符串,返回一串定长的字符串(又称为Hash值),单向Hash函数用于产生信息摘要。

信息摘要简要地描述了一份较长的信息或文件,它可以被看做是一份长文件的“数字指纹”,信息摘要可以用于创建数字签名。

对于特定的文件而言,信息摘要是唯一的,而且不同的文件必将产生不同的信息摘要。常见的信息摘要算法包括MD5(产生一个128位的输出,输入是以512位的分组进行处理的)和SHA(安全散列算法,也是按512位的分组进行处理,产生一个160位的输出)。它们可以用来保护数据的完整性。

1.4数字签名

数字签名是通过一个单向函数对要传送的报文进行处理,得到用以认证报文来源并核实报文是否发生变化的一个字母数字串。

1.5数字证书(密钥与身份信息的结合体)

数字证书的格式一般使用X.509国际标准。X.509是广泛使用的证书格式之一,X.509用户公钥证书是由可信赖的证书权威机构(CA——证书授权中心)创建的,并且由CA或用户存放在X.500的目录中。任何一个用户只要得到CA中心的公钥,就可以得到该CA中心为该用户签署的公钥。每个用户的证书上都有CA中心用其私钥进行的数字签名,所以只需使用CA中心的公钥便可验证数字证书的真伪。

较通行的数字证书格式还有PGP。

2.网络安全协议

3.网络攻击

3.1DDoS攻击

DDoS攻击通过很多“肉鸡”(被攻击者入侵过或可间接利用的主机)向受害主机发送大量看似合法的网络包,从而造成网络阻塞或服务器资源耗尽而导致拒绝服务,分布式拒绝服务攻击一旦被实施,攻击网络包就会犹如洪水般涌向受害主机,从而把合法用户的网络包淹没,导致合法用户无法正常访问服务器的网络资源。

3.2ARP欺骗攻击

ARP欺骗攻击:修改IP地址和MAC地址的映射关系,使发送给正确主机的数据包发送给另外一台由攻击者控制的主机。

3.3入侵检测

入侵检测技术是为保证计算机系统的安全而设计与配置的一种能够及时发现并报告系统中未授权或异常现象的技术,是一种用于检测计算机网络中违反安全策略行为的技术。违反安全策略的行为有:入侵—非法用户的违规行为;滥用—用户的违规行为。

3.6漏洞扫描

漏洞扫描是指基于漏洞数据库,通过扫描等手段,对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用的漏洞的一种安全检测(渗透攻击)行为。

漏洞扫描是对电脑进行全方位的扫描,检查你当前的系统是否有漏洞,如果有漏洞则需要马上进行修复,否则电脑很容易受到网络的伤害甚至被黑客借助于电脑的漏洞进行远程控制那么后果将不堪设想,所以漏洞扫描对于保护电脑和上网安全是必不可少的,而且需要每星期就进行一次扫描,一但发现有漏洞就要马上修复,有的漏洞系统自身就可以修复,而有些则需要手动修复。

4.计算机病毒

4.1系统引导型病毒

又称开机型病毒,是藏匿和感染硬盘的第一个扇区,即平常我们所说的引导扇区。引导型病毒籍由引导动作而侵入内存。

系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的一般共有的特性是可以感染windows操作系统的 *.exe 和 *.dll 文件,并通过这些文件进行传播。

4.2文件型病毒

文件型病毒通常寄生在可执行档(如 .COM,.EXE等)中。当这些文件被执行时,病毒的程序就跟着被执行。

4.3目录型病毒

这一类型病毒通过装入与病毒相关的文件进入系统,而不改变相关文件,它所改变的只是相关文件的目录项。

4.4蠕虫病毒

蠕虫病毒是一种常见的计算机病毒。它是利用网络进行复制和传播,传染途径是通过网络和电子邮件。最初的蠕虫病毒定义是因为在DOS环境下,病毒发作时会在屏幕上出现一条类似虫子的东西,胡乱吞吃屏幕上的字母并将其改形。蠕虫病毒是自包含的程序(或是一套程序),它能传播自身功能的拷贝或自身(蠕虫病毒)的某些部分到其他的计算机系统中(通常是经过网络连接)。

蠕虫病毒的前缀是:Worm。这种病毒的共有特性是通过网络或者系统漏洞进行传播,很大部分的蠕虫病毒都有向外发送带毒邮件,阻塞网络的特性。比如冲击波(阻塞网络),小邮差(发带毒邮件)等。

4.5宏病毒

一种寄存在Office系统文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。

宏病毒也是脚本病毒的一种,由于它的特殊性,因此在这里单独算成一类。宏病毒的前缀是:Macro,第二前缀是:Word、Excel其中之一。如:Macro.Word.WhiteScreen、美丽莎(Macro.Melissa)。

4.6 后门病毒

后门病毒的前缀是:Backdoor。该类病毒的共有特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。

第九章 知识产权

1.保护期限

2.产权人的确定

3.侵权判定

区。引导型病毒籍由引导动作而侵入内存。

系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的一般共有的特性是可以感染windows操作系统的 *.exe 和 *.dll 文件,并通过这些文件进行传播。

4.2文件型病毒

文件型病毒通常寄生在可执行档(如 .COM,.EXE等)中。当这些文件被执行时,病毒的程序就跟着被执行。

4.3目录型病毒

这一类型病毒通过装入与病毒相关的文件进入系统,而不改变相关文件,它所改变的只是相关文件的目录项。

4.4蠕虫病毒

蠕虫病毒是一种常见的计算机病毒。它是利用网络进行复制和传播,传染途径是通过网络和电子邮件。最初的蠕虫病毒定义是因为在DOS环境下,病毒发作时会在屏幕上出现一条类似虫子的东西,胡乱吞吃屏幕上的字母并将其改形。蠕虫病毒是自包含的程序(或是一套程序),它能传播自身功能的拷贝或自身(蠕虫病毒)的某些部分到其他的计算机系统中(通常是经过网络连接)。

蠕虫病毒的前缀是:Worm。这种病毒的共有特性是通过网络或者系统漏洞进行传播,很大部分的蠕虫病毒都有向外发送带毒邮件,阻塞网络的特性。比如冲击波(阻塞网络),小邮差(发带毒邮件)等。

4.5宏病毒

一种寄存在Office系统文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。

宏病毒也是脚本病毒的一种,由于它的特殊性,因此在这里单独算成一类。宏病毒的前缀是:Macro,第二前缀是:Word、Excel其中之一。如:Macro.Word.WhiteScreen、美丽莎(Macro.Melissa)。

4.6 后门病毒

后门病毒的前缀是:Backdoor。该类病毒的共有特性是通过网络传播,给系统开后门,给用户电脑带来安全隐患。

第九章 知识产权

1.保护期限

[外链图片转存中…(img-yxMIDbI0-1605183417796)]

2.产权人的确定

[外链图片转存中…(img-u6OfnTri-1605183417797)]

[外链图片转存中…(img-qwHlYWn6-1605183417798)]

3.侵权判定

对于软件产品而言,要注意保护只是针对计算机软件和文档,并不包括开发软件所用的思想、处理过程、操作方法或数学概念等。另外,以学习、研究所做的少量复制与修改,为保护合法获得的产品所做的少量复制也不侵权。

软件设计师知识体系归纳总结相关推荐

  1. 软件工程师知识体系架构

    工作8年了,将软件的知识体系架构总结了下 http://download.csdn.net/download/techtitan/9922325

  2. 宝藏软件Obsidian知识体系搭建,免费的多端云同步

    宝藏软件Obsidian知识体系搭建,免费的多端云同步. 为什么推荐Obsidian 人很奇怪,在关注短期目标的时候,会有成功失败之说,但是如果关注体系呢?就不那么会在乎短期收益了. 为什么呢?因为体 ...

  3. 中级软件设计师知识总结

    文章目录 复习进度 分型 一.面向对象 1 面向对象的概念 面向对象设计原则 2 UML 静态图/结构图包括: 动态图/行为图包括: 3 4 设计模式 设计模式概念 设计模式的分类 创建型模式 结构型 ...

  4. 软件设计师-知识的整理

    第1-2章 计算机网络和程序设计基础 原码.反码.补码.移码 浮点数的原码.反码.补码 带小数的原码.反码.补码 校验码:码距.奇偶校验码.海明码.循环冗余校验码(CRC) 指令的控制方式:顺序方式. ...

  5. 个人软件开发知识体系梳理

    分类 内容 编程语言 数据结构 算法 1. 编程语言原理,编译原理,语言范式 2. 编程规范,最佳实践 3. 程序调试工具与技巧 4. 单元测试 5. 数据结构与算法 6. 数据,数据模型,与数据建模 ...

  6. 软考中级之软件设计师复习备考策略分享——2021.11【资料分享】

    前言 由于经历过上一次毫无准备的裸考之后,决定下半年要好好准备一下,突然发现离考试就剩下一个多月的时间了. 相信大家准备考试一般都需要一份明确的复习计划,那么,它来了. 如果觉得有用,不用忘记点赞收藏 ...

  7. c语言综合知识,软件设计师教程综合知识集锦之C语言编程风格

    2016下半年软考软件设计师报名已经陆续开始了,同学们要开始备考了哦,希赛小编为打算参加下半年考试的你们准备了一些软件设计师教程综合知识集锦,希望对大家有所帮助. C语言的编程风格 缩进格式 Tab是 ...

  8. 设计师需要的知识体系

    产品设计师面对复杂.庞大的制造业系统以及多元化的市场,其知识体系要同时具备广度和深度.设计是循序渐进.不断深入的过程,因此我们面对的是交错的学科体系,以及深入的技术探究.当国内工业设计教育界还在热烈地 ...

  9. 软件设计师-1.计算机系统知识

    以上午选择题形式考察 ,主要有6分 1.1计算机系统基础知识 1.1.1 计算机系统硬件基本组成 计算机的基本硬件系统组成: 运算器 控制器 存储器 输入设备 输出设备 它们结构如下: 运算器 + 控 ...

最新文章

  1. 【C++】clipp 一个命令行参数解析器
  2. 【组合数学】生成函数 ( 正整数拆分 | 无序 | 有序 | 允许重复 | 不允许重复 | 无序不重复拆分 | 无序重复拆分 )
  3. 全球及中国磁性分离滑轮行业竞争战略及未来产销需求预测报告2022版
  4. 详细分析图像形态学操作
  5. c语言英文星期几,输入字母,判断星期几,求大神指点
  6. Docker的一些理解(二)
  7. 20-spring学习-Spring MVC基本操作
  8. 怎么计算z=x+y的概率密度_上大《Scripta Mater》基于第一性原理计算,研究镁合金强化相!...
  9. 实验4-1-3 找出最小值 (20 分)
  10. Dapper入门学习
  11. zynq操作系统: Linux驱动开发串口篇
  12. 怎么把sql文件导入MySQL数据库中_《sql基础教程》书里的sql文件如何导入数据库?...
  13. Film Stocks for Mac(PS胶片模拟调色插件)
  14. DSP 2812 的经典资料
  15. 身为码农,为12306说两句公道话:
  16. CODEVS1296
  17. Anaconda从C盘移动到D盘
  18. (电商API文档)更新电子面单号
  19. (JavaScript)贪婪模式和非贪婪模式(懒惰模式)
  20. 简述 Linux DRM 架构

热门文章

  1. java找不到返回值_java.lang.IllegalArgumentException:找不到类型返回值的转换器
  2. 计算机无法识别相机,电脑无法读取相机内存卡怎么办_相机内存卡插入电脑读不出来解决教程...
  3. 猿创征文|我的四个月Java学习成长之路——从基础到框架再到项目
  4. 利用批处理一键卸载Win10Win11系统自带APP
  5. 微信小程序“网络出错,轻触屏幕重新加载” -1202
  6. 去年四大业务全线“上涨”,这家零部件巨头仍净亏近8千万欧元
  7. (C++学习笔记七)运算符重载
  8. C语言进阶剖析 13 接续符和转义符
  9. 2014热门网络词汇汇总
  10. 【python】保存某个文件夹下所有图片名字到一个txt文件里