概述
2021年5月29日,草草准备,终于考完了。下面是自己这几天在别人基础上整理的资料,有些图片没上传,可私聊或者留邮箱发送doc,重点用不同颜色标记。
各位自己去网盘下载吧
链接:https://pan.baidu.com/s/1Ni2IEuIY6CYGQLggXzrBiA
提取码:hems
--来自百度网盘超级会员V5的分享
1.1计算机系统基础知识
1.1.1 中央处理单元
中央处理单元(CPU)是计算机系统的核心部件,负责获取程序指令、对指令进行译码并加以执行。CPU的主要功能包括程序控制、操作控制、时间控制、数据处理。
1、计算机硬件组成:运算器、控制器、存储器、输入设备和输出设备(简称外设)。
2、CPU:运算器+控制器+寄存器组+内部总线等,是硬件系统的核心。
3、运算器的两个功能:
(1)执行所有的算数运算,加减乘除等
(2)执行所有的逻辑运算并进行逻辑测试,与或非等
4、运算器包括算术逻辑单元(ALU)、累加寄存器(AC)、缓冲寄存器(DR)、状态条件寄存器(PSW)。(★★★)
(1)算术逻辑单元:负责数据处理,包括算数和逻辑运算;(加法器)
(2)累加寄存器:为ALU提供工作区,相当于数据仓库;
(3)数据缓冲寄存器:作为CPU和内存、外部设备之间数据传送的中转站以及操作速度上的缓冲区;
(4)状态条件寄存器:存储运算或测试结果的条件码内容,包括状态标志和控制标志。
5、控制器:决定计算机运算过程的自动化,不仅要保证程序的正确执行,而且要能够处理异常事件,控制器一般包括指令控制逻辑、时序控制逻辑、总线控制逻辑、终端控制逻辑等几个部分。
控制器工作过程涉及的部件(★★★):
(1)指令寄存器(IR):用来暂存指令,指令译码器根据IR的内容产生各种微操作指令,控制其他部件协调工作,完成指令的功能;
(2)程序计数器(PC):具有寄存信息和计数两种功能,存放将要执行的下一条指令的地址;
(3)地址寄存器(AR):存放当前CPU所访问的内存单元的地址,因为内存和CPU存在操作速度上的诧异,所以需要AR保持地址信息,直到内存的读写操作完成为止;
(4)指令译码器(ID):指令包含操作码+地址码,ID就是对指令中的操作码字段进行分析解释,识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
6、寄存器分为专用寄存器(运算器、控制器中的寄存器,作用固定)和通用寄存器。
7、CPU的核心是内核,多核CPU系统的最大优点是可以满足用户同时进行多任务处理等要求。单核多线程CPU是交替的转换执行多个任务,交替转换时间短暂,用户一般感知不到;多核在理论上是任何时间内每个核各自执行各自的任务,不存在交替问题。
本节历年真题示例:
(2010年)11.为实现程序指令的顺序执行,CPU ( )中的值将自动加1。
A.指令寄存器(IR) B.程序计数器(PC) C.地址寄存器(AR) D.指令译码器(ID)
【答案:B】书本P-3程序计数器,为了保证程序指令能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容;即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
(2010年)15.计算机指令一般包括操作码和地址码两部分,为分析执行一条指令,其( )。
A.操作码应存入指令寄存器(IR),地址码应存入程序计数器(PC)
B.操作码应存入程序计数器(PC),地址码应存入指令寄存器(IR)
C.操作码和地址码都应存入指令寄存器(IR)
D.操作码和地址码都应存入程序计数器(PC)
(2011年)19.在CPU中用于跟踪指令地址的寄存器是( )。
A.地址寄存器(MAR) B.程序计数器(PC) C.数据寄存器(MDR) D.指令寄存器(IR)
【答案:B】通用寄存器常用于暂存运算器需要的数据或运算结果,地址寄存器和数据寄存器用于访问内存时的地址和数据,指令寄存器用于暂存正在执行的指令,程序计数器中存放的执行的指令的地址。
1.1.2 数的表示和校验(★★★)
1、数值数据编码:
(1)原码表示法,数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则原码的定义如下:
(2)反码表示法:数值X的反码记作[X]反,如果机器字长为n,则反码定义如下:
(3)补码表示法,数值X的补码记作[X]补,如果机器字长为n,则补码定义如下:
(4)移码表示法,是在数X上增加一个偏移变量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为2^{n-1},则移码定义如下:
若X是纯整数,则[ X ]移 = 2^{n-1}+ X(−2^{n-1}< = X < =2^{n-1});若X是纯小数,则[ X ] 移=1+X(-1<=X<=1)。
补码的符号位取反就是相应的移码表示。
机器字长为n时各种码制表示的带符号数的范围(★★★):
2、浮点表示:E为阶码(带符号的纯整数,决定数的表示范围),F为尾数(带符号的纯小数,决定数的精度)。浮点数所能表示的数值范围主要有阶码决定,所表示数值的进度由尾数决定。
3、进制转换:二进制(B),八进制(O),十进制(D),十六进制(H)。
1)二、八、十六进制转为十进制:按权展开运算
二进制
八进制
十六进制
2)十进制转换为二、八、十六进制:整除取余法
十进制100转为二进制:1100100(B)
十进制100转为八进制:144(0)
十进制100转为16进制:64(H)
3)八、十六进制转为二进制
八进制357(0)转换为二进制:011101111
十六进制A6F(H)转换为二进制:101001101111
4、检验码
1)奇偶校验码:通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距(一个编码系统中任意两个合法编码之间至少有多少个二进制位不同)变为2。奇校验只能发现奇数位出错的编码,不能发现偶数位出错的情况。
2)海明码:利用奇偶性来检错和纠错的校验方法,设数据位是n位,校验位是k位,则n和k必须满足:
3)循环冗余校验码(CRC):应用于数据通信领域和磁介质存储系统中,利用生成多项式为k个数据位产生r个校验位来进行编码,其编码长度为k+r。CRC编码才用的是模2运算,即异或运算:相异为真,非异为假。
1.2 计算机体系结构
1.2.1 概述
计算机体系结构分类:
1)按处理机的数量进行分类:单处理系统、并行处理与多处理系统、分布式处理系统
2)微观上按并行程度分类:Flynn分类法、冯泽云分类法、Handler分类法、Kuck分类法。
流水线技术
1)流水线周期:各自任务中执行时间最长的(最慢的)子任务的执行时间。流水线执行完n条指令所需要的时间:
2)吞吐率:是指单位时间里流水线处理机流出的结果数。对指令而言,就是单位时间里执行的指令数,最大吞吐率就是最长子过程所有时间的倒数。
1.2.2 存储系统(★★★)
三层存储器分别是高速缓存、主存储器和辅助存储器(外存储器)。
1、高速缓存 ->设置目的:缓解CPU和主存速度不匹配的问题
高速缓存(Cache)是用来存放当前最活跃的程序和数据,其特点是:容量一般在几千字节到几兆字节之间;速度一般比主存快5~10倍,有快速半导体存储器构成,其内容是主存局部域的副本,对程序员来说是透明的。
Cache一般位于CPU与主存之间,主要包括管理模块、由相联存储器构成的存储表以及小容量高速存储器。实际应用时首先判断CPU要访问的信息是否在Cache存储器中,在则命中(直接对Cache存储器寻址),不在则没命中(要按照替换原则决定将贮存的一块信息放到Cache存储器的某一块里)。
2、地址映像
CPU工作时给出的是主存的地址,要从Cache存储器中读写信息,就需要将主存地址转换成Cache存储器的地址,这种地址的转换叫做地址映像,主要有三种方法:
(1)直接映像:主存块与Cache块对应关系固定,主存中的块只能存放在Cache存储器的相同块号中,只要主存地址中的主存区号与Cache中的主存区号相同,则表明访问Cache命中。
优点:地址变换简单、访问速度快;
缺点:块冲突率高,Cache空间得不到充分利用,灵活性差。
主存地址:
直接映像示意图:
(2)全相联映像:主存与Cache存储器分成容量相同的块,贮存的任一块可以调入Cache存储器的任一个块的空间中;
优点:主存的块调入Cache的位置不受限制,Cache的块冲突概率最低,十分灵活,Cache利用率高;
缺点:无法从主存块号中直接获得所对应的Cache块号,变换比较复杂,速度比较慢,而且成本高,实现起来比较困难。
主存地址及全相联映像示意图:
(3)组相联映像:是直接映像和全相联映像的折中,将Cache块再分组,组分组采用直接映像方式而块采用全相联映像方式;主存任何区的0组只能存到Cache的0组中,1组只能存到Cache的1组中,以此类推,主存一组中的任一块可以存入Cache相应组的任一块中。
优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低;
缺点:实现难度和造价要比直接映象方式高。
主存地址位数=区号+组号+主存块号+块内地址
Cache地址位数=组号+组内块号+块内地址
组相联映像示意图:(源于网络分享)
(4)替换算法
高速缓存替换算法目标是获得做高的Cache命中率,常用算法:随机替换算法、先进先出算法、近期最少使用算法、优化替换算法。
1)随机替换算法:用随机数发生器产生一个要替换的块号,并对其进行替换,优点:简单易实现; 缺点:命中率较低,CPU从Cache中读到有用的数据称为命中。
2)先进先出算法:将最先进入的数据块替换出去,优点:易实现,系统开销小; 缺点:不能提高命中率。
3)近期最少使用算法:将近期最少使用的数据块替换出去,
优点:有效的反应了程序的局部性; 缺点:需要独立的计数模块,系统开销大,LRU假设运行情况与之前时刻相同,这是不合理的。
4)优化替换方法:需先运行一次程序,统计Cache替换情况,第二次运行时选择最优替换方式,优点:命中率最高;缺点:需先执行一次程序,不现实,是一种理想算法。
(5)Cache的性能分析
命中率是Cache的一个重要指标,Cache的设计目标是在成本允许的条件下打到较高的命中率,是存储系统具有较短的平均访问时间。设H c为Cache的命中率,tc为Cache的存取时间,tm为主存的访问时间,则Cache存储器的等效加权平均访问时间ta为:
3、虚拟存储器实际上是一种逻辑存储器,实质上是对物理存储设备进行逻辑化的处理。
4、相联存储器是一种按内容访问的存储器,其工作原理就是把数据或数据的某部分作为关键字,按关键字与存储器中的每一单元进行比较,找出存储器中所有与关键字相同的数据字。
5、磁盘存储器
(1)磁盘存储器有盘片、驱动器、控制器和接口组成。
(2)道密度:沿径向的单位距离的磁道数,单位tpi(每英寸磁道数)。
(3)位密度:磁道单位距离可记录的位数,单位bpi(每英寸位数)。
(4)因为每条磁道上的扇区数相同,而每个扇区的大小有一样,所以每条磁道都记录同样多的信息,又因为里圈磁道圆周比外圈磁道的圆周小,所以圈磁道的位密度要比外圈磁道的位密度高,最内圈的位密度成为最大密度。
(5)每个扇区可存放的数据块大小相同;
(6)每条磁道记录相同大小的数据量。
(7)格式化容量(各扇区中数据区容量的总和):
格式化容量=面数×(磁道数/面)×(扇区数/道)×(字节数/扇区) 相约后=字节数
(8)非格式化容量(一个磁盘所能存储的总位数):
非格式化容量=面数×(磁道数/面)×内圆周长×最大位密度
ex:磁盘碎片整理程序->对磁盘进行碎片整理,以提高访问文件的速度
6、磁盘阵列技术
磁盘阵列是由多台磁盘存储器组成的一个快速、大容量、高可靠性的外存子系统,常见的RAID如下表:
1.2.3 输入输出技术
计算机系统中存在多种内存与接口地址的编址方法,常见的2种:
内存与接口地址的独立编址:内存地址和接口地址是完全独立的两个地址空间,优点是指令很易使用和辨认,缺点是用于接口的指令太少,功能太弱。
内存与接口地止的统一编址:内存单元和接口共用地址空间,在这些地址空间里划分出一部分地址分配给接口使用,其他的内存单元使用,并且各自空间各自使用,不可公用。
优点:内存的指令都可以用于接口,大大增强了对接口的操作功能,而且在指令上也不再区分内存或接口指令;
缺点:整个地址空间被一分为二,导致内存地址不连续,内存和接口共用指令导致程序维护不便。
1、程序控制方式
在完成外设数据的输入输出时,整个输入输出过程是在CPU执行程序的控制下完成的,这种方式分为:
(1)无条件传送:外设总是准备好的,它可以无条件随时接受CPU发来的输出数据,也能够无条件随时向CPU提供需要输入的数据。
(2) 程序查询方式:CPU利用程序来查询外设是状态,判断外设是否准备好输入输出数据,然后CPU针对性为外设提供输入输出服务。
(3)中断方式:CPU不等待,也不利用程序去查询外设的状态,而是等外设准备好后,向CPU发出中断请求,该方式CPU无需等待提高了效率。
以上3种方式都需要CPU参与。
(4)直接内存存取(DMA方式):无需CPU参与,数据在内存与I/O设备间的直接成块传送。
DMA控制方式是直接在主存和外设之间建立数据通路进行数据的交换处理。
(5)通道方式和外围处理机方式:更进一步减轻CPU对I/O操作的控制,使得CPU工作更高效,但是同时增加了代价—硬件的付出。
1.3 安全性、可靠性与系统性能评测基础知识
1.3.1 加密技术和认证技术(★★★)
1.3.1.1 加密技术
1.对称加密技术:文件加密和解密使用相同的密钥。
数据加密标准算法(DES):采用替换和移位的方法加密,用56位密钥对64位二进制数据看进行加密;
三重DES:用两个56位的秘钥K1和K2,发送方用K1加密,K2解密,在使用K1加密;
RC-5
国际数据加密算法(IDEA):类似三重DES,密钥长度128位;
高级加密标准算法(AES):基于排列和置换运算。
2.非对称加密技术:需要公开密钥和私有秘钥,公开密钥和私有秘钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥,如果有私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密;非对称密钥有两个不同的体制:加密模型和认证模型(如下图)。
非对称加密算法(公钥秘法算法)的保密性比较好,它消除了最终用户交换秘钥的需要,但加密和解密花费时间长、速度慢,不适合于对文件加密,而只适用于对少量数据进行加密,代表算法RSA,它的安全性是基于大素数分解的困难性。
1.3.1.2 认证技术
认证技术主要解决网络通信过程中通信双方的身份认可,认证方一般有账户名/口令、使用摘要算法认证和基于PKI的认证。
1.Hash函数信息摘要:将任意长度的数据映射为固定长度的数据
返回的值被叫做Hash值,单向Hash函数用于产生信息摘要。
信息摘要简要的描述了一份较长的信息或文件,它可以被看错一份长文件的“数字指纹”,信息摘要用于创建数字签名。
对于特定的文件而言,信息摘要是唯一的,在数字签名中Hash函数可以解决验证签名和用户身份验证、不可抵赖性的问题。
信息摘要算法是Hash算法的一种,具有以下特点:
在某一特定时间内,无法查找经Hash操作后生成特定Hash值的原报文,也无法查找两个经Hash操作后生成相同Hash值的不通报文。
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的,计算出的结果越长,一般认为该摘要算法越安全,MD2、MD4、MD5(MD表示信息摘要)是被广泛使用的Hash函数,MD5 128位,SHA-1 160位。
输入的消息不同,产生的消息摘要必不同,输入的消息相同,产生的消息摘要一定是相同的。
单向不可逆。
2.数字签名
数字签名主要经过以下几个过程(图示来源紫依数据库系统工程师视频教程):
(1)信息发送者使用一单向Hash函数对信息生成信息摘要。
(2)信息发送者使用自己的私钥签名信息摘要。
(3)信息发送者把信息本身和已签名的信息摘要一起发送出去。
(4)信息接收者通过使用与信息发送者使用的同一个单向Hash函数对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过。
3.数字加密(图示来源紫依数据库系统工程师视频教程):
数字加密主要经过以下几个过程。
(1)当信息发送者需要发送信息时,首先生成一个对称密钥,用该对称密钥加密要发送的报文;
(2)信息发送者用信息接收者的公钥加密上述对称密钥;
(3)信息发送者将第一步和第二步的结果结合在一起传给信息接收者,称为数字信封;
(4)信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,得到真正的原文。
数字签名和数字加密的区别:
(1)数字签名和数字加密的过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。
(2)数字加密则使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。
(3)另外,数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息保密性。
1.3.2.计算机的可靠性(★★★)
1.计算机系统的可靠性是指它从开始运行(t=0)到某时刻t这段时间内能正常运行的概率,用R(t)表示。
2.所谓失效率,是指达内时间内失效的元件数与与案件总数的比例,用λ表示,当λ为常数时,可靠性与失效率的关系为:
3.平均无故障时间(MTBF):两次故障之间系统能正常工作的时间的平均值:
4.计算机系统的可维修性:通常用平均修复时间(MTRF)来表示,指从故障发生到机器修复平均所需要的时间。
5.计算机系统的可用性:是指计算机的使用效率,它以系统在执行任务的任意时刻能正常工作的概率A来表示:
6.计算机可靠性模型大致分为3类:
(1)串联系统:假设一个系统由N个子系统组成,当且仅当所有的子系统能正常工作,系统才能正常工作。设各子系统的可靠性度量值分别用R 1 , R 2 , . . . , R n来表示,则系统可靠性R的度量值:
如果各子系统的失效率分别用λ1 ,λ2 , . . . ,λn来表示,则系统的失效率λ:
(2)并联系统:假设一个系统有N个子系统组成,只要有一个子系统正常工作,系统就能正常工作,整个系统的可靠性度量值:
并联系统失效率:
7.高计算机可靠性的两项措施:
提高元器件质量,改进加工工艺与工艺结构,完善电路设计;
发展容错技术,使得在计算机硬件有故障的情况下,计算机仍能继续运行,得出正确的结果。
1.4 多媒体基础知识
本节内容除整理出来的重难点之外,最好通篇读一下。
媒体:一是指信息的物理载体,比如磁盘、光盘、磁带等等;二是指承载信息的载体,比如声音、文字、图像、视频等等。
1.媒体的分类(★★)
(1)感觉媒体(声音图像):
(2)表示媒体(数据编码):指用于数据交换的编码,如图像编码(JPEG、MPEG等)、文本编码(ASCII码、GB2312等)和声音编码等。
(3)表现媒体(I/O设备):指进行信息输入和输出的媒体,如键盘、鼠标、扫描仪、话筒、摄像机等为输入媒体;显示器、打印机、喇叭等为输出媒体。
(4)交换媒体(Interchange Medium):指用来在系统之间进行数据交换的媒体,包括以下2种。
存储媒体:指用于存储表示媒体的物理介质,如硬盘、磁盘、光盘、ROM及RAM等。
传输媒体:指传输表示媒体的物理介质,如电缆、光缆、电磁波等。
2.声音信号的数字化
声音信号是一种模拟信号,计算机要对它进行处理,必须将它转换为数字声音信号,即用二进制数字的编码形式来表示声音(首先A/D转换),声音信号数字化3个步骤:采样—量化—编码。
(1)采样:把时间连续的模拟信号在时间轴上离散化的过程;
(2)量化:把在幅度上连续取值(模拟量)的每一个样本转换为离散值(数字量)表示;
(3)编码:按照一定的格式要求进行数据编码,再按某种既定格式组织成文件。
3.图形和图像
(1)颜色
色调:颜色的类别;
饱和度:指某一颜色的深浅程度;
亮度:描述光作用于人眼时引起的敏感程度感觉,指彩色明暗深浅程度。
(2)图像的属性
分辨率:分为图像分辨率(确定的是组成一幅图像的像素数目)和显示分辨率(显示设备能够显示图像的区域大小),例如,用200dpi(dpi表示每英寸的像素点数)来扫描一幅2×2.5平方英寸的彩色照片,可以得到一幅400×500个像素点的图像。200*(2x2.5)
像素深度:像素深度是指存储每个像素所用的二进制位数,也用它来度量图像的色彩分辨率,像素深度确定彩色图像的每个像素可能有的颜色数或者确定灰度图像的每个像素可能有的灰度级数。
例1:只有一个分量的单色图像,假设每个像素有8位,则最大灰度数目为2^8 = 256。
例2:一幅彩色图像RGB三通道的像素位数分别为4,4,2,则最大颜色数目为2^(4 + 4 + 2) = 1024,也就是说像素的深度为10位,每个像素可以是1024种颜色中的一种。
真/伪色彩:真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色。伪彩色图像的含义是,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表(color look-up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值产生的彩色称为伪彩色。
图像的数据量计算:
图像数据量=图像的总像素数×像素深度/8(byte)
例如,一幅640*480的256(2^8=256,即像素深度为8位)色图像,数据量为:640×480×8/8=300Kb。
(3)目前使用最广泛图像压缩的编码标准就是JPEG,图像文件格式BMP、GIF、TIFF、PCX、PNG、JPEG、WMF。
4.视频文件格式:Flic文件(fli、.flc)、AVI文件(.avi)、Quick Time文件(.mov、.qt)、MPEG文件(.mpeg、.mpg、.dat、.mp4)、RealVideo文件(.rm、.rmvb)。
函数调用和返回控制是用(栈)实现的。
2.1程序语言概述
2.1.1 程序语言的基本概念
1.低级语言和高级语言
低级语言:包括机器语言和汇编语言,是一种面向机器的语言,效率低、程序可读性很差、难以理解、难以修改和维护。
高级语言:面向各类应用的程序语言,功能更强、抽象级别更高,常见的有Java、C、C++、C#、Python、PHP、JavaScript等,这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
2.汇编、解释、编译
高级程序语言必须进行翻译才能为计算机硬件所理解,语言之间的翻译形式有多种,基本方式为汇编、解释和编译。
用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个汇编程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。
3.编译程序和解释程序
解释程序(解释器):它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;
编译程序(编译器):将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
区别(这个是选择常考知识点):
1)编译方式下,机器上运行的是与源程序等价的目标程序,源程序与编译程序都不再参与目标程序的执行过程;
2)解释方式下,解释程序与源程序(或者某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。
3)解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。
编译和解释的比较:编译比解释方式可能取得更高的效率,用户程序运行的速度更快;解释方式比编译方式更灵活(解释程序需要反复检查源程序);解释方式可移植性好。
4.程序设计语言的分类
若一种程序语言不依赖于机器硬件,则称为高级语言;若程序语言能够应用于范围广泛的问题求解领域,则称为通用的程序设计语言。
① PHP是一种在服务器端执行的、嵌入HTML文档的脚本语言,PHP可以快速地执行动态网页。
② Python是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用的原型。
③ JavaScript是一种脚本语言,被广泛用于web应用开发,常用来网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果,通常嵌入HTML使用。
2.1.2 程序语言的基本成分(★★★)
程序语言的基本成分包括:数据、运算、控制、传输。(2020年选择题考点)
1.程序语言的数据成分
常量和变量:变量具有左值(指存储单元:地址、容器)和右值(内容),在程序运行过程中其右值可以改变;常量只有右值,在程序运行过程中其右值不能改变。
全局变量和局部变量:系统为全局变量分配的存储空间在程序运行的过程中一般是不改变的,而为局部变量分配的存储单元是可以动态改变的。
按照数据组织形式的不同分为基本类型、用户定义类型、构造类型及其他类型,以C语言为例:
– 基本类型:int、char、float、double、bool等;
– 特殊类型:void;
– 用户定义类型:enum(枚举类型);
– 构造类型:数组、结构、联合;
– 指针类型:type *;
– 抽象数据类型:类类型。
2.程序语言的控制成分:顺序结构、选择结构、循环结构。
3.函数(很重要)
函数涉及3个概念:函数定义、函数声明和函数调用。
调用函数和被调用函数之间交换信息的方法主要有2种:一种是被调用函数把返回值返回给主调函数,另一种是通过参数带回信息,函数调用实参与形参间交换信息的方法有值调用和引用调用:
传值调用:实现函数调用时实参向形式参数传递相应类型的值,形参不能向实参传递信息(单向传递),实参可以是常量(表达式),也可以是变量(数组元素),例如:
引用调用(传地址调用):引用是C++中增加的数据类型,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实际参数所做的访问和改变,可以实现双向传递;因此只能是变量(数组元素),而不能是常量(表达式),例如:
2.2 程序语言翻译基础
2.2.1 汇编程序基本原理(了解)
汇编语言源程序有3类语句:指令语句、伪指令语句和宏指令语句。
汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序,汇编程序的基本工作包括每一条可执行汇编语句转换成对应的机器指令,处理源程序中出现的伪指令。由于汇编指令中形成操作数地址的部分可能出现后面才会有定义的符号,所以汇编程序一般需要两次扫描源程序才能完成翻译过程。
2.2.2 编译程序基本原理(★★★)
编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言),编译程序工作过程一般分为6个阶段:
1.词法分析
词法分析阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号,“单词”符号是程序设计语言的基本语法单位,如关键字或保留字、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。
2.语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等,检查和处理程序中的语法错误,如果源程序中没有语法错误,语法分析后就能正确地构造出其语法树,否则就指出语法错误,并给出相应的诊断信息。
3.语义分析
语义分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。
语义分析的一个主要工作是进行类型分析和检查,程序语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是一种类型不匹配的错误。
4.中间代码生成(★★★)
中间代码生成阶段的工作是根据语义分析的输出生成中间代码。常用的中间代码有:后缀式(逆波兰式)、四元式(三地址码)、树形。
(1)中缀式表达式:即通常所使用的表达式,如( a + b ) ∗ c − d (a+b)*c-d(a+b)∗c−d;
后缀表达式转为中缀表达式:从左至右扫描后缀表达式,若遇到运算对象,则压入栈中,遇到运算符,则从栈中弹出栈顶的两个运算对象进行运算,并将运算结果压入栈中,重复以上过程,直到表达式最右端,结束。
前缀表达式转为中缀表达式:从右至左扫描后缀表达式,若遇到运算对象,则压入栈中,遇到运算符,则从栈中弹出栈顶的两个运算对象进行运算,并将运算结果压入栈中,重复以上过程,直到表达式最左端,结束。
(2)前缀式表达式(波兰式):将运算符在运算对象的前面,(a + b) ∗c−d (a+b)c-d(a+b)∗c−d后缀表达式为− ∗+ a b c d -+abcd−∗+abcd,即中缀表达式转换为前缀表达式,步骤:
1)按计算顺序全部加上括号:( ( ( a + b ) ∗ c ) − d ) (((a+b)c)-d)(((a+b)∗c)−d);
2)把每一对括号内的运算符移到括号前面:−(∗( + ( a b ) c ) d ) -((+(ab)c)d)−(∗(+(ab)c)d);
3)去掉括号:−∗+ a b c d -*+abcd−∗+abcd。
(3)后缀式表达式(逆波兰式):将运算符写在运算对象的后面,这种表示法的优点是根据运算对象和运算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值,( a + b ) ∗ c − d (a+b)c-d(a+b)∗c−d后缀表达式为a b + c ∗ d − ab+cd-ab+c∗d−,即中缀表达式转换为后缀表达式,步骤:
1)按计算顺序全部加上括号:( ( ( a + b )∗c )−d ) (((a+b)*c)-d)(((a+b)∗c)−d);
2)把每一对括号内的运算符移到括号后面:( ( ( ( a b ) + c )∗d )−((((ab)+c)d)-((((ab)+c)∗d)−;
3)去掉括号:a b + c∗d − ab+cd-ab+c∗d−。
5.代码优化
由于编译器将源程序翻译成中间代码的工作时机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间方面的效率较差,当需要生成高效的目标代码时,就必须进行优化。
优化代码可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。
6.目标代码生成
目标代码生成是编译器工作的最后一个阶段,这个阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
7.符号表管理
符号表的作用是记录源程序中各符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。
8.出错处理
源程序中不可避免地会有一些错误,这些错误大致分为静态错误和动态错误。
动态错误发生在程序运行时,如:变量取零时作除数、引用数组元素下标错误等。
静态错误是指编译阶段发生的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误成为语法错误。
静态语义错误是指语义分析时发现的运算符与运算对象类型不合法等错误。
2.2.3 解释程序基本原理(★★★)
解释程序通常可以分为两部分:第一部分是分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰式表示形式;第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。
3.1本章考点与知识点图谱
3.2 线性结构
3.2.1 线性表
1、线性表的定义
一个线性表是n个有限序列(n≥0),通常表示为( a1 , a2 , … , an ),其特点是在非空的线性表中:
(1)存在唯一的一个称作“第一个”的元素;
(2)存在唯一的一个称作“最后一个”的元素;
(3)除第一个元素外,序列中的,每个元素均只有一个直接前驱;
(4)除最后一个元素外,序列中的每个元素均只有一个直接后继。
2、线性表的存储结构
(1)线性表的顺序存储:指用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。这种存储方式下,元素间的逻辑关系无须占用额外的空间来存储。
优点:可以随机存取表中的元素,按序号查找元素的速度很快;
缺点:插入和删除操作需要移动元素。
(2)线性表的链式存储(链表)
线性表的链式存储用节点来存储数据元素,元素的节点地址可以连续,也可以不连续,因此,存储数据元素的同时必须存储元素之间的逻辑关系。另外,节点空间只有在需要的时候才申请,无须实现分配,基本的节点结构:
数据域存储数据元素的值,指针域存储当前元素的直接前驱或直接后继元素的位置信息,指针域中所存储的信息称为指针或链,单链表节点中只有一个指针域。
Head指针不存储实际的数据元素,用于辅助数据元素的定位,方便插入和删除操作。
优点:链式存储结构下进行插入和删除,实质是对相关指针的修改,不需要移动元素;
缺点:只能顺序地访问元素,而不能对元素进行随机存储。
3.链表的类别
根据节点中指针信息的实现方式,有:
(1)单链表:包含两个域,一个信息域和一个指针域,这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。
(2)双向链表:每个节点包含两个指针,分别指明当前元素的直接前驱和直接后继信息,可在两个方向上遍历链表中的元素。
(3)循环链表:表尾节点的指针指向表中的第一个节点,可从表中任意节点开始遍历整个链表。
(4)静态链表:借助数组来描述线性表的链式存储结构。
3.2.2 栈和队列、串
栈和队列与线性表逻辑结构相同,栈按“后进先出”规则进行操作(类似杯子喝水),队列“先进先出”规则进行操作(类似沙漏)。
1.栈:只能通过访问它的一端来实现数据存储和检索操作,按先进后出(FILO:First In Last Out)或后进先出(LIFO)规则进行插入删除操作。在栈中进行插入和删除操作的一端成为栈顶(Top),另一端成为栈底(Bottom)。
2.队列:是一种先进先出(FIFO:First In First Out)线性表,只允许在标的一段插入元素,而在标的另一端删除元素。允许插入元素的一端称为队尾,允许删除元素的一端称为对队头。
3.串是仅有字符构成的有限序列,是取值范围受限的线性表。
PS:2020年11月08日上午题选择题就考了线性表、栈、队列和串的概念题。
3.3 数组和矩阵
数组可看作是线性表的推广,其特点是多维数组的数据元素仍然是一个表。
3.4 树和图
3.4.1 树和二叉树
3.4.1.1 树
树是n(n≥0)个节点的有限集合,当n=0时称为空树,在任一非空树(n>0)中,有且仅有一个称为根的节点,其余节点可分为m(m≥0)个互不相交的有限集T1 , T2 ,…, Tm,其中每个集合又是一棵树,并且称为根节点的子树。
树相关术语:
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图中B节点是E、F节点的双亲节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,如上图中B、C、D是A的子节点;
兄弟节点:具有相同双亲节点的节点互称为兄弟节点,B、C、D和E、F互为兄弟节点;
节点的度:一个节点含有的子树的个数称为该节点的度;
叶子节点或终端节点:度为0的节点称为叶子节点,如上图C、E、F、G;
非终端节点或分支节点:度不为0的节点;
树的度:一棵树中,最大的节点的度称为树的度;
节点的层次:从根开始定义,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次,上图中树的深度为2;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
有序(无序)树:若将树中节点的各子树看成是从左到右具有次序的,即不能交换,则称该树为有序树,否则称为无序树。
森林:m(m>=0)棵互不相交的树的集合;
3.4.1.2 二叉树
二叉树是n(n≥0)个节点的有限集合,它或者是空树(n=0),或者是由一个根节点及两颗不相交的、分别称为左子树和右子树的二叉树所组成,简单来说,就是度不超过2的树(节点最多有两个叉)。
树和二叉树的区别:
二叉树中节点的子树要区分左子树和右子树,即使在节点只有一颗子树的情况下也要明确指出该子树是左子树还是右子树,树种则不区分;
二叉树中节点的最大度为2,而树中不限制节点的度数。
二叉树的性质:
二叉树第i层(i≥1)上至多有2^{i-1}个节点;
深度为k的二叉树至多有2^k-1个节点( k ≥ 1 )
对任何一棵二叉树,若其终端节点数为n0,度为2的节点数为n2,则n0 = n2 + 1;
具有n个节点的完全二叉树的深度为⌊log2^n+1⌋;(向下取整,小于等于)
3.4.1.3 满二叉树和完全二叉树
满二叉树:一个二叉树(深度为k),每一个层的节点数都达到最大值2^k-1。
完全二叉树:当深度k、有n个节点的二叉树,其每一个节点都与深度为k的满二叉树中编号为1~n的节点一一对应。叶子节点只能出现在最下层和次下层,并且最下面一层的节点都集中在该层最左边的若干位置的二叉树。
满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树。
3.4.1.4 二叉树的存储结构
1.顺序存储
用一组地址连续的存储单元存储二叉树中的节点,必须把节点排成一个适当的线性序列,并且节点再这个序列中的相互位置能反映出节点之间的逻辑关系。
显然,顺序存储结构对完全二叉树而言既简单又节省空间,而对于一般二叉树来说浪费空间了,不适用。
2.链式存储
由于二叉树中节点包含有数据元素、左子树根、右子树根及双亲等信息,因此可以用三叉链表或二叉链表(即一个节点含有3个指针或2个指针)来存储二叉树,链表的头指针指向二叉树的根节点。
3.4.1.5 二叉树的遍历
遍历是按某种策略访问树中的每个节点,且仅访问一次。
按照遍历左子树要在遍历右子树之前进行的约定,依据访问根节点的位置的不同,可以得到二叉树的前序、中序和后序三种遍历方法。(2020年11月08日上午题选择题)
1.前序遍历(根→左→右):访问根结点的操作发生在遍历其左右子树之前,若二叉树非空,操作步骤:
(1)访问根节点;(2)遍历左子树;(3)遍历右子树。
2.中序遍历(左→根→右):访问根结点的操作发生在遍历其左右子树之中(间),若二叉树非空,操作步骤:
(1)中序遍历左子树;(2)访问根节点;(3)中序遍历右子树。
3.后序遍历(左→右→根):访问根结点的操作发生在遍历其左右子树之后,若二叉树非空,操作步骤:
(1)遍历左子树;(2)遍历右子树;(3)访问根节点。
4.层次遍历:按层自上而下,自左而右逐层访问树中各层节点。
3.4.1.6 最优二叉树
最优二叉树又称为哈夫曼树,是一类带权路径长度最短的树。
路径长度:从树中一个节点到另一个节点之间的通路称为节点间的路径,该通路上分支数目。
树的路径长度:树根到每一个叶子之间的路径长度之和。
节点的带权路径长度:从该节点到树根之间的路径长度与该节点权的乘积。
树的带权路径长度为树中所有叶子节点的带权路径长度之和,记为:
其中n为带权叶子节点数目,wk为叶子节点的权值,lk为叶子节点到根节点的路径长度,根据定义,如下b图的为最优二叉树。
3.4.1.7 二叉查找树
二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树:
1.若其左子树非空,则其左子树中每个节点的值(关键码)都小于该节点值(关键码);
2.若其右子树非空,则其右子树中每个节点的值(关键码)都大于该节点值(关键码);
3.左、右子树本身就是2棵二叉查找树。
对二叉树进行中序遍历,可得到一个关键码递增有序的节点序列,使用二叉查找树来查找树中的数值比普通的二叉树更方便。
3.4.2 图
图是比树结构更复杂的一种数据结构,在图结构中,任意两个节点之间都可能有直接的关系,所以图中一个节点的前驱和后继的数目是没有限制的。
1.有向图:图中每条边都是有方向的,从顶点vi到vj的有向边< v i , v j >,vi称为弧尾,v j称为弧头,< v i , v j >和< v j , v i >为两条弧。
2.无向图:图中每条边都是无方向的,< v i , v j > 和< v j , v i > 为同一条边。
3.完全图:一个无向图具有n个顶点,且每个顶点与其他n − 1个顶点之间都有边则称为无向完全图,n个顶点的无向完全图的弧数目为n ( n − 1 ) / 2,n个顶点的有向完全图的弧数目为n ( n−1 ),因为任意两个不同顶点之间都存在方向相反的两条弧。
图的存储结构:
1.邻接矩阵表示法:利用一个矩阵来表示图中顶点之间的关系;
2.邻接链表表示法:为图中的每个顶点建立一个单链表,第i个单链表中的节点表示依附于定点v i 的边(对于有向图是以v i为尾的弧)。
3.5 常用算法
3.5.1 排序
假设含有n个记录的文件内容为{ R 1 , R 2 , … , R n },其相应的关键字为{ k 1 , k 2 , … , k n }。
常见的内部排序算法:
1.直接插入排序:在插入第i个记录时,R 1 , R 2 , … , R i − 1已经排好序,这时将记录R i的关键字依次与关键字k i − 1 , k i − 2 , … , k 1进行比较,从而找到Ri 应该插入的位置,插入位置及其后的记录依次向后移动。
2.冒泡排序:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换两个记录的值,然后比较第二个记录和第三个记录的关键字,以此类推,直至第n-1个记录和第n个记录的关键字比较完为止。
3.简单选择排序:每次选出关键字最小的记录,并和未排序记录进行交换。
4.希尔排序:又称为“缩小增量排序”,是对直接插入排序方法的改进,先将整个待排记录序列分割成若干个子序列,然后分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。
5.快速排序:通过一趟排序将待排的记录划分为独立的两部分,称为前半区和后半区,其中,前半区中记录的关键字均不大于后半区记录的关键字,然后再分别对这两部分记录继续进行快速排序,从而使整个序列有序。
3.5.3 查找算法
查找表是指由同一类型的数据元素(或记录)构成的集合,分为静态查找表(只进行查找和检索操作)和动态查找表(还可进行插入和删除操作)。
对于查找算法来说,其基本操作是“将记录的关键字与给定值进行比较”,因此,通常以“其关键字和给定值进行过比较的记录个数的平均值”作为衡量查找算法好坏的依据。为确定记录在查找表中的位置,需和给定值进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。
对于含有n个数据元素的查找表,查找成功的平均查找长度为:
Pi为查找表中第i ii个数据元素的概率,一般为1/n;Ci为找到第i个数据元素时已经比较过的次数。
1.顺序查找
从表中的一段开始,逐个进行记录的关键字和给定值的比较,若找到一个记录的关键字与给定值相等,则查找成功;若整个表中的记录均比较过,仍未找到关键字等于给定值的记录,则查找失败。
顺序查找是对顺序存储和链式存储方式的查找表都适用,优点算法简单且适用面广,缺点查找效率较低。
在等概率的情况下,顺序查找成功的平均查找长度为:
2.折半查找(二分查找)
折半查找基本思想:先令查找表中间位置记录的关键字和给定值比较,若相等,则查找成功;若不等,则缩小范围,直至新的查找区间中间位置记录的关键字等于给定值或者查找区间没有元素时(表名查找不成功)为止。
折半查找的平均查找长度为:
折半查找比顺序查找的效率要高,但它要求查找表进行顺序存储并且按关键字有序排列,一般不进行表的插入与删除操作。因此,折半查找适用于表不易变动,且经常进行查找的情况。
3.索引顺序查找
索引顺序查找又称分块查找,是对顺序查找方法的一种改进。
在分块查找过程中,首先将表分成若干块,每一块中关键字不一定有序,但块之间是有序的,即后一块中所有记录的关键字均大于前一个块中最大的关键字。此外,还建立一个“索引表”,索引表按关键字有序。
4.树表查找
二叉查找树是一种动态查找表,其特点是表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。
5.哈希查找
前面几种查找方法,由于记录的存储位置与其关键码之间不存在确定的关系,所以查找时都要通过一系列对关键字的比较,才能确定被查记录在表中的位置,即这类查找方法都建立在对关键字进行比较的基础之上。
哈希表思想:依据记录的关键码直接得到对应的存储位置,即要求记录的关键码与其存储位置之间存在一一对应的关系,通过这个关系,能很快的由关键码找到记录。
哈希函数:关键字作为自变量,关键字存放的地址作为因变量。
哈希冲突:对于某个哈希函数Hash和两个关键字K1和K2,如果K1≠ K2而H a s h ( K 1 ) = H a s h ( K 2 ),则称为冲突,对哈希函数来说,K1和K2称为同义词。
采用哈希法主要考虑的两个问题是哈希函数的构造和冲突的解决。
冲突处理:开放定址法、链地址法、再哈希法等。
(1)开放定制法
(2)链地址法
链地址法是一种经常使用且很有效的方法,它将具有相同哈希函数值得记录组织成一个链表,当链域的值为NULL时,表示已没有后继记录。
用链地址法解决冲突构造的哈希表中查找元素,就是根据哈希函数得到元素所在链表的头指针,然后在链表中进行顺序查找的过程。
3.5.3 图的相关算法
生成树:设图G = ( V , E ) G=(V,E)G=(V,E)是个连通图,如果其子图是一棵包含G GG的所有顶点的树,则该子图成为G GG的生成树。
对于连通图来说,边是带权值的,生成树的各边也都带权值,于是就把生成树各边的权值总和成为生成树的权,把权值最小的生成树称为最小生成树,求最小生成树最常用的两种算法:
1.普利姆算法:以顶点为准,从已选顶点所关联的未选边中找出权重最小的边,并且生成树不存在环。
2.克鲁斯卡尔算法:以边为主,找权值最小的边。
3.求单源点的最短路径算法:是指给定带权有向图G和源点v0,求从v0到G中其余各顶点的最短路径,按路径长度递增的次序产生最短路径的算法。
4.1操作系统基本概念
1.操作系统定义
操作系统:能有效地组织和管理系统中的各种软硬件资源,合理地组织计算机系统工作流程、控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。
操作系统2个重要作用:
通过资源管理提高计算机系统的效率;
改善人机界面向用户提供有好的工作环境。
2.操作系统功能
操作系统4个特征:并发性、共享性、虚拟性和不确定性。
操作系统功能5大部分:进程管理、文件管理、存储管理、设备管理、作业管理。
操作系统分类:批处理操作系统(单道和多道批处理)、分时操作系统(轮流机制)、实时操作系统(实时控制系统和实时信息处理系统)、网络操作系统(集中模式、客户端/服务器模式、对等模式模式)、分布式操作系统、微机操作系统和嵌入式操作系统等类型。
4.2 进程管理
进程管理也称处理机管理。
引入原因:多道程序批处理系统和分时操作系统中有多并发执行程序,采用程序已无法描述系统中程序执行时动态变化的过程。
进程是资源分配和独立运行的基本单位。(2020年选择题考题)
进程的组成:进程控制块PCB(进程存在的唯一标志)、程序(描述进程需要完成的功能)、数据(程序执行所需数据及工作区)
4.2.1 进程状态(★★★)
在多道程序系统中,理论上进程一般有3种基本状态:运行、就绪和阻塞;实际系统中情况更复杂一些,在三态模型上加入了新建态和终止态。
具体的状态关系如下:
另外,系统资源吃紧时进程挂起,具有挂起状态的进程状态及其转换如下:
4.2.2 进程间的通信(★★★)
1.同步与互斥
并发环境进程将必然存在资源共享和相互合作问题,进程通信是指各个进程交换信息的过程。
同步是合作进程间的直接制约问题,进程间的同步是指在系统中一些需要相互合作、协同工作的进程,比如数据库update操作涉及的进程;
互斥是申请临界资源进程间的间接制约问题,进程的互斥是指系统中多个进程因争用临界资源而互斥执行,比如打印机。
2.临界区
临界区是指进程中对临界资源实施操作的那段程序(或者说阻止多个进程同时进入访问共享资源的代码段),互斥区管理4条原则:有空即进、无空则等、有限等待、让权等待。
3.信号量机制
这个知识点常在选择题出现,主要是P、V判断。
信号量机制(PV机制,P意为通过,V意为释放)是一种有效的进程同步与互斥工具,主要有整型信号量、记录型信号量和信号量集机制,有网友通俗理解为厕所门上的“有人”“无人”提示,没差。
信号量是一个整型变量,根据控制对象不同被赋予不同的值。
S≥0表示某资源的可用数,S<0其绝对值表示阻塞队列中等待该资源的进程数。
PV操作:
P操作表示申请一个资源:S:=S-1,若S≥0(资源可用),则执行P操作的进程继续执行,若S<0(无资源可用)则置该进程为阻塞状态,并将其插入阻塞队列。
V操作表示释放一个资源:S:=S+1,若S≥0,则执行V操作的进程继续执行,若S≤0则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。
例1.同步案例:单缓冲区的生产者和消费者的同步问题,生产者进程P1(传输产品到缓冲区)和消费者进程P2(从缓冲区取走产品),P1和P2共用产品变量,对应P1、P2需要两个信号量S1、S2,初值分别为1、0。
方案:执行P(S1)→产品进入缓冲区→V(S2)→P(S2)→从缓冲区取走产品消费→V(S1)
P(S1)表示P1进程就绪准备工作,把它对应的信号量S1置0,表示P1进程不可用正在工作中;消费者得到产品后,V(S2)把S2置1,表示P2可以开始工作。
4.高级通信原语(了解一下)
PV操作属于低级通信方式:编程难度大、效率低。
高级通信方式主要分为:共享存储模式、消息传递模式和管道通信。
5.管程(了解一下)
同步机制—管程,基本思路是采用资源集中管理的方法,将系统中的资源用某种数据结构抽象的表示出来。由于临界区是访问共享资源的代码段,建立一个管程管理进程提出的访问请求。
管程有一些共享数据、一组能为并发进程所执行的作用在共享数据上的操作的集合、初始代码以及存取权组成。
6.进度调度
进度调度方式是指当有更高优先级的进程到来时如何分配CPU,分为可剥夺和不可剥夺两种。
4.2.3 死锁(★★★)
两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。扩展阶段是在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁;收缩阶段是在释放一个封锁之后,事务不能再申请和获得任何其他封锁。“两段”即指扩展阶段和收缩阶段。
两段锁协议不能避免死锁。
两段锁协议并不要求必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
解决死锁问题:采用一次封锁法。要求每个事务必须一次将所有要使用的数据全部加锁,否则不能继续执行,从而从根本上避免死锁的发生。其遵守两段锁协议。
如何解决死锁,以及两级锁能否规避死锁的发生,学习死锁要结合并发事务与两级锁的相关知识。
死锁,是指两个以上的进程相互都要求对方已经占有的资源导致无法继续运行下去的现象,产生原因竞争资源及进程推荐顺序非法,产生死锁的4个必要条件:互斥条件、请求保持条件、不可剥夺条件和环路条件。
死锁的4种处理策略:鸵鸟策略(不理财策略)、预防策略、避免策略和检测与解除死锁。
死锁预防是设法破坏产生死锁的4个必要条件
死锁避免——银行家算法
4.2.4 线程
2020年上午选择题考到 线程可以实现在:用户空间和内核。
传统的进程有2个基本属性:可拥有资源的独立单位,可独立调度和分配的基本单位。线程作为调度和分配的基本单位,进程作为独立分配资源的单位。
4.3 存储管理
4.3.1 基本概念(了解)
1.存储器的结构
存储器管理的对象是主存存储器(内存)。
存储管理的主要功能包括主存空间的分配和回收、提高主存的利用率、扩充主存、对主存信息实现有效保护。
常用的存储器结构:寄存器—主存—外存,寄存器—缓存—主存—存储组织的功能外存。
2.地址重定位是指将逻辑地址变换成主存物理地址的过程,分为静态地址重定位(程序装入主存时)和动态地址重定位(程序运行期间)。
4.3.2 存储管理方案
存储管理的主要目的是解决多个用户使用主存的问题,主要方案:分区存储管理、分页存储管理、分段存储管理、段页式存储管理以及虚拟存储管理。
1.页式存储管理的地址映射
进程执行时,系统通过查找页表就可以找到每页所对应的物理块号,如下逻辑页号为4,查找页表可得该页的物理块号为15,与页内地址256拼接得到物理地址,页表的作用是从页号到物理块号的地址映射。
2.段式存储管理的地址变换
系统中每个进程建立段表,每个段在表中占有一个表项,在其中记录了该段在主存中的基址(起始地址)和段的长度。进程在执行时,通过查段表来找到每个段所对应的主存区,为了实现从逻辑地址到物理地址的变换功能,系统中设置了段表寄存器,用于存放段表始址和段表长度。
在进行地址变换时:
(1)判断段号是否越界:段号S≥段表长度L,表示段号太大,访问越界,产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在主存中的起始地址,然后在检查段内地址d是否超过该段的段长SL。
(2)判断段内地址是否越界:若d≥SL(该段的段长),发出越界中断信号;若未越界,则要访问的主存物理地址=基址S′+段内地址d。
3.段页式存储管理的地址变换结构
在段页式系统中逻辑地址到物理地址的变换过程:
(1)根据段号S查段表,得到页表的起始地址;
(2)根据页号P查页表,得到物理块号b;
(3)将物理块号b拼页地址W得到物理地址。
4.4 设备管理
设备管理包括各种设备分配、缓冲区管理和实际物理I/O设备操作,通过管理达到提高设备利用率和方便用户的目的。
I/O系统由设备、控制器、通道(具有通道的计算机系统)、总线和I/O软件组成。
设备管理技术:中断技术、DMA技术、通道技术、缓冲技术。设备管理的主要功能是动态地掌握并记录设备的状态、设备分配和释放、缓冲区管理、实现物理I/O设备的操作、提供设备使用的用户接口及设备的访问和控制。
4.4.1 I/O软件
选择题常考这部分内容,I/O设备管理软件4个层次要掌握。
设置I/O软件的主要目标是设备独立性和统一命名,独立于设备,就可以提高设备管理软件的设计效率。I/O设备管理软件一般分为4层:中断处理程序、设备驱动程序(直接与硬件打交道)、与设备无关的系统软件和用户级软件。
4.4.2 设备管理采用的相关技术
引入通道的目的是使数据的传输独立于CPU,使CPU从繁琐的I/O工作中解脱出来。
1.引入缓冲技术的原因:
缓和CPU与I/O设备间速度不匹配的矛盾;
减少对CPU的中断频率,放宽对中断响应时间的限制;
提高CPU和I/O设备之间的并行性。
在所有的I/O设备与处理机(主存)之间都使用了缓冲区来交换数据,所以操作系统必须组织和管理好这些缓冲区,缓冲可分为单缓冲、双缓冲、多缓冲和环形缓冲。
2.Spooling技术
Spooling(外围设备联机操作)实际上是用一类物理设备模拟另一类物理设备的技术,是使独占使用的设备变成多台虚拟设备的一种技术,也是一种速度匹配技术。
4.4.3 磁盘调度
磁盘调度是采用适当调度算法使各进程对磁盘的平均访问时间最小,磁盘调度氛围移臂调度和旋转调度,磁盘调度的目标是使磁盘的平均寻道时间最少。常用的磁盘调度算法:
先来先服务(FCFS):按访问请求到达的先后次序服务; (就绪-运行-等待-等待)
最短寻道时间优先(SSTF):优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先;
扫描算法(SCAN):不仅考虑到要访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向;
单向扫描调度算法(CSCAN):磁头只做单向移动。
4.5 文件管理
文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合,一个文件包括文件体和文件说明。
文件管理系统,就是操作系统中实现文件统一管理的一组软件和相关数据的集合,专门负责管理和存取文件信息的软件机构。
文件系统类型:FAT、Vfat、NTFS、Ext2、HPFS等。
4.5.1 文件的结构和组织
文件的结构是指文件的组织形式。
Unix文件索引表项分4种寻址方式:直接寻址、一级间接寻址、二级间接寻址、三级间接寻址。
4.5.2 文件目录
文件至少包括文件名和存放文件的物理地址,这个数据结构称为文件控制块,文件控制块的有序集合称为文件目录。
文件控制块包含三类信息:基本信息类、存取控制信息类、使用信息类。
单机目录结构:在整个系统中只需建立以张目录表,每个文件占一个目录项;
二级目录结构:有主文件目录和用户目录组成;
多级目录结构:两级目录结构的层次关系推广,也称为树形目录结构。
绝对路径名:从根目录“/”开始的完整文件名;
相对路径名:从当前工作目录下的路径名。
4.5.3 存取方法和存储空间的管理(★★★)
文件的存取方法是指读写文件存储器上的一个物理块的方法,通常有顺序存取和随机存取两种方法。
空闲区:外存空间上的一个连续的未分配区域。
4.5.4 文件的共享和保护(了解)
文件共享是指不同用户进程使用同一文件。
常见的文件链接有硬链接和符号链接。
硬链接:两个文件目录表指向同一个索引节点的链接,该链接也称基于索引节点的链接;符号链接:符建立新的文件或目录,并与原来文件或目录的路径名进行映射,当访问一个符号连接时,系统通过该映射找到原文件的路径,并对其进行访问。
文件系统对文件的保护常采用存取控制方式,存取控制就是不同的用户对文件的访问规定不同的权限,以防止文件被未经文件主同意的用户访问。
- 存取控制矩阵:是一个二维矩阵,一维列出计算机的全部用户,另一维列出系统中的全部文件。
存取控制表:按用户对文件的访问权力的差别对用户进行分类。
用户权限表:以用户或用户组为单位将用户可存取的文件集中起来存入表中。
密码:文件存入磁盘时用该密码对文件内容加密。
4.5.5 系统的安全与可靠性
系统的安全涉及两类不同的问题,一类涉及技术、管理、法律、道德和政治等问题,另一类涉及操作系统的安全机制。一般从4个级别对文件进行安全性管理:系统级、用户级、目录级和文件级。
文件系统的可靠性是指系统抵抗和预防各种物理性破坏和人为性破坏的能力,(1)转储和恢复;(2)日志文件;(3)文件系统的一致性。
4.6 作业管理
作业是系统为完成一个用户的计算任务所做的工作总和,在操作系统中用来控制作业进入、执行和撤销的一组程序称为作业管理程序。
作业的状态及其转换:
选择调度算法需要考虑如下因素:与系统的整个设计目标一致,均衡的使用系统资源,以及平衡系统和用户的要求。
作业调度算法:
先来先服务:启动等待时间最长的作业优先;
短作业优先:启动要求运行时间最短的作业;
响应比高优先:响应比高的作业优先启动。
作业响应时间为作业进入系统后的等候时间与作业的执行时间之后:
优先级调度算法:可由用户指定作业优先级,优先级高的作业先启动;
均衡调度算法:根据系统的运行情况和作业本身的特性对作业进行分类。
通常用平均周转时间或平均带权周转时间来衡量调度性能的优劣,假设作业J i ( 1 , 2 , … , n )的提交时间为tsi,执行时间为tri,作业完成时间为tai,则作业Ji的周转时间Ti和带权周转时间Wi分别定义为:
n个作业的平均周转时间T和戴荃周转时间W分别定义为:
显然,等待时间为0时作业的周转时间最短。
用户界面是计算机中实现用户与计算机通信的软硬件部分的总称。
用户界面分为:控制面板式用户界面、字符用户界面、图形用户界面、新一代用户界面。
5.1网络基础知识
计算机网络概述(了解)
计算机网络的定义:利用通信设备和线路将地理位置分散的、功能独立的自主计算机系统或由计算机控制的外部设备连接起来,在网络操作系统的控制下,按照约定的通信协议进行信息交换,实现资源共享的系统。
计算机网络发展的4个阶段:具有通信功能的单机系统→具通信功能的多机系统→以共享资源为目的的计算机网络→以局域网及因特网为支撑环境的分布式计算机系统。
5.1.1 计算机网络功能
计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性。
计算机网络按照数据通信和数据处理的功能可分为两层:内层通信子网和外层资源子网。
通信子网的节点计算机和高速通信线路组成独立的数据系统,承担全网的数据传输、交换、加工和变换等通信处理工作;
通信子网对应OSI中的低三层:物理层、数据链路层、网络层,专门解决数据传输和通信控制问题;
资源子网包括计算机、终端、通信子网接口设备、外部设备及各种软件资源等,负责全网的数据处理和向网络用户提供网络资源及网络服务;
资源子网对应OSI中的高三层:会话层、表示层、应用层,主攻数据处理。
5.1.2 计算机网络分类
计算机网络按通信距离分为广域网、局域网和城域网;按网络拓扑结构分为星型网、树形网、环形网和总线网,各类网络的特征参数如下:
广域网多用分布式或树形结构,局域网常使用总线型、环型、星型或树形结构。
5.1.3 网络设备(★★★)
5.2.1 网络设备
5.2.1.1 物理层的互联设备
中继器:它是在物理层上实现局域网网段互连的,用于扩展局域网网段的长度,在以太网中最多只能使用4个中继器。
集线器:可以看成是一种特殊的多路中继器,也具有信号放大功能。
5.2.1.2 数据链路层的互连设备
1.网桥
网桥:用于连接两个局域网网段,工作与数据链路层。网桥要分析帧地址字段以决定是否把收到的帧转发到另一个网络段上,网桥工作与MAC子层。
网桥检查帧的源地址和目标地址,如果两者在同一个网络段上,就把帧转发到另一个网络段上,在同一网段则无需转发。
把分布在两层楼上的网络分成每层一个网络段,段中间用网桥相连,这样的配置可以最大限度的缓解网络通信繁忙的程度,提高通信效率;同时,由于网桥的隔离作用,一个网络段上的鼓掌不会影响到另一个网络段,从而提高网络的可靠性。
2.交换机
交换机:交换机按每一个包中的MAC地址相对简单的决策信息转发,交换机转发数据的延迟很小,操作接近单个局域网的性能,远远超过了普通桥接的转发性能。
交换机的工作过程:当交换机从某一节点收到一个以太网帧后,立即在其内存的MAC地址表(端口号→MAC地址)进行查找,确认目的MAC网卡连接在哪个节点,再将该帧转发至该节点。若该地指标中没有找到对应的MAC地址,交换机将数据包广播到所有节点,拥有该MAC地址的网卡接收到该广播帧后作出应答,交换机将其节点的MAC地址添加到MAC地址表中。
交换机3种交换技术:端口交换、帧交换、信元交换。
5.2.1.3 网络层的互联设备
1.路由器
路由器属于网络层互联设备,用于连接多个逻辑上分开的网络。逻辑网络是指一个单独的网络或一个子网,当数据曹昂一个子网传输到另一个子网时,可通过路由器来完成。
路由器具有很强的异种网互联能力,互联的网络最低两层协议可以互不相同,通过驱动软件接口道第三层上而得到统一(多协议路由器)。
路由器的最主要的功能是选择路径,网络层地址信息叫做网络逻辑地址,数据链路层的地址信息叫做物理地址。路由器存储器中维护着一个路径表,记录各个网络的逻辑地址,用于识别其他网络。
路由器工作过程:当路由器收到从一个网络向另一个网络发送的信息报时,将解读信息包中的数据获取目标网络的逻辑地址(IP地址),使用复杂的程序决定决定最优发送路径,然后重新打包并转发出去。
2.三层交换机
三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。当第三层交换机第一次收到一个数据包时必须通过路由功能寻找转发端口,同时记住目标和源MAC地址,以及其他相关信息,之后再次收到目标地址和源地址相同的帧时就直接进行交换,不在调用路由功能。
三层交换技术就是二层交换技术+三层转发技术。传统交换技术是在OSI网络标准模型第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。
5.2.1.4 应用层互联设备
网关:是应用层的互连设备,主要功能协议转换。
连接不同类型二协议差异有较大的网络时,选用网关设备进行协议转换,将数据重新分组,一边在两个不同类型的网络系统之间进行通信,由于协议转换的复杂性,一般网关只进行一对一转换。
5.2.2 网络传输介质
传输介质是信号传输的媒体,常用的介质分为有线介质和无线介质,有线介质有双绞线、同轴电缆和光纤等;无线介质有微波、红外线和激光等。
卫星通信是微波通信的特殊形式,优点是容量大距离远,缺点传播延迟时间长。
5.3 ISO/OSI网络体系结构(★★★)
ISO/OSI参考模型从低层至高层分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
5.4 网络的协议与标准
5.4.1 局域网/广域网协议(了解一下)
1.局域网协议
局域网基本组成:网络服务器、网络工作站、网络适配器和传输介质。
决定局域网特性的主要技术有3方面:用以传输数据的传输介质、用以连接各种设备的拓扑结构、用以共享资源的介质访问控制方法。不同的局域网协议最主要的区别是介质访问控制方法。
以太网主要的3种类型:IEEE802.3定义的标准局域网,速度10Mb/s,传输介质为细同轴电缆;IEEE802.3u定义的快速以太网,速度100Mb/s,传输介质为双绞线;IEEE802.3z定义的千兆以太网,速度1000Mb/s,传输介质为光纤或双绞线。
2.广域网协议
点对点协议(PPP)、数字用户线、数字专线、X.25协议
5.4.2 TCP/IP协议簇
TCP/IP协议是Internet的核心协议,是迄今为止发展最为成熟的互联网络协议系统,主要特征:
逻辑编址:每台连入互联网的计算机分配一个逻辑地址(IP),一个IP地址包括网络ID号、子网络ID号、主机ID号,因此可以通过分配的IP地址快速找对对应的计算机。
路由选择:在TCP/IP中包含了专门用于定义路由器如何选择网路路径的协议,即IP数据包的路由选择。
域名解析:为了方便用户记忆和使用专门设置的字母式地址结构,称为DNS或者域名,将域名映射为IP地址称为域名解析。
错误检测与流量控制:TCP/IP具有分组交换确保数据信息在网络上可靠传递的特性,包括监测数据信息的传输错误,确认已传递的数据信息已被成功地接收,监测网络系统的信息流量,防止网络拥塞现象。
TCP/IP分层模型:(★★★)
应用层协议数据单元—消息;传输层—用户数据报;数据链路层—帧;网络层—报文段
5.4.2.1 网际层协议
1.IP主要功能:
(1)将上层数据(如TCP、UDP数据)或同层其他数据(如ICMP数据)封装到IP数据报中;
(2)将IP数据报传送到最终目的地;
(3)对数据进行分段以使数据能够在链路层上进行传输;
(4)确定数据报到达其他网络目的地的路径。
5.4.2.2 传输层协议
1.TCP
(1)TCP为应用程序提供一个可靠的、面向连接的、全双工的数据传输服务。
(2)TCP通过重发技术实现数据传输可靠性:在TCP传输过程中,发送方启动一个定时器,然后将数据包发出,接收方收到这个信息就返回“确认”信息给发送方,如果发送方在定时器到点之前仍未收到这个确认信息,就重新发送该数据包。
(3)利用TCP建立和关闭连接需要通过3次握手:
源主机发送一个TCP数据包(同步标志位为1),表示想与目标机进行通信;
目标机发送确认(ACK位置1)进行响应表示愿意进行通信;
源主机以确认来响应目标机的TCP包,该确认包括想要接收的下一序列号(该帧可包含发送的数据)。
(4)TCP协议一般用于传输数据量较少但对可靠性要求高的场合。
2.UDP
UDP是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信。
TCP有助于提高可靠性,UDP有助于提高传输的高速率性。
UDP协议主要作用就是将UDP消息展示给应用层,它并不负责重新发送丢失的或出错的数据消息,不对接收到的无序IP数据包重新排序,不消除重复的IP数据报,不对已收到的数据报进行确认,也不负责建立或终止连接。
3.TCP、UDP对比
TCP提供可靠的数据传输服务,但消耗更多的时间和通信量;传输速率低,适用于传输的数据量不多,对传输速度要求不高,但对可靠性要求较高的场景。
UDP可以实现高速率传输,适用于传输数据量大,对传输速率高,但对可靠性要求不高或者已知网络是可靠的情况下的场景。
5.5 Internet基础知识(★★★)
5.5.1 域名,通常是用户所在的主机名字或地址。
1.域名格式:计算机主机名.本地名.组名.最高层域名
比如:
www.12306.cn,cn表示地理性顶级域名“中国”;
www.baidu.com,com表示类别顶级域名“工商企业性质的网站”;
www.263.net,net表示组织性顶级域名“网络技术组织机构”;
2.URL格式:协议://主机.域名[:端口号]][/路径][/文件名]
https://redisbook.readthedocs.io/en/latest/feature/scripting.html
http://www.12306.cn
HTTP是Hyper Text Transfer Protocol,超文本传输协议,面向网页,可以访问www全部资源;
FTP是File Transfer Protocol,文件传输协议,是面向文件的,一般只适用于局域网内部文件共享;
HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包;HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
5.5.2 IP地址(★★★)
每个IP地址都是由4个小于256的数字组成,数字之间用“.”分隔,Internet的IP地址有32位,4个字节,有两种表示格式:二进制格式和十进制格式,如下IP两种表示法结果是相同的:
129.102.4.11=====10000001 01100110 00000100 00001011
IP地址可以分为5类:A、B、C、D、E,在IP地址中,全0代表是网络,全1代表是广播。(以下2图表非常重要)
5.5.3 子网掩码(★★★)
子网掩码需结合IP地址来看,脱离了IP地址就毫无意义,它是用来识别具体的IP地址中哪些是网络号部分哪些是主机号部分。
子网掩码的格式与IP地址相同,对应网络号部分用1表示,对应主机号部分用0表示。比如C类地址前面3字节(24位)为网络号,第4字节(8位)为主机号,默认子网掩码为255.255.255.0,二进制形式:11111111 11111111 11111111 00000000。
1.求解网络号:子网掩码和IP地址转换为二进制,再做“逻辑与”运算(串联原理)。
例如:求C类地址210.42.96.138的网络号
(1)IP地址二进制转换:11010010 00101010 01010110 10001010
(2)子网掩码二进制转换:11111111 11111111 11111111 00000000
(3)逻辑与运算:11010010 00101010 01010110 00000000(红色部分网络号)
2.求解主机号:子网掩码按位取反,再与IP地址做“逻辑与”运算。
例如:求C类地址210.42.96.138的主机号
(1)子网掩码按位取反:00000000 00000000 00000000 11111111
(2)IP地址二进制转换:11010010 00101010 01010110 10001010
(3)逻辑与运算:00000000 000000000 00000000 10001010(红色部分主机号)
3.可变长子网掩码
VLSM(Variable Length Subnet Mask,可变长度子网掩码)应用不同大小的子网掩码来对IP地址空间进行子网划分,VLSM的作用就是在类的IP地址的基础上,从它们的主机号部分借出相应的位数来做网络号,也就是增加网络号的位数,具体的方法就是在IP地址的后面加上“/网络号及子网络号编址位数”,例如193.168.125.0/27,前27位表示网络号。
(1)IP地址:210.42.96.138 →11010010 00101010 01100000 10001010
(2)子网掩码:255.255.255.192 →11111111 11111111 11111111 11000000,可见该子网掩码左边连续为1位网络地址,右边连续为0位主机地址。
(3)逻辑与运算网络号:11010010 00101010 01100000 10001010(红色部分为网络号,绿色部分为主机号)
可变长子网掩码表示:210.42.96.138/26,/26表示该子网掩码有26个1,借主机号2位给网络号。
例题:子网划分C类IP:210.42.96.*/24,需要划分成8个子网。
(1)对应二进制11010010 00101010 01100000 ********(红色部分为网络号,*部分为主机号)
(2)划分8个子网需要借3位主机号(256-256/8=224=27+26+2^5),也就是11010010 00101010 01100000 **00000(绿色3个为借位网络号—子网号),对应C类子网划分总结表:
(3)子网号:000,001,010,011,100,101,110,111,对应每个子网最多主机数 2^5-2=302 。
同理,也可以通过借位网络号来增加主机数。
5.5.4 IPV6
现在的IP协议版本号为4,即IPV4,4个字节,32位,字节间用“.”连接,最多的IP地址为2^{32}≈40亿个。
IPV6地址空间为128位,16字节,使用8个十六进制数中间加小数点“:”表示,理论上最多的IP地址有2^{128}个。
例如:686E:8C64:FFFF:FFFF:0:1180:96A:FFFF
允许0压缩,即连续的0可以用一个冒号代替。
例如:FF05:0:0:0:0:0:0:B3→FF05::B3。
IPV6可以和IPV4结合使用,如:0:0:0:0:0:0:128.10.1.1→::128.10.1.1
5.6 Internet服务
使用各类Internet服务时,可以使用端口号进行区分,TCP和UDP协议的端口号为16位,支持065535的端口号,其中01023为公共端口,1024~65535需要注册登记。
5.6.1 域名服务
Internet中的域名地址与IP地址是等价的,它们之间是通过域名服务来完成映射变换的。
域名系统采用的是客户端/服务器模式,整个系统由解析器和域名服务器组成;
解析器负责查询域名服务器,返回信息等工作;
域名服务器是服务器方,保存着一部分域名空间的全部信息,分为主服务器、缓存服务器和转发服务器;
进行域名解析时,首先是检查本地缓存,然后本地域名服务器,再是依次从下往上向各层服务器发出查询地址的请求。
远程登录服务、电子邮件服务、万维网服务、文件传输服务。
5.7.信息安全与网络安全
信息安全要素:机密性、完整性、可用性、可控性和可审查性。
5.7.1.网络攻击的分类
1.主动攻击
主动攻击会导致某些数据流被篡改或者产生虚假的数据流,这类攻击可分为篡改消息、伪造消息、重放和拒绝服务。
(1)篡改消息:是指一个合法消息的某些部分被修改、删除、延迟、重新排序等,如修改传输消息中的数据,将:“允许甲执行操作”改为“允许乙执行操作”。
(2)伪造(伪装、假冒):是指某个实体假扮成其他实体,从而以欺骗的方式获取一些合法用户的权利和特权。
(3)重放:是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
(4)拒绝服务(DOS):是指攻击者不断地对网络服务系统进行干扰,改变其正常的作业流程,执行无关程序使系统响应减慢甚至瘫痪,影响正常用户的使用,甚至使合法用户被排斥而不能进入计算机网络系统或不能得到相应的服务。
2.被动攻击
与主动攻击不同的是,被动攻击中攻击者并不对数据信息做任何修改,也不产生虚假的数据流,通常包括窃听、流量分析等攻击方式。
(1)窃听(截取):是指攻击者在未经用户同意和认可的情况下获得了信息或有关的数据。
(2)流量分析(通信量分析):是指攻击者虽然从截获的消息中无法得到消息的真实内容,但攻击者还是能通过观察这些数据报的模式,分析确定出通信双方的位置、通信的次数及消息的长度,获知相关的敏感信息。
5.7.2 网络安全概述
5.7.2.1 安全的分类
物理安全:物理安全是保护计算机网络设备、设施以及其他媒体免遭地震、水灾、火灾等环境事故及人为操作失误及各种计算机犯罪行为导致的破坏,主要是场地安全与机房安全。
网络安全:主要是非授权访问、信息泄露或丢失、破坏数据完整性、拒绝服务攻击、利用网络传播病毒。
系统安全:主要指操作系统的安全。
应用安全:与应用系统相关的安全。
5.7.2.2 防火墙技术
防火墙的作用是防止不希望的、未经授权的进出被保护的内部网络,通过边界控制强化内部网络的安全策略。它阻挡对网络的非法访问和不安全数据的传递,使得本地系统和网络免于受到许多网络安全的威胁,防火墙主要是用于逻辑隔离外部网络与受保护的内部网络。
1.包过滤防火墙
包过滤防火墙处于网络层和数据链路层之间,一般有一个包检查块(包过滤器),数据包过滤可以根据数据报头中的各项信息来控制站点与站点、站点与网络、网络与网络之间的相互访问,但无法控制传输数据的内容,因为内容是应用层数据。
优点:
(1)过滤型防火墙通常直接转发报文,它对用户完全透明,速度较快;
(2)对每条传入或传出网络的IP包打开并进行检查,例如源地址、目标地址、协议和端口等,对于不符合包过滤规则的包进行识别记录,发出警报并丢弃该包
(3)包过滤通常被包含在路由器数据报中,所以不需要额外的系统来处理这个特征。
缺点:
(1)不能防范黑客攻击,因为网管部可能区分出可信网络与不可信网络的界限;
(2)不支持应用层协议,因为它不识别数据包中的应用层协议,访问控制粒度太粗糙,不能处理新的安全威胁。
2.应用代理网关防火墙
应用代理网关防火墙彻底隔断内网与外网的直接通信,内网用户对外网的访问变成防火墙对外网的访问,然后再由防火墙转发给内网用户。
所有通信都必须经应用层代理软件转发,访问者任何时候都不能与服务器建立直接的TCP连接,应用层的写一会化过程必须符合代理的安全策略要求。
优点:可以检查应用层、传输层和网络层的协议特征,对数据包的检测能力比较强。
缺点:难以配置,处理速度非常慢。
3.状态检测技术防火墙
状态检测技术防火墙结合了代理防火墙的安全性和包过滤防火墙的高速等优点,在不损失安全性的基础上提高了代理防火墙的性能。
状态检测防火墙对每个包的检查不仅根据规则表,更考虑了数据包是否符合会话所处的状态,因此提供了完整的对传输层的控制能力,同时也改进了流量处理速度。因为他采用了一系列优化技术,使防火墙性能大幅提升,能应用在各类网络环境中,尤其是在一些规则复杂的大型网络上。
5.8.2.3 入侵检测和防御
入侵检测系统(IDS):防火墙之后的第二道安全屏障,注重网络安全状况的监管,通过监视网络或系统资源,寻找违反安全策略的行为或遭到入侵攻击的迹象,并发出警报,因此绝大多数IDS洗头都是被动的。
主要功能:对用户和系统行为的检测与分析、系统安全漏洞的检查和扫描、重要文件的完整性评估、已知攻击行为的识别、异常行为模式的统计分析、操作系统的审计跟踪,以及违反安全策略的用户行为的检测等。
入侵防护系统(IPS):实在入侵检测系统的基础上发展起来的,不仅能够检测到网络中的攻击行为,同时可以主动地对攻击行为发出响应,对入侵活动和攻击性网络流量进行拦截,避免造成损失。
SSH协议在终端设备和远程站点之间建立安全连接。(在应用层和传输层基础上)
安全电子邮箱服务:SSL、HTTPS、PGP(优良保密协议)
ADSL(非对称数字用户线路),利用电话线上网,客户端介质:双绞线
ARP协议:IP到MAC地址的转换
6.1 数据技术基础
E-R图是下午必考题,三级模式结构是选择题常考知识点
6.1.1 数据库与数据库管理系统
数据库系统是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,方便多用户访问的计算机系统。
数据库技术发展阶段:人工管理阶段→文件系统阶段→数据库系统阶段。
数据库管理系统(DBMS)是数据库系统的核心软件,有一组相互关联的数据的集合和一组用以访问这些数据的软件组成,主要功能包括数据定义功能、数据操纵功能、数据库的运行管理、数据组织、存储管理和数据库的建立与维护。
数据定义(DDL):用户可以对数据库的结构描述,包括外模式、模式和内模式的定义;数据库完整性定义;安全保密定义,如口令、级别和存取权限等。
数据库操作(DML):数据库的增删改查。
DBMS特点:
1.数据结构化且统一管理
2.有较高的数据独立性
3.数据控制功能
(1)数据库的安全性 (2)数据的完整性 (3)并发控制
(4)故障恢复:事物内部故障、系统故障、介质故障及计算机病毒。
故障恢复主要是指恢复数据库本身,即在故障引起数据库当前状态前后不一致后,将数据库恢复到某个正确状态或一致状态,恢复的原理非常简单,就是建立冗余数据,冗余是物理级别的,通常认为逻辑级别是没有冗余的。
DBMS分类:关系型数据库系统、面向对象的数据库系统、对象关系数据库系统。其中面向对象数据库系统的两个特点:一是面向对象数据模型能完整地描述现实世界的数据结构,能表达数据间的嵌套、递归联系;二是具有面向对象技术的封装性和继承性提高了软件的可重用性。
关系型数据库是表的集合,表是记录的集合;属性指表的一列
常用的查询语言:域关系、元组关系、关系代数
数据库系统体系结构分为集中式、分布式、C/S(客户端/服务器)和并行结构。
6.1.2 数据系统的三级模式结构(★★★)
1.数据抽象
(1)物理层:最低层次的抽象,描述数据在存储器是如何存储的。
(2)逻辑层:比物理层高一层的抽象,描述数据库中存储什么数据以及数据间的关系。
(3)视图层:是最高的层次的抽象,描述整个数据库的某个部分。
2.三级模式和两级映像(下图必须记下来!)
(1)概念模式:也叫模式,是数据库中全部的逻辑结构和特征的描述,只涉及描述不涉及具体的值,描述概念模式的数据定义语言为模式DDL。
(2)外模式:也称为用户模式或子模式,好似用户与数据的接口,使用户用到的那部分数据的描述。 逻辑设计阶段
(3)内模式:也称为存储模式,十数据物理结构和存储方式的描述,是数据在数据库内部的表示方法。定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。
(4)两级映像:保证数据的逻辑独立性和物理独立性。
模式/内模式的映像:存在于概念和内部级间,实现了模式到内模式间的相互转换;
外模式/模式的映像存在于外部级和概念级间,实现外模式到模式间的相互转换。
3.数据的独立性
数据独立性是指数据与程序独立。
(1)数据的物理独立性:指当数据库的内模式发生改变时,数据的逻辑结构不变,但是为了保证应用程序的正确执行,需要修改模式/内模式之间的映像。
(2)数据的逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的,但是为了保证应用程序的正确执行,需要修改外模式/模式之间的映像。
6.2 数据模型(★★★)
实体-联系模型(E-R模型)用以描述现实世界的概念模型,E-R图中,实体集中作为主码(或主键)的一部分属性名下面加下划线标明,另外,实体集与联系的线段上标注联系的类型。
E-R模型中,实体通常用矩形框内写明实体名表示,联系用菱形框内写明联系名表示,属性用椭圆形写明属性值表示;
实体是现实世界中可以区别与其他对象的“事件”或“物体”,每个实体由一组特性(属性)来表示,其中的某一部分属性可以唯一标识实体,例如学校的教师定义为实体集,职工号就是实体的属性。
属性是实体某方面的特性,E-R模型属性分类:
简单属性和复合属性:简单属性(比如职工性别)是原子的、不可再分的,复合属性可以细分为更小的部分(比如职工家庭地址可以细分省市县等)。
单值属性和多值属性:一个属性可以是单值也可以是多值的,比如职工姓名和工号是单值,职工亲属姓名为多值。
NULL属性:当实体某个属性上没有值或属性值未知时,用NULL值来表示无意义或不知道。
派生属性:由其他属性得来,比如职工生日或者年龄可以根据身份证得来,参加工作时间可以得出工作年限。
实体的联系分为实体内部和实体与实体之间的联系。
实体的联系分为实体内部和实体与实体之间的联系。
1.两个不同实体之间的联系
(1)1:1(一对一):班主任和班级的关系
(2)1:(一对多):班级和学生的关系
(3):(多对多):学生和课程的关系
2.两个以上不同实体集之间的联系
(1)1:1:1
(2)1:1:
(3)1:::比如一个特护病房有多个病人和多个医生,一个医生只负责一个病房,一个病人只属于一个病房。
(4)::*:供应商、项目和零件之间的关系,单个供应商可以为多个项目提供多种零件,每个项目可以使用多个供应商提供的零件,每个零件可以由不同的供应商提供。
3.同一实体集内的二元联系
同一实体集内的各实体之间也存在1:1、1:和:*关系,比如职工和领导的1:*联系,职工实体集内的婚姻联系1:1。
6.2.1 扩充的E-R模型
1.弱实体
弱实体是指某实体是否存在必须以另一个实体为前提,例如企业职工与家属的联系,家属就属于“弱实体”,职工与家属之间的所属联系属于依赖关系。
2.特殊化
特殊化:实体间存在共性,也具有各自的特殊性,这样,一个实体集可以按照某些特征区分为几个子实体,比如学生分为男生、女生,或者学生可以分为小学生、初中生、高中生。
7.1 关系数据库概述
7.1.1 基础知识
1.关系:关系数据库中,实体以及实体间的联系用关系来表示。
2.关系模式:是对关系的描述。
3.关系模型:是由若干个关系模式组成的集合。
4.属性:描述事物的特征,比如学生的学号、姓名、性别等。
5.域:每个属性的取值范围所对应的一个值的集合,比如性别的域为{男,女}。
6.目或度:R表示关系的名字,n是关系的目或度。
7.元组:简单的来说就是一个表中的一行数据,比如学生表中学生A的数据信息。
8.候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,则该属性或属性组为候选码,比如学生的学号、手机号、身份证号都是候选码。
9.主码:或称为主键,若一个关系有多个候选码,则选定其中一个为主码,比如学生表中学号作为主键。
10.主属性:包含在任何候选码中的主属性成为主属性,不包含在任何候选码中的属性成为非主属性。
11.外码(简单来说就是表中的外键):如果关系模型R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。例如客户与贷款之间的借贷关系c-l(cid,loadno),属性cid是客户关系中的码,所以cid是外码,属性loanno是贷款关系中的码,所以loadno也是外码。
12.全码:关系模型中的所有属性组是这个关系模式的候选码,称为全码。例如,关系模式R(T,C,S),属性T表示教师,C表示课程,S表示学生,假如一个教师可以教授多门课程,某门课程可以多个教师教授,学生可以听不提交时讲授不同的课程,那么相区分关系中的每一个元组,这个关系模式R的码应为全属性T,C和S,即All-key。
13.元组/记录:行数据,一行就是一个元组或者说一条记录
14.字段、数据项:列
15.元数:属性的个数(列数)
16.基数:记录的个数(行数)
17.n元关系:元数为几,就是几元关系。
7.1.2 关系数据库模式
关系的描述成为关系模式:R(U,D,dom,F),R表示关系名,U是组成该关系的属性名集合,D是属性的域,dom是属性区域的映像集合,F为属性间数据的依赖关系集合,通常简记为R(U)或R(A1 , A2 ,…, An )为属性名。
例如:学生关系S有学号Sno、学生姓名Sname,系名SD,年龄SA属性,课程关系C有课程号Cno、课程名Cname、先行课称号PCno属性;学生选课关系SC有学号Sno、课程号Cno、成绩Grade属性,定义关系模式及主码:
学生关系模式S(Sno,Sname,SD,SA)
课程关系模式C(Cno,Cname,Pno),dom(PCno)=Cno
学生选课关系模式SC(Sno,Cno,Grade)
关系的三种模型:基本关系、查询表、视图表(虚表,数据库只存放其定义)。
关系的完整性约束:
实体完整性:基本关系的主码中出现的任何属性都不能取空值。
参照完整性:外码的取值要么取空值,要么取被参照关系的主码中已有的值。下划实线表示主码属性(主键),下划虚线表示外码属性(外键)。
用户定义完整性:指属性的值域限制,如性别只能取“男”或“女”。
函数依赖:指属性间的取值约束,如部门名称相同的员工记录,其部门经理的取值一定相同。
7.1.3 关系代数运算
关系代数运算包括:集合运算符、专门的关系运算符、算数比较符合逻辑运算符。
1.并
关系R与S具有相同的关系模式,即R与S的元数相同(结构相同),R与S的并是属于R或者属于S的元组构成的集合,记作R∪S,定义如下:
R∪S={t∣t∈R∨t∈S}
2.差
关系R与S具有相同的关系模式,关系R与S的差是属于R但不属于S的元组构成的集合,记作R−S,定义如下:
R−S={t|t∈R∨t∉S}
3.广义笛卡尔积(Extended Cartesian Product)
两个无数分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S,定义如下:
R×S = t∣t = < t n , t m >∧t n∈R∧tm∈S < tn , tm >表示元素tn和tm 拼接成的一个元组.
4.投影(Projection)
投影运算是从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作πA ( R ),其形式如下:πA ( R ) = { t [ A ]∣t ∈ R }
5.选择(Selection)
选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的元组,记作σF ( R ),其形式如下:σF ( R ) = { t∣t∈R∧F(t) = True}
其中,F中的运算对象是属性名(或列的序号)或常数,运算符、算数比较符(<、>、≥、≤、≠)和逻辑运算符(∨、∧、¬)。
例如,σ1≥6 表示选取关系R中第1个属性值大于等于第6个属性值的元素;σ1 >′ 6′( R )表示选取关系R中第1个属性值大于6的元组。
注意:6和‘6’的区别,6是指从左往右数第6个属性,‘6’是指数字6(数值格式或文本格式)。
例题:设有关系R、S如图所示,求R∪S、R−S、R×S、πA ,C®,σA>B®和σ3<4(R ×S)。
解答:
6.扩展的关系运算
扩展的关系运算可以从基本的关系运算中导出,主要包括:选择、投影、连接、除法、广义笛卡尔积、外连接、
(1)交
关系R和S具有相同的关系模式,交是由属于R同时双属于S的元组构成的集合,记作R∩S,形式如下:R∩S={t∣t∈R∧t∈S}
例题:关系R、S如下,求R∩S。
(2)连接(⋈)
从R与S的笛卡尔积中选取属性间满足一定条件的元组,可由基本的关系运算笛卡尔积和选取运算导出,连接分为θ连接、等值连接以及自然连接。
θ连接
θ连接可以表示为:
其中的为比较运算符,如>、<、=、≠。X和Y分别为R和S上可以进行比较的属性组。
例如:设有关系R、S如图所示,求
解:本题的连接条件为R.A<S.B(S.B等于6/8满足条件),也就是R关系中属性A的值小于S关系中属性B的值的元组取出来作为结果集的原则,结果集为R×S后选出满足条件的原元组。
等值连接:当θ为“=”时,称为等值连接,记为。
例如:设有关系R、S如图所示,求
自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉(事实上就是两个表连接查询去除冗余列)。
例如:设有关系R、S如图所示,求R⋈S。
(3)除:同时从关系的水平方向和垂直方向进行运算。
解:根据除法定义,此题的X属性为AB,Y属性为CD,R÷S应当满足元组在属性AB上的分量值x的象集Yx包含关系S在CD上投影的集合。
(4)外连接(与SQL连表查询里的连接概念一致)
外连接运算是连接运算的扩展,可以处理缺失的信息。
左外连接⟕(左侧为准,右侧填充):取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null填充所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果集中。
右外连接⟖(右侧为准,左侧填充):取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中。
全外连接⟗:完成左外连接和右外连接的操作(相当于左外连接与右外连接的union操作)。
总结如下(来自紫依视频总结):
7.2 元组演算、域演算和查询优化
7.2.1 元组演算
元组演算是非过程化查询语言,它只描述所需信息,而不给出获得该信息的具体过程。在元组演算中,其元组关系演算表达式中的变量是以元组为单位的,其一般形式为:{t|P(t)},其中t是元组变量,P(t)是元组关系演算公式,公式是由原子公式组成的。
1.原子公式
(1)R(t):R是关系名,t是元组变量,R(t)表示t是R中的元组。
(2)t[i]θC或Cθt[i]:t[i]表示元祖变量t的第i个分量,c是常量,θ是算术比较运算符,该公式表示“t的第i个分量与常量C满足比较关系θ”,例如:t[4]=3表示元组t的第4个分量等于3。
(3)t[i]θu[j]:t和u是元组变量,θ是算术比较运算符,t[i]θu[j]表示“元组t的第i个分量与元组u的第j个分量满足比较关系θ”,例如,t[2]<u[3]表示元组t的第2个分量小于元组u的第3个分量。
2.公式的定义
若一个公式中的一个元祖变量前有全称量词∀或存在量词∃符号,则该变量为约束变量,否则成为自由变量,公式可递归定义如下:
(1)每个原子公式是公式。
(2)如果φ1和φ2是公式,则φ1∧φ2(交)、φ1∨φ2(并)、φ1⟹φ2,﹁φ1也是公式,分别表示:
①如果φ1和φ2同时为真,则φ1∧φ2才为真,否则为假;
②如果φ1和φ2中一个或同时为真,则φ1∨φ2为真,仅φ1和φ2同时为假时,φ1∨φ2才为假;
③φ1φ2表示若φ1为真则φ2为真。
④如果φ1真,则﹁φ1为假。
(3)若φ1是公式,则∃t(φ1)也是公式,其中符号∃是存在量词符号,∃t(φ)表示:若有一个t使φ1为真,则∃t(φ1)为真,否则∃t(φ1)为假。
(4)若φ1是公式,则∀t(φ1)也是公式,其中符号∀是全称量词符号,∀t(φ1)表示:如果对所有t,都使φ1为真,则∀t(φ1)必为真,否则∀t(φ1)为假。
(5)在元组演算公式中,各种运算符的优先次序为:
①算术比较运算符最高;
②量词次之,且∃的优先级高于∀的优先级;
③逻辑运算符最低,且﹁的优先级高于∧的优先级,∧的优先级高于∨的优先级;
④加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循①②③各项。
7.2.2 关系代数运算转换为元组演算表达式
有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。关系代数的运算均可以用关系演算表达式来表示(反之亦然),下面用关系演算表达式来表示五种基本运算:
1.并:R∪S={t|R(t)∨S(t)}
2.差:R-S={t|R(t)∧﹁S(t)}
3.笛卡尔积(R有n个属性,S有m个属性):
R × S = { t ( n + m ) ∣ ( ∃ u ( n ) ) ( ∃ v ( m ) ) ( R ( u ) ∧ S ( v ) ∧ t [ 1 ] = u [ 1 ] ∧ . . . ∧ t [ n ] = u [ n ] ∧ t [ n + 1 ] = v [ 1 ] ∧ . . . ∧ t [ n + m ] = v [ m ] ) }
注:t(n+m)表示t有目数(n+m),即n+m个属性。
4.投影:
5.选择:σF ®={t|R(t)∧F}
注:F是公式,F用t[i]代替运算对象i得到的等价公式。
例题:设有关系R、S如图所示,对如下所示的元组演算表达是,求出它们的值。
(1)R1={t|R(t)⋀¬S(t)}
(2)R2={t|(∃u)(R(t)⋀S(u)⋀t[3]<u[2])}
(3)R3={t|(∀u)(R(t)⋀S(u)⋀t[3]>u[1])}
(4)R4={t|(∃u)(∃v)R(u)⋀S(v)⋀u[2]>v[1]⋀t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3])}
解:
(1)R1其实就是就R与S关系的差集,新生成的R1元组来自R但又不再S中。
(2)R2元组来自关系R,同时R3的第三分量必须小于关系S中某个元组的第2分量值。
(3)R3元组来自关系R,同时R3的第三分量必须大于关系S中所有元组的第一个分量值。
(4)首先R4元组来自关系R和S且满足R元组的第二个分量值大于S某元祖的第一个分量值(u[2]>v[1]),另外t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3]表示R4的第一分量、第二分量和第三分量分别对应关系R的第一列u[1],S关系的第一列v[1],S关系的第三列v[3],
首先找到R、S中u[2]>v[1]的结果集,再根据t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3]获取R4各分量值:
7.2.3 域演算
域关系演算简称域演算,在域演算中,表达式中的变量是表示域的变量,可将关系的属性名视为域变量。
关系域演算公式的基本形式:{ t1 , t2 ,…, tk∣P (t1,t2,…,tk)} 其中,t1,t2 ,…,tk 代表域变量或常量,P ( t1 , t2 ,…, tk )是演算公式。
例:设有关系R、S如下,进行域演算表达式计算求值。
解:
(1)R1的元组t来自关系R,且同时满足t1< t2(R.A<R.B)和t2 > t3(R.B>R.C)。
(2)R2的元组t来自满足R、S条件的并集,其中关系R中的第一个分量值必须大于4(R.A>4),关系S的的第二个分量值必须小于8(S.B<8)。
(3)R3的元组t1对应S的第一列(S.A),t2对应R的第二列(R.B),t3对应S的第三列(S.C),且要求R.A≥7(),R.C>S.B(v>w)。
7.3.4.查询优化
查询优化是指为查询选择最有效的查询计划的过程。一个查询往往会有许多事先办法,关键是如何找出一个与之等价的且操作时间又少的表达式。在关系代数运算中,笛卡尔积、连接运算最费时间和空间。
优化准则:
1.提早执行选取运算,多表连接查询时,特别是有大表连接时,先选取满足条件的大表数据再去做表连接查询会更高效一些。
2.合并乘积与其后的选择运算为连接运算
3.将投影运算逾期后的其他运算同时进行,避免重复扫描关系
4.将投影运算和其前后的二目运算结合起来,是的没有必要为去掉某些字段在扫描一遍关系。
5.在执行连接前对关系适当的预处理,就能快速的找到要连接的元组,方法是索引连接法、排序合并连接法。
6.存储公共子表达式。
7.3 关系数据库设计基础理论
7.3.1 函数依赖
定义:设R(U)是属性集U上的关系模式,X、Y是U的子集,弱队R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X→Y。(有点类似于表用唯一索引列查询其他列的数据)
如果X→Y,但Y⊊X,则称X→Y是非平凡的函数依赖。一般情况下总是讨论非平凡函数的依赖。
如果X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。
注意:函数依赖X→Y的定义要求关系模式R的任何可能的r都满足上述条件,因此不能仅考察关系模式R在某一时刻的关系r,就断定某函数依赖成立。函数依赖是语义范畴的概念,我们只能根据语义来确定函数依赖。
在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有X′不能决定Y,则称Y对X完全函数依赖,记作。如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作,也称为局部函数依赖。
例如:学生选课关系SC1(sno,cno,grade),我们可以得到F={(sno,cno)→grade},对于(sno,cno)中的sno或者cno都不能得到某学生某一课程的grade,所以grade完全依赖于sno,cno。
学生选课关系SC1(sno,cno,sname,cname,grade)中,F={(sno,cno)→grade,(sno,cno)→sname,(sno,cno)→cname,sno→sname,cno→cname},其中的(sno,cno)→sname,(sno,cno)→cname就是部分依赖关系。
在R(U,F)中,如果X→Y,Y ⊊X ,Y↛X ,Y→Z ,则称Z对X传递依赖。
例如:关系供应商(Sno,Sname,Status,City,Pno,Qty),及函数依赖集如下,判断该关系是否存在传递依赖和部分函数依赖。
解:存在函数依赖,因为Sno→Status,Status→City,且Status⊊City,Status↛City,故Sno→City,也就是City对Sno传递依赖。
(Sno,Pno)→(Sname,Status,City),但Sno→(Sname,Status,City),所以关系供应商存在Sname,Status,和City对(Sno,Pno)的部分依赖关系。
7.3.2 码
设K为R(U,F)中的属性的组合,若K→U,且对于K的任何一个真子集K′,都有K′不能决定U,则K为R的候选码,若有多个候选码,则选一个作为主码。
–简而言之,就是一个表中有多个唯一属性列,随便选一个都可以作为表的主键。
候选码通常称为候选关键字,主码通常也称为主键或主关键字。任何一个候选码中的属性都叫做主属性,否则成为非主属性,若关系的所有属性为码,该码成为全码。
例如:选课关系SC(sno,cno,sname,cname,grade)中(sno,cno)可以决定该关系的全码,则(sno,cno)为候选码。
若R(U)中的属性或属性组X非R的码,但X是另一个关系的码,则称X是R的外码或者外键。
例如:员工表(员工号,姓名,部门号,职位,联系方式)中部门号就是外键,是关系部门(部门号、部门名,负责人)的码。
7.3.3 多值依赖
若关系模式R(U)中,X,Y,Z是U的子集,并且Z=U-X-Y,当且仅当R(U)中的任何一个关系R,给定一堆(x,z)值,有一组Y的值,这组值仅仅决定与x值而与z值无关,则曾为“Y多只依赖于X”或“X多值决定Y”成立,记为X→→Y。
–简言之,一个X值对应多个Y值,
判定方法:一个表中如果有2行数据,记为A、B,如果他们的某一属性X的值相等,那么我们交换它们另外的属性Y的值后,得到的新的两行数据C、D,可以在原来的表中可以找到与C、D相匹配的行。
7.4 规范化
范式关系:1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF。
7.4.1 第一范式(1NF)
若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式,记为R∈1NF。
同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
例如SC(sno,cno,sname,cname,grade)中,候选码为(sno,cno)。
F={(sno,cno)→grade,(sno,cno)→sname,(sno,cno)→cname,sno→sname,cno→cname}
存在的问题:
冗余度大,sno,sname,cno,sname都要与grade一样多。
因其修改操作的不一致性。
插入异常。
删除异常。
7.4.2 第二范式(2NF)
若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF.也就是2NF消除了1NF中非主属性对码的部分函数依赖。(属性完全依赖于主键,消除部分依赖)
第二范式表中的每个非键字段由整个主键确定,且不能由主键自身的一部分确定,因此,2NF的违例只会出现在主键是由超过一个字段构成的表中。
例如:在学生各课程学分关系中,SC(sno,cno,sname,cname,credit)关系分解为:Student(sno,sname)和Cource(cno,cname,credit),这两个关系模式就属于2NF。
7.4.3 第三范式(3NF)
若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z⊊Y)使X→Y,(Y ↛X)Y→Z成立,则关系模式R∈3NF,即在2NF基础上消除非主属性对码的传递函数依赖。
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,即表中不存在可以确定其他非关键字的非键字段。(属性不依赖于其他非主属性)
7.4.4 巴克斯范式(BCNF)
关系模式R∈1NF,若X→Y且Y⊊X时,X必含有码,则关系模式R∈BCNF。当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BCNF。
这个范式特别用于处理非键字段确定主键的一部分主要的情况。
BCNF关系模式性质:
所有非主属性对每一个码都是完全函数依赖;
所有主属性对每一个不包含它的码,也就是完全函数依赖;
没有任何属性完全函数依赖于非码的任何一组属性。
R属于3NF,不一定属于BCNF,如果R属于BCNF,一定属于3NF。
例如:假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的,但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式,存在如下问题:
删除异常:当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。
插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。
更新异常:如果仓库换了管理员,则表中所有行的管理员ID都要修改。
改进,把仓库管理关系表分解为二个关系表:
仓库管理:StorehouseManage(仓库ID, 管理员ID);
仓库:Storehouse(仓库ID, 存储物品ID, 数量)。
这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。
7.4.5 第四范式(4NF)
关系模式R∈1NF,若对于R的每个非平凡多值依赖X→→Y且Y⊊X时,X必含有码,则关系模式R∈4NF。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
若关系中的某一属性组的值能唯一地表示一个元组,而其真子集不行,则称该属性组为候选码。在全键表中,键的一部分可以确定至多一个其他字段的多个值,4NF仅用于全键表。
多值依赖(multivalued dependency,MVD)的概念:指可以控制或确定另一个字段的多个值的一个或一组字段,多值依赖即属性之间的一对多关系,记为K→→A。
函数依赖事实上是单值依赖,所以不能表达属性值之间的一对多关系。
平凡的多值依赖:全集U=K+A,一个K可以对应于多个A,即K→→A。此时整个表就是一组一对多关系。
非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应于多个B,A与B互相独立,即K→→A,K→→B。整个表有多组一对多关系,且有:“一”部分是相同的属性集合,“多”部分是互相独立的属性集合。
注意,如果只考虑函数依赖,关系模式最高的规范化程度是BCNF;如果考虑多值依赖,关系模式最高的规范化程度是4NF。
例如,学生关系(学号,选修课程,兴趣爱好)
分解为:
学生1(学号,选修课程)∈4NF
学生2(学号,兴趣爱好)∈4NF
总结(理解并记下来):
检查范式违例:
1.当某个字段包含多个值会发生1NF违例。
2.2NF违例只会发生在具有关联键的表中,且非键字段只依赖于主键的一部分。
3.3NF违例发生在一个非键字段确定另一个非键字段的情况下,表可能有一个任何大小的键。
4.BCNF违例出现在非键字段确定主键的一部分的情况下,这些违例只能发生在主键是由关联键组成的表中。
5.4NF违例发生在表的主键至少由3个键连接而成且没有非键字段的情况下,此外,键的一部分确定键的另一部分的多个值。
解决范式违例的方法:就是将复式的确定因子拆成单一的确定因子。
反规范化手段:增加冗余属性、增加派生属性、合并模式和分割模式
7.5 Armstrong公理系统
7.5.1 Armstrong公理系统
Armstrong公理系统设关系模式R<U,F>,其中U为属性集,F是U上的一组函数依赖,那么有如下推理规则:
A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含;
A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;
A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。
根据上面三条推理规则,又可推出下面三条推理规则:
合并规则:若X→Y,X→Z,则X→YZ为F所蕴含;
伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含;
分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。
引理:X→A1A2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…,k)。
1.函数依赖的闭包F +及属性的闭包XF+
2.候选码的求解方法
给定一个关系模式R(U,F),U =(A1, A2 ,…, An),F是R的函数依赖集,那么可将其属性分为4类:
(1)L类:仅出现在函数依赖集F左部的属性。
(2)R类:仅出现在函数依赖集F右部的属性。
(3)LR类:在函数依赖集F左右两边均出现的属性。
(4)NLR类:在函数依赖集F左右两边均未出现的属性。
根据候选码的特性,对于给定一个关系模式R(U,F),可以得出结论如下:
结论1:若X(X⊆U)是L类属性,则X必为R的任一候选码的成员,若XF +=U,则X必为R的唯一候选码。
结论2:若X(X⊆U)是R类属性,则X不是R的任一候选码的成员。
结论3:若X(X⊆U)是NLR类属性,则X必为R的任一候选码的成员。
结论4:若X(X⊆U)是L类和NLR类属性组成的属性集,若XF+=U,则X必为R的唯一候选码。
候选码的求解方法:
(1)根据题意进行属性分类:
L类一定是候选码成员
R类一定不是候选码成员
LR类可能是可能不是
NLR类一定是候选码成员
(2)将所有的L类和NLR类属性组合,设为P,求PF+,如果值为全集U,那么它是候选码;
(3)如果值≠全集U,则依次将LR类属性跟P组合起来求闭包,只要其闭包是全集U,就是候选码。
例1:设关系模式R(A, B, C, D), 其函数依赖集:F={D→B, B→D, AD→B, AC→D},求R的所有候选码。
解:L类属性:A,C;LR类属性:B,D;因为L类属性一定为候选码成员且根据F可知AC→D、D→B,也就是( A C ) F+=ACDB,所以AC是R的唯一候选码。
例2:设关系模式R(A, B, C), 其函数依赖集:F={AB→C, C→B},求R的所有候选码。
解:L类属性A,LR类属性B、C,那么A一定是候选码成员,但(A) F+=A而非等于全集U,所以,需要将LR类属性跟L和NLR类属性组合看闭包情况,得(AB) F+=U,( A C ) F + = U ,所以候选码为AB、AC。
例3:已知关系模型R<U,F>,其中U=(A,B,C,D,E,G),F={AB->C,CD–>E,E–>A.A–>G},求R的候选码。
解:L类属性B、D;R类属性G;LR类属性A、C、E
所以G一定不是候选码成员,BD一定是候选码成员但( B D ) F +≠U,所以需要尝试LR、L类和NLR的组合(ABD,BCD和BDE)求闭包,如果闭包是全集U,那么就是候选码。
计算可知ABD,BCD和BDE的闭包都是全集U,所以三个都是候选码,算法结束。
3.最小函数依赖集
定义:如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖。
(1)F中的任何一个函数依赖的右部仅含有一个属性,即右侧无多余的属性;
(2)F中不存在这样一个函数依赖X→A,使得F与F-{X→A}等价,即无多余的函数依赖;
(3)F中不存在这样一个函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价,即去掉各函数依赖左边的多余属性。
计算最小函数依赖集算法:(B站找一下)
步骤:
7.5.2 模式分解及分解后的特性
1.无损连接
无损连接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损连接分解。
定理1:关系模式R(U,F)的一个分解ρ={ R1(U1,F1) , R2(U2,F2)},具有无损连接充分必要条件是:U1∩U2 → U1−U2 ∈ F + 或 U1∩U2 → U2−U1∈F +。
例:有关系R(U,F),U={A,B,C},依赖关系F={A→B},判断ρ1 = { A B , B C }和ρ2 = { A B , A C }是否为无损分解。
对于ρ1 ,AB∩BC = B,AB-B C = C,BC−AB=C,A B∩B C→( AB−BC) = B→A∉F+,A B∩BC→( BC−AB)=B→C∉F所以它是有损分解;
对于ρ2 ,AB∩AC=A,AB−AC=B,AC−AB = C,AB∩AC→ ( AB−AC) = A→B∈F +,所以它是无损分解。
注意ρ2,对于,虽然A B∩A C- > (AC−AB) = A→C∉F,但根据无损连接定理充要条件只要满足一个即可。
2.保持函数依赖
设关系模式R(U,F)的一个分解ρ= { R1 (U1,F1),R2(U2,F2),…,Rk(Uk,Fk)},如果,则称分解ρ保持函数依赖。(对关系分解时,原关系的闭包与分解后关系闭包的并集相等)
将R<U,F>分解后,存在很多分解后的关系,例如分解为R1,R2,R3等。在R<U,F>中,F存在很多的函数依赖,如果F中的每一个函数依赖,都可以在分解后的R1,R2,R3上找到它的属性的话,那么这个分解是保持依赖的。如果找不到的话,还需要进一步去判断。
例1:设关系模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足( ) 。
A.具有无损连接性、保持函数依赖 √
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖
当关系分解为2个以上的关系模式时,判断一个分解是不是无损分解算法理论参考教材。
例2:设有关系模式R(ABCDEG),其函数依赖集为:F={E→D,C→B,CE→G,B→A},判断R的一个分解ρ={R1(AB),R2(BC),R3(ED),R4(EAG)}是否无损连接和保持函数依赖。
(1)无损连接判断:先根据题意将题中的属性和子模式矩阵化,如下表:
8.1 SQL概述与数据库定义
数据定义语言(DDL):用来定义数据库模式,包括数据模式定义,数据库存储结构和存取方法定义,数据库模式的修改和删除功能。
数据操纵语言(DML):用来表示用户对数据库的操作请求,包括增删改查。
嵌入式SQL和动态SQL:用于嵌入到某种通用的高级语言(C、C++、Java、VB等等)中混合编程,作为程序设计的子语言使用,其中,SQL负责操纵数据库,高级语言负责控制程序流程。
完整性:SQL DDL包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止。
权限管理:SQL DDL中包括说明对关系和视图的访问权限。
SQL语句分类及基本结构:
1.DML语句(数据操作语言):Insert、Update、Delete、Merge;
2.DDL语句(数据定义语言):Create、Alter、Drop、Truncate;
3.DCL语句(数据控制语言):Grant、Revoke;
4.数据查询:Select;
5.事务控制语句:Commit、Rollback、Savepoint。
8.2 数据库定义
SQL支持的内部域类型:
1.创建表
CREATE TABLE 表名称
(
列名称1 数据类型 列完整性约束条件,
列名称2 数据类型 列完整性约束条件,
列名称3 数据类型,列完整性约束条件,
…
表级完整性约束
);
(1)实体完整性约束:通过主键约束和候选键约束实现。
关键字 PRIMARY KEY
PRIMARY KEY可以在列定义后面加,也可以在建表最后加(等效),但是复合主键只能在表最后加。
(2)域完整性:指数据库表的列(即字段)必须符合某种特定的数据类型或约束。
非空 NOT NULL null指空值
不允许重复 UNIQUE
按条件检查 CHECK (条件)
(3)参照完整性约束:是多表之间的设计,主要使用外键约束实现。
语法:
Restrict:删除或者更新时,在外键中出现的值操作失败
cascade:将外键的值一同删除或者更新
set null:删除更新时外键的值被设置为空
2.修改表
3.删除表
删除表时,系统会从数据字典中删去有关该表的描述。
4.索引的创建和删除
索引是快速定位数据的技术,是加速查询的主要手段。(类似于书本的目录)
创建索引语法:
删除索引语法:
删除索引时,系统会从数据字典中删去有关该索引的描述。
5.视图的创建和删除
视图创建语法:
视图删除语法:
8.3 数据操作
SQL数据操纵语言就是insert、delete、update、select,也就是数据的增删改查操作。
8.3.1 Select
数据库查询时数据库的核心操作,Select语法:
SELECT子句:指定由查询返回的列。
FROM子句:用于指定引用的列所在的表或视图,如果对象不止一个,那么它们之间必须用逗号分开。
WHERE子句:指定用于限制返回的行的搜索条件,如果SELECT语句没有WHERE子句,DBMS假设目标表中的所有行都满足搜索条件。
GROUP BY子句:指定用来放置输出行的组,SELECT子句中使用的聚集操作符仅用在每个分组上。
HAVING子句:假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,可以在GROUP BY子句后面跟一个HAVING子句即可。
执行步骤:
(1)先从from字句一个表或多个表创建工作表;
(2)将where条件应用于(1)的工作表,保留满足条件的行;
(3)Group By 将(2)的结果分成多个组;
(4)Having 将条件应用于(3)组合的条件过滤,只保留符合要求的组;
(5)Order By对结果进行排序。
1.简单查询
例如:查询张三的昵称和email地址。
2.连接查询:两个或者两个以上的表连接查询所需要的数据信息。
例如:查询每个学生及其选修课程的情况。
顺带说下自连接(一个表与自己连接),需要使用别名以示区别。
例如:查询每一门课的间接先行课。
3.子查询
子查询也叫嵌套查询,嵌套在另一个查询中的查询(一个SELECT-FROM-WHERE语句查询块)。
4.聚集函数
例如:查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名和年龄。
select Sname,Sage from student where Sage < ALL (select Sage from student where Sdept = “CS”) AND Sdept <> “CS”;
改写成:
Select Sage,Sname from student where Sage < (select MIN(Sage) from Student where Sdept= ‘CS’) AND Sdept != ‘CS’;
5.分组查询
(1)GROUP BY
GROUP BY思想:先排序再汇总,通常用于配合聚合函数,达到分类汇总统计的信息的目的。其中分类汇总的本质就是先将信息排序,排序后相同类别的信息会聚在一起,然后通过需求进行统计计算。
例如,按性别统计学生表。
例如,按照部门号统计员工工资。
select deparmant, GROUP_CONCAT(salary), SUM(salary),AVG(salary) 平均工资,MAX(salary) 最高工资 from employee GROUP BY deparmant;
(2)HAVING子句
HAVING子句的用法类似WHERE子句,它指定了组或集合的搜索条件。HAVING子句通常与GROUP BY子句一起使用。
实际上,HAVING子句是在分组后对数据进行过滤,后面可以使用分组函数(统计函数)。
例如,查询工资大于2000的,工资总和大于9000的部门名称以及工资和。
6.字符串操作
字符串操作通常是指用操作符like来进行匹配操作,使用2个特殊的字符来表示:
%:匹配任意个数的任意字符; ex :包含‘西安’-> like‘%西安%’
_:匹配任意1个字符。
注意,模式匹配大小写敏感。
例如,查询学生表钟姓学生的信息。
7.集合操作
(1)UNION运算(⋃)
Union可以对两个或多个子查询结果集进行连接,形成“并集”,Union ALL包括重复的行,默认不带ALL,即不包括重复的行。
限制条件:
子结果集要具有相同的结构。
子结果集的列数必须相同。
子结果集对应的数据类型必须可以兼容。
每个子结果集不能包含order by和compute子句。
去掉重复项的并集:
不去掉重复项的并集:
(2)INTERSECT运算(∩)
InterSect可以对两个或多个子查询结果集进行连接,形成“交集”,返回左边结果集和右边结果集中都有的记录。
(3)EXCEPT运算(-)
Except可以对两个或多个子查询结果集进行连接,形成“差集”,返回左边结果集合中已经有的记录,而右边结果集中没有的记录。
8.外连接
左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null填充。
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT JOIN student s ON t.ID=s.TEACHER_ID;
根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。
SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT JOIN student s ON t.ID=s.TEACHER_ID;
全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示。
select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;
8.3.2 Insert/update/delete
1.INSERT语法:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)
2.UPDATE语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
3.DELETE语法:DELETE FROM 表名称 WHERE 列名称 = 值;
8.4 授权与触发器
8.4.1 授权与收回权限
1.授予权限
授权的语法格式:
指定WITH GRANT OPTION子句表示获得该权限的用户还可以将该权限授予其他的用户。
例如:把Student表修改学生学号的权限授给用户ChengYu。
例如:把对表SC的INSERT权限授予用户ChengYu,并允许ChengYu再将此权限授予其他用户
2.回收权限
回收权限的语法格式:
例如,把用户ChengYu对SC表的INSERT权限级联收回(CASCADE)。
例如,收回所有用户对表SC的查询权限。
8.4.2 触发器
触发器可以执行约束、默认值和规则的完整性检查;为了保证事务的完整性,触发器中不能包含任何事务控制语句;触发器不能在临时表或系统表上创建,但可以引用临时表。
1.创建触发器
触发器(trigger)是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发的。
触发器的主要特点:
当数据库程序员声明的事件发生时,触发器被激活,时间可以是对某个特定关系的insert、delete、update操作;
当触发器被事件激活时,不是立即执行,二是首先由触发器测试出发条件,若条件不成立,响应该事件的触发器什么事情都不做。
如果触发器声明的条件满足,则与该触发器相连的动作有DBMS执行,动作可以阻止事件发生,可以撤销事件。
创建数据库触发器需要指定:
① 名称
② 定义触发器涉及的表
③ 触发器激发条件
④ 指明触发器执行时应做的动作
触发动作有两种方式:FOR EACH ROW(行级触发器,对被事件影响的每一行都执行触发过程)和FOR EACH STATEMENT(语句级触发器,默认方式,对整个事件只执行一次触发过程)。
触发器的定义包括两个方面:
指明触发器的触发事件:包括insert、delete、update语句,事件触发的两个相关时间,before(在事件发生之前触发)和after(在事件发生之后触发)。
指明触发器执行的动作。
触发器创建语法:
(1)BEFORE | AFTER:只是DBMS在执行触发语句之前或之后激发触发器;
(2)INSERT | DELETE:分别表示每当一个insert语句向表中插入一行数据时激发触发器、每当delete语句从表中删除一行时激发触发器;
(3)UPDATE/UPDATE OF:每当update语句修改表任何列值时,DBMS都将激发触发器,每当update语句修改有of子句指定的列值时激发触发器;
(4)REFERENCING:指定临时视图的别名,在触发器运行过程中,系统会生成存放更新值(旧值)和更新后的值(新值)的临时视图,行级触发器视图名为OLD和NEW,语句级触发器,默认视图名OLD-TABLE和NEW-TABLE,触发器运行结束,视图也就不存在了;
(5)WHEN:指定触发器的触发条件,触发条件必须包含临时视图名,不包含查询。
例:假定银行数据库关系模式如下:
Account(Account-no,branch-name,balance)
Loan(Loan-no,branch-name,amount)
Depositor(customer-name,Account-no)
假设银行处理透支时,不是将账户余额设置为负值,而是将账户余额设置成零,并且建立一笔贷款,其金额为透支额,这笔贷款的贷款好等于该透支账户的账户号,这样执行触发器的条件是对关系Account更新导致了负的余额。
CREATE TRIGGER overdraft_trigger AFTER update on account
referencing new row as nrow
for each row
WHEN nrow.balance<0
BEGIN ATOMIC
INSERT INTO borrower VALUES(select customer_name,account_number from depositor where nrow.account_number=depositor.account_number)
INSERT INTO loan VALUES(nrow.account_number,nrow.branch_name,nrow.balance)
UPDATE account SET balance=0 WHERE account.account_number=nrow.account_number
END
2.更改和删除触发器
(1)更改触发器语法:
(2)删除触发器语法: drop trigger 触发器名;
8.5 嵌入式SQL与存储过程
8.5.1 嵌入式SQL
SQL提供将SQL语句嵌入到某种高级语言中的使用方式,通常采用预编译的方法识别嵌入在高级语言中的SQL语句,该方法的关键问题是必须区分主语言中嵌入的SQL语句,以及主语言这SQL间的通信问题。
1.区分主语言语句与SQL语句
EXEC SQL <SQL语句>;
2.主语言工作单元与数据库工作单元通信
(1)SQL通信区
SQL通信区(SQL Communication Area,SQLCA)向主语言传递SQL语句执行的状态信息,使主语言能够根据此信息控制程序流程。
(2)主变量:也称共享变量,主语言想SQL语句提供参数主要通过主变量,主变量由主语言的程序定义,并用SQL的declare语句说明。YINYONG SHI ,WEILE YU SQL属性名相区别,须在主变量前加“:”。
例题:根据共享变量givensno值查询学生关系students中学生的姓名、年龄和性别。
8.6.2 游标
SQL语言是面向集合的,一条SQL语句可以产生或者处理多条记录,二主语言是面向记录的,一组主变量一次只能放一条记录,所以,引入游标,通过移动游标指针来决定获取哪条记录。
1.定义游标
声明游标:
这是一条说明性语句,定义中的SELECT语句并不立即执行。
2.打开游标
该语句执行游标定义中的SELECT语句,同时游标处于活动状态,游标是一个指针,此时只想查询结果的第一行之前。
3.推进游标
该语句使用时,游标推进一行,并把游标指向的行中的值取出,送到共享变量中,变量表是由逗号隔开的共享变量组成,该语句常置于宿主语言程序的循环结构中,并借助书主语言的处理语句注意处理查询结果中的一个元祖。
4.删除游标
该语句关闭游标,使它不再和查询结果相联系。关闭了的游标,可以再次打开,与新查询结果相联系,在游标处于活动状态时,可以修改和删除游标指向的元组。
8.5.3 存储过程
存储过程,是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。经编译后存储在数据库中。存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。
优点:1)存储过程是预编译过的,执行效率高。2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。3)安全性高,执行存储过程需要有一定权限的用户。
存储过程语法:
CREATE OR REPLACE PROCEDURE 存储过程名
(IN|OUT|IN OUT参数 数据类型)
AS
BEGIN
<SQL语句>
END 存储过程名;
IN 默认值,表示输入型参数;
OUT:输出型参数;
IN|OUT:既可作为输入参数也可以作为输出参数。
9.1 软件工程基础知识
9.1.1 软件生存周期
软件生存周期包括可行性分析与项目开发计划、需求分析、总体设计、详细设计、编码和单元测试、综合测试及维护阶段。
1.可行性分析与项目开发计划:确定软件的开发目标及可行性,可行性分析的任务不是具体解决问题,二是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。该阶段的参与人员应该有项目负责人、用户和系统分析师。
2.需求分析:确定地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。
3.概要设计:开发人员需要将确定的功能需求转换成相应的体系结构,主要参与人员有系统分析师和软件设计师。
4.详细设计:对每个模块完成的功能进行具体描述,不是编写程序,而是设计出程序的详细规格说明,该说明应该包含必要的细节,根据他们写出实际的程序代码,主要参与人员有软件设计师和程序员。
5. 编码和单元测试:把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单,并仔细测试编写出的每一个模块。
6.综合测试:通过各种类型的测试使软件达到预定的要求,最基本的测试是集成测试和验收测试。
7.维护:维护阶段是软件生存期中时间最长的阶段,该阶段的关键任务是通过各种必要的维护活动使系统持久的满足用户的需要。
9.1.2 软件生存周期模型
常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。
1.瀑布模型:将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,它包括需求分析、设计、编码、测试、运行和维护。
是一种理想化模型,以文档为驱动、适合于软件需求很明确的软件项目的模型。
优点:容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试;
缺点:客户必须能够完整、正确和清晰地表达他们的需要,在开始的两个或三个阶段中,很难评估真正的进度状态;当接近项目结束时,出现了大量的集成和测试工作;直到项目结束之前,都不能演示系统的能力。
2.增量模型:采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。
优点:具有瀑布模型的所有优点,第一个可交付版本所需要的成本和时间很少,开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更,运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。
不足:如果没有对用户的变更要求进行规划,那么产生的初始增量可能造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新开发管理发生的成本、进度和配置的复杂性,可能会超过组织的能力。
3.演化模型:针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。
优点:任何功能一经开发就能进入测试,以便验证是否符合产品需求,可以帮助引导出高质量的产品要求。
不足:如果不加控制的让用户接触开发中尚未稳定的功能,可能对开发人员及用户都会产生负面影响。
4.螺旋模型:将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。 首先引入了风险管理
每个螺旋周期分为4个工作步骤:
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
特点:以小的分段来构建大型系统,设计灵活,可以在项目的各个阶段进行变更,但是开发周期长,当开发完成后可能与当前技术水平有了较大差距。
螺旋模型适合适用于庞大、复杂并具有高风险的系统。
5.喷泉模型:一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法,它客服了瀑布模型不支持软件重用和多想开发活动集成的局限性。
优点:可以提高软件项目开发效率,节省开发时间。
不足:由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理,此外这种模型要求严格管理文档,使得审核的难度加大。
9.1.3 软件开发方法
软件开发方法:
1.结构化方法:由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法,总的指导思想是自顶向下,逐层分解,基本原则是功能的分解与抽象。适合数据处理领域的问题,但不是和解决大规模的、特别复杂的项目且难以适应需求的变化。
2.原型化方法:需要确定用户需求,开发原始模型,然后征求用户对初始原型的改进意见,并根据意见修改原型。原型化开发比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好的。
3.面向对象开发方法:基本出发点是尽可能按照人类认识世界的方法和思维方法来分析和解决问题,以对象作为最基本的元素,它是分析问题、解决问题的核心。面向对象开发方法包括对象分析、面向对象设计和面向对象实现。
4.敏捷方法:总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意,敏捷方法可以使用户能够在开发周期的后期增加或改变需求。敏捷过程典型方法:极限编程、水晶法、并列征求法、自适应软件开发。
9.1.4 软件项目管理
软件项目管理:成本估算、风险分析(如果软件项目组对于风险主动的方法,则避免永远是最好的策略)、进度管理、人员管理。
软件开发项目的进度安排有如下两种方式:
(1)系统最终交付日期已经确定,软件开发部门必须在规定期限内完成;
(2)系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。
进度安排的常用图形描述方法有甘特图(Gantt图)和项目计划评审技术(PERT图)。
1.Gantt图用水平条状图描述,它以日历为基准描述项目任务,可以清楚地表示任务的持续时间和任务之间的并行,但是不能清晰地描述各个任务之间的依赖关系。甘特图以图示通过活动列表和时间刻度表示出特定项目的顺序与持续时间,一条线条图,横轴表示时间,纵轴表示项目,线条表示期间计划和实际完成情况。直观表明计划何时进行,进展与要求的对比;便于管理者弄清项目的剩余任务,评估工作进度。
2.PERT图是一种有向图,图中的箭头表示任务,它可以标上完成该任务所需的时间,图中的节点表示流入节点的任务的结束,并开始流出节点的任务,这里称节点为事件。PERT图是一种网络模型,描述一个项目任务之间的关系,可以明确表达任务之间的依赖关系,即哪些任务完成后才能开始另一些任务,以及如期完成整个工程的关键路径,但是不能清晰地描述各个任务之间的并行关系。
(1)只有当流入该结点的所有任务都结束时,结点所表示的事件才出现,流出结点的任务才可以开始;
(2)事件本身不消耗时间和资源,它仅表示某个时间点;
(3)每个事件有一个事件号和出现该事件的最早时刻和最迟时刻;
(4)每个任务有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动余地,松弛时间为0的任务构成了完成整个工程的关键路径。
(5)关键路径:由关键活动串联起来的路径,关键路径可能有多条,关键路线(Critical Path)是PERT网络中花费时间最长的事件和活动的序列。
求关键路径的方法:
计算开始节点到结束节点之间每条路径上的时间总和,时间最长的就是关键路径;
找出各节点最早开始时间和最晚开始时间,最早开始时间和最晚开始时间相同的节点串联起来的路径就是关键路径。
下图显示了一个简单项目的PERT图,从开始节点1到结束节点8之间总共有4条路径:12568(时间:14)、13568(时间:16)、1368(时间:9)、14768(时间:14),关键路径长度为16。
例题:如下图中任务流:
第一空答案:不能清晰地描述各个任务之间的并行关系。
ABEGHIK的持续时间是36;ABEGHJK的持续时间是40;
ACEGHIK的持续时间是33;ACEGHJK的持续时间为37。
第一空答案:关键路径ABEGHJK,长度为40。
求松弛时间方法:
节点的最早开始时间:从起点到该节点所经历的最长时间;
节点的最晚开始时间:项目总工期减去项目终点到该节点的最长时间;
活动的最早开始时间:活动的最早开始时间就是该活动的起始节点的最早开始时间;
活动的最晚开始时间:活动的流入节点的最晚开始时间减去该活动的持续时间;
活动/节点的松弛时间=活动/节点的最晚开始时间-活动/节点的最早开始时间
9.2 系统分析基础知识
系统分析主要包括范围定义、问题分析、需求分析、逻辑设计(结构化功能需求、建立功能需求的原型、验证功能需求以及定义验收测试用例)以及决策分析等阶段。
需求分析确定待开发软件的功能、性能、数据和界面等要求,主要分为:功能需求、非功能需求(如可靠性、性能、响应时间、容错性和扩展性等)、设计约束(设计条件和补充规约)。
9.2.1 数据流图(DFD)
数据流图(DFD)是一种便于用户理解、分析系统数据流程的图形工具,它拜托了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
DFD基本成分包括数据流、加工、数据存储和外部实体。
数据流:由一组固定成分的数据组成,表示数据的流向,DFD中描述的是数据流,而不是控制流,除了流向数据存储或数据存储流出的数据流不必命名外,每个数据流都必须有一个合适的名字,以反映该数据流的含义。
加工:描述了输入数据流到输出数据量之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。每个加工有一个名字和编号,编号能反映出该加工位于分层DFD中的哪个层次和哪张图中,也能够看出它是哪个加工分解出来的子加工。
数据存储:用来表示存储的数据,每个数据存储都有一个名字。
外部实体:指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生的数据的归属地。
数据流图应注意的问题:
(1)适当地为数据流、加工、数据存储、外部实体命名,名字应该反映该成分的实际含义,避免空洞的名字。
(2)画数据流而不要画控制流。
(3)每条数据流的输入或者输出是加工。
(4)一个加工的输出数据流不应与输入数据流同名,即使他们的组成成分相同。
(5)允许一个加工有多条数据流流向另外一个加工,也允许一个加工有两个相同的输出数据流,流向另外两个不同的加工。
(6)保持父图和子图平衡。也就是说,父图中某加工的输入、输出必须与它的子图的输入、输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入或输出数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
(7)在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。
(8)保持数据守恒。也就是说,一个加工所有输出数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据。
(9)每个加工必须既有输入数据流也有输出数据流。
(10)在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中可能只有读没有写,或者只有写没有读。
9.2.2 数据字典和面向对象法方法
数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明,其中对加工的描述成为“小说明”,也可以称为“加工逻辑说明”。
数据字典有4类条目:数据流、数据项、数据存储和基本加工。数据项是组成数据流和数据存储的最小元素,源点、终点不在系统在内,故一般不在字典中说明。
面向对象的基本概念:
对象:一个对象把属性和行为封装为一个整体,一个对象通常可由对象名、属性和操作三部分组成。
消息:对象之间进行通信的一种构造。
类:定义一组大体上相似的对象,一个类包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象是类的具体化,是类的实例。
继承:是父类和子类之间共享数据和方法的机制,父类描述了这些子类的公共的属性和操作,一个子类可以继承它的父类中的属性和操作。
多态:在收到消息时,对象要予以响应,不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。
动态绑定:绑定是一个把过程调用和响应调用所需要的执行的代码加以结合的过程,在一般的程序设计语言中,绑定是在编译时进行的,叫做静态绑定;动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合是直到调用发生时才进行的。
9.3 系统设计基础知识
系统设计的主要内容包括:新系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计等;系统设计的基本任务大体上可以分为概要设计和详细设计两个步骤。
模块独立性是指每个模块完成一个相对独立的特定子功能,并且与其他模块的联系简单,衡量模块独立性的标准:耦合性和内聚性。
模块独立性标准:高内聚低耦合。
1.耦合性
耦合性是指模块之间联系的紧密程度,耦合性越高,则模块的独立性越差,模块间耦合的高低取决于模块间接口的复杂性、调用的方式及传递的信息,模块的耦合有以下几种类型(低→高):
(1)无直接耦合(最独立):指两个模块间没有直接的关系,它们分别属于不同模块控制与调用,它们之间不传递任何信息,因此,模块间耦合性最弱,模块独立性最高。
(2)数据耦合:指两个模块之间有调用关系,传递简单的数据值,相当于高级语言中的值传递。这种耦合程度较低,模块的独立性较高。(值传递)
(3)标记耦合:指两个模块之间传递的数据结构,如高级语言中的数据组名、记录名、文件名等这些名字即为标记,其实传递的是这个数据结构的地址。
(4)控制耦合:传递控制变量,当一个模块调用另一个模块时。被调用的模块通过该控制变量的值有选择地执行模块内某一功能。因此被调用模块内应具有多个功能、那个功能起作用,受调用模块控制。
(5)公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。
(6)内容耦合:程度最高的耦合,当一个模块直接另一模块的内部数据,或通过非正常入口而转入另一个模块内部,这种模块间的耦合为内容耦合,这种情况往往出现在汇编程序设计中。
2.内聚性
内聚性也称为块内联系,是模块的功能强度、及一个模块内部各元素之间联系的紧密程度的度量。若一个模块内各个元素的联系越紧密,则它的内聚性就越高,内聚性类型(高→低):
(1)功能内聚(程度最高):模块内所有的元素共同完成一个功能,缺一不可。
(2)顺序内聚:指一个模块各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出为下一功能元素的输入。
(3)通信内聚:指模块内所有处理元素都在同一数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
(4)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(5)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
(6)偶然内聚:指一个模块内各处理元素之间没有任何联系。
耦合性和内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽可能做到高内聚低耦合,提供模块的独立性。
9.5 系统实施基础知识
9.5.1系统模块结构设计
模块是组成系统的基本单位,它的特点是可以组合、 分解和更换。
一个模块应该具备以下4个要素:
(1)输入和输出(外部特性):模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者哪里取得输入,进行加工后再把输出返回给调用者。
(2)处理功能(外部特性):指模块把输入转换成输出所做的工作。
(3)内部数据(内部特性):指仅供该模块本身引用的数据。
(4)程序代码(内部特性):指用来实现模块功能的程序。
9.5.2 系统测试
系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。(选择题常考知识点)
测试的目的就是希望能够以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构尽心设计测试实例,并利用这些实例来运行程序,以便发现错误的过程。信息系统测试应包括软件测试、硬件测试和网络测试,硬件测试、网络测试可以根据具体的性能指标来进行,此处所说的测试更多的是软件测试。
有效的软件测试实际上分为单元测试(模块测试)、集成测试、确认测试和系统测试。
系统测试包括:
(1)恢复测试:监测系统的容错能力;
(2)安全性测试:检测系统的安全机制、保密措施是否完善;
(3)压力测试:也称强度测试,是对系统在异常情况下承受能力的测试,是检查系统极限状态运行时,性能下降幅度是否在允许范围内。
(4)性能测试:检测系统是否满足系统设计方案说明书对性能的要求。
(5)可靠性、可用性和可维护性测试:MTBF大+MTTR小
(6)安装测试:检测在安装过程中是否有误、是否容易操作等。
9.4.2.测试方法
白盒和黑盒测试的使用场景以及使用条件一定要掌握。
软件测试方法分为静态测试和动态测试。
1.静态测试:指被测试程序不在机器上运行,二是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
(1)人工检测:靠人工审查程序或评审软件,包括代码检测、静态结构分析的手段对程序进行检测。
(2)计算机辅助静态分析:利用静态分析工具对被测试的程序进行特性分析,包括代码检查。静态结构分析和代码质量度量等。
2.动态测试:指通过运行程序发现错误,常用方法是黑盒测试法和白盒测试法。测试用例由测试输入数据和与之对应的预期输出结构组成,在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
(1)黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性,常用的技术有等价类划分、边值分析、错误猜测和因果图等。
进行黑盒测试主要发现的错误有:
是否有功能错误,是否有功能遗漏?
界面是否有误?是否能够正确地接收输入数据并产生正确的输出结果?
是否有数据结构错误或外部信息访问错误?
性能是否能够接受?
是否有程序初始化和终止方面的错误?
(2)白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要;白盒测试常用的技术有逻辑覆盖、覆盖循环和基本路径测试。
白盒测试原则如下:
对模块的所有的独立路径至少测试一次;
对所有的逻辑判定的每一个分支(真与假)都至少测试一次;
每个循环都应在边界条件和一般条件下各执行一次;
测试内部数据结构的有效性等。
系统原型->作用:导出并验证系统需求有效性、探索软件解决方案、讨论用户界面设计
10.1 数据库设计概述
数据库系统的生命周期分为6个阶段:数据库规划、需求描述与分析、数据库与应用程序设计、数据库设计实现、测试、运行维护。
数据库设计的一般策略有:自顶向下(Top Down,从一般到特殊的开发策略)和自底向上(Bottom Up,从各种基本业务和数据处理着手,即从各个基层业务子系统业务处理开始)。
鉴于数据库和应用系统开发全过程数据库设计的基本步骤分为6阶段:
10.2 系统需求分析 -》确定系统边界、搜集支持系统目标的基础数据及其处理方法
需求分析阶段的任务:以数据流图的形式描述业务的进行过程;以数据字典形式对业务过程中使用的数据进行详细的描述。
参与需求分析的主要人员是分析人员和用户,需求分析阶段的工作以及形成的相关文档(作为概念结构设计阶段的依据):
需求分析阶段的文档主要包括需求说明文档、数据字典和数据流图,数据流图参考第9章总结,这里简单介绍数据字典。
数据字典(Data Dictionary,DD)使各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身,内容包括数据项、数据结构、数据流、数据存储和处理过程5个部分(至少应该包含每个字段的数据类型和每个表内的主键、外键)。
简单来说,数据字典就是个表结构说明,把表字段名、字段注释,字段类型、字段约束、表联系、表存储白纸黑字讲明白,以供后续建表参考。
需求分析阶段的成果是系统需求说明书,主要包括数据流图。数据字典、各类说明性表格、统计输出表和系统功能结构图等,系统需求说明书是以后设计、开发、测试和验收等过程的重要依据。
10.3 概念结构设计(★★★) -》 得到E-R图
数据库概念结构设计阶段是在需求分析的基础上,依照需求分析中的信息要求,对用户信息加以分类、聚集和概括,建立信息模型,并依照选定的数据库管理系统软件,转换成为数据的逻辑结构,再依照软硬件环境,最终实现数据的合理存储。这一过程也称为数据建模,这个过程分解为3个阶段:概念结构设计、逻辑结构设计和物理结构设计。
1.概念结构设计策略与方法
概念结构设计的目标是产生反应系统信息需求的数据库概念结构,即概念模式,概念结构是独立于支持数据的DBMS和使用的硬件环境的。
概念结构设计的策略通常有4种:自顶向下、自底向上、逐步扩张和混合策略。使用E-R方法,无论是哪种策略,都要对现实事物加以抽象认识,以E-R图的形式描述出来,对现实事物抽象的三种方法分别是分类、聚集和概括。
(1)分类:对现实世界的事务,按照其具有的共同特征和行为,定义一种类型,如学校中的老师和学生是不同类型。
(2)聚集:定义某一类型所具有的属性,如学生类型具有学号、姓名、性别、班级等共同属性。
(3)概括:由一种已知类型定义新的类型,如由学生类型定义研究生类型,只需要在学生类型上加上导师等属性,通常把已知类型成为超类,新定义的类型成为子类。
2.用E-R方法建立概念模型(★★★)
E-R图的设计是对需求分析阶段所得到的数据进行分类、聚集和概括,确定实体、属性和联系,概念结构设计工作步骤包括:选择局部应用、逐一设计分E-R图和E-R图合并。
E-R图合并的目的在于合并过程中解决分E-R图中相互间存在的冲突,消除分E-R图之间存在的信息冗余,使之成为能够被全系统所有用户共同理解和接受的统一的、精炼的全局概念模型。
合并的办法是将具有相同实体的两个或多个E-R图合而为一,在合成后的E-R图中把相同实体用一个实体表示,合成后的实体属性是所有分E-R图中该实体属性的并集。
注意分E-R图进行合并时,它们之间存在的冲突主要有3类:
(1)属性冲突:同一属性可能存在于不同的分E-R图中,但属性类型、取值范围、数据单位等不一致。
(2)命名冲突:相同意义的属性,在不同分分E-R图中有着不同的命名,或者名称相同的属性在不同的分E-R图中代表着不同的意义。
(3)结构冲突:同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体而在另一E-R图中又被抽象为属性。
分E-R图在合并过程的优化实现有以下几个方面:
(1)实体类型的合并:两个具有1:1联系或1:*联系的实体,可以予以合并,使实体个数减少,有利于减少将来数据库操作过程中的连接开销。
(2)冗余属性的消除:一般在各局部E-R图中的属性是不存在冗余的,但合并后就可能出现冗余。因为合并后的E-R图中的实体继承了合并前该实体在分E-R图中的全部属性,属性间就可能存在冗余,即某一属性可以由其他属性确定。
(3)冗余联系的消除:在局部E-R图合并过程中,可能会出现实体联系的环状结构,即某一实体A与另一实体B之间有直接联系,同时A又通过其他实体与实体B发生间接联系。通常直接联系可以通过间接联系所表达,可消除直接联系。当实体间的联系在不同的局部E-R图有不同的类型时,则应根据应用的语义对实体联系的类型进行综合或调整。
10.4 逻辑结构设计(★★★) -》 确定关系模式、关系规范化
逻辑结构设计是在概念结构设计的基础上进行数据模型设计,科颜氏层次模型、网状模型和关系模型。逻辑结构设计阶段的主要工作步骤包括确定数据模型、将E-R图转换成指定的数据模型、确定完整性约束和确定用户视图。
逻辑结构设计阶段的主要任务是:确定数据模型、将E-R图转换成为指定的数据模型、确定完整性约束和确定用户视图。
1.E-R图向关系模式转换
(1)实体向关系模式转换:E-R图转换成关系模式,实体名对应关系模式的名称(表名),实体的属性对应关系模式的属性(字段名),实体标识符就是关系的码(表的键)。
(2)联系向关系模式转换()
一对一联系转换(任一方实体的码都可作为联系的主码):一种将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性包括该联系所关联的两个实体的码及联系的属性,关系的码取自任意一方实体的码。另一种是将联系归并到关联的两个实体的任意一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性即可,归并后的实体码保持不变。
一对多联系转换(多方实体的码作为联系的主码):一种是将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码。另一种是将联系归并到关联的两个实体的多方,给待归并的多方实体属性集中增加一方实体的码和该联系的属性即可,归并后的多方实体码保持不变。
多对多联系转换(两方实体的码作为联系的主码):关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组。
2.关系模式规范化
由E-R图转换的来的初始关系模式并不能完全符合要求,还会有数据冗余。更新异常存在,需要进一步规范化处理,具体步骤如下:
(1)根据语义确定各关系模式的数据依赖;
(2)根据数据以来确定关系模式的范式;
(3)如果关系模式不符合要求,要根据关系模式的分解算法对其进行分解,达到3NF、BCNF或4NF;
(4)关系模式的评价及修正。根据规范化理论,对关系模式分解之后,就可以在理论上消除冗余和更新异常。
3.应用程序设计
应用程序设计有两种方法:结构化设计方法和面向对象设计方法。
结构化分析将数据和处理座位分析对象,数据的分析结果表示了现实世界中实体的属性及其之间的相互关系,而处理的分析结果则展示了系统对数据的加工和转换,主要工具是DFD+数据字典,结构化分析实施步骤:
(1)确定系统边界,画出系统环境图;
(2)自顶向下,画出各层数据流图(从抽象到具体);
(3)定义数据字典;
(4)定义加工说明;
(5)将图、字典以及加工组成分析模型。
面向对象开发方法通常采用UML,将问题和问题的解决方案组织为离散对象的集合,数据结构和行为都包含在对象的表示中。面向对象的特性包括表示、抽象、分类、封装、继承、多态和持久性。
10.5 数据库的物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。在数据库的物理结构中,数据的基本单位是记录,纪录是以文件的形式存储的,一条存储记录就对应着关系模式中的一条逻辑记录,在文件中还要存储记录的结构,不同的DBMS对应的物理文件存取方式支持也是不同的。
一般的,物理设计的主要工作步骤包括确定数据分布、存储结构和访问方式。
为提高数据的访问速度,通常会采用索引技术,在物理设计阶段,要根据数据处理和修改要求,确定数据库文件的索引字段和索引类型。
数据的访问方式是由其存储结构所决定的,数据库物理结构主要由存储记录格式、记录在物理设备上的安排及访问路径等构成。
1.存储记录结构包括记录的组成、数据项的类型、长度和数据项间的联系,以及逻辑记录到存储记录的映射。在设计记录的存储结构时,并不改变数据库的逻辑结构,但可以在物理上对记录进行分割。
2.存储记录的布局就是确定数据的存放位置。聚簇功能可以大大提高按聚簇码进行查询的效率,聚簇功能不但可用于单个关系,也适用于多个关系。比如职工表和部门表联合查询时,可以将职工和部门元组在物理上聚簇在一起,提高连接速度又节省存储空间,但当表有增删改操作时,重建聚簇的代价也大。
聚簇索引建立条件:
(1)聚簇码的值相对稳定,没有或很少修改;
(2)表主要用于查询,并且通过聚簇码进行访问或连接是该表的主要应用;
(3)对应每个聚簇码值的平均元组数既不太多,也不太少。
聚簇索引要求物理记录次序与索引项次序一致
3.存取方法是为存储在物理设备上的数据提供存储和检索的能力。存取方法包括存储结构和检索机制两部分,存储结构先定了可能访问的路径和存储记录,检索机制定义每个应用的访问路径。
在数据库中建立存取路径最普遍的方法是建立索引,确定索引的一般顺序:
(1)首先可确定关系的存储结构,即记录的存放是无序的,还是按某属性或某属性组聚簇存放;
(2)确定不移建立索引的属性或表,对于太小的表、经常更新的属性或表、属性值很少的表、过长的属性、一些特殊数据类型的属性(大文本、多媒体数据)和不出现或很少出现在查询条件中的属性不宜建立索引。
(3)确定宜建立索引的属性,例如关系的主码或外部码、以查询为主或只读表、范围查询、聚集函数(Min,Max,Avg,Sum,Count)或需要排序输出的属性可以考虑建立索引。
索引的最大优点是减少检索的CPU服务时间和I/O服务时间,改善检索效率。
10.6 数据库系统的实施阶段
数据库系统的实施阶段是根据设计,由开发人员编写代码程序来完成的,包括数据库的操作程序和应用程序。
根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构,数据加载,进行试运行和评价的过程,叫做数据库的实施或实现。
定义数据库结构时,应包含:
1.数据库模式与子模式,以及数据库空间等的描述;
2.数据库完整性描述,所谓数据的完整性就是指数据的有效性、正确性和一致性。
3.数据库安全性描述,数据安全性设计同数据完整性设计一样,也应在数据库设计的各个阶段加以考虑。系统对用户数据操纵两方面控制:一是给合法用户授权,目前主要有身份验证和口令识别;二是给合法用户不同的存取权限。
4.数据库物理存储参数描述,一般包括块大小、页面大小(字节数或块数)、数据库的页面数、缓冲区个数、缓冲区大小和用户数等。
10.7 数据库运行维护与管理
10.7.1.数据库运行维护
1.数据库系统监控对象
数据库系统监控对象分为性能监控、故障监控、安全监控。
性能监控是掌握系统运行性能的手段,性能监控应当从资源占用率、事务响应时间、事务量、死锁、用户量等方面实现。
故障监控是保障数据库系统正常运行的手段,从数据库系统故障的类型入手,监控事务故障。系统故障和机制故障,出现需要管理员干预的故障时及时恢复。
安全监控是对破坏数据库安全事件的监控,包括入侵监控。用户访问监控。病毒监控等。
2.数据库的监控方式
数据库系统的监控方式分为系统监控和应用程序监控。系统监控是通过DBMS提供的监控功能,应用程序监控需要管理人员根据具体情况编制应用程序进行系统监控,是对DBMS监控功能的补充,系统日志是监控中的主要依据。
3.数据库重组和重构
数据库运行一段时间后,由于记录的增删改,导致物理存储碎片记录链过多,影响数据库存取效率,这是需要对数据库进行重组和部分重组,数据库重组是指再不改变数据库逻辑和物理结构的情况下,取出数据库存出文件中的废弃空间以及碎片空间中的指针链,使数据库记录在物理上紧连。
数据库重构是对数据库结构做修改,包括表结构的修改和视图的修改。
(1)修改属性列明或数据类型
(2)增加和删除属性
(3)约束的修改
(4)表的分解与合并
视图机制优点:实现数据的逻辑独立性,并且可以实现数据的安全性。采用视图机制可将不允许应用程序访问的数据屏蔽在视图之外。但是在数据库重构过程中引入或修改视图,可能会影像数据的安全性,所以必须对视图进行评价和验证,保证不能因为数据库的重构而引起数据的泄密。
4.数据库系统的审计可以产生审计跟踪信息,包括哪些数据库对象受到了影响,谁在什么时候执行了这些操作,审计是被动的,它只能在跟中对数据库的修改而不能防止,但作为一个安全性手段,起到对非法入侵的威慑作用,可以据此追究非法入侵者的法律责任。
审计功能的开启会影响到系统的性能,特别是忙碌的系统,会导致性能下降,而且审计跟踪信息会被保存下来,引起存储空间的问题。解决这一问题的方法是通过对DBMS范围内的不同级别进行审计操作,例如,在数据库级别、数据库对象界别和在用户级别进行审计,根据不同级别有选择的进行审计,可以使对存储和性能的负面影响降到最小。
10.7.2 数据库系统的管理(★★★)
1.数据完整性维护和管理
数据库完整性是通过DBMS系统提供的完整性约束机制和应用程序来实现,以保证运行过程中数据的正确性。在系统运行过程中对数据完整性的维护和管理采用两种方式:
(1)对于DBMS管理的约束,通过修改数据库的定义,如增加或删除实体完整性约束、参照完整性约束、检查约束来实现。
(2)对于应用程序实现的复杂的完整性约束,通过分析和修改应用程序,通常是采用触发器程序来实现。
2.数据库的存储管理
数据库中的数据以文件的形式存储在物理存储设备上的,通常是磁盘系统,应用程序通过DBMS完成I/O操作来访问数据,I/O操作的效率直接影响到系统的运行效率,提高系统访问效率的有效手段就是提高I/O操作的效率。
有效提高系统性能,通过以下方法进行存储管理:
(1)索引文件和数据文件分开存储,事务日志文件存储在高速设备上;
(2)适时修改数据文件和索引文件的页面大小;
(3)定期对数据进行排序;
(4)增加必要的索引项。
除进行数据库的存储管理之外,也可以通过增加计算机内存、引入高速存储设备等方式来提高系统的访问效率。
3.备份和恢复(★★★)
随着存储设备稳定性的不断提高,硬件故障发生概率越来越小,故障主要集中在由应用程序引起的事务故障和系统故障上,管理员需要做的工作主要是做好备份和日志管理。
备份计划的制定和实施建议:
(1)根据数据变更情况,设定合理的备份周期和备份时间,最好是在业务量最小的时段进行备份;
(2)事务日志文件保存在最稳定的存储设备上;
(3)定期在事务日志文件中加入检查点。
检查点记录了数据库的正确状态点,在数据库恢复过程中,就可以反向扫描日志文件,找到第一个检查点,执行undo都和Redo操作,减少恢复的时间开销。
4.并发控制和死锁管理(★★★)
一般多用户数据库管理系统都提供了并发控制机制来实现事务的并发调度并进行死锁管理,实际运行中的数据库系统,死锁的产生往往是因为事务程序的错误。
5.数据安全性管理
数据库安全管理几个实现方面:
(1)建立网络级安全,主要是防火墙的设置;
(2)操作系统级安全,进行登录用户的管理;
(3)DBMS级安全,对访问数据库的用户进行密码验证;
(4)角色和用户的授权管理;
(5)建立视图和存储过程加强安全性;
(6)使用审计功能,为追究非法入侵者法律责任提供证据,发现安全漏洞。
10.7.3.性能调整(★★★)
1.SQL语句的编码检验
(1)尽可能减少多表查询或建立物化视图;
(2)以不相关查询替代相关子查询;
(3)只检索需要的列;
(4)用带IN的条件字句等价替换OR字句;
(5)经常提交commit,以尽早释放锁。
2.表设计的评价
关系模式的设计应当符合3NF或BCNF,但实际生产中需要根据实际情况对标进行调整,调整原则如下:
(1)如果频繁的对两个相关表进行连接操作,则考虑将其合并;
(2)如果频繁的访问表中的某一部分字段,则考虑分解表,将该部分单独作为一个表;
(3)对于很少更新的表,引入物化视图。(普通视图是虚拟表不存放数据,物化视图是特殊的物理表)
3.索引维护和改进
索引调整原则:
(1)如果查询是瓶颈,则在关系上建立适当的索引;通常,在作为查询条件的属性上建立索引可以提高查询效率。
(2)如果更新是瓶颈,因每次更新都会重建表上的索引,引起效率的降低,则考虑删除某些索引。
(3)选择适当的索引类型。如果经常使用范围查询,则B树索引比散列索引更有效。
(4)将有利于大多数据查询和更新的索引设为聚簇索引。
数据模型三要素:数据结构、数据操作、数据约束条件
11.1 事务的基本概念
11.1.1 概述
事务(Transaction)是一系列的数据库操作,是数据库应用程序的基本逻辑单位,即应用程序对数据库的操作都应该以事务的方式进行。
事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位,事务和程序是两个不同的概念,一般一个程序可包含多个事务。
事务定义的语句如下:
(1)BEGIN TRANSACTION:事务开始;
(2)END TRANSACTION:事务结束;
(3)COMMIT:事务提交,该操作表示事务成功的结束,它将通知事务管理器该事物的所有更新操作现在可以被提交或永久德保留;
(4)ROLLBACK:事务回滚,该操作表示事务非成功的结束,它将通知事务管理器出故障了,数据库可能处于不一致的状态,该事物的所有更新操作必须回滚或撤销。
SQL中事务的开始与结束:SQL标准规定当一条sql语句被执行,就隐式的开始了一个事务,SQL中的Commit work和Rollback work语句都是结束一个事务的标志。
(1)Commit work:提交当前事务,这意味着该事务所做的更新在数据库中永久保存,一旦事务提交,一个新的事务自动开始。
(2)Rollback work:回滚当前事务,这意味着将撤销该事务对数据库的更新,这样,数据库恢复到该事务执行第一条语句之前的状态。
注意:若事务已执行Commit work就不能用Rollback work撤销。数据库系统能够保证在发生诸如某天SQL语句错误、断电、系统崩溃的情况下,若事务还没有执行Commit work,则造成的影响将被回滚。对断电、系统崩溃的情况,回滚实在系统重新启动时进行。
11.1.2 事物的特性
典型的事务例子是银行转账业务,对于“从账户A转入账户B金额X元”业务,从数据库系统角度包含2个操作:1)从账户A减去X元;2)给账户B加上X元。
事务的ACID特性:
1.原子性(Atomicity):事务的所有操作在数据库要么全做要么全不做。
2.一致性(Consistency):一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。就银行转账案例来说,假设账户A和账户B两者余额加起来是100000,那么不管A和B之间如何转账,转几次账,事务结束后两个账户余额相加起来还是100000,这就是事务的一致性。一致性可以有DBMS的完整性约束机制来自动完成,而复杂的事物则由应用程序来完成。
3.隔离性(Isolation):一个事务的执行不能被其他事务干扰。并发事务在执行过程中可能会对同一数据操作,这些事务的操作应该不会相互干扰,是相互隔离的。
4.持久性(Durability):一旦事务提交,它对数据库的改变是永久的,即便系统出现故障也是如此。
11.1.3 事务的状态
如果不出现故障,事务默认都能执行完成,一旦执行过程发生故障,不能执行完成的事务称之为中止事务;撤销中止事务对数据库的更新称为事务回滚;成功执行完成的事务称为已提交事务。
中止事务可以通过DBMS回滚恢复数据库,已提交事务不能回滚,但可以由程序员或DBA手动执行“补偿事务”撤销提交事务对数据库的影响。
事务的5种状态:
1.活动状态:事务的初始状态,事务执行时的状态。
2.部分提交状态:事务中最后一条语句(事务全部执行完,但实际输出可能还在内存中)被执行后的状态。
3.失败状态:事务不能继续正常执行的状态。
4.中止状态:事务回滚并且数据库已经恢复到事务开始执行前的状态,事务进入中止状态后,系统要么重启事务(软硬件错误引起的中止事务)要么杀死事务(事物内部的逻辑造成的错误或者输入错误等造成的中止事务)。
5.提交状态:事务在部分提交后,将往硬盘上写入数据,当最后一条信息写入后(事务成功完成)的状态,只有事务处于提交状态后才能说事务已经提交。
事务状态转换图:
11.2 数据库的并发控制
所谓并发操作,是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作,并发操作带来的问题是数据的不一致性主要有3类:丢失更新、不可重复度和读脏数据,其主要的原因是事务的并发操作破坏了事务的隔离性。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据。
11.2.1 事务调度
1.串行调度(Serial Schedule)是指多个事务依次串行执行,且只有当一个事务的所有操作都执行完后才执行另一个事务的所有操作,案例参详书本P-509。
对两个事务T0,T1,不论是先执行T0后执行T1,还是先执行T1后执行T0,只要是串行调度,执行的结果都是稳定和正确的,对于N个事务,最多有N!中正确的串行调度。
2.并发调度(Concurrent Schedule):利用分时的方法同时处理多个事务。对于N个事务进行并发调度,情况会变得复杂得多,调度方案远大于N!个,并且并发调度的结果有可能是错误的。
3.可恢复调度(Recoverable Schedule):事务Tj要读事务Ti写的数据时,事务Tj必须要先于事务Ti提交。
11.2.2 并发操作带来的问题
1.丢失修改:当两个或多个事物读入同一数据并修改,会发生丢失修改的问题,如上图丢失修改案例,T1事务的A=A-1修改操作被T2事务的A=A-1所覆盖,也就是丢失了T 1事务的修改操作。
2.不可重复读:是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。如上图不可重复读案例中,事务T1分别在T2和t9时刻读取了B的值,但是事务T2在t时刻对B的值进行了修改操作,导致T1事务两次读取B的值不同,从而检验运算C=A+B不对(两次运算结果不一致)。也就是在同一事务内两次读取同一数据输出结果不同,是因为在两次读取的时间间隙里,其他事务对该数据进行了修改操作。
3.读脏数据: 如上图读脏数据案例,T1事务修改C数据后(未提交到数据库),T2事务读取C数据为200,但是t7时刻T1事务撤销了对C数据的修改,即C恢复原值,那T2事务读到的数据与数据不一致(无效),称之为读脏数据。
这3种情况是发生在事务并行处理的过程中,原因是多个事务对相同数据的访问,干扰了其他事务的处理,产生了数据的不一致性,是事务隔离性的破坏导致了数据的不一致性。问题的焦点在于事务在读写数据是不加以控制而相互干扰,解决问题的方法是如何保证事务的隔离性入手。
数据库事务的隔离级别如下:由低到高依次为Read Uncommitted 、Read Committed 、Repeatable Read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。 (非常重要)
11.2.3.并发调度的可串行性
数据库系统必须控制事务的并发执行以保证数据库处于一致性状态。
1.可串行化的调度
多个事务的并发执行是正确的,当且仅当其结果与某一次序串行的执行它们时的结果相同,称这种调度策略是可串行化的调度(Serializability Schedule)。
可串行性是并发事务正确性的准则,按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
2.冲突可串行化
冲突(Conflict):当Ii和Ij是不同事务在相同的数据项上操作的命令,且至少有一个是write命令时(不同的事务对同一数据的读写操作和写写操作),则称Ii与I j是冲突的。
等价调度:设Ii与Ij是调度S的两条连续命令,若Ii与Ij是不同事务的命令且不冲突,则可由交换Ii与Ij的顺序得到一个新的调度S,则S和S是等价的。
冲突等价:如果调度S经过一系列非冲突命令交换成S,则称S与S是冲突等价的。
冲突可串行化:若调度S与一个串行调度S冲突等价,则S是冲突可串行化的。
3.冲突可串行化判定
在设计并发控制机制时,必须证明该机制产生的调度是否可串行化,一般通过S构造一个有向图—优先图(Precedence Graph)G(V,E)来判定,V由所有事务组成的顶点集,E是一个边集,由满足下述三个条件的边T i → T j组成:
(1)在Tj执read(A)之前,Ti执行write(A);
(2)在Tj执write(A)之前,Ti执行read(A);
(3)在Tj执write(A)之前,Ti执行write(A)。
如果优先图中存在边T i → T j,则任何等价于S的串行调度S′中,Ti必出现在Tj之前。
对应以上2图的优先图:调度S4中,T0执行read(A)优先于T1执行write(A),所有有一条边T0 → T1,又因为T1执行read(B)优先于T0执行write(B),所有有边T1 → T0 。
有过调度S的优先图中存在环,则调度S是冲突不可串行化的,如果无环,则调度S是冲突可串行化的。
11.2.4 并发控制技术
并发事务控制的最常用手段是加锁,该方法只允许事务访问当前持有锁的数据项,常用锁:排它锁和共享锁。
排他锁(Exclusive Locks,X锁)也称为写锁,用于对数据进行写操作时进行锁定,如果事务T对数据A加上X锁后,就只允许事务T对读取和修改数据A,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的锁。
共享锁(Share Locks,S锁)也称为读锁,用于对数据读操作的锁定。如果事务T对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以在对数据A加S锁来读取,只要数据A上有S锁,任何事务都只能对其加S锁读取而不能加X锁修改数据。
简言之,若T事务对A数据加了X锁,其他事务对数据A不能加X锁和S锁;若T事务对A数据加了S锁,其他事务对数据A能加S锁,不能加X锁。
11.2.5 两段锁协议
通过封锁协议来解决在保证事务的一致性的前提下尽可能提高并发性问题,封锁协议主要是三级封锁协议和两段锁协议。
1.封锁协议
(1)一级封锁协议:是事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放X锁,用来解决丢失修改问题。
(2)二级封锁协议:是在一级封锁协议基础上加上事务T在读取数据A之前必须对其加上S锁,读完后即可释放S锁,解决读脏数据的问题。
(3)三级封锁协议:是在一级封锁协议基础上加上事务T在读取数据A之前必须对其加上S锁,直到事务结束才可释放S锁,解决了不可重复读的问题。
2.两段锁协议
两段锁协议是指任何数据进行读写之前必须对该数据加锁,在释放一个封锁之后,事务不再申请和获得任何其他封锁。
所谓“两段”锁含义:事务分为两阶段,第一阶段获得封锁,也称为扩展阶段,第二阶段是释放封锁,也称为收缩阶段。
如果事务都遵循两段锁协议,那么他们的并发调度是可串行化的。两段锁是可串行化的充分不必要条件。也就是如果事务不遵循两段锁协议,那么它们的调度可能是可串行也可能不可串行。
注意:采用两段锁协议也有可能产生死锁,因为每个事务都不能及时解除被他封锁的数据,可能会导致多个事务互相都要求对方已封锁的数据不能继续运行。
3.活锁和死锁
所谓活锁:如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4 又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,以此类推,T2有可能永远等待,避免活锁的简单方法是采用先来先服务的策略。
所谓死锁:是指两个以上的事务分别请求封锁对方已经封锁的数据,导致长期等待而无法继续运行下去的现象。
预防封锁:一次封锁法和顺序封锁法。
解决死锁:DBMS的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务得以继续运行下去。当然,对撤消的事务所执行的数据修改操作必须加以恢复。
11.3 数据库的备份与恢复
11.3.1 数据库系统故障种类
1.事务故障:由于程序执行错误引起事务非预期的、异常终止的故障,通常来源主要有逻辑错误(非法输入、找不到数据、溢出、超出资源限制等)和系统错误(比如死锁),事务故障由DBMS系统来实现故障恢复,通过撤销事务(UNDO)来强行回滚该事务操作。
2.系统故障:是指硬件故障、软件(如DBMS、OS或者应用程序)漏洞的影响下,导致丢失了内存中的信息,影响正在执行的事务,但未破坏存储在外存储上的信息。
3.介质故障:是指数据库的存储介质发生故障,如磁盘损坏、瞬间强磁场干扰等,这种故障破坏了数据库,会影响到所有正在读取这部分数据的事务。
11.3.2 数据库备份
数据转出是将数据库自制到另一个磁盘或磁带上保存起来,也就是数据备份。
1.静态转储和动态转储:静态转储是指转出期间不允许对数据库进行任何存取修改操作;动态转储是在转出期间允许对数据库进行存取、修改操作,因此转出和用户事务可以并发执行。
2.海量转储和增量转储:海量转储就是全量备份,增量转储就是每次只转储自上次转储后更新过的数据。
3.日志文件:在事务处理的过程中,DBMS把事务开始、事务结束以及对数据库的增删改的每一次操作写入日志文件。DBMS可以利用日志文件进行事务故障和系统故障的恢复,并可与备份文件实现介质故障恢复。
4.数据库镜像:也就是数据库复制。
11.3.3 数据库恢复
数据库恢复主要通过冗余数据(数据库备份文件和日志文件)来实现。
1.故障恢复操作
故障恢复的两个操作:UNDO和REDO。
(1)UNDO(撤销事务):将数据库恢复到事务执行前的正确状态(反向扫描日志文件直至对应事务开始的标识)。
(2)REDO(重做事务):将已提交的事务重新执行(正向扫描日志文件直至对应事务结束的标识)。
2.故障恢复策略(很重要)
(1)事务故障恢复:由系统自动完成,对用户是透明的,通过UNDO操作使数据库恢复到该事务执行前的正确状态。
(2)系统故障恢复:在系统重启之后自动执行,对未完成的事务执行UNDO操作,对已提交未写入数据库的事务执行REDO操作。
(3)介质故障恢复:数据库需要重装,通过故障前最后一次的备份和日志文件,按照系统故障的恢复过程执行UNDO和REDO操作来实现恢复。
11.4 数据库的安全性与完整性
1.安全性违例
恶意访问的形式主要包括:未经授权读取数据(窃取信息);未经授权修改数据;未经授权破坏数据。数据库安全性是指保护数据库不收恶意访问。保护数据库安全,有五个层次采取安全措施:数据库系统层次、操作系统层次、网络层次、物理层次、人员层次。(了解)
2.授权、视图
通过DBMA提供的授权功能赋予用户在数据库各个部分上的增删改查等权限;或者通过视图隐藏用户不需要看见的数据,限制用户只能访问所需数据。
3.审计追踪
审计追踪(Audit Trail)是一个对数据库所有更改的日志,还包括哪个用户执行了更改和什么时候执行的更改等信息。
4.数据加密
数据加密是计算机系统对信息进行保护的一种最可靠的方法,按照作用不同,主要分为数据传输加密技术、数据存储加密技术、数据完整性的鉴别技术和密钥管理技术。
5.数据库的完整性
数据库的完整性是指数据的正确性和相容性,完整性约束条件作用的对象可以是表、行和列三种。
12. 数据库发展和新技术
12.1 分布式数据库
分布式数据库系统是针对面向地理上分散,而管理上有需要不同程度集中管理的需求而提出的一种数据管理信息系统。
分布式数据库系统首先是由多个不同节点或场地的数据库系统通过网络连接而成的,每个节点都有各自的数据库管理系统,同时还有全局数据库管理系统。
分布式数据库系统作为一个整体,应该保证数据的一致性,也就是各个局部数据库之间应该具有逻辑相关性,完全分布式数据库系统应该满足的条件如下:
(1)分布性:数据存储在多个不同的节点上;
(2)逻辑相关性:数据库系统内的数据在逻辑上具有相互关联的特性;
(3)场地透明性:使用分布式数据库中的数据时不需指明数据所在的位置;
(4)场地自治性:每一个单独的节点能够执行局部的应用请求。
分布式数据库的特点:(理解并记住)
数据透明性的表现形式:分片透明、位置透明、模型透明
(1)数据的集中控制性:能够对信息资源提供集中控制,是主张采用数据库最强有力的动机之一。全局数据库管理员负责管理所有数据库,局部数据库管理员只负责格子节点的局部数据库。
(2)数据独立性:是指数据的组成对应用程序来说是透明的,应用程序只需要考虑数据的逻辑结构,而不用考虑数据的物理存放,数据在物理组织上的改变不会影响应用程序。
(3)数据冗余可控性:多场地保存同一数据,节省查询中的传输开销,数据的多个副本也提高了系统的可用性,这种冗余是在系统控制之下的,所以给喜糖造成的不利影响是可控制的。
(4)场地自治性:分布式数据库系统的所有用户可以使用全局数据库,也允许用户只用本地的局部数据库(局部应用),局部应用独立于全局应用的特性就是局部数据库的自治性,由于自治性,对每个场地来说就有两种数据:一种是参与全局数据库的局部数据,而另一种则是不参与全局数据库的数据。
(5)存取的有效性:分布式数据库系统中的全局查询分解为等效的子查询,因为查询优化分为全局优化和局部优化。
分布式数据库的模式结构:
分布式数据库系统故障分为:介质故障、系统故障、事务故障、网络分割故障、报文故障。
12.2 决策支持系统和数据库
决策支持系统由下列的子系统组成:
(1)数据库子系统:包括数据库,其中包含关于决策问题的有关数据,并由数据库管理系统管理;
(2)模型库子系统:包括模型库,其中包含财务、统计、管理科学或其他定量模型,可提供系统的分析功能,由模型库管理系统为用户提供建模语言以及模型库管理功能;
(3)人机交互系统:通过该子系统,用户与决策支持系统通信并使用决策支持系统,协调和控制数据库子系统和模型库子系统的管理和运行。
数据仓库的数据具有四个基本特征:面向主题的、集成的、不可更新的、随时间不断变化的。
联机分析处理(OLAP)是针对特定问题的联机数据访问和分析。OLAP是以数据仓库进行分析决策的基础,针对特定问题的联机数据访问和分析,OLAP能够对不同数据集合进行基于某个或是多个角度的比较,它能够从不同角度切割数据集合从而进行分析。
联机事务处理(OLTP)是是操作人员和低层管理人员利用计算机网络对数据库中的数据进行查询、增加、删除、修改等操作,已完成事务处理工作。OLTP以快速事务响应和频繁的数据修改为特征,用户利用数据库快速地处理具体业务,OLTP应用时有频繁的写操作,所以数据库要提供数据锁、事务日志等机制。
OLTP和OLAP对比表说:
12.3 非关系型数据库NOSQL
12.3.1 CAP理论和BASE理论
CAP理论是:对于一个分布式系统,一致性、可用性和分区容忍性三个特点最多只能三选二。
(1)一致性:指系统在执行了某些操作后仍处在一个一致的状态,这点在分布式的系统中尤其明显。比如某用户在一处对共享的数据进行了修改,那么所有有权使用这些数据的用户都可以看到这一改变,简言之,就是所有的节点在同一时刻有相同的数据。
(2)可用性:指数据的所有操作都应有成功的返回,高可用性则是在系统升级(软件或硬件)或在网络系统中的某些节点发生故障的时候,仍可以正常返回,简言之,就是任何请求不管成功或失败都有响应。
(3)分区容忍性:这个概念的前提是网络发生故障,在网络连接上,一些节点出现故障,使得原本连通的网络变成了一块一块的分区,若允许系统继续工作,那么就是分区可容忍。
由于CAP理论的存在,为了提高性能,出现了ACID的一种变种BASE(Basically Available,Soft-state,Eventually consistency)是,它是一个弱一致性理论,只要求最终一致性。
(1)Basically Available:基本可用;
(2)Soft-state:软状态,可以理解为“无连接”的,而与之相对应的Hard state就是“面向连接”的;
(3)Eventually consistency:最终一致性,最终整个系统看到的数据是一致的。
12.3.2 NOSQL数据库的种类
NOSQL数据库的种类及对应的代表性产品、数据模型、应用场景、优缺点如下表所示
多值数据库是分布式数据库系统的重要分支,它速度快、体积小、比关系数据库便宜;它提供一个通用的数据集成与访问平台,屏蔽现有各数据库系统不同的访问方法和用户界面,给用户呈现出一个访问多种数据库的公共接口。
多值数据库系统使用的多个异构的数据源之间可以共享它们相互依赖的数据,并具有相互操作的能力,在电子政务、电子商务、企业信息集成、军事指挥、金融证券、办公自动化、远程教育、远程医疗等领域发挥巨大的支撑作用。
常用的多值数据库有Rocket U2、Extensible storage Engin、OpenInsight、OpenQM。
13.1 标准化和知识产权基础知识
把考点对应的章节看2遍,每年必考,分值基本在2分,13.8的真题一定要掌握
13.2 知识产权基础知识
知识产权是指人们基于自己的智力活动创造的成果和经营管理活动中的经验、知识而依法享有的权利。
知识产权分为工业产权和著作权两类。
工业产权:包括专利、实用新型、工业品外观设计、商标、服务标记、产商名称、产地标记或原产地名称、制止不正当竞争等内容。
著作权:是指作者对其创作的作品享受的人身权和财产权。人身权包括发表权、署名权、修改权和保护作品完整权等;财产权包括作品的使用权和获得报酬权。
知识产权的特点:
(1)无形性:知识产权是智力创作性成果,是一种没有形体的精神财富。
(2)双重性:某些知识产权具有财产权和人身权双重性,例如著作权。
(3)确定性:智力创作性成果的财产权需要依法审查确认,已得到法律保护。
(4)独占性:由于智力成果具有可以同时被多个主体所使用的特点,因此,法律授予知识产权一种专有权,具有独占性。
(5)地域性:各国主管机关依照本国法律授予的知识产权,只能在其本国领域内受法律保护。例如中国专利局授权的专利权或中国商标局核准的商标专用权,只能在中国领域内受保护,其他国家则不给予保护。外国人在我国领域外使用中国专利局授权的发明专利,不侵犯我国专利权。
(6)时效性:知识产权具有法定的保护期限,一旦保护期限届满,权利将自行终止,成为社会公知。例如,我国发明专利的保护期为20年,实用新型专利权和外观设计专利的期限为10年,均自专利申请日算起,我国公民的作品发表权保护期为作者终生及其死亡后50年。
我国保护知识产权的法规:中华人民共和国著作权法、中华人共和国专利法、中华人民共和国继承法、中华人民共和国合同法、中华人民共和国商标法、中华人民共和国不正当竞争法和中华人民共和国计算机软件条例等。
13.3 计算机软件著作权(★★★)
1.计算机软件著作权的主体和客体
计算机软件著作权的主体包括公民、法人和其他组织。
(1)公民指自然人,通过以下途径取得软件著作权主体资格
– 公民自行独立开发软件(软件开发者);
– 订立委托合同,委托他人开发软件,并约定软件著作权随自己享有;
– 通过转让途径取得软件著作财产权主体资格(软件权利的受让者);
– 公民之间或与其他主体之间,对计算机软件进行合作开发而产生的公民群体或者公民与其他主体成为计算机软件作品的著作权人;
– 根据《继承法》的规定通过继承取得软件著作财权主体资格。
(2)法人:是具有民事权利能力和民事行为能力,依法独立享有民事权利和承担义务的组织。
– 有法人组织并提供创作物质条件所实施的开发,并由法人承担社会责任;
– 通过接受委托、转让等各种有效合同关系而取得著作权主体资格;
– 因计算机软件著作权主体(法人)发生变更而依法成为著作权主体。
(3)其他组织:是指除去法人以外的能够取得计算机软件著作权的其他民事主体,包括非法人单位和合作伙伴等。
2.计算机软件著作权的客体
根据《计算机软件保护条例》,著作权法保护的计算软件是指计算机程序及其相关文档,著作权法规定对计算机软件的保护是指计算机软件的著作权人或者其受让者依法享有著作权的各项权利。
3.计算机软件著作权的权利(★★★)
《中华人民共和国著作权法》规定,软件作品享有软件著作权的人身权和财产权;《计算机软件保护条例》规定软件著作权人享有发表权和开发者身份权,这两项权利与人身权不可分离。
(1)软件著作权的人身权
发表权,即决定软件是否公之于众的权利;
开发者身份权(署名权),即表明开发者身份,在软件上署名的权利,署名权无时间限制。
(2)软件著作权的财产权(仔细阅读)
财产权通常是指由软件著作权人控制和支配,并能够为权利人带来一定经济效益的权利,具体包括:
复制权,即将软件制作一份或者多份的权利;
修改权,即对软件进行增补、删节,或者改变指令、语句顺序的权利;
发行权,即以出售或者赠与方式向公众提供软件的原件或者复制件的权利;
翻译权,即将原软件从一种自然语言文字转换成另一种自然语言文字的权利;
注释权,即著作权人对自己的作品享有进行注释的权力;
出租权,即有偿许可他人临时使用软件的权利,但是软件不是出租的主要标的的除外;
信息网络传播权,即以有线或者无线方式向公众提供软件,使公众可以在其个人选定的时间和地点获得软件的权利;
使用许可权,即软件著作权人享有的许可他人行使其软件著作权并获得报酬的权利。许可他人行使软件著作权的,应当订立许可使用合同。使用许可分为专有许可或非专有许可。没有订立合同或者合同中没有明确约定为专有许可的,被许可行使的权利应当视为非专有权利。
转让权,即软件著作权人享有的全部或者部分转让其软件著作权并获得报酬的权利。转让软件著作权的,当事人应当订立书面合同。
根据《著作权法》和《计算机软件保护条例》规定,计算机软件著作权的保护期自软件开发完成之日起产生,保护期为50年,保护期满,除开发者身份权以外,其他权利终止。
13.4 计算机软件著作权的归属(★★★)
根据《计算机软件保护条例》规定“软件著作权属于软件开发者”,即以软件开发的事实来确定著作权的归属。
1.职务开发软件著作权的归属
所谓职务开发软件是指自然人在单位任职期间所开发的软件,主要是指以下三种情况下开发的软件:
(1)针对本职工作中明确指定的开发目标所开发的软件;
(2)开发的软件是从事本职工作活动中所预见的结果或者自然的结果;
(3)使用了单位的资金、专用设备、未公开的专门信息等物质等物质条件,并由单位承担责任的软件。
根据《计算机软件保护条例》规定公民在单位任职期间所开发的软件,==如果是职务开发软件则软件的著作权属于该单位;==雇员进行本职工作以外的软件开发创作,必须符合以下三个条件才能享有软件著作权:
(1)所开发的软件作品不是执行其本职工作的结果;
(2)所开发的软件作品与开发者在单位中从事的工作内容无直接联系;
(3)开发的软件作品未使用单位的物质技术条件。
常有满足前面2个条件,但使用了单位的相关物质技术条件,这时候一般是单位和雇员协商确定著作权归属,如果公民在非职务期间利用单位的物质技术条件创作的与单位业务范围无关的计算机程序,其著作权属于创作者,但当作者许可第三人使用软件时,应当支付单位合理的物质条件使用费。
2.合作开发软件著作权的归属
合作开发的软件,其著作权的归属由合作开发者签订书面合同约定。无书面合同或者合同未作明确约定,合作开发的软件可以分割使用的,开发者对各自开发的部分可以单独享有著作权;合作开发的软件不能分割使用的,其著作权由各合作开发者共同享有。
3.委托开发的软件著作权的归属
接受他人委托开发的软件,其著作权的归属由委托人与受托人签订书面合同约定;无书面合同或者合同未作明确约定的,其著作权由受托人享有。
4.接受任务开发的软件著作权的归属
由国家机关下达任务开发的软件,著作权的归属与行使由项目任务书或者合同规定;项目任务书或者合同中未作明确规定的,软件著作权由接受任务的法人或者其他组织享有。
5.计算机软件著作权主体变更后软件著作权的归属
软件著作权是可以继承的。软件著作权是属于自然人的,该自然人死亡后,在软件著作权的保护期内,软件著作权法的继承人可以依照《继承法》的有关规定,继承除署名权以外的其他软件著作权权利,包括人身权利和财产权利。软件著作权属于法人或者其他组织的,法人或者其他组织变更、终止后,其著作权在条例规定的保护期内由承受其权利义务的法人或者其他组织享有;没有承受其权利义务的法人或者其他组织的,由国家享有。
13.5 软件著作权侵权的法律责任
《计算机软件保护条例》第30条:软件的复制品持有人不知道也没有合理理由应当知道该软件是侵权复制品的,不承担赔偿责任;但是,应当停止使用、销毁该侵权复制品。如果停止使用并销毁该侵权复制品将给复制品使用人造成重大损失的,复制品使用人可以在向软件著作权人支付合理费用后继续使用。
13.6 计算机软件的商业秘密权
《反不正当竞争法》第10条定义商业秘密:“是指不为公众所知悉,能为权利人带来经济利益,具有实用性并经权利人采取保密措施的技术信息和经营信息。”经营秘密和技术秘密是商业秘密的基本内容,商业秘密是一种无形的信息财产。
经营秘密,即未公开的经营信息,是指与生产经营销售活动有关的经营方法、管理方法、产销策略、货源情报、客户名单、标底和标书内容等专有知识。
技术秘密,即未公开的技术信息,是指与产品生产和制造有关的技术诀窍、生产方案、工艺流程、设计图纸、化学配方、技术情报等专有知识。
13.7 专利权概述(★★★)
发明创造是产生专利权的基础,发明创造是指发明、实用新型和外观设计,是我国专利法主要保护的对象,专利法定义的发明是指对产品、方法或者其改进所提出的技术方案;实用新型是指对产品的形状、构造或者其组合所提出的新的技术方案;外观设计是指对产品的形状、图案、色彩或者它们的结合所做出的富有美感的并适于工业应用的新设计。
专利申请权是指公民、法人或者其他组织根据法律规定或者合同约定享有的就发明创造向专利局提出专利申请的权利。
依中国法律规定,专利申请权的取得必须具备如下条件:
(1)主体必须具有法律所赋予的享受专利权的资格。如中国公民与法人;
(2)依照其所属国同中国签定的协议或者共同参加的国际条约,或者依照互惠原则可以享有专利权的在中国没有经常居所或营业所的外国人、外国企业或外国其他组织。
专利申请必须基于一定的法律事实,引起申请权发生的法律事实有:
(1)发明创造;
(2)完成委托发明创造;
(3)完成职务发明创造;
(4)申请权继承;
(5)申请权转让。
具备上述两个条件便取得专利申请权。
职务发明的申请权属于单位;非职务发明的申请权属于发明人或设计人;委托发明的,依委托合同的约定来确定申请权的归属;因继承、转让而取得申请权的,申请权归继承人或权利受让人。享有申请权的,可向专利局提出专利申请,申请被批准后,享有专利权。
注意:专利申请日是指专利局或者专利局制定的专利申请受理代办处收到完整专利申请文件的日期,如果申请文件是邮寄的,以寄出的邮戳日为申请日。
根据《中华人民共和国专利法》规定,发明专利的保护期限为自申请日起20年;实用新型专利权和外观设计专利权的保护期限为自申请日起10年。
13.8 历年真题
(2009年)1.关于软件著作权产生的时间,下面表述正确的是( )。
A.自作品首次公开发表时
B.自作者有创作意图时
C.自作品得到国家著作权行政管理部门认可时
D.自作品完成创作之日
【答案:D】书本P-637,根据《著作权法》和《计算机软件保护条例》的规定,计算机软件著作权的权利自软件开发完成之日起产生,保护期为50年。
(2009年)2.程序员甲与同事乙在乙家探讨甲近期编写的程序,甲表示对该程序极不满意,说要弃之重写,并将程序手稿扔到乙家垃圾筒。后来乙将甲这一程序稍加修改,并署乙名发表。以下说法正确的是( )。
A.乙的行为侵犯了甲的软件著作权
B.乙的行为没有侵犯甲的软件著作权,因为甲已将程序手稿丢弃
C.乙的行为没有侵犯甲的著作权,因为乙已将程序修改
D.甲没有发表该程序并弃之,而乙将程序修改后发表,故乙应享有著作权
【答案:A】《计算机软件保护条例》规定,软件著作权人享有软件修改权,即享有的修改或者授权他人修改软件作品的权利。本题中甲虽然将程序手稿扔到乙家垃圾筒,但是甲并未授修改权给乙,所以乙稍加修改后以自己的名字发表,侵犯了甲的著作权。
(2010年)3.就相同内容的计算机程序的发明创造,两名以上的申请人先后向国务院专利行政部门提出申请,则( )可以获得专利申请权。
A.所有申请人均
B.先申请人
C.先使用人
D.先发明人
【答案:B】书本P-650,专利申请原则:两个或者两个以上的人分别就同样的发明创造申请专利的,专利权授给最先申请人。
(2010年)4.王某是一名程序员,每当软件开发完成后均按公司规定完成软件文档,并上交公司存档,自己没有留存。因撰写论文的需要,王某向公司要求将软件文档原本借出复印,但遭到公司拒绝,理由是该软件文档属于职务作品,著作权归公司。以下叙述中,正确的是( )。
A.该软件文档属于职务作品,著作权归公司
B.该软件文档不属于职务作品,程序员享有著作权
C.该软件文档属于职务作品,但程序员享有复制权
D.该软件文档不属于职务作品,著作权由公司和程序员共同享有
【答案:A】书本P-638职务开发软件著作权的归属,《计算机软件保护条例》第十三条做出了明确规定:公民在单位任职期间所开发的软件,如果是执行本职工作的结果,即针对本职工作中明确指定的开发目标所开发的,或者是从事本职工作活动所预见的结果或自然的结果,则该软件的著作权属于该单位。题目中,软件文档属于职务作品,著作权归公司。
(2011年)5.下列关于软件著作权中翻译权的叙述正确的是:翻译权是指( )的权利。
A.将原软件从一种自然语言文字转换成另一种自然语言文字
B.将原软件从一种程序语言转换成另一种程序语言
C.软件著作权人对其软件享有的以其他各种语言文字形式再表现
D.对软件的操作界面或者程序中涉及的语言文字翻译成另一种语言文字
【答案:B】书本P-636,翻译权是指将原软件从一种程序语言转换成另一种程序语言。
(2011年)6.某软件公司研发的财务软件产品在行业中技术领先,具有很强的市场竞争优势。为确保其软件产品的技术领先及市场竞争优势,公司采取相应的保密措施,以防止软件技术秘密的外泄。并且,还为该软件产品冠以“用友”商标,但未进行商标注册。此情况下,公司仅享有该软件产品的( )。
A.软件著作权和专利权
B.商业秘密权和专利权
C.软件著作权和商业秘密权
D.软件著作权和商标权
【答案:C】由于是软件公司研发的财务软件产品,因此,软件公司享有该软件产品的软件著作权,又由于商业秘密的构成条件是:商业秘密必须具有未公开性,即不为公众所知悉;商业秘密必须具有实用性,即能为权利人带来经济效益;商业秘密必须具有保密性,即采取了保密措施;所以公司享有该软件产品的软件著作权和商业秘密权。
(2012年)7.软件著作权的客体不包括_( )
A.源程序 B.目标程序 C.软件文档 D.软件开发思想
【答案:D】书本P-635计算机软件著作权的客体,根据《根据计算机软件保护条例》第二条规定,著作权法保护的计算机软件是指计算机程序及其相关文档,其中计算机程序包括源程序和目标程序。
(2012年)8.中国企业M与美国公司L进行技术合作,合同约定M使用一项在有效期内的美国专利,但该项美国专利未在中国和其他国家提出申请。对于M销售依照该专利生产的产品,以下叙述正确的是( )。
A.在中国销售,M需要向L支付专利许可使用费
B.返销美国,M不需要向L支付专利许可使用费
C.在其他国家销售,M需要向L支付专利许可使用费
D.在中国销售,M不需要向L支付专利许可使用费
【答案:D】书本P-633知识产权地域性,知识产权受地域限制,只有在一定地域内知识产权才具有独占性。也就是说,各国依照其本国法律授予的知识产权,只能在其本国领域内受其法律保护,而其他国家对这种权利没有保护的义务,任何人均可在自己的国家内自由使用外国人的知识产品,既无需取得权利人的同意(授权),也不必向权利人支付报酬。例如,中国专利局授予的专利权或中国商标局核准的商标专用权,只能在中国领域内受保护,在其他国家则不给予保护。外国人在我国领域外使用中国专利局授权的发明专利不侵犯我国专利权,如美国人在美国使用我国专利局授权的发明专利不侵犯我国专利权。 本题涉及的依照该专利生产的产品在中国或其他国家销售,中国M企业不需要向美国L公司支付这件美国专利的许可使用费。这是因为L公司未在中国及其他国家申请该专利,不受中国及其他国家专利法的保护,因此依照该专利生产的产品在中国及其他国家销售,M企业不需要向L公司支付这件专利的许可使用费。如果返销美国,需要向L公司支付这件专利的许可使用费。这是因为这件专利己在美国获得批准,因而受到美国专利法的保护,M企业依照该专利生产的产品要在美国销售,则需要向L公司支付这件专利的许可使用费。
(2013年)9.王某是一名软件设计师,按公司规定编写软件文档,并上交公司存档。这些软件文档属于职务作品,且( )。
A.其著作权由公司享有
B.其著作权由软件设计师享有
C.除其署名权以外,著作权的其他权利由软件设计师享有
D.其著作权由公司和软件设计师共同享有
【答案:A】书本P-638职务开发软件著作权的归属,我国《著作权法》第十六条条文规定如下。公民为完成法人或者其他组织工作任务所创作的作品是职务作品,除本条第二款的规定以外,著作权由作者享有,但法人或者其他组织有权在其业务范围内优先使用。作品完成两年内,未经单位同意,作者不得许可第三人以与单位使用的相同方式使用该作品。有下列情形之一的职务作品,作者享有署名权,著作权的其他权利由法人或者其他组织享有,法人或者其他组织可以给予作者奖励:(一)主要是利用法人或者其他组织的物质技术条件创作,并由法人或者其他组织承担责任的工程设计图、产品设计图、地图、计算机软件等职务作品;(二)法律、行政法规规定或者合同约定著作权由法人或者其他组织享有的职务作品。依题意,王某按公司规定编写的软件文档,他享有署名权,著作权的其他权利由公司享有。
(2013年)10.甲经销商擅自复制并销售乙公司开发的OA软件光盘已构成侵权。丙企业在未知的情形下从甲经销商处购入10张并已安装使用。在丙企业知道了所使用的软件为侵权复制品的情形下,以下说法正确的是( )。
A.丙企业的使用行为侵权,须承担赔偿责任
B.丙企业的使用行为不侵权,可以继续使用这10张软件光盘
C.企业的使用行为侵权,支付合理费用后可以继续使用这10张软件光盘
D.丙企业的使用行为不侵权,不需承担任何法律责任
【答案:C】根据《计算机软件保护条例》第30条规定“软件的复制品持有人不知道也没有合理理由应当知道该软件是侵权复制品的,不承担赔偿责任,但是应当停止使用、销毁该侵权复制平,如果停止使用并销毁该侵权复制品将给复制品使用人造成重大损失的,复制品使用人可以在向软件著作权人支付合理费用后继续使用。”,丙企业在获得软件复制品的形式上是合法的,但是由于其没有得到真正软件权利人的授权,其获得的复制品仍是非法的,因此丙公司行为侵权,且支付合理费用后可以继续使用这10张光盘。
(2014年)11.王某买了一幅美术作品原件,则他享有该美术作品的( )。
A.著作权 B.所有权 C.展览权 D.所有权与其展览权
【答案:D】《著作权法》定义展览权是原件持有人的特有的权利,著作权人不能以发表权限制其权利(除非有约定),《著作权法》第18条规定:“美术等作品原件所有权的转移,不视为作品著作权的转移,但美术作品的原件的展览权由原件所有人享有。”,即作者出让美术作品的原件后,就丧失了对原件的展览权。
(2014年)12.甲、乙两软件公司于2012年7月12日就其财务软件产品分别申请“用友”和 “用有”商标注册。两财务软件相似,甲第一次使用时间为2009年7月,乙第一次使用时间为2009年5月。此情形下,( )能获准注册。
A.“用友” B.“用友”与“用有”都
C.“用有” D.由甲、乙抽签结果确定
【答案:C】我国商标注册采取“申请在先”的审查原则,当两个或两个以上申请人在同一种或者类似商品上申请注册相同或者近似商标时,商标主管机关根据申请时间的先后,决定商标权的归属,申请在先的人可以获得注册。对于同日申请的情况,使用在先的人可以获得注册。如果同日使用或均未使用,则采取申请人之间协商解决,协商不成的,由各申请人抽签决定。
(2015年)13.王某是某公司的软件设计师,每当软件开发完成后均按公司规定编写软件文档,并提交公司存档。那么该软件文档的著作权( )享有。
A.应由公司
B.应由公司和王某共同
C.应由王某
D.除署名权以外,著作权的其他权利由王某
【答案:A】书本P-638职务开发软件著作权的归属,我国《著作权法》第十六条条文规定如下。公民为完成法人或者其他组织工作任务所创作的作品是职务作品,除本条第二款的规定以外,著作权由作者享有,但法人或者其他组织有权在其业务范围内优先使用。作品完成两年内,未经单位同意,作者不得许可第三人以与单位使用的相同方式使用该作品。有下列情形之一的职务作品,作者享有署名权,著作权的其他权利由法人或者其他组织享有,法人或者其他组织可以给予作者奖励:(一)主要是利用法人或者其他组织的物质技术条件创作,并由法人或者其他组织承担责任的工程设计图、产品设计图、地图、计算机软件等职务作品;(二)法律、行政法规规定或者合同约定著作权由法人或者其他组织享有的职务作品。依题意,王某按公司规定编写的软件文档,他享有署名权,著作权的其他权利由公司享有。
(2015年)14.甲、乙两公司的软件设计师分别完成了相同的计算机程序发明,甲公司先于乙公司完成,乙公司先于甲公司使用。甲、乙公司于同一天向专利局申请发明专利。此情形下,( )可获得专利权。
A.甲公司
B.甲、乙公司均
C.乙公司
D.由甲、乙公司协商确定谁
【答案:D】书本P-650专利申请原则:两个或者两个以上的申请人分别就同样的发明创造申请专利的专利权授给最先申请的人。如果两个以上申请人在同一日分别就同样的发明创造申请专利的,应当在收到专利行政管理部门的通知后自行协商确定申请人。如果协商不成,专利局将驳回所有申请人的申请,即均不授予专利权。我国专利法规定:“两个以上的申请人分别就同样的发明创造申请专利的,专利权授予最先申请的人”。我国专利法实施细则规定:“同样的发明创造只能被授予一项专利。依照专利法第九条的规定,两个以上的申请人在同一日分别就同样的发明创造申请专利的,应当在收到国务院专利行政部门的通知后自行协商确定申请人”。
(2016年)15.某软件公司参与开发管理系统软件的程序员张某,辞职到另一公司任职,于是该项目负责人将该管理系统软件上开发者的署名更改为李某(接张某工作)。该项目负责人的行为( )。
A.侵犯了张某开发者身份权(署名权)
B.不构成侵权,因为程序员张某不是软件著作权人
C.只是行使管理者的权利,不构成侵权
D.不构成侵权,因为程序员张某现已不是项目组成员
【答案:A】书本P-636,《计算机软件保护条例》规定软件著作权人享有的权利,包括发表权、署名权、修改权、复制权、发行权、出租权、信息网络传播权、翻译权。署名权是指软件开发者为表明身份在自己开发的软件原件及其复制件上标记姓名的权利。法律法规规定署名权的根本目的,在于保障不同软件来自不同开发者这一事实不被人混淆,署名即是标记,旨在区别,区别的目的是为了有效保护软件著作权人的合法权益。署名彰显了开发者与软件之间存在关系的客观事实。因此,行使署名权应当奉行诚实的原则,应当符合有效法律行为的要件,否则会导致署名无效的后果。
署名权只能是真正的开发者和被视同开发者的法人和非法人团体才有资格享有,其他任何个人、单位和组织不得行使此项权利。所以,署名权还隐含着另一种权利,即开发者资格权。法律保护署名权,意味着法律禁止任何未参加开发人在他人开发的软件的署名。《计算机软件保护条例》规定“在他人开发的软件上署名或者更改他人开发的软件上的署名”的行为是侵权行为,这种行为侵犯了开发者身份权即署名权。
(2016年)16.美国某公司与中国某企业谈技术合作,合同约定使用1项美国专利(获得批准并在有效期内),该项技术未在中国和其他国家申请专利。依照该专利生产的产品( )需要向美国公司支付这件美国专利的许可使用费。
A.在中国销售,中国企业
B.如果返销美国,中国企业不
C.在其他国家销售,中国企业
D.在中国销售,中国企业不
【答案:D】书本P-633,地域性特点,在A申请专利,受A法律保护,在A销售,要付费。
(2017年)17.甲软件公司受乙企业委托安排公司软件设计师开发了信息系统管理软件,由于在委托开发合同中未对软件著作权归属作出明确的约定,所以该信息系统管理软件的著作权由( )享有。
A.甲 B.乙 C.甲与乙共同 D.软件设计师
【答案:A】书本P-640,委托开发的软件著作权的归属,根据《计算机软件保护条例》第十一条规定:“接受他人委托开发的软件,其著作权的归属由委托者与受委托者签订书面合同约定;无书面合同或者合同未作明确约定的,其著作权由受托人享有。”
(2017年)18.根据我国商标法,下列商品中必须使用注册商标的是( )。
A.医疗仪器 B.墙壁涂料 C.无糖食品 D.烟草制品
【答案:D】商标法实施细则规定,必须使用注册商标的商品范围包括:(1)国家规定并由国家工商行政管理局公布的人用药品和烟草制品;(2)国家规定并由国家工商行政管理局公布的其他商品。商标法规定,必须使用注册商标的商品在商标未经核准注册时不得在市场上销售。
(2017年)19.甲、乙两人在同一天就同样的发明创造提交了专利申请专利局将分别向各申请人通报有关情况,并提出多种可能采用的解决办法。下列说法中,不可能采用( )。
A.甲、乙作为共同申请人
B.甲或乙一方放弃权利并从另一方得到适当的补偿
C.甲、乙都不授予专利权
D.甲、乙都授予专利权
【答案:D】我国在专利保护上,实行先申请制度,即谁申请在先,谁就享有该专利权。同时申请则协商归属,协商不成则同时驳回双方的专利申请。
(2018年)20.以下关于计算机软件著作权的叙述中,正确的是( )。
A.非法进行拷贝、发布或更改软件的人被称为软件盗版者
B.《计算机软件保护条例》是国家知识产权局颁布的,用来保护软件著作权人的权益
C.软件著作权属于软件开发者,软件著作权自软件开发完成之日起产生
D.用户购买了具有版权的软件,则具有对该软件的使用权和复制权
【答案:AD】选项B《计算机软件保护条例》由国务院颁发,选项C软件著作权要根据实际场景:职务开发、非职务开发、合作开发、委托开发、接受任务开发来确定,选项D在书本P-643,不构成计算机软件侵权的合理使用行为,根据《计算机软件保护条例》第八条第四项和第十六条规定,获得使用权或使用许可权后,可以对软件进行复制而无需通知著作权人,亦不构成侵权。对于合法持有软件复制品的单位、公民在不经著作权人同意的情况下,亦享有复制与修改权。
(2018年)21.王某是某公司的软件设计师,完成某项软件开发后按公司规定进行软件归档,以下关于该软件的著作权的叙述中,正确的是( )。
A.著作权应由公司和王某共同享有
B.著作权应由公司享有
C.著作权应由王某享有
D.除署名权以外,著作权的其他权利由王某享有
【答案:B】属于典型的职务作品,由单位享有著作权,详细解释参考前面13题。
(2019年)22.(1)是构成我国保护计算机软件著作权的两个基本法律文件。单个自然人的软件著作权保护期为(2)。
(1)A.《软件法》和《计算机软件保护条例》
B.《中华人民共和国著作权法》和《中华人民共和国版权法》
C.《中华人民共和国著作权法》和《计算机软件保护条例》
D.《软件法》和《中华人民共和国著作权法》
(2)A.50 年 B.自然人终生及其死亡后 50 年 C.永久限制 D.自然人终生
【答案:(1)C,(2)B】书本P-637。
(2020年)23.根据《计算机软件保护条例》的归档,著作权法保护的计算机软件是指()
A. 程序及其相关文档
B.处理过程及开发平台
C. 开发软件所用的算法
D.开发软件所用的操作方法
【答案:A】书本P-635,计算机软件著作权的客体是计算机程序及其相关文档。
(2020年)24.以下计算机软件著作权权利中,不可以转让的是()
A.发行权 B.复制权 C.署名权 D.信息网络传播权
【答案:C】书本P-640,署名权又称开发者身份权,署名权是一种人身财产,是不可以转让的。
真题
1.风险的优先级常根据风险暴露设定。
2021模拟
1、总线的带宽指单位时间内传输的数据总量。
在计算机当中,时钟频率是其时钟周期的倒数,表示时间的度量,本题时钟周期为1/200MHz。
总线宽度是指总线的线数,即数据信号并行传输的能力,本题传送大小与总线宽度一致,不需要处理。
传送32bit的字,即数据总量为32bit;5个时钟周期,即(1/200MHz) *5,为总时间。
带宽=数据总量/总时间(注意单位的转换)
即总带宽=32bit/(5/200MHz)=1280Mbit/s=160MB/s。
2、对于非对称加密又称为公开密钥加密,有RSA算法;
常见的对称加密算法有:DES,三重DES、RC-5、IDEA、AES
3、12个最佳实践分别是:计划游戏,小型发布,隐喻,简单设计,测试先行,重构,结对编程,集体代码所有制,持续集成,每周工作40小时,现场客户及编码标准。其中系统的设计要能够尽可能早交付属于小型发布。
4、系统结构图(SC)又称为模块结构图,它是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结构。
SC包括模块、模块之间的调用关系、模块之间的通信和辅助控制符号等4个部分。
5、快速排序的基本思想是,通过一轮的排序将序列分割成独立的两部分,其中一部分序列的关键字(这里主要用值来表示)均比另一部分关键字小。继续对长度较短的序列进行同样的分割,最后到达整体有序。在排序过程中,由于已经分开的两部分的元素不需要进行比较,故减少了比较次数,降低了排序时间。
6、孩子一兄弟表示法,即每个结点设置两个指针域,一个指针(左指针)指示当前结点的第一个孩子结点,另一个指针(右指针)指示当前结点的下一个兄弟结点。
7、在线性表中插入和删除元素都需要修改前驱和后继的指针。
查找并返回第i个元素的值,这个只要找到该位置读取即可。(运算最快)
查找与给定值相匹配的元素的位置,先读取第一个元素再比较,依次类推直到找到该元素。
8、为了保证数据库中数据的安全可靠和正确有效,系统在进行事务处理时,对数据的插入、删除或修改的全部有关内容先写入( 日志文件);当系统正常运行时,按一定的时间间隔,把数据库缓冲区内容写入(数据文件):当发生故障时,根据现场数据内容及相关文件来恢复系统的状态。
9、
数据库(DataBase,DB)是指长期储存在计算机外存上的、有组织的、可共享并相互联系的数据集合。数据库中的数据按一定的数学模型组织、描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。
应用数据库是为了管理大量信息,给用户提供数据的抽象视图,即系统隐藏有关数据存储和维护的某些细节,其主要目的是为了解决多用户对数据的共享问题。
10、触发器、存储过程、扩展存储过程都是在后台数据库中执行的操作,属于数据库对象。运行在客户端的程序通常由高级语言编写,可以使用接口技术或嵌入式SQL等方式访问数据库。
11、需求分析阶段的任务是:对现实世界要处理的对象(组织、部门、企业等)进行详细调查,在了解现行系统的概况,确定新系统功能的过程中,确定系统边界、搜集支持系统目标的基础数据及其处理方法。
逻辑设计阶段的任务之一是对关系模式进一步的规范化处理。因为生成的初始关系模式并不能完全符合要求,还会有数据冗余、更新异常存在,这就需要根据规范化理论对关系模式分解之后,消除冗余和更新异常。不过有时根据处理要求,可能还需要增加合并或增加冗余属性,提高存储效率和处理效率。
12、数据库的视图与基本表之间通过建立外模式到模式之间的映像,保证数据的逻辑独立性;而基本表与存储文件之间通过建立模式到内模式之间的映像,保证数据的物理独立性
外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。
13、对于关系R,A→BC,即满足A→B且A→C
CSDN下载链接
历年真题
2020真题
资料
本文word版
2021分数线还是45哈哈哈,上午55下午47,有惊无险啊哈,边摸鱼边复习两星期,嗯,知足了。。
最后
以上就是现代抽屉为你收集整理的记2021上半年软考中级-数据库系统工程师考试的全部内容,希望文章能够帮你解决记2021上半年软考中级-数据库系统工程师考试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复