声明:本笔记并不是根据官方书籍进行编写,而是根据考试分值占比和知识的难易程度进行记录。其中在前面几个章为分值占比较高或者较难的内容。
前言 考点分布情况
上午-计算机软件工程知识
上午场还包括专业英语占比5分
下午-软件设计
第1章:计算机组成原理与体系结构基础知识
一、数据的表示
1.1.1 进制转换
(1)任意进制→十进制
示例如下
二进制表,最好背下来
(2)二进制→八、十六进制(互相转换)
a.二进制→八进制
3位一组,每组转换成对应的八进制符号(从小数点左右两边开始数3位为一组,最后没有三位的用0补为3位)
八进制为:0、1、2、3、4、5、6、7
示例:
b.二进制→十六进制
4位一组,每组转换成对应的十六进制符号
十六进制为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E
示例:
c.八进制→二进制
每位八进制对应的3位二进制
示例:
d.十六进制→二进制
每位十六进制对应的4位二进制
示例:
(3)十进制→任意进制
十进制转R进制使用短除法。(将数据除后取余数的由下往上取数)
示例:将94转换为二进制数
余数:0111101取反得结果为1011110
注意:D表示十进制,H表示十六进制,B表示二进制。
1.1.2 定点数vs浮点数
(1)定点数
简而言之,定点数就是小数点的位置固定的一类数
无符号数:整个机器字长的全部二进制位均为数值位,没有符号位相当于数的绝对值。通常只有无符号整数,而没有符号小数。
(2)原码:用数值部分表示真值的绝对值,符号位“0/1”对应“正/负”。
若机器字长为n+1位,则数值部分(尾数)占n位。真值0有+0和-0两种形式。
(3)反码:若符号位为0,则反码与原码相同。若符号位为1,则数值位全部取反。
(4)补码:
正数的补码=原码
负数的补码=反码末位+1(要考虑进位)
(将负数补码转为原码的方法相同:尾数取反,末位+1)
注意!补码的真值0只有一种表示形式!!
数字为正数时其原码、反码和补码均相同。
(5)移码:补码的基础上将符号位取反。注意:移码只能用于表示整数
示例:
(5)小结
反码转换为补码时:符号x不变,x=0数值位不变,x=1数值位末位加1。
(6)浮点数
浮点数是小数点位置不固定的数,它能表示更大范围的数。浮点数的表示格式如图1.1所示。
在浮点表示法中,阶码通常为带符号的纯整数,尾数为带符号的纯小数。
其中,M称为尾数,R称为基数,E称为阶码。
阶码E,决定浮点数所能表示的数值范围;
尾数M,决定浮点数所能表示的数值精度。
二、校验码
1.2.1 奇偶校验和循环冗余校验码
奇偶校验是一种简单有效的校验方法。其基本思想是:通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。对于奇校验它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况,即当合法编码中奇数位发生了错误,也就是编码中的1变成0或0变成1,则该编码中1的个数的奇偶性就发生了变化,从而可以发现错误。
常用的奇偶校验码有3种:水平奇偶校验码、垂直奇偶校验码和水平垂直奇偶校验码
(了解即可,非重点)
1.2.2 海明码
海明码的构成方法是:在数据为之间插入k个校验码,通过扩大码距来实现检错和纠错。
例题:根据题意,n=16,选项为k值,我们将k值代入公式符合条件的即为正确答案。
正确答案:C
三、计算机体系结构
1.3.1 五大部件
冯.诺依曼计算机的特点:
(1)计算机由五大部件组成
(2)指令和数据以同等地位存于存储器,可按地址寻访
(3)指令和数据用二进制表示
(4)指令由操作码和地址码组成
(5)存储程序
(6)以运算器为中心(输入/输出设备与存储器之间的数据传送通过运算器完成)
小结:
1.3.2 主存储器
主存储器
易混淆:1个字节(Byte)=8bite 1B=1个字节,1b=1个bit
例:MAR=4位→总共有2*2*2*2个存储单元
MDR=16位→每个存储单元可存放16bit,1个字(word)=16bit
1.3.3 CPU
(1)运算器
(2)控制器
1.3.4 Flynn分类法
Single单一的;Multiple倍数,多种多样的
记忆方法:S代表单一的,M代表多。其中,值得注意的是MISD(多指令流单数据流)被证明不可能,实际中是不存在的。
四、指令系统
1.4.1 指令格式
(1)指令(又称机器指令):是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
(2)一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
(3)一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分:
1.4.2 寻址方式
(1)寻址方式(数据寻址)
立即寻址:操作数作为指令的一部分直接写在指令中,这种操作数称为立即数。
寄存器寻址: 指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
直接寻址:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址。
寄存器间接寻址:操作数在存储器中,操作数的有效地址用SI、DI、BX和BP四个寄存器之一来指定。
寄存器相对寻址:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。
基址加变址寻址方式:操作数在存储器中,其有效地址是-一个基址寄存器(BX.BP)和一个变址寄存器(SI、DI)的内容之和。
相对基址加变址寻址:操作数在存储器中,其有效地址是一个基址寄存器(BX.BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。
注意!这些寻址方式从上到下是越来越慢的。
1.4.3 CISC和RISC
1.4.4 指令的流水处理
(1)指令控制方式有顺序方式、重叠方式和流水方式三种。
(2)流水方式:是指并行性或并发性嵌入计算机系统里的一种形式,它把重复的顺序处理过程分解为若干子过程,每个子过程能在专用的独立模块上有效地并发工作。
在概念上,“流水” 可以看成是“重叠”的延伸。差别仅在于“一次重叠”只是把一条指令解释分解为两个子过程,而“流水”则是分解为更多的子过程。
1.4.5 流水线的计算
(1)
例:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是取指2ns,分析2ns,执行1ns。
那么,流水线周期是多少?100条指令全部执行完毕需要的时间是多少?
这道题中,流水线周期是2ns,100条指令全部执行完毕需要的时间是(2+2+1)+(100-1)*2=203
当指令不进行流水线时,100条指令全部执行完毕需要的时间是(2+2+1)*100=500
(2)流水线的吞吐率(Though Put rate,TP):是指在单位时间内流水线所完成的任务数量或输出的结果数量。
计算流水线吞吐率的最基本的公式如下:
例如:TP=100/203
(3)完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
计算流水线加速比的基本公式如下:
例:S=500/203=2.46
五、存储系统
1.5.1 层次结构
有的教材把安装在电脑内部的磁盘称为“辅存”,把U盘、光盘等称为“外存”。也有的教材把磁盘、U盘、光盘等统称为“辅存”或“外存”。
其中CPU的速度最快。高数缓冲存储器主要的作用是平衡CPU和主存的速度。
(1)主存一辅存:实现虚拟存储系统,解决了主存容量不够的问题。
(2)Cache一主存:解决了主存与CPU速度不匹配的问题。
注意!Cache—主存层是由硬件自动完成的(易出选择题)
Cache中存储的内容跟主存是一样的,可以理解为Cache是主存的一个缩影,它存储了主存中的部分内容。当CPU运行时,CPU会先去访问Cache,若找不到相应的数据再去主存中寻找。
1.5.2 存储器的分类
(1)按位置分类,可分为内存和外存。
a.内存(主存):用来存储当前运行所需要的程序和数据、速度快、容量小。(主存还可以理解为运行内存)
b.外存(辅存):用来存储当前不参与运行的数据,容量大但速度慢。
(2)按材料分类,可分为磁存储器、半导体存储器和光存储器。
a.磁存储器:用磁性介质做成,如磁芯、磁泡、磁盘、磁带等。
b.半导体存储器:根据所用元件又可分为双极型和MOS型两类;根据是否需要刷新又可分为静态和动态两类。
c.光存储器:由光学、电学和机械部件等组成,如光盘存储器。
(3)按工作方式,可分为读/写存储器和只读存储器。
a.读/写存储器(RAM)它指既能读取数据也能存入数据的存储器。SRAM静态存储器,DRAM动态随机存储器(周期性刷新来保存数据)
b.只读存储器(ROM)工作过程中仅能读取的存储器。
根据数据的写入方式,又可细分为ROM、PROM、EPROM和EEPROM等类型。
①固定只读存储器(ROM)。这种存储器是在厂家生产时就写好数据的,其内容只能读出,不能改变。一般用于存放系统程序BIOS和用于微程序控制。
②可编程的只读存储器(PROM)。其中的内容可以由用户一次性地写入,写入后不能再修改。
③可擦除可编程的只读存储器(EPROM)。其中的内容既可以读出,也可以由用户写入,写入后还可以修改,紫外线照射擦除信息。
④电擦除可编程的只读存储器(EEPROM)。与EPROM相似,EEPROM中的内容既可以读出,也可以进行改写,电擦除的方法进行数据的改写。
⑤闪速存储器(Flash Memory)。简称闪存,闪存的特性介于EPROM和EEPROM之间,类似于EEPROM,也可使用电信号进行信息的擦除操作。整块闪存可以在数秒内删除,速度远快于EPROM。
1.5.3 高速缓存Cache
CPU速度很快,内存速度很慢,怎么办?
其中红框中的部分就是三个高速缓存Cache
(1)
a.空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的。
Eg:数组元素、顺序执行的指令代码。
b.时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息。
Eg:循环结构里面的指令代码。
c.基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中,以提高访问效率。
d.在计算机的存储系统体系中,Cache是访问速度最快的层次。使用Cache改善系统性能的依据是程序的局部性原理。
(2)要把主存中的地址映射为Cache存储器里面的地址,地址映像方法有三种:
a.直接映像:就是主存的块与Cache中块的对应关系是固定的。这种方式的优点是地址变换很简单,缺点是灵活性差。
b.全相联映像:允许主存的任一块可以调入Cache的任一块的空间。这种方式的优点是主存的块调入Cache的位置不受限制,十分灵活。其缺点是无法从主存块号中直接获得Cache的块号,变换比较复杂,速度比较慢。
c.组相联映像:这种方式是前面两种方式的折中。具体方法是将Cache先分成组再分块。组相联映像就是组间采用直接映像方式,而组内的块采用全相联映像方式。
(3)选择替换算法的目标是使Cache获得最高的命中率。常用的替换算法有以下几种:
a.随机替换(RAND)算法:用随机数发生器产生一个要替换的块号,将该块替换出去。
b.先进先出(FIFO)算法:将最先进入的Cache信息块替换出去。
c.近期最少使用(LRU)算法:将近期最少使用的Cache中的信息块替换出去。这种算法较先进先出算法要好些,但此法也不能保证过去不常用的将来也不常用。
d.优化替换(OPT)算法:先执行一次程序,统计Cache的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换,达到最优目的。
(4)Cache的性能分析:
试题12:A中“扩大”不正确。C中命中率确实跟容量由一定关系,但并不会随容量“线性增大”,故说法正确。
答案:A
试题17:A.Cache与主存之间的地址映射跟操作系统无关,跟计算机硬件自动完成有关。BC.也都应该是硬件。
答案:D
(易考)高速缓存Cache有如下特点:它位于CPU和主存之间,由硬件实现;容量小,一般在几KB到几MB之间;速度一般比主存快5到10倍,由快速半导体存储器制成;其内容是主存内容副本,无法扩大主存容量;对程序员来说是透明的;Cache既可以存放程序又可以存放数据。
答案:A
1.5.4 主存的编址
8*8为“位扩展”;16*4为“字扩展”
MAR:地址存储器
MDR:数据存储器
例题讲解(时间为26:00) 1.3存储系统、总线系统、输入输出和可靠性_哔哩哔哩_bilibili
2的10次方=K;2的20次方=M;2的30次方=G
答案:(1)B(2)A
1.5.5 硬盘(磁盘)
存取时间=寻道时间+等待时间(平均定位时间+转动延迟)
注意:寻道时间是指磁头移动到磁道所需的时间;
等待时间为等待读写的扇区转到磁头下方所用的时间。
六、总线系统
(1)片内总线
片内总线是芯片内部的总线。它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线。
(2)系统总线
系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线。按系统总线传输信息内容的不同,又可分为3类:数据总线、地址总线和控制总线。
(3)通信总线
七、输入输出技术
CPU与外设之间的数据传送方式:
(1)直接程序控制方式
直接程序控制方式是指在完成数据的输入/输出中,整个输入/输出过程是在CPU执行程序的控制下完成的。这种方式还可以分为以下两种:
a.无条件传送方式:无条件地与CPU交换数据。
b.程序查询方式:先通过CPU查询外设状态,准备好之后再与CPU交换数据。
(2)中断方式
(3)直接存储器存取方式
直接存储器存取(Direct Memory Access,DMA)方式是在存储器与I/O设备间直接传送数据,即在内存与I/O设备之间传送一个数据块的过程中,不需要CPU的任何干涉,是一种完全由DMA硬件完成l/O操作的方式。(直接存储器存取方式相当于一个小的CPU)
答案:D
八、可靠性
计算机系统的可靠性是指从它开始运行(t=0)到某个时刻t这段时间内能正常运行的概率,用R(t)表示。
串联部件的可靠度=各部件的可靠度的乘积。
并联部件的可靠度=1-部件失效率的乘积。
答案:B
第2章:数据结构与算法基础
一、基本概念与三要素
数据结构在学什么?
如何用程序代码把现实世界的问题信息化。
如何用计算机高效地处理这些信息从而创造价值。
2.1.1 基本概念
(1)数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
(2)数据元素、数据项:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
(3)数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
2.1.2 三要素
集合:各个元素同属一个集合,别无其他关系。
线性结构:数据元素之间是一对一的关系。除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继。
树形结构:数据元素之间是一对多的关系。
图结构:数据元素之间是多对多的关系。
注意!链式存储元素在物理位置上是可以不相邻,即可以相邻也可以不相邻。
二、算法
2.2.1 五个特性
有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
2.2.2 算法效率的度量
(1)时间复杂度
保留次数最大的n,前面系数可以省略。但n相乘时要都保留。
(2)空间复杂度
无论问题规模怎么变,算法运行所需的内存空间都是固定的常量,算法空间复杂度为S(n)=O(1)(注:S表示“Space”)
算法原地工作——算法所需内存空间为常量
只需关注存储空间大小与问题规模相关的变量。
函数递归调用带来的内存开销:
S(n)=O(n) 空间复杂度=递归调用的深度
三、线性表
2.3.1 定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表示为:
L=(a1,a2,...,ai,ai+1,...,an)
ai是线性表中的“第i个”元素线性表中的位序。
a1是表头元素;an是表尾元素。
除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继。
2.3.2 存储结构
2.3.3 插入删除操作
顺序存储:插入元素前要移动元素以挪出空的存储单元,然后再插入元素。删除元素时同样需要移动元素,以填充被删除元素的存储单元。
链式存储:
1.单链表删除结点:首先引入q指针,指向a2结点(避免丢失a2中的数据)。接着使a1指针域中的指针指向a2的下一个结点
2.单链表插入结点:首先引入指针s,指向要插入的结点x。接着使x指针域中的指针指向a2结点。再将a1指针的下一个结点指向x结点。注意!这里插入结点的步骤顺序不可改变否则会造成数据丢失。
3.双向链表删除结点:引入指针p指向a2。接着将a1中后指针域指针指向a3前指针域。再将a3前指针指向a1后指针。
4.双向链表插入结点:首先引入q指针指向x结点。接着使x后指针指向a2前指针。再a2前指针指向x结点后指针。注意!先连后面,再连前面。
四、栈和队列
2.4.1栈的定义
栈(Stack)是只允许在一端进行插入或删除操作的线性表。
栈可用于括号匹配。
2.4.2 队列的定义
队列是一种先进先出(FIFO)的线性表,它只允许在表的一端插入元素,而在表的另一端删除元素。在队列中,允许插入元素的一端称为队尾(Rear),允许删除元素的一段称为队头(Front)。
栈和队列都是操作受限的。
头指针和尾指针。答案:D(视频时间15:00)
五、串、数组、矩阵和广义表
2.5.1 串
串是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为S='a1a2~~~an',其中S是串名,a1,a2,an是串值。
(1)空串:长度为零的串,空串不包含任何字符。
(2)空格串:由一个或多个空格组成的串。
(3)子串:由串中任意长度的连续字符构成的序列。含有子串的串称为主串。子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。
(4)串相等:指两个串长度相等且对应位置上的字符也相同。
(5)串比较:两个串比较大小时以字符的ASCII码值作为依据。比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串为大;若其中一个串先结束,则以串长较大者为大。
1.对串进行的基本操作有以下几种。
(1)赋值操作StrAssign(s,):将串t的值赋给串s。
(2)连接操作Concat(s,t):将串t接续在串s的尾部,形成一个新串。
(3)求串长StrLength(s):返回串s的长度。
(4)串比较StrCompare(s,t):比较两个串的大小。
(5)求子串SubString(,tart,len):返回串s中从strat开始的、长度为len的字符序列。
2.串的存储结构
(1)串的顺序存储:定长存储结构
(2)串的链式存储:块链
子串的定位操作通常称为串的模式匹配,它是各种串处理系统中最重要的运算之一。子串也称为模式串。
2.5.2 数组
答案:a+(2x5+3)x2=a+26
2.5.3 稀疏矩阵
分别为左上三角矩阵、右上三角矩阵、右下三角矩阵、左下三角矩阵。
代入法。A[0,0]=M[1],带入选项,排除BC。再将A[1,0]=M[2]代入选项AD,得出正确答案为A。
2.5.4 广义表
广义表是n个表元素组成的有限序列,是线性表的推广。
通常用递归的形式进行定义,记作:LS=(a0,a1,...,an)。
注:其中LS是表名,ai是表元素,它可以是表(称做子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数),n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观的说,就是定义中所含括号的重数(原子的深度为0,空表的深度为1)。
基本运算:取表头head(Ls)和取表尾tail(Ls).
若有:LS1=(a,(b,c),(d,e))
head(LS1)=a
tail(LS1)=((b,c),(d,e))
例1,有广义表LS1=(a,(b,c),(d,e)),则其长度为?深度为?
例2,有广义表LS1=(a,(b,c),(d,e)),要将其中的b字母取出,操作就为?
答案:
例1:广义表中含有三个元素,故长度为3,子表最长为2,故深度为2.
例2:head(head(tail(LS1))
六、树和二叉树
2.6.1 树的基本概念
2.6.2 二叉树的基本概念
2.6.3 二叉树的遍历
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
层次遍历
图中前序遍历、中序遍历、后序遍历和层次遍历的结果分别是?
前序遍历结果:12457836
中序遍历结果:42785136
后序遍历结果:48752631
层次遍历结果:12345678
2.6.4 反向构造二叉树
由前序序列为ABHFDECG;中序序列为HBEDFAGC构造二叉树。
2.6.5 树转二叉树
孩子结点——左子树结点
兄弟结点——右孩子结点
2.6.6 查找二叉树(二叉排序树)
特点:左孩子小于根,右孩子大于根。
例如序列:89,48,56,112,51,20
插入结点:
若该键值结点已存在,则不再插入,如:48.
若查找二叉树为空树,则以新节点为查找二叉树。
将要插入结点键值与插入后父结点键值比较,就能确定新节点是父结点,还是右子结点。
删除结点:
若待删除结点是叶子结点,则直接删除。
若待删除结点只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,如:56.
若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除节点s,节点s必属于上述情况之一,如89.
2.6.7 构造霍夫曼树(最优)
树的路径长度、权、带权路径长度、树的带权路径长度(树的代价)
例:假设有一组权值5,29,7,8,14,23,3,11请尝试构造哈夫曼树。
构造霍夫曼树:先选出一组数中最小的两个数,相加得和,在不断的代入剩下的数中选出最小得两个数,一次类推,进行构造。
2.6.8 线索二叉树
2.6.9 平衡二叉树
定义:任意结点的左右子树深度相差不超过1,每结点的平衡度只能为-1,0或1.
例:对数列{1,5,7,9,8,39,73,88}构造排序二叉树,可以构造出多棵形式不同的排序二叉树。
平衡二叉树只需要掌握怎么判断是平衡二叉树即可。每个结点得平衡度=左深度-右深度。
七、图
2.7.1 基本概念
有向图、无向图
完全图:在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图。在有向图中,若每对顶点之间都有两条有向边相互连接,则称该图为完全图。
度、入度与出度
2.7.2 存储结构(邻接矩阵)
2.7.3 存储结构(邻接表)
首先把每个顶点的邻接顶点用链表示出来,然后用一个一维数组来顺序存储上面每个链表的头指针。
邻接表中第一个数字为结点序号,第二个为路径长度。
2.7.4 图的遍历
2.7.5 拓扑排序
我们把用有向边表示活动之间开始的先后关系。这种有向图称为用顶点表示活动网络,简称AOV网络。
上图的拓扑序列有:02143567,01243657,02143657,01243567。
拓扑序列有多种。
2.7.6 最小生成树(普利姆算法)
普利姆算法:从一个顶点出发,寻找最短的边作为连接边,连接到新的顶点后依然从所有顶点中找出最小边,最终结果不能有环路即可。
2.7.7 最小生成树(克鲁斯卡尔算法)
克鲁斯卡尔算法:直接从所有边中选出最小的边进行连接,最终避免出现环路,并且把所有顶点连接即可。
八、查找
2.8.1 基本概念
查找——在数据集合中寻找满足某种条件的数据元素的过程称为查找
查找表(查找结构)——用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成。
关键字——数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。
查找长度——在查找运算中,需要对比关键字的次数称为查找长度。
平均查找长度(ASL,Average Search Length)——所有查找过程中进行关键字的比较次数的平均值。
2.8.2 顺序查找
顺序查找,又叫“线性查找”,通常用于线性表。
算法思想:从头到 jio 挨个找(或者反过来也OK)
2.8.3 折半查找
折半查找,又称“二分查找”,仅适用于有序的顺序表。
mid=(low+high)/2,最终mid要进行取整操作。注意!取整并不是四舍五入。
在改变low和high的值的时候,要注意其值不应该与mid值相同,应为mid+1或mid-1。
2.8.4 分块查找
特点:块内无序、块间有序。
第一步在索引表中确定待查记录所在的块,第二步在块内顺序查找。
2.8.5 哈希表(散列表)
散列表(Hash Table)又称哈希表。是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关。
例:有一堆数据元素,关键字分别为{19,14,23,1,68,20,84,27,55,11,10,79}散列函数 H(key)=key%13
九、排序
2.9.1 基本概念
1、排序:就是重新排列表中的元素,使表中的元素满足按关键字有序的过程。
稳定与不稳定排序 内部排序与外部排序
2、排序方法分类
插入类排序:直接插入排序 希尔排序
交换类排序:冒泡排序 快速排序
选择类排序:简单选择排序 堆排序.
归并排序:基数排序
2.9.2 直接插入排序
算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中直到全部记录插入完成。
2.9.3 希尔排序
算法思想:先将待排序表分割成若干形如 L[i, i+ d,i+ 2d…i+ kd]的“特殊”子表,对各个子表分别进行直接插入排序。缩小增量d,重复上述过程,直到d=1为止。
2.9.4 冒泡排序
算法思想:从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A])则交换它们,直到序 列比较完。称这样过程为“一趟”冒泡排序。
2.9.5 快速排序
算法思想:在待排序表L[1...n]中任取一个元素pivot作为枢轴Y或基准,通常取首元素),通过一趟排序将待排序表划 分为独立的两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中的所有元素小于pivot,L[k+1...n]中的所有元素大于等于 pivot,则pivot放在了其最终位置L(k)上,这个过程称为一次“划分”。然后分别递归地对两个子表重复上述过程,直到每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。
2.9.6 简单选择排序
算法思想:每一趟在待排序元素中选取关键字最小的元素加入有序子序列。
2.9.7 堆排序
设有n个元素的序列{K1,K2,,... Kn},当且仅当满足下述关系之时,称之为堆。
(1)Ki≤ K2i;且Ki≤ K2i+1
(2)Ki≥ K2i;且Ki≥ K2i+1
其中(1)称为小顶堆,(2)称为大顶堆
假设有数组A={1,3,4,5,7,2,6,8,0},初建大顶堆过程如下:
从最下面的叶子节点开始,分别与其根节点进行比较选取最大的叶子结点与根节点进行交换。
2.9.8 归并排序
算法思想:把两个或多个已经有序的序列合并成一个。
2.9.9 基数排序
基数排序是一种借助多关键字排序思想对单逻辑关键字进行排序的方法。
基数的选择和关键字的分解是根据关键字的类型来决定的。
例如:关键字是十进制数,则按个位、十位来分解。
2.9.10 评价指标
易出选择题
第3章:算法分析与设计
一、分治法
对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
要求:
该问题的规模缩小到一定的程度就可以容易地解决。
该问题可以分解为若干个规模较小的相同问题。
利用该问题分解出的子问题的解可以合并为该问题的解。
该问题所分解出的各个子问题是相互独立的。
一般来说,分治算法在每一层递归上都有3个步骤。
(1)分解。将原问题分解成一系列子问题。
(2)求解。递归地求解各子问题。若子问题足够小,则直接求解。
(3)合并。将子问题的解合并成原问题的解。
递归:就是在运行的过程中调用自己。
函数递归调用带来的内存开销:
S(n)= O(n)
空间复杂度 = 递归调用的深度
二、回溯法
3.2.1 深度优先搜索法
回溯法是种选优搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法。
三、贪心法
3.3.1 局部最优
总是做出在当前来说是最好的选择,而并不从整体上加以考虑,它所做的每步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有可能解,因此其耗费时间少,一般可以快速得到满意的解,但得不到最优解。也常用于解决最优化的问题。
用贪心法求解的问题一般具有两个重要的性质。
(1)最优子结构。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。问题的最优子结构是该问题可以采用动态规划法或者贪心法求解的关键性质。
(2)贪心选择性质。指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。这是贪心法和动态规划法的主要区别。
四、动态规划法
3.4.1 子问题不独立(区别分治法)
基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的。
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解,每个解都对应于一个值,我们希望找到具有最优值的那个解。当然,最优解可能会有多个,动态规划算法能找出其中的一个最优解。
3.4.2 整体最优(区别贪心法)
对一个给定的问题,若其具有以下两个性质,则可以考虑用动态规划法来求解。
(1)最优子结构。如果一个问题的最优解中包含了其子问题的最优解,就说该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划法可能会适用,但是此时贪心策略可能也是适用的。
(2)重叠子问题。指用来解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。即当一个递归算法不断地调用同一个问题时,就说该问题包含重叠子问题。此时若用分治法递归求解,则每次遇到子问题都会视为新问题,会极大地降低算法的效率,而动态规划法总是充分利用重叠子问题,对每个子问题仅计算一次,把解保存在一个在需要时就可以查看的表中,而每次查表的时间为常数。
答案:AD。视频时间:24:00。
答案:CA。0-1背包问题是将物品整个装进背包中或者这个不装。视频时间:34:00。
答案:DB。
第4章:操作系统基本原理
一、基本概念
4.1.1 概念
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
直观的例子:打开Windows操作系统的“任务管理器”(快捷键:Ctrl+Alt+Del )
4.1.2 功能和目标
(1)作为系统资源的管理者
(2)向上层提供方便易用的服务
(3)作为最接近硬件的层次
4.1.3 特征
并发、共享、虚拟、异步
操作系统的基本特征:并发和共享。
并行与并发不同。并行是两个或多个事件在同一时刻进行。并发并不是同一时刻。
4.1.4 发展与分类
二、进程管理
4.2.1 状态转换图
(1)进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB。
(2)当进程创建完成后,便进入“就绪态”处于就绪态的进程己经具备运行条件,但由于没有空闲CPU,就暂时不能运行。
(3)如果一个进程此时在CPU上运行,那么这个进程处于“运行态”,CPU会执行该进程对应的程序(执行指令序列)。
(4)在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”,当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行。
(5)一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入“终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。
4.2.2 进程同步机制
进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
例子:进程通道——管道通道
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。
4.2.3 进程互斥机制
进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,又比如打印机、摄像头这样的I/O设备)
我们把一个时间段内只允件一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)者属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
对临界资源的互斥访问,可以在逻辑上分为如下四个部分:
注意:临界区是进程中访问临界资源的代码段。进入区和退出区是负责实现互斥的代码段。临界区也可称为“临界段”。
如果一个进程暂时不能进入临界区,那么该进程是否应该一直咱着处理机?该进程有没有可能一直进不了临界区?
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
(1)空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
(2)忙则等待。当己有进程进入临界区时,其他试图进入临界区的进程必须等待;
(3)有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
(4)让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
4.2.4 信号量机制
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。
原语:是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。
一对原语: wait(S)原语和signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal,括号里的信号量S其实就是函数调用时传入的一个参数。
wait、signal原语常简称为P、V操作(来自荷兰语proberen和verhogen)。因此,做题的时候常把wait(S)、signal(S)两个操作分别写为P(S)、V(S)。
信号量机制
(1)实现进程互斥(2)实现进程同步(3)实现进程的前驱关系
不要一头钻到代码里,要注意理解信号量背后的含义:一个信号量对应一种资源信号量的值=这种资源的剩余数量(信号量的值如果小于0,说明此时有进程在等待这种资源)。
P(S)—申请一个资源S,如果资源不够就阻塞等待,即S-1。
V(S)—释放一个资源S,如果有进程在等待该资源,则唤醒一个进程,即S+1。
4.2.5 PV操作
保证了代码4一定是在代码2之后执行。
4.2.6 PV操作实现前驱操作
进程P1中有句代码S1,P2中有句代码S2,P3中有句代码S.....P6中有句代码S6。这些代码要求按如下前驱图所示的顺序来执行:
其实每一对前驱关系都是一个进程同步问题(需要保证一前一后的操作)
V操作释放资源,P操作锁定资源。
答案:CAA。视频时间:45:00.
4.2.7 死锁
死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生:
(1)互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。
(2)不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
(3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
(4)循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
死锁的处理策略
(1)预防死锁:破坏死锁产生的四个必要条件中的一个或几个。
(2)避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)。
(3)死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发牛,然后采取某种措施解除死锁。
例题:
某系统中有3个并发进程竞争资源R,每个进程都需要5个R,那么至少有——个R,才能保证系统不会发生死锁。
A.12 B.13 C.14 D. 15
(5-1)*3+1=13.答案为B
4.2.8 银行家算法
安全序列:就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。
如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后,可能所有进程都无法顺利的执行下去。
如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全就有安全序列,不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态。
因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。
答案B。视频时间:1:00:00.
三、存储管理
操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢?
1.操作系统负责内存空间的分配与回收。
2.操作系统需要提供某种技术从逻辑上对内存空间进行扩充。
游戏GTA的大小超过60GB,按理来说这个游戏程序运行之前需要把60GB数据全部放入内
存。然而,实际我的电脑内存才8GB,但为什么这个游戏可以在我的电脑上顺利运行呢?
——操作系统使用虚拟技术从逻辑上对内存空间进行扩充。
4.3.1 内存的分配与回收
4.3.2 动态分区分配(首次适应算法)
算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
某计算机系统的内存大小为128k,采用可变分区分配方式进行内存分配,当前系统的内存分块情况如下图所示,现有作业4申请内存9k,几种不同的存储分配算法在分配中,会产生什么样的结果呢?
4.3.3 存储管理—动态分区分配(最佳适应算法)
算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。
如何实现:空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第——个空闲分区。
4.3.4 动态分区分配(最差适应算法)
算法思想:为了解决最佳适应算法的问题,即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第-一个空闲分区。
4.3.5 动态分区分配(邻近适应算法)
算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲.分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
如何实现:空闲分区以地址递增的顺序排列(可排成-一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
4.3.6 分页存储管理
页表的作用是实现从页号到物理块号的地址映射。
地址变换机构的基本任务是利用页表把用户程序中的逻辑地址变换成内存中的物理地址。
视频时间:19:00答案:DB
4.3.7 分段存储管理
4.3.8 段页式存储管理
优点:空间浪费小、存储共享容易、存储保护容易、能动态连接。
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降。
先分段再分页。
4.3.9 页面置换算法
不管使用哪种存储管理,最后内存都会被基本装满,而在后续程序执行过程中,当所需要的数据信息又不在内存时,应该怎么办呢?
由操作系统负责将内存中暂时用不到的信息换出到外存。而用页面置换算法用来决定应该将哪个页面换出内存。
(1)最佳OPT
最佳置换算法(OPT,Optimal):每次选择淘汰的是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
例:假设系统为某进程分配了三个内存块,并考虑到有一下页面号引用串(会依次访问这些页面):7,0,1,2,0,3,0,4,2,3,0.3,2,1,2,0,1,7,0,1
按最佳置换的规则,往后寻找,最后一个出现的页号就是要淘汰的页面。
往后看,最远的数字。视频时间:31:00
(2)先进先出FIFO
先进先出置换算法(FIFO):每次选择淘汰的页面是最早进入内存的页面。
例:假设系统为某进程分配了三个内存块,并考虑到有以下页面号引用串:3,2,1,0,3,2,4,3,2,1,0,4
块内看
(3)最近最久未使用LRU
最近最久未使用置换算法(LRU,leastrecentlyused):每次淘汰的页面是最近最久未使用的页面。
例:假设系统为某进程分配了四个内存块,并考虑到有以下页面号引用串1,8,1,7,8,2,7,2,1,8,3,8,2,1,3,1,7,1,3,7
可以往前找在内存中的几个页面号,最后一个出现的页号就是要淘汰的页面。
往前看,最远的数字
四、文件管理
4.4.1 概念
4.4.2 文件目录
4.4.3 文件的结构
4.4.4 索引分配
答案:CD视频时间:49:00
4.4.5 空闲存储空间的管理(位示图法)
(1)空闲区表
将外存空间上一个连续未分配区域称为空闲区。操作系统为外存上所有空闲区建立一张空闲表来管理空闲存储空间。
(2)位示图
这种方法是在外存上建立一张位示图,记录文件存储器的使用情况。每一位对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。
(3)空闲块链
每个空闲物理块中都有指向下一个空闲物理块的指针,所有空闲物理块构成一个链表,链表的头指针放在文件存储器的特定位置(如管理块中)。
(4)成组链接法
在UNIX系统中,将空闲块分成若干组,每100个空闲块为一组,每组的第一个空闲块登记下一组空闲块的物理盘块号和空闲块总数,假如一个组的第一个空闲块号等于0,就意味着该组是最后一组,即无下一组空闲块。
答案:DB视频时间:52:00
五、设备管理
4.5.1 I/O设备基本概念
4.5.2 I/O控制方式
六、微内核操作系统
第5章:计算机网络基础
一、计算机网络的分类
二、七层网络体系结构
1、2、3层的主要设备及协议需要记忆。
三、网络的设备
四、TCP/IP协议族
TCP/IP作为Internet的核心协议,被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。
1、TCP/IP分层模型
TCP/IP协议是Internet的基础和核心,和OSI参考模型一样,也是采用层次体系结构,从上而下分为应用层、传输层、网际层和网络接口层。
2、网络接口层协议
3、网际层协议—IP
4.、ARP和RARP
地址解析协议(Address Resolution Protocol,ARP)及反地址解析协议(RARP)。ARP的作用是将IP地址转换为物理地址,RARP的作用是将物理地址转换为IP地址。
5、网际层协议一ICMP
6、传输层协议一TCP
TCP(Transmission Control Protocol,传输控制协议)为应用程序提供了一个可靠的、面向连接的数据传输服务。
7.传输层协议一UDP
用户数据报协议(User Datagram Protocol,UDP)是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信。TCP有助于提供可靠性,而UDP则有助于提高传输的高速率性。
相比于TCP,UDP的优势为——。
A.可靠传输 B.开销较小 C.拥塞控制 D.流量控制
答案:B
TCP与UDP区别:
①TCP面向连接;UDP是无连接的。
②TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失、不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付。
③TCP面向字节流; UDP是面向报文的,没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
④每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信;
⑤TCP首部开销20字节; UDP的首部开销小,只有8个字节;
⑥TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道,整体来看UDP开销较小。
五、IP地址和IPv6简介
IP地址的长度为32位,分为4段,每段8位,可以用十进制数和二进制数表示。每段数字范围为0~255,段与段之间用句点隔开。IP地址由两部分组成,一部分为网络地址,另一部分为主机地址。
IPv6是设计用于替代现行版本IP协议(IPv4)的下一代IP协议。
单播地址(Unicast):用于单个接口的标识符。
任播地址(Anycast):泛播地址。一组接口的标识符,IPv4广播地址。
组播地址(Multicast) : IPv6中的组播在功能上与IPv4中的组播类似。
六、Internet服务
1、DNS域名服务
DNS用的是UDP端口,端口号是53。
2、远程登录服务
Telnet协议用的是TCP端口,端口号一般是23。
3、电子邮件服务
电子邮件就是利用计算机进行信息交换的电子媒体信件。所用协议有简单邮件传送协议SMTP和用于接收邮件的POP3协议,两者均利用TCP端口,SMTP所用的端口号是25,POP3所用的端口号是110。
4、WWW服务
WWW服务是一种交互式图形界面的Internet服务,具有强大的信息连接功能。WWW用的是TCP端口,端口号是80。
5.文件传输服务
文件传输服务用来在计算机之间传输文件。在客户机与服务器的内部建立两条TCP连接:一条是控制连接,主要用于传输命令和参数(端口号是21),另一条是数据连接,主要用于传送文件(端口号是20)。
若一台服务器只开放了25和110两个端口,那么这台服务器可以提供_____服务。
A.E-Mail B.WEB C.DNS D.FTP
答案:A
第6章:数据库系统基础知识
一、基本概念
1、数据库
数据库(Database,缩写为DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
2、数据库管理系统
数据库管理系统(DatabaseManagement System,DBMS)是数据库系统的核心软性要在操作系统的支持下工作,解决如何科学地组织和存储数据、如何高效地获取和维护数据的系统软件问题。其主要功能包括数据定义功能、数据操纵功能、数据库的运行管理、数据组织、存储、管理和数据库的建立与维护。
3、DBMS的特征
(1)数据结构化且统一管理。
(2)有较高的数据独立性。
(3)提供数据控制功能。
4、DBMS的分类
(1)关系数据库系统:是支持关系模型的数据库系统。
(2)面向对象的数据库系统:是支持以对象形式对数据建模的数据库系统。
(3)对象关系数据库系统:在传统的关系数据模型基础上,提供元组、数组、集合等更丰富的数据类型以及处理新的数据类型操作的能力,这样形成的数据模型称为对象关系数据模型。基于对象关系数据模型的DBS称为对象关系数据库系统。
二、数据库三级模式两级映像
数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构。
(1)外模式:也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述,由若干个外部记录类型组成。描述外模式的数据定义语言称为外模式DDL。
(2)概念模式:也称模式,是数据库中全体数据的逻辑结构和特征的描述,它由若千个概念记录类型组成,只涉及行的描述,不涉及具体的值。概念模式的一个具体值称为模式的一个实例,同一个模式可以有很多实例。
(3)内模式:也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。描述内模式的数据定义语言称为内模式DDL。
外模式/模式映像:该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换。模式/内模式映像:该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。DBMS的两级映像功能保证了数据的独立性。
三、数据库的分析与设计过程
四、数据模型
6.4.1 基本概念
模型就是对现实世界特征的模拟和抽象。
数学模型是对现实世界数据特征的抽象。
数据模型是用来描述数据的一组概念和定义。
数据模型的三要素是数据结构、数据操作、数据的约束条件。
数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。
数据操作:是对数据库中各种对象的实例(值)允许执行的操作的集合,包括操作及操作规则。数据操作是对系统动态特性的描述。
数据的约束条件:是一组完整性规则的集合。对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效、相容。
6.4.2 E-R模型
实体-联系模型简称E-R模型,所采用的3个主要概念是实体、联系和属性。
6.4.3 关系模型
关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。
关系模型是由若干个关系模式组成的集合。一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念。
关系模型的优点是:概念单一,存储路径对用户是透明的,所以具有更好的数据独立性和安全保密性,简化了程序的开发和数据库的建立工作。
教学数据库的4个关系模式如下:关系模式中有下划线的属性是主码属性
一个实体型转换为一个关系模式
1:1联系 1:n联系 m:n联系
三个以上实体间的一个多元联系
在数据库逻辑结构的设计中,将E-R模型转换为关系模型应遵循相关原则。对于三个不同实体集和它们之间的多对多联系m: n: p,最少可转换为__个关系模式。
A.2 B.3 C.4 D.5
对于多对多或者一对多的联系也可以变为一个关系模式。
答案:C
五、关系代数
6.5.1 关系模式相关名词
候选码(键)∶若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码。
主码(键)︰若一个关系有多个候选码,则选定其中一个为主码。
主属性:包含在任何候选码中的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性。
外码(键)︰如果公共属性在一个关系中是主属性,那么这个公共属性被称为另一个关系的外码。由此可见,外码表示了两个关系之间的相关联系。
全码:若关系模式的所有属性组都是这个关系模式的候选码,则称为全码。
6.5.2 关系的三种类型
(1)基本关系(通常又称为基本表、基表):是实际存在的表,它是实际存储数据的逻辑表示。
(2)查询表:查询结果对应的表。
(3)视图表:是由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以常称为虚表。
数据库系统通常采用三级模式结构:外模式、模式和内模式。这三级模式分别对应数据库的_。
A.基本表、存储文件和视图 B.视图、基本表和存储文件
C.基本表、视图和存储文件 D.视图、存储文件和基本表
答案:B
6.5.3 七种基本运算
投影操作是对列的操作,选择是对行的操作。
答案:CB。视频时间:26:00
答案:D
关系代数表达式查询优化的原则如下:
①提早执行选取运算。对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量以及从外存读块的次数。
②合并乘积与其后的选择运算为连接运算。
③将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
④将投影运算和其前后的二目运算结合起来,因为没伺必安乃云评采兰于汉t1口关系。
⑤在执行连接前对关系适当地预处理,就能快速地找到要连接的元组。
⑥存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读出它的时间比计算的时间少时,就可节约操作时间。
六、数据库完整性约束
完整性规则提供了一种手段来保证当授权用户对数据厍作修改时个云破邛数掂的一致仕,因此,完整性规则是为了防止对数据的意外破坏。
关系模型的完整性规则是对关系的某种约束条件。完整性共分为3类:
(1)实体完整性:规定基本关系R的主属性A不能取空值。
(2)参照完整性:若F是基本关系R的外码,它与基本关系S的主码相对应(基本关系R和S不定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值),或者等于S中某个元组的主码值。
(3)用户定义完整性:就是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用的环境决定。
七、关系型数据库SQL简介
SQL是在关系数据库中最普遍使用的语言,它不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能。
SQL具有综合统一、高度非过程化、面向集合的操作方式,两种使用方式,语言简洁且易学易用等特点。
SQL支持关系数据库的三级模式结构:视图对应外模式、基本表对应模式、存储文件对应内模式。
八、关系数据库的规范化
6.8.1 函数依赖
6.8.2 求候选码(键)
第一步:将关系模式的函数依赖关系用“有向图”的方式表示。
第二步:找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。
第三步:若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
若给定的关系模式为R,U={A,B,C},F= {AB→C,C→B},则关系R__。
A.有2个候选关键字AC和BC,并且有3个主属性
B.有2个候选关键字AC和AB,并且有3个主属性
C.只有一个候选关键字AC,并且有1个非主属性和2个主属性D.只有一个候选关键字AB,并且有1个非主属性和2个主属性
本题关系模式R的函数依赖关系表达为:
由图可以看出,A为候选键的一部分,而A无法遍历所有结点,当AB时可以遍历所有结点,AC时同理。主属性:候选码中的所有属性均为主属性。答案:B
6.8.2 规范化理论(非规范化存在的问题)
非规范化的关系模式,可能存在的问题包括:
数据冗余、更新异常、插入异常、删除异常
6.8.3 概念
关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规范化的程度。
范式有1NF、2NF、3NF、BCNF(巴斯克斯范式)、4NF和5NF,其中1NF级别最低。这几种范式之间有5NF∈4NF∈BCNF∈3NF∈2NF∈1NF成立。
通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这种过程叫作规范化。
6.8.4 范式
(1)1NF(第一范式)
若关系模式R的每一个分量都是不可再分的数据项,则关系模式R属于第一范式(1NF)。
图中表格因为高级职称还可以分为教授和副教授,故不满足第一范式的要求,不属于第一范式。
(2)2NF(第二范式)
若关系模式R∈1NF,且每一个非主属性完全依赖于主键,则关系模式R∈2NF。
换句话说,当1NF消除了非主属性对码的部分函数依赖,则称为2NF。
学生选课SC关系模式:属性为学号(Sno)、课程号(Cno)、成绩(Grade)和学分(Credit)
图例依然不满足第二范式。
(3)3NF(第三范式)
换句话说,当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
3NF的模式必是2NF的模式。产生冗余和异常的两个重要原因是部分依赖和传递依赖。
因为案例中主属性为单属性存在的,故不可能会存在传递依赖的。符合第三范式。
(4)BCNF(巴克斯范式)
【定义7-7】若关系模式R∈1NF,若X→Y,且Y属于X,X必含有码,则关系模式R∈ BCNF。
换句话说,当3NF消除了主属性对码的部分和传递函数依赖,则称为BCNF。
一个满足BCNF的关系模式应具有以下性质:
所有非主属性对每一个码都是完全函数依赖。
所有非主属性对每一个不包含它的码也是完全函数依赖。
没有任何属性完全函数依赖于非码的任何一组属性。
首先列出各结点选出入度为零的节点为A3A5,再将A3A5代入推出,可以遍历所有节点,故答案:C。因在推遍历结点的时候就利用了传递,不符合第三范式。第二范式去除对候选键的部分依赖,候选键是A3A5,题干中没有说A3或者A5指向任一非主属性,所以属于第二范式。故答案为CB。
6.8.5 关系模式分解
对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有3种情况:
1、分解具有无损连接性。
2、分解要保持函数依赖。
3、分解既要有无损连接性,又要保持函数依赖。
例如:有关系模式R(A,B,C),并且存在函数依赖A->B,B->C
分解为R1(A,B)和R2(B,C)就是保持了函数依赖
若是分解为R3 (A,C)就是破坏函数依赖关系
无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式。
有关系模式:成绩(学号,姓名,课程号,课程名,分数),其中函数依赖为:学号→姓名,课程号→课程名,(学号,课程号)→分数
若将其分解为:
成绩(学号,课程号,分数)
学生(学号,姓名)
课程(课程号,课程名)请思考该分解是否为无操分解?
由于有函数依赖:学号→姓名
所以∶成绩(学号,课程号,分数,姓名)由于有函数依赖:课程号─课程名
所以有:成绩(学号,课程号,分数,姓名,课程名)
九、数据库的控制功能
6.9.1 事务管理
事务是一个操作序列,是数据库环境中不可分割的逻辑工作单位。
事务的4个特性是:原子性、一致性、隔离性和持久性。
原子性:事务的所有操作在数据库中要么全做,要么全都不做。
一致性:一个事务独立执行的结果将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。
隔离性:一个事务的执行不能被其他事务干扰。
持久性:一个事务一旦提交,它对数据库中数据的改变必须是永久的,即便系统出现故障时也是如此。
6.9.2 并发控制
并发操作是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。
并发操作带来问题的原因是事务的并发操作破坏了事务的隔离性。
DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据。
并发控制的主要技术是封锁。
(1)排他锁(X锁):又称写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
(2)共享锁(S锁):又称读锁,若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。
若事务T1对数据D1加了共享锁,事务T2、T3分别对数据D2、D3加了排他锁,则事务T1对数据_(1)_;事务T2对数据_ (2)_。
(1)
A.D2、D3加排它锁都成功
B.D2、D3加共享锁都成功
C.D2加共享锁成功,D3加排它锁失败D.D2、D3加排它锁和共享锁都失败
(2)
A.D1、D3加共享锁都失败
B.D1、D3加共享锁都成功
C.D1加共享锁成功,D3加排它锁失败D.D1加排它锁成功,D3加共享锁失败
答案:DC
6.9.3 备份和恢复
人为错误、硬盘损坏、计算机病毒、断电或是天灾人祸等都有可能造成数据的丢失,所以应该强调备份的重要性。
(1)静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作;动态转储是指在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行。(2)海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转
储后更新过的数据。
(3)日志文件。在事务处理的过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统便利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复。
数据恢复有3个步骤:
(1)反向扫描日志文件,查找该事务的更新操作。
(2)对事务的更新操作执行逆操作。
(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到回到事务的开始标志。
十、数据仓库与数据挖掘基础
数据仓库(Data Warehouse),可简写为Dw或DWH,数据仓库,是为了企业所有级别的决策制定计划过程,提供所有类型数据类型的战略集合。它出于分析性报告和决策支持的目的而创建。为需要业务智能的企业,为需要指导业务流程改进、监视时间,成本,质量以及控制等。数据仓库是依照分析需求、分析维度、分析指标进行设计的。
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,它用于支持企业或组织的决策分析处理。是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。
数据挖掘(Data Mining)就是从大量的数据中,提取隐藏在其中的,事先不知道的、但潜在有用的信息的过程。数据挖掘的目标是建立一个决策模型,根据过去的行动数据来预测未来的行为。
十一、大数据基本概念
大数据:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。
第7章:程序设计语言基础知识
一、基本概念
7.1.1 低级语言和高级语言
(1)低级语言:通常称机器语言和汇编语言为低级语言。机器语言是指用0、1字符串组成的机器指令序列,是最基本的计算机语言。汇编语言是指用符号表示指令的语言。
(2)高级语言:是从人类的逻辑思维角度出发、面向各类应用的程序语言,其抽象程度大大
提高,需要编译成特定机器上的目标代码才能执行。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
程序设计语言的定义一般都涉及语法、语义、语用和语境等方面。
(1)语法:由程序设计语言的基本符号组成程序中的各个语法成分的一组规则,其中由基本字符构成的符号书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可通过形式语言进行描述。
(2)语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。
(3)语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
(4)语境:理解和实现程序设计语言的环境,包括编译环境和运行环境。
7.1.2 程序设计语言的分类
(1)命令式程序设计语言
命令式程序设计语言是基于动作的语言,在这种语言中,计算被看作是动作的序列.命令式语言族开始于Fortran、Pascal和C语言,体现了命令式程序设计的关键思想。
(2)面向对象的程序设计语言
面向对象的程序设计在很大程度上应归功于从模拟领域发展而来的Simula,Simula提出了对象和类的概念。C++、Java和Smalltalk是面向对象程序设计语言的代表。
(3)函数式程序设计语言
函数式程序设计语言是一类以2-演算为基础的语言。该语言的代表是LISP,其中大量使用了递归。4)(4)逻辑型程序设计语言
逻辑型程序设计语言是一类以形式逻辑为基础的语言。该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog。
7.1.3 程序设计语言的基本成分
1、数据成分
(1)常量和变量
(2)全局量和局部量
(3)数据类型
基本类型:整型(int)、字符型(char)、实型(float、double)和布尔类型(bool)。
特殊类型:空类型(void)
用户定义类型:枚举类型(enum)
构造类型:数组、结构和联合
指针类型:type
抽象数据类型:类类型
2、运算成分
(1)算术运算:加减乘除 (2)逻辑运算:或与非 (3)关系运算
3、控制成分
(1)顺序结构 (2)选择结构 (3)循环结构
4、函数和函数的调用
二、编译与解释
汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。汇编语言源程序由若干条语句组成。一个程序中可以有3类语句:指令语句、伪指令语句和宏指令语句。
编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段,实际的编译器可能会将其中的某些阶段结合在一起进行处理。
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。
(1)词法分析阶段的任务是:对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个“单词”符号。“单词”符号是程序设计语言的基本语法单位,如关键字、标识符等。
(2)语法分析阶段的任务是:在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。词法分析和语法分析本质上都是对源程序的结构进行分析。
(3)语义分析阶段主要是:审查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查。
(4)中间代码生成阶段的工作:是根据语义分析的输出生成中间代码。
(5)代码优化阶段的任务是:对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。
(6)目标代码生成阶段的任务是:把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与具体的机器密切相关。
易考选择题
三、文法
7.3.1 语法推导树
其中“|”为或的意思。
四、有限自动机
五、正规式
正规式:有限自动机的另一种表达方式
答案:DC
第二小问D中,因为两个*的取值是一致的,所以无法表示(1)的A。
视频时间:41:42
例:下图所示为一个有限自动机(其中,A是初态、C是终态),该自动机可识__._。
A.0000 B.1111 C.0101 D.1010
集体思路:(1)找准初态、终态(2)理清思路(3)带入选项。
答案:C
六、表达式
一句话,就是利用树的遍历来求前缀、中缀和后缀表达式。
前缀表达式(根左右): (+ab)
中缀表达式(左根右): (a+b)
后缀表达式(左右根): (ab+)
答案:D
先画出表达式的树状图,然后写出后缀表达式。
七、传值与引用(传址)
传值调用:形参取的是实参的值,形参的改变不会导致实参的值发生改变。
引用(传址)调用:形参取的是实参的地址,即相当于实参存储单元地址的引用因此其值改变的同时就改变了实参的值。
答案:D视频时间:1:01:14
八、各种程序语言特点
1. Fortran语言(科学计算,执行效率高)
2.Pascal语言(为教学而开发的,表达能力强, Delphi )
3.C语言(指针操作能力强,高效)
4.Lisp语言(函数式程序语言,符号处理,人工智能)
5.C++语言(面向对象,高效)
6.Java语言(面向对象,中间代码,跨平台)
7.C#语言(面向对象,中间代码,Net)
8.Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)
第8章:软件工程基础知识
一、软件工程概述
8.1.1 软件生存周期
同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,我们称其为计算机软件的生存周期。通常,软件生存周期包括可行性分析、项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动。
(1)可行性分析:由软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
(2)需求分析:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。主要解决“做什么”的问题。
(3)概要设计:主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。
(4)详细设计:是对每个模块完成的功能进行具体描述,要把功能转变为精确的、结构化的过程。(5)程序编码:将软件设计的结果转换成计算机可运行的程序代码。在程序编码时,必须要制定统一、符合标准的编写规范,以保证程序的可读性、易维护性,提高程序的运行效率。
(6)软件测试:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。
(7)维护:在软件开发完成并投入使用后,由于各种原因,软件会不能继续适应用户的要求。延续软件的使用寿命,就要对软件进行维护,包括纠错性维护和改进性维护两个方面。
8.1.2 能力成熟度模型(CMM)
软件能力成熟度模型(CMM)将软件组织的过程能力分成5个成熟度级别:初始级、可重复级、已定义级、已管理级和优化级。按照成熟度级别由低到高,软件开发生产精度越来越高,每单位工程的生产周期越来越短。
(1)初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。
(2)可重复级:建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得的成功。
(3)已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。
(4)已管理级:收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制。
(5)优化级:过程的量化反馈和先进的新思想、新技术促使过程不断改进。
1、阶段式模型:结构类似于CMM,它关注组织的成熟度。有5个成熟度等级。
初始的:过程不可预测且缺乏控制。
已管理的:过程为项目服务。
已定义的:过程为组织服务。
定量管理的:过程已度量和控制。
优化的:集中于过程改进。
2、连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。CMMI中包括6个过程域能力等级,等级号为0~5。
CLO(未完成的)︰过程域未执行或未得到CL1中定义的所有目标。
CL1(已执行的)︰其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2(已管理的):其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。
CL3 (已定义级的)︰其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。
CL4(定量管理的)︰其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。
CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。
注!理解概念,会判断级别,可能会出选择题。
8.1.3 统一过程模型
统一过程(UP)模型:是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程包括4个阶段:初始阶段、精化阶段、构建阶段、移交阶段。
(1)初始阶段一生命周期目标。
(2)精化阶段一生命周期架构。
(3)构建阶段一初始运作功能。
(4)移交阶段一产品发布。
二、软件开发模型
瀑布模型:迭代模型/迭代开发方法。
演化模型:快速应用开发。
增量模型:构件组装模型/基于构件的开发方法。
螺旋模型:统一过程/统一开发方法。
快速原型模型:敏捷开发方法。
V模型:基于架构的开发方法。
喷泉模型:模型驱动的开发方法。
基于构件的开发模型:本质上是演化模型,以迭代方式构件软件。
8.2.1 瀑布模型
8.2.2 演化模型
演化模型:在获取一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称为原型,然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。
8.2.3 增量模型
增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。
8.2.4 螺旋模型
螺旋模型:将瀑布模型和演化模型相结合就成了螺旋模型。这种模型综合了瀑布模型和演化模型的优点。
螺旋模型包括4个方面的活动:制订计划、风险分析、实施工程、客户评估。
8.2.5 V模型(瀑布模型的变体)
8.2.6 喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发过程,具有迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代中不断完善软件系统。无间隙是指在开发活动之间不存在明显的边界,允许开发活动交叉、迭代地进行。
注!易根据其“采用对象技术”的特点考察选择题。
8.2.7 基于构件的开发模型
基于构件的开发模型:是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。基于构件的开发模型本质上是演化模型,需要以迭代方式构件软件,不同之处在于采用预先打包的软件构件开发应用系统。
三、软件开发方法
8.3.1 结构化方法
结构化方法由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流开发方法。结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作。
结构化方法总的指导思想是自顶向下、逐层分解,其基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题,但是不适合解决大规模、特别复杂的项目,且难以适应需求的变化。
8.3.2 Jackson方法
Jackson方法是一种面向数据结构的开发方法。因为一个问题的数据结构与处理该数据结构的控制结构有着惊人的相似之处。这种方法首先描述问题的输入、输出数据结构,分析其对应性,然后推出相应的程序结构,从而给出问题的软件过程描述。
JSP方法是以数据结构为驱动的,适合于小规模的项目。当输入数据结构与输出数据结构之间没有对应关系时,难以应用此方法。基于JSP方法的局限性,又发展了JSD方法,它是JSP方法的扩充。
8.3.3 原型化方法
原型化方法:并非所有的需求都能够预先定义,而且反复修改是不可避免的。开发原型化系统首先要确定用户需求,开发原始模型,然后征求用户对初始原型的改进意见,并根据意见修改原型。
原型化方法比较适合于用户需求不清、业务理论不确定、需求经常变化的情况,当系统规模不是很大也不太复杂时,采用该方法是比较好的。
8.3.4 面向对象方法
面向对象开发方法包括面向对象分析、面向对象设计和面向对象实现。面向对象开发方法有Booch方法、Coad方法和OMT方法等。
为了统一各种面向对象方法的术语、概念和模型,OMG 1997年推出了统一建模语言(Unified Modeling Language,UML)。它是面向对象的标准建模语言,通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,已成为面向对象建模的工业标准。
8.3.5 敏捷开发方法
敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。
敏捷过程的典型方法很多,主要有极限编程、水晶法、并列争球法、自适应软件开发几种。
极限编程(XP)是一种轻量级(敏捷)、高效、低风险、柔性、可预测、科学的软件开发方式。它由价值观、原则、实践和行为4个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生存周期。
敏捷开发方法:极限编程(XP)
四、需求分析
8.4.1 方法
(1)功能需求:考虑软件要做什么。
(2)性能需求:考虑软件开发的技术性指标。
(3)用户或人的因素:考虑用户的类型。
(4)环境需求:考虑未来软件应用的环境,包括软件和硬件。
(5)界面需求:考虑对数据格式、数据存储介质的规定。
(6)文档需求:考虑需要哪些文档,针对哪些读者。
(7)数据需求:考虑数据的格式、接收、发送数据的频率等。
(8)资源使用需求:考虑软件运行时所需数据、内存空间等资源。
(9)安全保密要求。
(10)可靠性要求:考虑系统的可靠性。
(11)软件成本消耗与开发进度需求。
(12)其他非功能性要求。
8.4.2 获取方法
五、系统设计
采用了结构化方法的结构化设计
8.5.1 内聚和耦合
六、系统测试
8.6.1 原则和目的
尽早、不断的进行测试。
程序员避免测试自己设计的程序。
既要选择有效、合理的数据,也要选择无效、不合理的数据。
修改后应进行回归测试。
尚未发现的错误数量与该程序已发现错误数成正比。
8.6.2 测试方法
关键掌握动态测试
8.6.3 测试阶段
1、单元测试:也称为模块测试,在模块编写完成且无编译错误后就可以进行。单元测试侧重于模块中的内部处理逻辑和数据结构。一般用白盒测试法。
2、集成测试:就是把模块按系统设计说明书的要求组合起来进行测试。即使所有的模块都通过了测试,在集成之后,仍然可能出现问题。
3、确认测试:始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。
4、系统测试:是将已经确认的软件、计算机硬件、外设和网络等其他因素结合在一起,进行信息系统的各种集成测试和确认测试,其目的是通过与系统的需求相较,发现所开发的系统与用户需求不符或矛盾的地方。
七、软件开发项目管理
8.7.1 Gantt图
Gantt图是一种简单的水平条形图,它以日历为基准描述项目任务。水平轴表示日历时间线(如时、天、周、月和年等),每个条形表示一个任务,任务名称垂直地列在左边的列中,图中水平条的起点和终点对应水平轴上的时间,分别表示该任务的开始时间和结束时间,水平条的长度表示完成该任务所持续的时间。当日历中同一时段存在多个水平条时,表示任务之间的并发。
下图所示的Gantt图描述了3个任务的进度安排。任务1首先开始,完成它需要6个月时间。任务2在1个月后开始,完成它需要9个月时间。任务3在6个月后开始,完成它需要5个月时间。
主要记住黄色字体和红色字体即可。
8.7.2 PERT图
PERT图是一个有向图,用箭头表示任务,它可以表示完成该任务所需的时间,箭头指向节点表示流入节点的任务的结束,并开始流出节点的任务,这里把节点当成事件。
只有当流入该节点的所有任务都结束时,节点所表示的事件才出现,流出节点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。一个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动余地。
PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其所需的完成时间。但是PERT图不能反映任务之间的并行关系。
进度安排的常用图形描述方法有Gantt图和PERT图。Gantt图不能清晰地描-(1)_PERT图可以给出哪些任务完成后才能开始另一些任务。下图所示的PERT图中,事件6的最晚开始时间是_(2) __。
答案:DC视频时间14:00
8.7.3 风险管理
风险是指"损失或伤害的可能性”。
风险管理包含:
1、风险识别
2、风险预测
3、风险评估
4、风险控制
八、软件质量
8.8.1 软件质量特性
软件质量模型由3个层次组成:第一层是质量特性,第二层是质量子特性,第三层是度量指标。该模型的质量特性和质量子特性的含义如下。
(1)功能性:与一组功能及其指定的性质有关的一组属性。这里的功能是指满足明确或隐含需求的那些功能。
适合性:与规定任务能否提供-一组功能以及这组功能的适合程度有关的软件属性。
准确性:与能否得到正确的或相符的结果或双果闫天的软件周土。
互用性:与同其他指定系统进行交互操作的能力有关的软件属性。
依从性:使软件服从有关的标准、约定、法规及类似规定的软件属性。
安全性:与避免对程序及数据的非授权的故意或意外访问的能力有关的软件属性。
(2)可靠性:与在规定的一段时间内和规定的条件下,软件维持其性能水平的能力有关的一组属性。
●成熟性:与由软件故障引起失效的频度有关的软件属性。
●容错性:与在软件错误或违反指定接口情况下,维持指定的性能水平的能有关的软件属性。
●易恢复性:与在故障发生后重新建立其性能水平并恢复直接受影响数据的能力,以及为达此目的所需的时间有关的软件属性。
(3)易使用性:与为使用所需的努力和由一组规定的或隐含的用户对这样的使用所做的个别评价有关的一组属性。
●易理解性:与用户为理解逻辑概念及其应用范围所需努力有关的软件属性。
●易学性:与用户为学习软件应用所需努力有关的软件属性。
●易操作性:与用户为进行操作或控制所需努力有关的软件属性。
(4)效率:与在规定条件下,软件的性能水平与所用资源量之间的关系有关的一组属性。
●时间特性:与软件执行其功能时的响应和处理时间以及吞吐量有关的软件属性。
●资源特性:与软件执行其功能时所使用的资源量以及使用资源的持续时间有关的软件属性。
主要掌握每个特性有哪些子特性。
(5)可维护性:与进行规定的修改所需努力有关的一组属性。
●易分析性:与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性。
●易改变性:与进行修改、调试或适应环境变化所需努力有关的软件属性。
●稳定性:与修改造成的未预料后果的风险有关的软件属性。
●易测试性:与为确认经修改软件所需努力有关的软件属性。
(6)可移植性:与软件从一种环境转移到另一种环境的能力有关的一组属性。
●适应性:与软件无须采用有别于为该软件准备的处理和手段就能适应规定的环境有关的软件属性。
●易安装性:与在指定环境下安装软件所需努力有关的软件属性。
●一致性:使软件服从与可移植性有关的标准或约定的软件属性。
●易替换性:与软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性。
九、软件度量
McCabe复杂性度量又称为环路度量,它认为程序的复杂性很大程度上取决于控制的复杂性。单一的顺序程序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:
V(G) = m - n + 2
式中,V(G)为有向图G中的环路数, m为图G中弧的个数,n为图G中的节点数。
使用公式计算较慢,可以直接数图中环的数量再+1。例如图中有四个环+1得5,即V(G)=5。视频时间:22:40
第9章:结构化开发方法—数据流图
—、系统设计基本原理
1、抽象
抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不是很重要或非本质的方面。
2、模块化
模块化是指将一个待开发的软件分解成若干个小的、简单的部分一模块,每个模块可独立地开发、测试,最后组装成完整的程序。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。
3、信息隐蔽
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。
4、模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单。
衡量模块独立程度的标准有两个:耦合和内聚。耦合是指模块之间联系的紧密程度。耦合度越高,则模块的独立性越差。
内聚是指模块内部各元素之间联系的紧密程度。内聚度越低,则模块的独立性越差。因此,模块独立就是希望每个模块都是高内聚、低耦合的。
注!耦合是各模块之间的联系,内聚是模块内部各元素之间的联系。最终的目标是高内聚、低耦合。
答案:A
二、系统总体结构设计
系统结构设计应遵循以下原则:
●分解—协调原则。
●自顶向下原则。
信息隐蔽、抽象的原则。
●—致性原则。
明确性原则。
●模块之间的耦合度尽可能小,模块的内聚度尽可能高。
模块的扇入系数和扇出系数要合理。
模块的规模适当。
子系统划分要遵循以下原则:
●子系统要具有相对独立性。
●子系统之间数据的依赖性尽量小。
●子系统划分的结果应使数据冗余较小。
●子系统的设置应考虑今后管理发展的需要。
●子系统的划分应便于系统分阶段实现。
●子系统的划分应考虑到各类资源的充分利用
模块是组成系统的基本单位,它的特点是可以组合、分解和更换。系统中任何—个处理功能都可以看成是一个模块。根据模块功能具体化程度的不同,可以分为逻辑模块和物理模块。
一个模块要具备以下4个要素:
●输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回给调用者。
●处理功能:指模块把输入转换成输出所做的工作。
●内部数据:指仅供该模块本身引用的数据。
●程序代码:指用来实现模块功能的程序。
模块重点掌握。
三、数据流图
9.3.1 基本概念
(1)数据流图或称数据流程图,是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑.上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
(2)数据字典
数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典用于对数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。
数据字典有4类条目:数据流条目、数据存储条目、加工条目和数据项条目。数据字典管理主要是指把字典条目按照某种格式组织后存储在字典中,并提供排序、查找、统计等功能。
注!数据流图是重点掌握内容,考试后面会出大题。
9.3.2 数据字典
9.3.3 基本成分
注!易出选择题,例“下列哪个不属于数据流图中的元素”
数据流图的分层
9.3.4 对图和加工进行编号
对于一个软件系统,其数据流图可能有许多层,每一层又有许多张图。为了区分不同的加工和不同的DFD子图,应该对每张图和每个加工进行编号,以利于管理。
(1)父图与子图
假设分层数据流图里的某张图A中的某个加工可用另一张图B来分解,则称图A是图B的父图,图B是图A的子图。
在一张图中,有些加工需要进一步分解,有些加工则不必分解。因此,如果父图中有n个加工,那么它可以有0~n张子图(这些子图位于同一层),但每张子图都只对应于—张父图。
DFD数据流图
(2)编号
●顶层图只有一张,图中的加工也只有一个,所以不必编号。
●0层图只有一张,图中的加工号可以分别是0.1.0.2、.或者1.2、...
●子图号就是父图中被分解的加工号。
●图的加工号由图号、圆点和序号组成。
9.3.5 应注意的问题
(1)适当地为数据流、加工、数据存储、外部实体命名,名字应反映该成分的实际含义,避免空洞的名字。
(2)画数据流而不要画控制流。
(3)每条数据流的输入或者输出都是加工。
(4)一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。
(5)允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工。
注!易出题考察(1)命名,
(6)保持父图与子图平衡。也就是说,父图中某加工的输入/输出数据流必须与它的子图的输入/输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
(7)在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。
(8)保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据中获得。
(9)每个加工必须既有输入数据流,又有输出数据流。
(10)在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中,可能是只有读没有写,或者是只有写没有读。
突破点找输入和输出的平衡。
第10章:UML建模
一、概述
统一建模语言(UML)是面向对象软件的标准化建模语言。UML由3个要素成:UML的基本构造块、支配这些构造块如何放置在一起的规则和运用于整个语言的一些公共机制。
UML的词汇表包含3种构造块:事物、关系和图。
事物是对模型中最具代表性的成分的抽象,关系把事物结合在一起,图聚集了相关的事物。
1、事物包括结构事物、行为事物、分组事物和注释事物。
(1)结构事物(Structural Thing)。通常是模型的静态部分,描述概念或物理元素。结构
事物包括类(Class)、接口(lnterface)、协作(Collaboration)、用例(Use Case)、主动类
Active Class)、构件(Component)和节点(Node)。
(2)行为事物(Behavior Thing)。是UML模型的动态部分。它们是模型中的动词,描述
了跨越时间和空间的行为。共有两类主要的行为事物:交互(interaction)和状态机(State
Machine)。
(3)分组事物(Grouping Thing)。是UML模型的组织部分。它们是一些由模型分解成的
“盒子”。在所有的分组事物中,最主要的分组事物是包(Package)。
(4)注释事物(Annotational Thing)。是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。注解(Note)是一种主要的注释事物。注解是一个依附于一个元素或者一组元素之上,对它进行约束或解释的简单符号。
2、UML中有4种关系:依赖、关联、泛化和实现。
(1)依赖(Dependency)。依赖是两个事物间的语义关系,其中一个事物(独立事物)发生
变化会影响另一个事物(依赖事物)的语义。
(2)关联(Association)。 关联是一种结构关系,它描述了一组链,链是对象之间的连接。
聚合(Aggregation)是一种特殊类型的关联,它描述了整体和部分间的结构关系。组合(Composition)也是一种特殊类型的关联,它同样体现了整体与部分间的关系,但比聚合更
强,也称为强聚合。
(3)泛化(Generalization)。泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。
(4)实现(Realization)。 实现是类元之间的语义关系,其中一个类元制定了由另一个类元
保证执行的契约。在两种地方要遇到实现关系:一种是在接口和实现它们的类或构件之间;
另一种是在用例和实现它们的协作之间。
注!易考:类图、用例图、状态图、活动图和顺序图。重点掌握类图。
二、类图
类图(Class Diagram)展现了一组对象、接口、协作及其之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。
类图给出了系统的静态设计视图,包含主动类的类图给出了系统的静态进程视图。作为模型管理视图还可以含有包或子系统,二者都用于把模型元素聚集成更大的组块。
类图用于对系统的静态视图建模。这种视图主要支持系统的功能需求,即系统要提供给最终用户的服务。
当对系统的静态设计建模时,通常以下述3种方式之一使用类图:对系统的词汇建模;对简单的协作建模;对逻辑数据库模式建模。
三、用例图
用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及两者之间的关系。用例图
通常包括用例、参与者、扩展关系、包含关系。
用例图用于对系统的静态用例视图进行建模,主要支持系统的行为,即该系统在它的周边环
境的语境中所提供的外部可见服务。
当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图:对系统的语境建模,
对系统的需求建模。
包含关系<<include>>;扩展关系<<extend>>
看到小人一般就是用例图。
四、顺序图
顺序图(或称序列图)和协作图均被称为交互图,它们用于对系统的动态方面进行建模。
一张交互图显示的是一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息。
顺序图是强调消息时间序列的交互图,协作图则是强调接收和发送消息的对象的结构组织的交互图。
交互图用于对一个系统的动态方面建模。在大多数情况下,它包括对类、接口、构件和节点的具体的或原型化的实例及其之间传递的消息进行建模。交互图可以单独使用,用于可视化、详述、构造和文档化一个特定的对象群体的动态方面,也可以用来对一个用例的特定控制流进行建模。
五、活动图
活动图(Activity Diagram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。
活动图专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程。
六、状态图
状态图(State Diagram)展现了一个状态机,它由状态、转换、事件和活动组成。状态图关
注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。
状态图通常包含简单状态和组合状态、转换(事件和动作),
状态图关注系统的动态视图,它对接口、类和协作的行为建模尤为重要,它强调对象行为
的事件顺序。
七、通信图
通信图(Communication Diagram)强调收发消息的对象的结构组织。通信图强调参加
交互的对象的组织。
产生一张通信图,如图所示,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消息来修饰这些链。这就提供了在协作对象的结构组织的语境中观察控制流的一个清晰的可视化轨迹。
1.通信图有路径。2.通信图有顺序号。
八、构件图
构件图(Component Diagram)展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。如图所示,它与类图相关,通常把构件映射为一个或多个类、接口或协作。
第11章:面向对象技术
一、基本概念
此章节为选做题,可以使用C++或java来实现。
面向对象=对象+分类+继承+通过消息的通信
1、对象
在面向对象的系统中,对象是基本的运行实体,它既包括数据(属性),也包括作用
于数据的操作(行为),所以一个对象把属性和行为封装为一个整体。从程序设计者角度
看,对象是一个程序模块,从用户角度看,对象为他们提供了所希望的行为。在对象内的
操作通常叫作方法。一个对象通常可由对象名、属性和操作3部分组成。
2.消息
对象之间进行通信的一种构造叫作消息。当一个消息发送给某个对象时,
包含要求接
收对象去执行某些活动的信息,接收到消息的对象经过解释,然后予以响应,这种通信机
制叫作消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。
3.类
一个类定义了一组大体上相似的对象,一个类所包含的方法和数据描述一组对象的共
同行为和属性。类是在对象之上的抽象,对象是类的具体化,是类的实例。
4.继承
继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一
个类的时候入可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内
容作为自己的内容,并加入若干新的内容。
一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和操作。一个子类可以继承它的父类中的属性和操作,这些属性和操作在子类中不必定义。子类中还可以定义自己的属性和操作。
5.多态
不同的对象收到同一消息可以产生完全不同的结果,这一现象叫作多态。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样,把具有通用功能的消息存放在高层次,而把不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。
在面向对象方法中,多态指的是
A.客户类无需知道所调用方法的特定子类的实现
B.对象动态地修改类
C.一个对象对应多张数据库表
D.子类只能够覆盖父类中非抽象的方法
答案:A
二、设计原则
单一职责原则:设计目的单一的类。
开放一封闭原则:对扩展开放,对修改封闭。
李氏(Liskov)替换原则:子类可以替换父类。
依赖倒置原则:要依赖于抽象,而不是具体实现:针对接口编程,不要针对实现编程。
接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的。
迪米特(Demeter)原则:一个对象应当对其他对象有尽可能少的了解
三、设计模式的概念与分类
设计模式:主要关注软件系统的设计,与具体的实现语言无关
设计模式一般有以下4个要素:
(1)模式名称。用一两个词来描述模式的问题、解决方案和效果。设计模式允许在较高的抽象层次上进行设计。
(2)问题。描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,可能描述了特定的设计问题,如怎样用对象表示算法等;也可能描述了导致不灵活设计的类或对象结构。
(3)解决方案。描述了设计的组成成分、它们之间的相互关系及各自的职责和协作方式。模式就像一个模板,提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
(4)效果。描述了模式应用的效果及使用模式应权衡的问题。
共23种模式,常考的模式有工厂方法模式、抽象工厂模式、构建器模式、适配器模式、装饰模式、外观模式、命令模式、中介模式、观察者模式。
四、创建型模式
创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一
个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
创建型模式中有两个不断出现的主旋律。第一,它们都将关于该系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的实例是如何被创建和放在一起的整个系统关于这些对象所知道的是由抽象类所定义的接口。
因此,创建型模式在为什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予了很大的灵活性。它们允许用结构和功能差别很大的“产品”对象配置-一个系统。配置可以是静态(即在编译时指定),也可以是动态的(在运行时指定)。
五、结构型模式
结构性模式涉及如何组合类和对象以获得更大的结构。结构性模式采用继承机制来组合接口或实现。
结构性对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。
六、行为型模式
行为模式涉及算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的复杂的控制流。它们将用户的注意力从控制流转移到对象间的联系方式上来。
行为类模式使用继承机制在类间分派行为,主要有Template Method(模板方法)和Interpreter(解释器)两种模式。
行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任一个对象都无法单独完成的任务。其他的行为对象模式常将行为封装在一个对象中并将请求指派给它。
七、Java程序设计
优点:
(1)跨平台。
(2)代码可移动(与htmI相结合)。
(3)完全面向对象。
(4)编出来的程序不易出错(没有指针,内存垃圾自动回收,不会产生内存泄露)。此外,还有简单、安全、多线程等优点。
Java与C++的区别:
(1)完全面向对象:无全局变量、无结构和联合、自动回收内存垃圾。
(2)没有指针。
(3)没有多继承。
(4)解释执行。
11.7.1 基本语法
1、注释:多行用“*..*/”,单行用“//”
2、基本数据类型:char(8 bit)、short(16 bit)、int(32 bit)、long(64 bit)、float(32 bit)、double (64 bit)。
3、常量:使用final 关键字,如final float pi=3.14f. final bytec= 12。浮点常数后面要加“f”,如12.7f、1.02f。
4、运算符:算术运算符、赋值运算符、逻辑运算符、比较运算符、自增自减运算符、位运算符和移位运算符。
5、类型转换:如 int s=(int)4.7f。
6、基本语句:if、switch、while、do...while、for。
输出函数: System out.println,如System.out. println("ld=" + nNum)。
11.7.2 类
一个类是一些属性和方法的封装体,类的定义用关键字class 声明,用关键字public、protected、private指定类的成员的存取控制属性:
private(私有)成员,只有类内部的方法才能访问;
protected(保护)成员,可被派生类和同一:文件夹下的类访问;
public(公有)成员,可以从类的外部访问。
默认是public。这体现了面向对象的以下指导思想:尽量将类内部的细节隐藏起来,对类的属性的操作应该通过类的方法来进行。
11.7.3 继承
Java中用关键字extends表示类间的继承关系。
父类的公有属性和方法成为子类的属性和方法,子类如果有和父类同名、同参数类型的方法,那么子类对象在调用该方法时,调用的是子类的方法,亦即方法的重置。如果想要调用父类的同名方法,需要用super关键字(属性同理)。
子类的对象可以作为祖先类的对象使用,即所谓类的向上转换,反之则不行。具体表现在:可以用子类对象来对祖先类对象赋值,可以用子类对象作为实参去调用以父类对象为形参的函数。
重载:同一个类中的两个或两个以上方法,名字相同,而参数个数不同或参数类型不同,叫作重载。注意:方法名字和参数都一样,而仅仅返回值类型不同,这不是重载。
静态属性和静态方法
静态属性和静态方法的声明用关键字static 实现。一个类的静态属性只有一个,由所有该类的对象共享。不需要创建对象也能访问类的静态属性和方法,访问方式为“类名.静态属性或静态方法”。静态方法与对象无关,因此不能在静态方法中访问非静态属性和调用非静态方法。
11.7.4 this、super和final
this代表当前对象,super代表当前对象的父类。
this的主要用途有:(1)一个构造函数调用另一个构造函数,对构造函数的调用必须是第一条语句。(2)将对象自身作为参数来调用一个函数。
super的用途:在子类中调用父类的同名方法,或在子类的构造函数中调用父类的构
造函数,此时也必须是第一条语句。
用final关键字定义的常量,在其初始化或第一次赋值后,其值不能被改变。常量必须先有值,然后才能使用。对于常量的第一次赋值只能在构造函数中进行。
final对象的值不能被改变,指的是该对象不能再指向其他对象,而不是指不能改变当前对象内部的属性值。
函数参数声明为final后,函数中的值不能改变。
final方法是不能被重置的方法。
final类不能被继承,其所有方法都是final 的,但属性可以不是final 的。
11.7.5 抽象类和接口
(1)抽象类
抽象类通过关键字abstract 实现,抽象类的目的是定义一个框架,规定某些类必须具有的一些共性。包含抽象方法的类一定是抽象类,所谓抽象方法是指没有函数体的方法。抽象类的直接派生类必须实现其抽象方法,抽象类只能用于继承,不能创建对象。
(2)接口
接口用关键字interface 声明,只能用于继承。注意:此时关键字为implements(实现)。接口用于替代多继承的概念,能实现多继承的部分特点,又避免了多继承的混乱,还能起到规定程序框架的作用。注意:接口也可以用于多态。直接继承了接口的类,必须实现接口中的抽象方法,间接的则可以实现,也可以不实现。
(3)抽象类与接口的异同
接口和抽象类都不能创建对象。
抽象类不能参与多继承,抽象类可以有非静态的成员变量,可以有非抽象方法
接口可以参与多继承,所有属性都是静态常量,所有方法都是public抽象方法。
注!抽象类与继承一定要进行区分。
第12章:信息安全与多媒体知识
一、网络安全基本概念
计算机网络安全是指计算机、网络系统的硬件、软件以及系统中的数据受到保护,不因偶然的或恶意的原因而遭到破坏、更改、泄露,确保系统能连续和可靠地运行,使网络服务不中断。广义地说,凡是涉及网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论,都是网络安全所要研究的领域。
网络安全涉及的主要内容包括运行系统的安全、信息系统的安全、信息传播的安全和信息内容的安全。信息系统对安全的基本需求有保密性、完整性、可用性、可控性和可核查性。
信息系统安全属性:
1、保密性:确保信息不暴露给未授权的实体或进程。
2、完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改
3、可用性:得到授权的实体在需要时可访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作。
4、可控性:可以控制授权范围内的信息流向及行为方式。
5、可审查性:对出现的信息安全问题提供调查的依据和手段。
二、网络安全威胁
(1)物理威胁:指计算机硬件和存储介质受到的偷窃、废物搜寻及线路劫取活动的威胁。
(2)网络攻击:计算机网络的使用对数据造成了新的安全威胁,攻击者可通过网络利用电子窃听、入侵拨号入网、冒名顶替等方式进行入侵攻击、偷窃和篡改。
(3)身份鉴别:由于身份鉴别通常是用设置口令的手段实现的,入侵者可通过口令圈套、密码破译等方式扰乱身份鉴别。
(4)编程威胁:指通过病毒进行攻击的一种方法。
(5)系统漏洞:也称代码漏洞,是操作系统设计者有意设置的,目的是为了使用户在失去对系统的访问权时仍有机会进入系统。入侵者可使用扫描器发现系统漏洞,从而进行攻击。
三、网络攻击
黑客(Hacker)常用的攻击手段主要有口令入侵、放置特洛伊木马、DoS攻击、端口扫描、网络监听、欺骗攻击、电子邮件攻击等。
1、口令入侵
是指黑客使用某些合法用户的账号和口令登录到目的主机,然后再实施攻击活动。使用这种方法的前提是必须先得到该主机上的某个合法用户的账号,然后再进行合法用户的口令的破译。
2、放置特洛伊木马
在计算机领域里,有一类特殊的程序,黑客可以通过它来远程控制别人的计算机,这类程序称为特洛伊木马程序。特洛伊木马程序一般分为服务器端(Server)和客户端(Client)。
3、DoS攻击
DoS即拒绝服务,其攻击目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
4、端口扫描
端口扫描就是利用Socket编程与目标主机的某些端口建立TCP连接、进行传输协议的验证等,从而获知目标主机的扫描端口是否处于激活状态、主机提供了哪些服务、提供的服务中是否含有某些缺陷等。常用的扫描方式有TCPconnect()扫描、TCP SYN扫描、TCPFIN扫描、IP 段扫描和FTP返回攻击等。
5、网络监听
网络监听是主机的一种工作模式,在这种模式下,主机可以接收到本网段在同一条物理通道上传输的所有信息,而不管这些信息的发送方和接收方是谁。
Sniffer是一款著名的监听工具,可以监听到网上传输的所有信息。Sniffer可以是硬件也可以是软件,主要用来接收在网络上传输的信息。
6.欺骗攻击
欺骗攻击是指攻击者创造一个易于误解的上下文环境,以诱使受攻击者进入并且做出缺乏安全考虑的决策。常见的欺骗攻击有Web欺骗、ARP欺骗、IP 欺骗。
7、电子邮件攻击
电子邮件攻击主要表现为向目标信箱发送电子邮件炸弹。所谓的邮件炸弹实质上就是发送地址不详且容量庞大的垃圾邮件。由于邮件信箱容量是有限的,当庞大的垃圾邮件到达信箱时,就会把信箱挤爆。
四、防火墙技术
防火墙可分为以下几类
1、包过滤型防火墙。包过滤型防火墙工作在网络层,对数据包的源及目的IP具有识别和控制作用,对于传输层,它只能识别数据包是TCP还是UDP及所用的端口信息。
2、应用代理网关防火墙。应用代理网关防火墙彻底隔断内网与外网的直接通信,内网用户对外网的访问变成防火墙对外网的访问,然后再由防火墙将结果转发给内网用户。
3、状态检测技术防火墙。状态检测技术防火墙结合了代理防火墙的安全性和包过滤防火墙的高速度等优点,在不损失安全性的基础上将代理防火墙的性能提高了10 倍。
注!易出选择题
典型防火墙的体系结构
一个防火墙系统通常是由过滤路由器和代理服务器组成。典型防火墙的体系结构包括包过滤路由器、双宿主主机、被屏蔽主机、被屏蔽子网等。
五、加密与数字签名
数据加密的基本思想是通过变换信息的表示形式来伪装需要保护的敏感信息,使非授权者不能了解被加密的内容。需要隐藏的信息称为明文,产生的结果称为密文,加密时使用的变换规则称为密码算法。
信息安全的核心是密码技术。根据密码算法所使用的加密密钥和解密密钥是否相同,可将密码体制分为对称密钥密码体制、非对称密钥密码体制。
1.对称密钥密码体制
对称密钥密码体制中,发送和接收数据的双方必须使用相同的或对称的密钥对明文进行加密和解密运算。常用的对称加密算法有DES、IDEA、TDEA、AES、RC2、RC4、RC5等。
常见对称密钥加密算法:
DES:替换+移位、56位密钥、64位数据块、速度快、密钥易产生
3DES(三重DES): 两个56位的密钥K1、K2
加密: K1加密->K2解密->K1加密
解密:K1解密->K2加密->K1解密
AES:高级加密标准Riindael加密法,是美国联邦政府采用的一种区块加密标准。
RC-5:RSA数据安全公司的很多产品都使用了RC-5。
IDEA算法:128位密钥、64位数据块、比DES的加密性好、对计算机功能要求相对低。
2、非对称密钥密码体制
非对称密钥密码体制也叫公开密钥密码体制。该体制中,每个用户都有一对密钥:公开密钥(简称公钥)和私有密钥(简称私钥)。公钥对外公开,私钥由个人秘密保存。用其中一把密钥来加密,另一把密钥来解密。由于私钥带有个人特征,因此可以解决数据的签名验证问题。
常见非对称密钥加密算法:
RSA:512位(或1024位)密钥、计算量极大、难破解。
Elgamal:其基础是Diffie-Helman密钥交换算法。
ECC:椭圆曲线算法
其它非对称算法包括:背包算法、Rabin、D-H。
数字签名是用于确认发送者身份和消息完整性的一个加密的消息摘要。
数字签名应满足以下3点:
1、接收者能够核实发送者。
2、发送者事后不能抵赖对报文的签名。
3、接收者不能伪造对报文的签名。
数字签名可以利用对称密码体制(如DES)、公钥密码体制或公证体制来实现。最常用的实现方法建立在公钥密码体制和单向散列函数算法(如MD5、SHA)的组合基础上。
六、各个网络层次的安全保障
七、音频相关概念
注意!采样频率应为声音最高频率2倍
八、图像相关概念
九、多媒体的种类
感觉媒体:指人们接触信息的感觉形式。如:视觉、听觉、触觉、觉和味觉等。
表示媒体:指信息的表示形式。如:文字、图形、图像、动画、音频和视频等。
显示媒体(表现媒体):表现和获取信息的物理设备。如:输入显示媒体键盘、鼠标和麦克风等;输出显示媒体显示器、打印机和音箱等。
存储媒体:存储数据的物理设备,如磁盘、光盘和内存等。
传输媒体:传输数据的物理载体,如电缆、光缆和交换设备等。
注!区分表示媒体和显示媒体。
十、多媒体的计算问题
1B=8b
第一题:1600X1200X24/8=5760000B;128MB/5760000B=23;注意K=2的十次方,M=2的二十次方,G=2的三十次方
答案:D
第二题:44.1kHzX16bitX2=1411.2kb/s
答案:C
第三题:6.4MBX30X10=1920
答案:D
第13章:法律法规与标准化知识
一、知识产权
知识产权又称为智慧财产权,是指人们通过自己的智力活动创造的成果和经营管理活动中的经验、知识而依法所享有的权利。传统的知识产权可分为“工业产权”和“著作权”。
知识产权包括以下内容:
1、关于文学、艺术和科学作品的权利,
2、关于表演艺术家的表演以及唱片和广播节目的权利。
3、关于人类一切活动领域的发明的权利。
4、关于科学发现的权利。
5、关于工业品外观设计的权利。
6、关于商标、服务标记以及商业名称和标志的权利。
7、关于制止不正当竞争的权利。
8、在工业、科学、文学艺术领域内由于智力创造活动而产生的一切其他权利。
从所涉及的法律法规角度:
1、著作权法
2、计算机软件保护条例
3、商标法
4、专利法
从试题考点分布的角度:
1、保护期限
2、知识产权人确定
3、侵权判断
二、保护期限
注!记忆各类型的保护期限
三、知识产权人确定
注意在专利权中即使是在工作之余创造出的软件,也是单位享有专利。
四、侵权判定
中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。
开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。
著作权法不适用于下列情形:
1、法律、法规,国家机关的决议、决定、命令和其他具有立法、行政、司法性质的文件,及其官方正式译文;
2、时事新闻。
3、历法、通用数表、通用表格和公式。
五、标准的分类与标准的编号
分类
编号