第一章 计算机网络概述
1.1计算机系统基础知识
1.1.1 计算机硬件
计算机硬件基本由运算器、控制器、输入设备和输出设备五大部分组成。
1.1.2 中央处理器——CPU
CPU由运算器、控制器、寄存器组和内部总线组成
运算器
主要用于做算术运算和逻辑运算,由以下部分组成:
- 算术逻辑单元ALU:数据处理,对数据进行算术运算和逻辑运算。
- 累加寄存器AC:通用寄存器,为ALU提供个工作区,用来存放运算的结果。
- 数据缓冲寄存器DR:对类有储器进行读写操作时,用来暂存数据。
- 状态条件寄存器PSW:用来存储计算过程中产生的标志位和状态信息。例如进位。
控制器
包括指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑,指令控制逻辑有三个操作为取指令、分析指令、执行指令。由以下部分组成:
- 指令寄存器IR:暂存当前指令
- 程序计数器PC:指明下一条指令的地址,分为顺序执行和跳转执行
- 地址寄存器AR:保有当前CPU所访问的内存单元的地址
- 指令译码器ID:分为操作码和地扯码,分析操作码,方便指令执行
1.1.3 数据的表示
原码:数据的二进制形式,最高位是符号位,0表示正数,1表示负数
反码:正数的反码与原码相同,负数的反码是原码除符号外取反
补码:正数的补码与原码相同,负数的补码是反码加1
移码:补码的符号位取反,不区正负数
取值范围:
浮点数:N=M*Re
M:尾数,R:基数,e:尾数
1.1.4 校验码
奇偶校验码:利用奇偶性校验,只可以检错不能纠错。分为奇校验和偶校验,分别用于检查多个奇数位或偶数位是否出错。
循环冗余校验码:可检错,不可纠错。利用多项式产生校验位,通过模2除法生成校验码。学会计算,模2除法是按位做异或运算
海明校验码:可检错也可以纠错,学会计算
1.2 计算机体系结构
1.2.1 计算机体系结构发展
CISC与RISC指令集区别
指令集 |
名称 |
指令数 |
寻址方式 |
实现方法 |
CISC |
复杂指令集计算机 |
指令数量多,使用频率差别大,可变长格式 |
支持多种寻址方式 |
微程序控制技术 |
RISC |
精简指令集计算机 |
指令数量少,使用频率接近,定长格式,单周期指令,操作寄存器,只有Load/Store操作内存 |
支持少量寻址方式 |
增加了通用寄存器,硬布线逻辑控制为主,适合采用流水线 |
体系结构Flynn分类法
体系结构类型 |
结构 |
关键特性 |
代表 |
单指令流单数据流SISD |
一个控制部分,一个处理器,一个主存模块 |
|
单处理器系统 |
单指令流多数据流SIMD |
一个控制部分,多个处理器,多个主存模块 |
各处理器以异步的形式执行同一条指令 |
并行处理机,阵列处理机,超级向量处理机 |
多指令流单数据流MISD |
多个控制部分,一个处理器,多个主存模块 |
被证明不可能 |
无此类计算机 |
多指令流多数据流MIMD |
多个控制部分,多个处理器,多个主存模块 |
能够实现作业、任 务、指令等各级全面 |
多处理机系统,多计算机 |
流水线
基本符号表示
k:流水线需要执行的步骤,若流水线分为取指、分析和处理三个步骤,则k=3
t1 ~ tk:流水线各个过程的所需时间
∆t:流水线周期,取t1 ~ tk的最大值
n:表示n条指令
(1)流水线执行时间计算
理论公式:(t1+t2+…+tk)+(n-1)*∆t
实际公式:(k+n-1)*∆t
优先选择理论公式的值,若没有理论公式的值,再选择实际公式的值
(2)吞吐率:单位时间内流水线所完成的任务量或输出的结果数
TP = n/流水线执行时间
最大吞吐率:TPmax = 1/∆t
(3)加速比
S = 不使用流水线的执行时间 / 使用流水线执行的时间
(4)效率
E = n个任务占用的时空区 / k个流水线总的时空区
1.2.2 存储系统
层次化存储结构:读取速度由快到慢,存储容量由小到大
- CPU内部通用存储器
- Cache (按内容存取)
- 主存储器(内存)
- 外存(硬盘、光盘、U盘)
Cache
(1)功能:
- 提高CPU数据输入输出的效率
- 平衡CPU与主存之间输入输出的速度差距
- 改善系统的性能——程序的局部性原理
(2)Cache+主存的平均周期:t3=h*t1+(1-h)*t2
h是cache访问的命中率,t1表示cache的周期时间,t2表示主存储器的周期时间。
(3)地址映像方法
映像方法 |
描述 |
优缺点 |
直接映像 |
主存的块也Cache块的对应关系固定 |
优点:地址变换简单;缺点:灵活性差 |
全相联映像 |
主存的块可以调用到cache的任一块中 |
优点:调入Cache的位置不受限制,十分灵活;缺点:无法从主存块号直接获取Cache块号,需要复杂的变换 |
组相联映像 |
结合上面两种方式,将Cache先分块再分组 |
|
磁盘结构
存取时间=寻道时间+等待时间(平均空位时间+转动延迟)
寻道时间是指磁头移动到磁道所需时间
等待时间是等待读写的扇区转到磁头下方所用的时间
例题:
磁盘阵列技术
- RAID-0:不具备容错能力
- RAID-1:采用镜像容错
- RAID-2:采用海明码进行错误检测
- RAID-3:减少了检验的磁盘存储器个数,一个检验盘
- RAID-4:独立进行组内磁盘读写,一个检验盘
- RAID-5:同一个磁盘既记录数据,也检验信息,无检验盘
- RAID-6:两级数据冗余和数据编码解决数据恢复问题,出现故障仍然可工作
1.2.3 输入/输出技术
(1)直接程序控制
输入/输出过程在CPU的控制下完成。分为无条件传送和程序查询方式。
(2)中断方式
I/O系统与外设交换数据时,无需CPU参与。数据准备完成后向CPU发送中断请求信号,CPU去完成I/O系统的数据交换。
注:中断请求信号,保存的是正在执行程序的现场。
多中断源的中断处理方法:
- 多中断信号线法:每个中断源都有自己的中断请求信号线与CPU相连
- 中断软件查询法:利用中间软件管理中断请求信号
- 菊花链法:硬件查询法,中断信号在多个I/O模块间查找知道找到中断源
- 总线仲裁法:由总线仲裁机制来裁定谁发送中断请求信号
- 中断向量表法:中断向量表用来保存各个中断源的中断服务程序的入口地址
(3)直接存储器存取方式(DMA )
内存与I/O设备之间数据成块产送,传送过程不需要CPU的参与。CPU只需要在开始和结束时进行处理即可,数据准备和数据交换实际是由DMA硬件直接执行完成。
(4)输入/输出处理机(IOP)
又叫通道,分担了一部分CPU的功能,可对外围设备进行统一管理,完成外围设备和主存之间数据的传送
1.2.4 总线结构
- 数据总线::双向传输,用来传递数据信息,宽度决定了CPU和设备之间每次数据交换的次数
- 地址总线:发单向传输,用于传送CPU发送的地地信息,宽度决定了CPU的最大寻址能力
- 控制总线:传送控制信号、时序信号、状态信息等
常见总线:
- PCI总线:并行传输,内总线
- RS-232C:串行传输,外总线
- SCSI总线:并行传输,外总线
1.3 计算机安全
1.3.1 计算机安全概述
基本要素:
- 机密性:不暴露给未授权的实体或进程
- 完整性:只有被允许的人才可修改,并能判断数据是否已被修改
- 可用性:被授权的实体需要时可访问数据
- 可控性:可控制授权范围内的信息流向及行为方式
- 可审查性:对出现的安全问题提供调查的依据和手段
安全威胁的种类
- 授权侵犯:将系统用做其他为授权的目的
- 拒绝服务:对信息或其他合法访问无条件的拒绝,或推迟等操作
- 窃听
- 信息泄露
- 截获
- 假冒
- 否认
- 非法使用
- 人员疏忽
- 完整性破坏:对数据进行未授权的创建、修改会破坏,使数据一致性收到损坏
- 媒体清理:信息从废弃或打印中获得
- 物理入侵:绕过物理控制获得对系统的访问
- 资源耗尽:被故意超负荷使用,导致其他用户的服务被切断
1.3.1 系统可靠性分析
串联系统
可靠性:R = R1R2…Rn
并联系统
可靠性:R =1-(1-R1)(1-R2)…(1-Rn)
模冗余系统
1.3.3 加密和认证技术
对称加密(私人密钥加密)
使用相同的密钥加密和解密,算法有:
- 数据加密标准DES
- 三重DES
- RC-5
- 国家数据加密算法IDEA
- 高级加密标准AES
非对称加密(公开密钥加密)
使用不同的密钥加密和解密,分为公钥和私钥,成对出现。算法有:
认证
PKI是一种密钥管理平台,提供加密和数字签名等密码服务以及所必要的密钥和证书管理体系。
(1)信息摘要
简要的描述传输文本的关键信息,可以被公开,但是不会透露文件的任何内容。
根据传输的文本生成的信息摘要,接收方接收到文本之后生成的摘要与接收到信息摘要对比,检测文本是否被更改。
采用单列Hash函数,算法使用MD5,MD5会生成128位散列值
(2)数字签名
保证发送方的真实和唯一
总结
第二章 程序设计语言
2.1 程序设计语言分类
- PASCAL,过程式、结构化程序设计语言
- C++,面向对象程序设计语言
- C#,面向对象、运行于.NET上
- Objective-C,由C衍生,面向对象
- java,面向对象
- Ruby,解释性、面向对象、动态类型的脚本语言
- PHP,服务器端执行,嵌入HTML文档的脚本语言
- Python,面向对象,解释性的程序语言,也是脚本语言
- JavaScript,脚本语言
- Delphi,可视化开发工具,面向对象和基于构件
- Lisp,函数式语言
2.2 汇编程序
2.1 编译过程
编译过程 |
描述 |
输入 |
输出 |
词法分析 |
扫描源程序,分解成基本语法单位,如关键字、标识符、运算符等。 |
源程序 |
二元组的“单词” |
语法分析 |
将“单词”分解成语法单位,如表达式、语句、程序等 |
词法分析的结果 |
语法树 |
语义分析 |
分析语法结构的含义,检查是否包含静态语义错误,分析类型 |
语法分析的结果 |
|
中间代码生成 |
根据语义分析输出生成中间代码 |
语义分析的结果 |
|
代码优化 |
对中间代码的时间和空间优化,使用等价变换原则。 |
中间代码生成的结果 |
|
目标代码生成 |
源程序转换成特定机器上的机器码 |
|
|
① 符号表管理:符号表记录源程序中各个符号的信息,编译过程全程参与
② 出错处理:编译过程全程参与
- 动态错误:程序运行时的错误
- 静态错误
- 语法错误:括号不匹配
- 静态语义错误:运算符,对象类型不合法
第三章 数据结构
3.1 线性结构
3.1.1 线性表
线性表的定义
- 存在唯一一个首元素,且它只有一个后继节点
- 存在唯一一个尾元素,且它只有一个前驱节点
- 除此之外,每一个节点都有且仅有一个前驱节点和一个后继节点
3.1.2 栈和队列
栈
元素先进的后出,只有入栈和出栈两个操作
队列
元素先进的先出
循环队列
队列空和队列满时,队头和队尾指针都是指向相同位置,可以将最后一个元素留出来,用来区别是队空还是队满
3.2 广义表
广义表是由0个或多个单元素和子表组成的有限序列
广义表的元素也可以是一个广义表
操作
(1)取表头:广义表的第一个元素
(2)取表尾:除广义表的第一个元素的序列
例:广义表:Ls = (a,b,c,(aa,ccd),(a))
取表头:a
取表尾:(b,c,(aa,ccd),(a))
3.3 树
定义
- 有唯一一个根节点,没有前驱元素
- 其余节点有且仅有一个前驱元素,有0个或多个后继节点
3.3.1 二叉树
性质
(1) 二叉树的第i层上最多有2i-1个节点
(2) 高度为k的二叉树最多有2k-1个节点
(3) 对于任意一棵二叉树,若叶子节点数为n0,度为2的节点数为n2,则n0 = n2 + 1
(4) 具有n个节点的完全二叉树的深度为└log2n┘+1
(5) 对于二叉树,若节点为n,则它的左子节点为2n-1,右节点为2n+1
遍历
(1) 前序遍历:先访问根节点,再访问左节点,最后访问右节点
(2) 中序遍历:先访问左节点,再访问根节点,最后访问右节点
(3) 前序遍历:先访问左节点,再访问右节点,最后访问根节点
3.3.2 线索二叉树
若节点无左子树,左子树指向中序遍历的前驱节点;
若节点无右子树,右子树指向中序遍历的后继节点。
3.3.3最优二叉树(哈夫曼树)
构造哈夫曼树
图中有一出错误,序列中的42是指的46
哈夫曼编码
左分支设为0,右分支设为1,上图的哈夫曼树编码为
由图可知,
23的编码为00
25的编码为01
12的编码为100
3.4 图
3.4.1 定义和概念
图由顶点和边组成,图G=(V,E),V是顶点的集合,E是边的集合
有向图:图的边是具有方向的
无向图:图的边没有方向之分
连通图:无向图中,任意两个顶点都有路径到达
强连通图:有向图中,任意两个顶点都有路径到达
3.4.2 存储结构
邻接矩阵
无向图的邻接矩阵是对称的,有向图不一定
邻接链表
每个链表存储自己能到达的所有节点
3.4.3 图的遍历
深度优先遍历
访问节点依次为:V1-V2-V4-V8-V5-V3-V6-V7
广度优先遍历
访问节点依次为:V1-V2-V3-V4-V5-V6-V7-V8
3.4.4 最小生成树
生成树是图的最小连通子图,权值最小的生成树是最小生成树。生成树不是唯一
Prim算法
Kruskal算法
3.4.5 拓扑排序和关键路径
拓扑排序:选择入度为0的结点,去除该结点和它的边,重复此操作,一直到最后一个节点。
拓扑排序为:1,4,3,2,5
关键路径:从源点到汇点的最长路径是活动的关键路径,关键路径上的活动都是关键活动
3.5 排序
第四章 操作系统
操作系统的功能:进程管理、文件管理、存储管理、设备管理、作业管理。
4.1 进程管理
4.1.1 概念
进程是程序的一次执行,又程序、数据和进程控制块组成。
进程是程序的基本单位,线程是进程的基本单位。
4.1.2 状态转换图
运行状态:CPU正在处理这个进程,该进程属于运行状态
就绪状态:一切资源已经准备完毕,等待CPU调度的进程属于就绪状态
阻塞状态:一个进程正在等待某一事件发生,该进程属于阻塞状态
4.1.3 PV操作
进程同步和互斥的工具
信号量S表示可用资源数
P操作:表示申请一个资源,即S=S-1
V操作:表示释放一个资源,即S=S+1
4.1.4 死锁
两个以上的进程互相需要对方已经占有的资源导致无法运行下去的现象
死锁的四个必要条件:互斥请求、请求保持条件、不可剥夺条件和环路条件
死锁的处理策略:鸵鸟政策、预防政策、避免政策和检测与解除政策
死锁的避免:银行家算法
4.2 存储管理
4.2.1 分区存储管理
4.2.2 分页存储管理
将进程的地址空间划分成若干个大小相等的区域,称为页。
地址结构:
原理:页表记录对应的物理块号,逻辑地址和物理地址的页内地址相同。
4.2.3 分段存储管理
地址空间被划分为若干段,每段都有完整的逻辑信息。每个进程都有一个段表,记录每个段的初始地址和段的长度。
地址结构:
4.2.4 虚拟存储管理
时间局部性:某个存储单元被访问,不久后该存储单元会被再次访问
空间局部性:程序访问了某个存储单元,不久后附近的存储单元会被访问
4.3 设备管理
4.3.1 I/O软件
I/O设备管理软件分4层:中断处理程序、设备驱动程序、与设备无关的系统软件和用户级软件。
4.3.2 磁盘调度
操作系统先进行移臂调度,再进行旋转调度
4.4 文件管理
4.4.1 空闲区表
为外存的所有空闲区建立张空闲表,每个空闲区对应表中的一个项。
每项的结构有空闲区的编号、该空闲区的第一个块号以及该区的空闲块数
4.4.2 位示图
建立一张位示图,每个字对应一个物理块,用0或1来表示这个字,表示该物理块是空闲还是占用。
第五章 软件工程
5.1 概念
5.1.1 基本原理
- 用分阶段的生命周期计划严格管理
- 实现严格的产品控制
- 采用现代的程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应少而精
- 承认不断改进软件工程实践的必要性
5.1.2 软件生存周期
(1)可行性分析和项目开发计划:产生文档可行性分析报告和项目开发计划。
(2)需求分析:产生文档软件需求说明书
(3)概要设计:确定设计软件的结构,由哪些模块组成,以及模块间的调用关系。产生文档概要设计说明书
(4)详细设计:对模块功能详细具体的描述,产生文档详细设计文档
(5)编码
(6)测试:产生文档软件测试计划、测试用例、测试报告
(7)维护:
- 改正性维护:改正在系统开发阶段已发生而系统测试阶段未发现的错误。
- 适应性维护:软件适应信息技术变化和管理需求变化而进行的修改。
- 完善性维护:为了扩充功能和改善性能而进行的修改,增加没有规定的功能和性能。
- 预防性维护:为了适应未末的软件和硬件环境的变化,主增加预防性的新功能。
5.1.3 软件过程
能力成熟度模型CMM
有五个阶段:
能力成熟度模型集成CMMI
(1)阶段式模型
- 初始级:过程不可预测且缺乏控制。
- 已管理级:过程为项目服务。
- 已定义级:过程为组织服务。
- 定量管理级:过程已度量和控制。
- 优化级:集中过程改进。
(2)连续式模型
- CL0:未完成级
- CL1:已执行级
- CL2:已管理级
- CL3:已定义级
- CL4:定量管理级
- CL5:优化级
(3)统一过程UP
用例和风险驱动,以架构为中心,选代并增量。有四个阶段:
- 起始阶段:专注于项目初创活动,初始用例模型
- 精化阶段:在理解了最初领域范围之后,需要进行需求分析和架构演进。初步设计模型、修订的风险列表、项目计划及初始用户手册
- 构建阶段:关注系统的构建,产生实现模型。设计模型,软件构量
- 移交阶段:关注软件提交方面的工作,产生软件的增量。测试报告和综合用户反馈
(4)敏捷开发
尽川能早地、持续地对有价值的软件进行交付 ,有以下几种方式:
- 极限编程
- 水晶法
- 并列争球法
- 自适应软件开发
- 敏捷统一过程AUP
5.2 软件工程模型
5.2.1 瀑布模型
特点:
- 要求需求十分明确,每个阶段都进行评审
- 适用于需求明确或二次开发的项目
5.2.2 V模型
- 变型的瀑布模型,强调提前进行测试
- 需求阶段写系统测试报告和验收测试报告
5.2.3 增量模型
- 先开发核心模块交付,再根据需求划分模块开发交付,分批次交付模块
5.2.4 原型模型
- 先创建一个初步模型,一个简易项目,再根据用户的需求更改原型,多次迭代
- 适用于需求不明确的项目,用于需求分析阶段
5.2.5 螺旋模型
- 由多个模型组合,引入风险分析。有制定计划,风险分析,实施工程,客户评估
- 适用于庞大、复杂、高风险的系统
5.2.6 喷泉模型
- 面向对象模型
- 克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,具有选代性和无间隙性
5.2.7基于构建的开发模型
5.3 软件测试
系统测试包括软件测试、硬件测试、网络测试三部分
5.3.1 软件测试策略
单元测试(模块测试):在模块编写完成后编译无误后进行,侧重于模块中的内部处理逻辑和数据结构
集成测试:各个模块联合测试,测试模块之间的衔接
(1)非增量集成:分别测试各个模块,再将模块组合进行整体测试
(2)增量集成:以小增量的方式逐步进行构造和测试,逐步增加模块
- 自顶向下集成测试
- 自底向上集成测试
- 回归测试
- 冒烟测试
确认测试
- 开始于集成测试结束
- 主要检查软件、文档、数据是否齐全
- 确认软件是否与需求相符
系统测试:将软件、硬件、外设、网络等其它因素结合在一起,进行各种集成测试和确认测试
- 性能和压力测试
- 恢复测试
- 安全性测试
- 压力测试
- 性能测试
- 部署测试
5.3.2 测试方法
静态测试:被测程序不在机器上运行
动态测试:通过运行程序发现错误
- 黑盒测试:功能测试,不考虑软件内部结构,通过输入输出测试
- 白盒测试:结构测试,根据程序内部结构和逻辑来设计测试用序
- 基本路径测试
- 循环覆盖测试
- 逻辑覆盖测试
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 条件判定覆盖
- 条件组合覆盖
- 点覆盖
- 边覆盖
- 路径覆盖
McCabe度量计算环路复杂度:V(G)= m-n+2 其中m是程序流程图的有向弧,n是G的节点数
5.4 调试
5.5 软件质量模型
第六章 结构化开发
6.1 系统设计的基本原理
6.1.1 耦合度
耦合:模块之间的相互独立性的度量
- 无直接耦合:模块之间无直接关系
- 数据耦合:两个模块之间有调用关系,传递的是简单的数据
- 标记耦合:两个模块之间传递的是数据结构
- 控制耦合:传递的是控制变量,被调用的模块具有多个功能,由调用模块选择功能
- 外部耦合:模块间通过软件之外的环境联结
- 公共耦合:多个模块都访问同一个公共数据环境
- 内容耦合:一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部
6.1.2 内聚
内聚:一个模块内部各元素的紧密程度的度量
- 偶然内聚(巧合内聚):元素之间无联系
- 逻辑内聚:完成逻辑上相关的一组任务
- 时间内聚:需要同时执行的动作组合在一起形成的模块
- 过程内聚:一个模块完成多项任务时,这些任务按特定次序执行
- 通信内聚:所有处理元素都在同一个数据结构上操作,或各操作使用相同的输入数据,或产生相同的输出数据
- 顺序内聚:各处理元素密切相关,且同一功能顺序执行,前一个功能元素的输出是下一个功能元素的输入
- 功能内聚:所有元素共同完成一个功能,缺一不可
第七章 面向对象技术
7.1 面向对象
- 对象:由对象名(标识)、属性和方法三部分组成
- 消息:对象之间进行通信的一种构造
- 类:类是对象的抽象化,对象是类的具体化
- 继承:继承是父类和子类之间共享数据和方法的机制
- 多态:不同对象收到同一信息可以产生不同的结果,基类(父类)及其派生类(子类)中拥有同名的方法
- 绑定把过程调用和响应调用所需要执行的代码进行困绑的过程,编泽时为静态绑定,运行时为动态绑定
面向对象分析:确定系统的功能和性能要求
- 认定对象
- 组织对象
- 对象间的相互作用
- 定义对象的操作
- 定义对象的内部信息
面向对象设计:设计分析模型和实现相应的源代码
7.2 UML
7.2.1 四种事物
- 结构事物:是UML的静态部分,包括类、接口、协作、用例、主动类、构件、制品和结点
- 行为事物:是UML的动态部分,包括交互、状态机和活动
- 分组事物:是UML的组织部分,包是种分组事物
- 注释事物:是UML模型的解释部分。一般用来描述说明和标泡模型的任何元素
7.2.2 关系
依赖:两个事物之间的语义关系,其中一个事物(独立事物)发生变化会影响另一事物(依赖事物)的语义
关联:一种结构关系
- 1:表示一个集合中的一个对象对应另一个集合中的一个对象
- 0…*:表示一个 集合中的一个对象对应另一个集合中的0个或多个对象
- 1…*:表示一个集合中的一个对象对应另一个集合中的1个或多个对象
- *:表示一个集合中的一个对象对应另个集合中的多个对象
聚集:整体和部分之间的关系,部分的生命周期和整体的生命周期不同,这两部分可单独存在
组合:拥有关系,部分和整体的生命周期一样
泛化:子元素共享父元素及结构和行为,继承
实现: 接口和实现类之间的关系
7.2.3 图
(1)类图
展现了一组、对象、接口、协作和它们之间的关系
(2)对象图
一组对象和它们之间的关系
(3)用例图
一组用例、参与者和它们之间的关系
- 包含关系include:一个用例一定会使用到另一个用例
- 扩展关系extend:一个用例可能会使用到另一个用例,不是必须
- 泛化关系:类似于继承关系
(4)序列图
描述对象之间的交互活动的时间顺序
(5)通信图
强调收发消息的对象的结构组织
(6)状态图
包括简单状态和组合状态,以及状态间的转换
(7)活动图
专注系统的动态,并强调对象间的控制流程。包括活动动态和动作状态、转换和对象
7.3 设计模式
7.3.1 创建型设计模式
(1)抽象工厂模式Abstract Factory:提供一个接口,可以创建一系类相关或相互依赖的对象,而无需指定具体类
(2)构建器模式Builder:择一个复杂类的表示与其构造相分离,相同的构建过程得出不同的表示
(3)工厂方法模式Factory Method:定义一个创建对象的接口,由子类决定实例化的类
(4)原型模式Prototype:用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象
(5)单例模式:保证一个类只有一个对象
7.3.2 结构型设计模式
适配器模式Adapter:将一个类的接口转换成用户希望得到的另一种接口,不相容的接口协作工作。转换接口
桥接模式Bridge:将类的抽象部分和它的实现部分分离。继承树分离
组合模式Composite:将对象组合成树形结构表示“整体——部分”的层次结构,单个对象和组合对象具有一致性。树形目录结构
装饰模式Decorator:动态地给一个对象添加一些额外的职责。附件职责
外观模式Facade:定义高层接口,为子系统中的一组接口提供一个一致的外观。对外统一接口
享元模式Flyweight:提供支持大量细粒度对象共享的有效方法
代理模式Proxy:为其他对象提供一种代理以控制这个对象的访问
7.3.3 行为设计模式
责任链模式Chain of Responsibility:给多个对象处理请求机会,减少发送者与接收者之间的耦合。连接对象传递请求,直到有对象处理请求。传递职责
命令模式Command:将一个请求封装成一个对象,用不同的请求对客户进行参数化,将请求排队或记录请求日志。日志记录,可撤销
解释器模式Interpreter:定义一个语言和文法,用来解释语言的句子
选代器模式Iterator:提供一个方法顺序访问聚合对象中的各个元素,而不需要暴露该对象的内部结构
中介器模式Mediator:用一个中介对象封装一系列的对象交互。不直接引用
备忘录模式Memento:不破坏封装性的前提下,捕获一个对象的内部状态,可讲该对象恢复到原先保存的状态
观察者模式Observer:定义对象间的一对多的依赖关系,当一个对象发生改变时,所有依赖于他的对象都得到通知并自动更新
状态模式State:一个对象在其内部状态改变时改变它的行为。状态变成类
策略模式Strategy:定义一系列算法,把它们封装起来,使它们之间可以互相替换。多方案切换
模板方法模式Template Method:定义一个操作中的算法骨架,将一些步骤延迟到子类中,子类不改变算法的结构即可重新定义算法的某些特定步骤
访问者模式Visitor:表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素类的前提下定义作用于这些元素的新操作
第八章 算法设计与分析
算法五特性:
- 有穷性:在执行有穷步后结束,且每步都在有穷时间内完成
- 确定性:每条指令都有确切的含义,相同输入只能得出相同输出
- 可行性
- 输入:有零个或多个输入
- 输出:一个或多个输出
8.1 分治法
- 分解:将原问题划分成若干个独立的,规模相同的小模块
- 求解:递归求解各子问题
- 合并:将子问题合并成原问题的解
8.2 动态规化法
- 将原问题分解成若干个小问题,用一个表来记录所有已解决的子问题的答案
- 出最优解的性质
- 递归定义最优解的值
- 以自底向上的方式计算最优值
- 构造最优
8.3 贪心法
8.4 回溯法
- 以深度优先的方式系统地搜索问题的解
- 问题的解空间 ,构造树
- 深度优先遍历
- 限界函数
8.5 分支限界法
回溯法是找出解空间树中满足约束条件的所有解,分支限界法是找出满足约束条件的一个解
- 队列式分支限界法:将活结点表组织成一个队列,按先进先出的原则选择下个结点作为扩展结点
- 优先队列式分支限界法:将治结点表组织成个优先队列,按优先队列中规定的结点优先级选取优先级最高的下一个结点作为拓展结点
第九章 数据库
9.1 数据库模型
三级模式
- 概念模式(模式):数据库中表的概念
- 外模式(用户模式):数据库中视图的概念
- 内模式(物理模式):如何有储存数据,以及优化存储
两级映射
9.1.1 数据库设计过程
需求分析
概念结构设计
- E -R模型
- 实体:矩形表示,理解为一张表
- 联系:菱形表示,理解为表与表之间的关系
- 一对一联系(1:1)
- 一对多联系(1:n)
- 多对多联系(n:m)
- 属性:椭圆表示,表中的字段
- 逻辑结构设计
- 物理设计
9.2 关系运算
9.2.1 集合运算符
- 并 U:两个关系具有相同的关系模式,即属性相同
- 差 -:两个关系具有相同的关系模式,即属性相同
- 交 ∩:两个关系具有相同的关系模式,即属性相同
- 笛卡尔积 x
9.2.2 比较运算符
- 大于 >
- 大于等于 >=
- 小于 <
- 小于等于 <=
- 等于 =
- 不等于 ≠
9.2.3 关系运算符
- 选择(选行)
- 投影(选列)
- 自然连接 :两个关系做笛卡尔计算,然后挑选出符合条件的数据集合,会消除重复列
- 除: 两个关系列中存在相同的属性列,且这些列的值相同,取剩下列为除法的结果
9.2.4 逻辑运算符
9.3 数据库规范化
9.3.1 函数依赖
- 部分函数依赖:主键为两个属性的组合键,主键中的某一属性可以确定一个其他属性
- 传递函数依赖
9.3.2 键
- 超键:唯一标识元组
- 候选键:超键消除多余属栍,求解方法:
- 函数依赖关系用有向图表示
- 入度为0的属性,并以该属性集合为起点,能遍历图中所有结点,则为候选键
- 若不能,选择其它结点并入入度为0的属性集中,能遍历图中所有结点,集合为候选键
- 主键:候选键中任选一个
- 外键:其它关系的主键
9.3.3 规范化
- 1NF:每个属性值都是不可分割的原子值
- 2NF:满足1NF,且消除非主属性对候选键的部分依赖
- 3NF:满足2NF,且消除非主属性对候选键的传递依赖
- BCNF:满足3NF,且消除主属性对候选键的传递依赖
判定方法:写出函数推定关系,若左边都是候选键,则是BC范式
9.3.4 模式分解
- 保持函数依赖分解:分解后的关系可以获得原先的函数依赖集
- 无损连接分解:一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
9.3.5 完整性约束
- 实体完整性约束
- 参照完整性约束
- 用户自定义完整性约束
9.3.6 并发控制
事务特性
事务是指作为单个逻辑工作单元执行的一系列操作,要么都做,要么都不做
- 原子性:要么都做,要么都不做
- 一致性:事务完成时,必须保证所有数据都保持一致的状态
- 隔离性:事务之间相互隔离
- 持续性:事务完成后,对操作的结果进行保存以使之永久有效
产生的问题
- 丢失更新:所做的修改未能成功保存
- 不可重复读:一个事物读取数据时,另一事物正对该数据操作
- 读脏数据:一个事物读取数据后,另一事物对原数据进行了回滚操作
封锁
- 排他锁(X/写锁):若事务T对其数据加了排他锁,则该数据只允许T对其进行修改,且任何事务都不能再对A加任何类型的锁,直到事务T释放该锁
- 共享锁(S/读锁):不多个事务对于同一数据可以共享把锁,都只能读不能改,其他事务只能为该数据加共享锁而不能加排他锁
封锁协议
- 一级封锁协议:修改数据前加x锁,事务结束后释放,可解决丢失更新问题
- 二级封锁协议:在一级基础上,读数据之前加S锁,读完后释放,可解决脏读问题
- 三级封锁协议:在一级基础上,读数据前加S锁,直到事务结束之后释放锁,可解决以上三个问题
9.4 数据库安全
9.4.1 安全措施
- 用户标识和鉴定:最外层的安全保护措施,可心使用用户帐号、口令及随机数检验等方式
- 存取控制:对用户进行授权,包括操作类型和数据又对象的权限
- 密码存储和传输:对远程终端用密码传输
- 视图的保护:对视图进行授权
- 审计:使用一个专用文件或数据库,自动将用户对数括库的所用操作记录下来
9.4.2 数据备份
- 完全备份:备份所有数据
- 差量备份:仅备份上一次完全备份之后变化的数据
- 增量备份:备份上一次备份之后变化的数据
第十章 计算机网络
10.1 网络分类
10.2 网络拓扑结构
- 总线型结构
- 星型结构
- 环型结构
- 树型结构
- 分布式结构
10.3 ISO/OSI网络体系结构
- 应用层:实现具体的应用功能
- 表示层:数据的格式与表示、加密、压缩
- 会话层:建立、管理和终止会话
- 传输层:端到端的连接
- 网络层:分组传输和路由选择
- 数据链路层:传送以帧为单位的信息
- 物理层:二进制传输
10.4 TCP/IP协议族
-
应用层
- 文件传输协议FTP
- 远程登录协议Telnet
- 电子邮件协议SMTP
- 网络文件服务协议NFS
- 网络管理协议SNMP
- DHCP协议动态分配IP:169.254.X.X和0.0.0.0表示未连接上DHCP协议
- DNS域名解析器
- 递归查询:主机向本地域名服务器的查询采用递归查询,通过中间服务器回复
- 迭代查询:本地域名服务器向根域名服务器的查询通常采用迭代查询,直接回复
-
传输层
- TCP
- UDP
- 不可靠、无连接的协议,不建立连接
- 将UDP消息展示给应用层
- 不负责重新发送丢失或出错的数据消息
- 不对接受到的无序IP数据报重新排序
- 不消除重复的IP数据报
-
网络层
- IP
- 将上层数据(TCP/UDP数据)或同层数的其他数据封装到IP数据中
- 将IP数据报送达最终目的地
- 对数据进行分段,在链路层上进行传输
- ICMP
- Internet控制信息协议,发送差错报文的协议
- 五种差错报文:源抑制、超时、目的不可达、重定向和要求分段
- 四种信息报文:回应请求、回应应答、地址屏蔽码请求和地址屏蔽码应答
- ARP:地址解析协议,将IP地址转换成物理地址(mac地址)
- RARP:反地址解析协议,将物理地址(mac地址)转换成IP地址
-
网络接口层和硬件层
-
Ethernet IEEE 802.3
-
FDDI
-
Token-Ring/IEEE 802.5
-
ARCnet
-
PPP/SLIP
-
DNS协议
- 递归查询
- 主机向本地域名服务器的查询采用递归查询
- 服务器必需回答目标IP与域名的映射关系
- 迭代查询
- 本地域名服务器向根域名服务器的查询通常采用迭代查询
- 服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其他DNS服务器的地址
10.5 IP地址
主机号为全0,代表为网络地址,主机号全为1表示广播地址,主机数量为2n-2,其中n为主机号占的二进制位数
- A类:前8位表示网络号,后24位表示主机号
- B类:前16位表示网络号,后16位表示主机号
- C类:前24位表示网络号,后8位表示主机号
- D类
- E类
10.6 网络规化与设计
逻辑网络设计:利用需求分析和现有网给体系分析的结果来设计逻辑网络结构,最后得到一份逻辑网络设计文档
- 逻辑网终设计图
- IP地址方案
- 安全方案
- 具体的软硬件、广域网连接设备和基本服务
- 对软硬件、服务、员工和培训的费用初步估计
物理网络设计
- 物理网络结构图和布线方案
- 设备和部件的详细列表清单
- 软硬件和安装费用的估算
- 安装日程表
- 安装后的测试计划如和用户的培训计划
- 分层设计
10.7 网络安全
10.7.1 安全属性
- 保密性
- 完整性
- 可用性
- IP过滤
- 业务流控制
- 路由选择控制
- 审计跟踪
- 不可抵赖性(真实性):数字签名
10.7.2 加密技术
对称加密技术:加密和解密使用同一个密钥,算法:
- DES:替换十移位、56位密钥、64位数据块
- 三重DES:两个56位密钥k1、k2
- 加密:k1加密→k2解密→ k1加密
- 解密:k1解密→k2加密→k1解密
- AES:美国联绑政府采用的一种区加密标准
- RC-5:数据安全公司的产品使用
- IDEA算法:128位密钥、64位数据、比DES的加密性好
非对称加密技术:公钥和私钥成对出现,一个加密,一个解密
- RSA:512位(或1024位)密钥、计算量极大、难破解
- Elgamal:Diffie-Hellman密钥交换算法
- ECC:随圆曲线算法.
- 背包算法、Rabin、D-H
信息摘要:正文的总概要,特征值,算法:
- 单向散列函数,可由正文生成摘要,但摘要无法还原成明文
数字签名
-唯一认证,保证信息的发送方唯一。使用发送方的私钥加密
数字信封
- 发送方将原文用对称密钥加密传输
- 对称密钥用接收方公钥加密发送给对方
PGP
10.8 安全保障
10.8.1 网络攻击与威胁
- 口令入侵:使用某些合法用户的帐号和口令登录到目的主机,然后再实施攻击活动
- 特洛伊木马程序:向伪装成工具程序或游戏,用户打开或下载带有该程序的程序之后,当连接互联网时,这个程序就会向黑客通知用户的IP地址及被预先设定的端口
- 拒绝服务(Dos):使计算机或网络无法提供正常的服务
- 端口扫描:利用socket编程太目标主机的某些端口建立TCP连接、进行传输协议的验证等,可知目标主机的扫描端口是否处于激活状态、主机提供哪些服务、提供的服务是否含有某些缺陷
- 网络监听:主机的种工作模式,可接收到本网段在同条物理通道上传输的所有信息
- 欺骗攻击:创造一个易于误解的上下文环境,以诱使受攻击者进入且作出缺乏安全考虑的决策
10.8.2 防火墙
第十一章 标准化和知识产权
11.1 标准分类
- 国家标准NB
- 中国(GB ):中华人民共和国国家技术监督局
- 美国(ANSI):美国国家标准协会
- 英国(BS ):英国标准学会
- 日本(JIS):日本工业标准调查会
- 适用范围分类
- 区域标准
- 欧洲标性化委员会(CEN)
- 亚洲标准咨询委员会(ASAC)
- 非洲地区标准化组织(ARSO)
- 行业标准
- 行业机构、学术团体或国际机构
- 美国电气和电子工程师学会标准(IE EE )
- 中华人民共和国国家军用标准(GJB)
- 美国国防标准(DOD- STD)
- 美国军用标准(MIL-S )
- 企业标准:供公司内部使用
- 项目标准:计算机集成制造系统(CIMS )的软件工程规范
- 编号规则
- 国际标准:ISO +标准号+ [杠+分标准号]+冒号+发布年号,方括号中的内容可有可无
- 国家标准
- 国家标准代号+标准发布顺序号-标准发布年代号(4位)
- 国家标准代号:强制性国家标准GB,推荐性国家标准GB/T
- 行业标准
- 行业标准代号+标准发布顺序号-标准发布年代号(4位)
- 已正式公布的行业标准代号:QJ(航天)、SJ (电子)、JB (机械)、JR (金融)
- 地方标准:DB +行政区域代码(前两位)/(强制或推荐)+地方标准发布顺序号-标准发布年代号
- 企业标准:Q /企业代号+标准发布顺序号-标准发布年代号
知识产权