笔者软设成绩
我这么菜都过了,看博客的你也一定能过!
视频课:
王道计算机考研 数据结构
王道计算机考研 操作系统
王道计算机考研 计算机组成原理
【2024软考中级-软件设计师】基础阶段|考点理论精讲【已完结】
文章目录
考试介绍
考试形式
通过性考试:判断是否达到最低要求,达到了就是通过,没达到就是不通过
考点分布
-
上午题
-
下午题
考点小结
计算机系统知识
0.考纲
1.进制转换
-
十进制
-
r进制
-
任意进制转十进制
-
十进制转任意进制
整数部分:
小数部分:
-
二进制与八、十六进制间的转换
-
各种进制的常用书写方式
-
真值vs机器数
- 真值:实际的带正负号的数值
- 机器数:把正负号数字化表示的数
小结:
2.计算机内 数据 的表示
- 定点数vs浮点数
- 定点数:小数点的位置固定不变的数
- 定点整数:纯整数,小数点在最低有效数值位之后
- 定点小数:纯小数,小数点在最高有效数值位之前
- 浮点数:小数点位置不固定的数,它能表示更大范围的数。
- 定点数:小数点的位置固定不变的数
补码的加减法运算
- 浮点数
- 校验码
3.计算机系统组成
-
计算机系统组成
-
主存
- 字长:一个字中的二进制位的位数
- 机器字长:计算机能直接处理的二进制数据的位数。机器字长通常与主存单元的位数一致
- 存储字长:一个存储单元存储二进制代码的位数
- 指令字长:一个指令字中包含二进制代码的总位数。指令字长取决于从操作码的长度、操作码地址的长度和操作码地址的个数
-
CPU = 运算器 + 控制器
-
Flynn分类法
- single单一的
- multiple多样的
- instruction指令
- data数据
4. 指令系统
-
指令
-
指令格式
-
寻址方式:寻找指令中操作数有效地址的方式
- 立即寻址:操作数作为指令的一部分直接写在指令中,这种操作数称为立即数
- 寄存器寻址:指令所需的操作数存储在某寄存器中,或把目标操作数存入寄存器
- 直接寻址:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址
- 寄存器间接寻址:操作数在存储器中,操作数的有效地址用SI、DI、BX和BP四个寄存器之一来指定
- 寄存器相对寻址:操作数在存储器中,其有效地址是一个基址寄存器或变址寄存器中的内容和指令中的8位/16位偏移量之和
- 基址加变址寻址方式:操作数在存储器中,其有效地址是一个基址寄存器和一个变址寄存器的内容之和
- 相对基址加变址寻址:操作数在存储器中,其有效地址是一个基址寄存器、一个变址寄存器的值和指令中的8位/16位偏移量之和
-
CISC vs RISC
-
指令的流水处理
-
流水线的计算
5.输入输出技术
- CPU和外设之间的数据传送方式
6.存储系统
-
层次结构
-
分类
-
cache
关于rom 和ram
- “易失/非易失”是指存储器断电后,它存储的数据内容是否会丢失的特性
- cache的三种地址映像
- 主存的扩展
- 虚存:由主存、辅存、存储管理单元及操作系统中的存储管理软件组成的存储系统。程序员使用该存储系统时,可以使用的内存空间可远远大于主存的物理空间,但实际上并不存在那么大的主存,故称其为虚拟存储器。
虚拟存储器使存储系统既有相当于外存的容量又有接近于主存的访问速度。 - 磁盘存储器
7.总线系统
8.磁盘阵列技术(RAID)
9.计算机可靠性
数据结构与算法基础
1.基本概念与三要素
- 逻辑结构:指数据元素之间的逻辑关系
- 存储结构(物理结构):数据结构在计算机中的表示(又称映像)
其中逻辑结构和存储结构无关,而存储结构依赖于逻辑结构
2.算法
- 算法五特性:
- 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成
- 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出
- 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现
- 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合
- 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量
- 算法原地工作:算法所需要的内存空间是常量S(n) = O(1)
3.线性表
- 存储结构
- 线性表的插删操作
4.栈与队列
栈和队列本质上都是操作受限的线性表
5.串、数组、矩阵和广义表
- 串是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为S=“a1a2……an”,其中S是串名,a1a2an是串值
- 空串:长度为零的串,空串不包含任何字符
- 空格串:由一个或多个空格组成的串
- 子串:由串中任意长度的连续字符构成的序列。含有子串的串称为主串。子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串
- 串相等:指两个串长度相等且对应位置上的字符也相同
- 串比较:两个串比较大小时以字符的ASCII码值为依据。比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串未大;若其中一个串先结束,则以串长较大者为大
#include<iostream>
using namespace std;
int main(){
if("a" < "b")cout << "yes";//yes 字典序比较,先出现的小
else cout << "no";
return 0;
}
- 对串进行的基本操作有:
- 赋值操作StrAssign(s, t):把串t的值赋给串s
- 连接操作Concat(s, t):把串t连接在串s的尾部,形成一个新串
- 求串长StrLength(s):返回串s的长度
- 串比较StrCompare(s, t):比较两个串的大小
- 求子串SubString(s, start, len):返回串s中从start开始的、长度为len的字符序列
- 串的存储结构
- 串的顺序存储:定长存储结构
- 串的链式存储:块链
- 子串的定位操作通常称为串的模式匹配,是各种串处理系统中最重要的运算之一。子串也称为模式串
- 数组
- 稀疏矩阵
选择题推荐带入特殊值进行排除法
- 广义表,又称列表:也是一种线性结构,既可以存储不可再分的元素(原子),也可以存储广义表,记作:LS = (a1, a2, ……an),其中LS代表广义表的名称,an表示广义表存储的数据,广义表中每个ai既可以代表单个元素,也可以代表另一个广义表
- 取表头Head(L):取第一个元素。表头是非空广义表的第一个元素,是原子或广义表
- 取表尾Tail(L):取除去第一个元素外的其余元素。表尾是除去表头外,由其余元素构成的表,是广义表
- 表的长度:所包含的元素个数
- 表的深度:括号的最大层数
6.树和二叉树
-
树的基本概念
- 结点的度:该结点的孩子个数
- 树的度:树中结点的最大度数
- 叶子节点(也称为终端结点):度为0(没有子女结点)的结点
- 分支节点(也称为非终端节点):度大于0的结点
- 内部节点:除了根节点和叶子结点之外的结点
- 层次:从树根开始,根节点为第一层,它的子节点为第2层,以此类推
-
二叉树的主要性质:
- 在二叉树的第i层上最多有2i-1个结点(i>=1)
- 深度为k的二叉树最多有2k-1个结点(k >= 1)
- 对任何一棵二叉树,若其叶子节点数为n0,度为2的节点数为nn,则n0 = n2 + 1
- 对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到⌊log2n⌋ + 1层,每层从左到右),则对任一节点i(1 <= i <= n),有:
- 若i = 1,则结点i无父节点,是二叉树的根;若i > 1,则父节点是⌊i / 2⌋
- 若2i <= n,结点i的左孩子编号为2i,否则无左孩子
- 若2i + 1 <= n,结点i的右孩子编号为2i + 1 ,否则无右孩子
- 结点i所在层次(深度)为⌊log2i⌋ + 1
-
二叉树的遍历:其中所谓的序指的是根节点在何时被访问
前序:12457836
中序:42785136
后序:48752631
层序:12345678
反向构造二叉树:先找根节点,划分出左右子树,再依次递归
树转二叉树:左孩子有兄弟
二叉排序树BST:关键字,左<根<右 -
插入结点:
- 若该关键字已存在,则不再插入,如48
- 若查找二叉树为空树,则以新节点为查找二叉树
- 把要插入结点值和插入后父节点值比较,确定新节点是父节点的左子节点还是右子节点
-
删除结点:
- 若待删除结点是叶子结点,则直接删除
- 若待删除结点只有一个子节点,则把这个子节点和待删除结点的父节点直接连接,如56
- 若待删除的结点p右两个子节点,则在其左子树上,用中序遍历寻找关键字最大的结点s,用结点s的值代替结点p的值,再删除结点s,结点s比属于上述两种情况之一,如89
哈夫曼树:带权路径长度之和最小的树(不唯一)
线索二叉树:
- 目的:加快查找结点前驱和后继
- 线索:即指向前驱、后继的指针
- 注意:
- 最后一个结点rchild,rtag的处理
- 先序线索化中,注意处理原地循环问题。当ltag==0时,才能对左子树先序线索化
平衡二叉树AVL:任意结点的左右子树深度差绝对值不大于1
7.图
图的定义
图的存储结构
图的遍历
拓扑排序:每次选择没有前驱的顶点并输出
- 最小生成树
- Prim算法,选点
- Kruskal算法,选边
- 最短路径
- Dijkstra算法
8.查找
-
顺序查找
-
折半查找
注意mid的计算过程中是取整计算的,即直接去掉小数,只保留整数
-
分块查找
-
哈希表
-
B树
m阶B树的主要特性有:- 根节点的子树[2, m], 关键字[1, m - 1]
其他结点的子树[⌈ m / 2⌉, m],关键字[⌈ m / 2⌉ - 1, m - 1] - 对任意节点,其所有子树高度都相同
- 关键字的值:子树0 < 关键字1 < 子树1 < 关键字2 < 子树2 < ……(类比二叉查找树 左 < 中 < 右)
- 根节点的子树[2, m], 关键字[1, m - 1]
-
B+树
-
B树 vs B+树
- B树中,叶节点不带信息(叶节点实际不存在,指向这些结点的指针为空)
B+树叶节点包含信息,所有非叶节点只起到索引作用(非叶节点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含该关键字对应记录的存储地址) - B树中的叶节点(最外层的内部节点)包含的关键字和其他节点包含的关键字是不重复的
B+树中的叶节点包含了全部关键字,即在非叶节点中出现的关键字也会出现在叶结点中 - B树不支持顺序查找(只支持多路查找)
B+树支持顺序查找
- B树中,叶节点不带信息(叶节点实际不存在,指向这些结点的指针为空)
9.排序
直插在基本有序的表效率最高
希尔是去接近基本有序,基于直插
快排是内部排序里最强的崽
简单选择
堆排序
算法设计与分析
1.分治法
2.回溯法
3.贪心法
4.动态规划法
01背包问题,要么全装,要么不装
部分背包问题,能装多少装多少
- 例题
OS
1.基本概念
-
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
-
OS的功能和目标
- 作为系统资源的管理者
- 向上层提供方便易用的服务
- 作为最接近硬件的层次
-
OS的特征
- 并发
- 共享
- 虚拟
- 异步
2.进程管理
- 进程的状态与转换
- 进程正在被创建时,它的状态是"创建态",在这个阶段操作系统会为进程分配资源,初始化PCB
- 当进程创建完成后,进入"就绪态",处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行
- 如果一个进程此时在CPU上运行,则这个进程处于"运行态",CPU会执行该进程对应的程序(执行指令序列)
- 在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应).在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入"阻塞态",当CPU空闲时,会选择另一个"就绪态"进程上CPU运行.
- 一个进程可以执行exit系统调用,请求操作系统终止该进程.此时该进程会进入"终止态",操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB.当终止进程的工作完成之后,这个进程就彻底消失了.
- 前驱图
- 进程同步机制:同步也称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的。进程间的直接制约关系是源于它们之间的相互合作。
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步。例如,让系统计算1+2*3,假设系统产生两个进程:一个是加法进程,一个是乘法进程。要让计算结果是正确的,需要让加法进程发生在乘法进程之后,但实际上OS具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,则需指定一定的机制去约束加法进程,让它在乘法进程完成后再发生,而该机制就是我们所说的进程同步机制。
进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
- 进程互斥机制
进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,比如打印机、摄像头这样的I/O设备)
把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。互斥,也称间接制约关系。进程互斥是指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
- 为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
- 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
- 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
- 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。
- 让权等待。当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。
- 信号量机制
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。
原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,故若把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。
一对原语:wait(S)原语和signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal,括号里的信号量S其实就是函数调用时传入的一个参数。
wait、signal原语常常简称为P、V操作。故做题时常把wait(S)、signal(S)两个操作分别写为P(S)、V(S)。 - 信号量机制作用:
- 实现进程互斥
- 实现进程同步
- 实现进程的前驱关系
其中一个信号量对应一种资源信号量的值=这种资源的剩余数量(信号量的值如果小于0,说明此时有进程在等待这种资源)
P(S)申请一个资源S,若资源不够就阻塞等待,即S-1
V(S)释放一个资源S,若有进程在等待该资源,则唤醒一个进程,即S+1
-
PV操作
-
死锁:各进程互相等待对方手里的资源,导致各进程都阻塞无法向前推进的现象。(至少有两个进程,处于阻塞态)
饥饿:长期得不到想要的资源,某进程无法向前推进的现象(可能只有一个,处于阻塞态或就绪态) -
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生:
- 互斥条件
只有对必须互斥使用的争抢才会导致死锁(如哲学家就餐问题的筷子)。像内存、扬声器这类可以同时让多个进程使用的资源不会导致死锁(因为进程不用阻塞等待这种资源) - 不剥夺条件
进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放 - 请求和保持条件
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放 - 循环等待条件
存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。
- 互斥条件
-
死锁的处理策略
- 预防死锁:破坏死锁产生的四个必要条件中的一个或多个
- 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
- 死锁的检测与解除:允许死锁的发生,不过OS会负责检测出死锁的发生,然后采取某种措施解除死锁
3.存储管理
- 动态分区分配
- 首次适应
- 地址递增
- 算法开销小
- 最佳适应
- 容量递增
- 无可用的大内存块
- 最差(坏)适应
- 容量递减
- 最多的外碎片
- 邻近适应
- 从上次查找结束的位置开始继续查找
- 首次适应
- 碎片:不能被任何用户使用的极小空闲区
- 外:系统中
- 内:分配给用户的空间中
- 进程中的块称为页
- 内存中的块称为页框或页帧
- 外存中也以同样的单位进行划分,称为块
页框=页帧=内存块=物理块=物理页面 - 每个页框都有一个编号,即“页框号”
页框号=页帧号=内存块号=物理块号=物理页号 - 系统为
- 每个进程建立一张页表(页式)
- 每个进程建立一张段表(段式)
- 每个进程建立一张段表,每个分段有一张页表(段页式)
- 整个系统只设置一个重定位R,即基址R(只需在切换程序时重置R内容)
- 页面置换算法
-
OPT最佳置换
- 淘汰以后不再使用的页面 或 最长时间内不再被访问的页面
- 淘汰以后不再使用的页面 或 最长时间内不再被访问的页面
-
FIFO 先进先出
- 淘汰在内存中驻留时间最久的页面
- 会产生所分配的物理块数增大而页故障数不减反增的异常现象,称为Belady异常
-
LRU最近最久
- 淘汰过去一段时间内未访问过的页面
- 性能较好,但需要R(寄存器,下同)和栈的硬件支持。换言之,开销大,实现难
-
CLOCK时钟
-
简单的CLOCK置换算法
- 每帧设置一位访问位,当某页首次被装入或被访问时,访问位被置为1
- 当需要淘汰一个页面时,检查该页的访问位,
- 若为0,则选择该页换出
- 若为1,则将该页访问位设为0,暂不换出,继续检查下一页面
- 若第一轮扫描中所有页面都是1,则把这些页面的访问位依次置为0后,再进行第二轮扫描
-
改进型的CLOCK置换算法
- 增加了置换代价—修改位。在选择页面换出时,优先考虑既未使用过也未修改过的页面
- 1类 访问位=0,修改位=0:最近未被访问也未被修改,是最佳淘汰页
- 2类 访问位=0,修改位=1:最近未被访问,但被修改,不是很好的淘汰页
- 3类 访问位=1,修改位=0:最近被访问,但没被修改,可能再被访问
- 4类 访问位=1,修改位=1:最近被访问且被修改,可能再被访问
- 算法执行过程为:
- 1.从指针的当前位置开始,扫描循环队列,寻找访问位=0,修改位=0的页面,若有则淘汰首次遇到的页面。在第一次扫描期间不改变访问位
- 2.进行第二轮扫描,寻找访问位=0,修改位=1的页面,若有则淘汰首次遇到的页面。再第二轮扫描期间,把所有扫描过的页面的访问位设置为0
- 重复第1步,若有必要重复第2步
- 增加了置换代价—修改位。在选择页面换出时,优先考虑既未使用过也未修改过的页面
-
-
4.文件管理
- 文件:一组有意义的信息集合
- 文件的逻辑结构:文件在内部如何组织
- 文件的物理结构:文件如何存放在外存中
- 目录结构:文件之间如何组织
- 存储空间的管理:OS如何管理外存中的空闲块
- 文件目录
- 文件的结构
- 文件的逻辑结构
- 无结构的流式文件
- 有结构的记录式文件
- 文件的物理结构(文件的分配方式)
- 连续分配
- 链接分配
- 索引分配
- 文件的逻辑结构
- 空闲存储空间的管理
-
空闲区表
把外存空间上一个连续未分配区称为空闲区。OS为外存上所有空闲区建立一张空闲表来管理空闲存储空间 -
位示图
在外存上建立一张位示图,记录文件存储器的使用情况。每一位对应文件存储器上的一个物理块,取值为0和1分别表示空闲和占用
-
空闲块链
每个空闲物理块中都有指向下一个空闲物理块的指针,所有空闲物理块构成一个链表,链表的头指针放在文件存储器的特定位置(如管理块中) -
成组链接法
在UNIX系统中,把空闲块分为若干组,每100个空闲块为一组,每组的第一个空闲块登记下一组空闲块的物理盘块号和空闲块总数,假如一个组的第一个空闲块号等于0,就意味着该组是最后一组,即无下一组空闲块
-
5.设备管理
6.微内核OS
计网
0.考纲
1.计算机网络的分类
2.七层网络体系结构
3.网络的设备与标准
4.TCP/IP协议族
5.IP地址和IPv6
6.Internet服务
数据库系统
1.基本概念
- 数据库(Database,简写为DB):长期存储在计算机内的、有组织的、可共享的数据集合。
数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享 - 数据库管理系统(DatabaseManagement System,DBMS):数据库系统的核心软件,在OS的支持下工作,解决如何科学地组织和存储数据、如何高效地获取和维护数据的系统软件问题。
主要功能包括数据定义功能、数据操纵功能、数据库的运行管理、数据组织、存储、管理和数据库的建立与维护- DBMS特征
- 数据结构化且统一管理
- 有较高的数据独立性
- 提供数据控制功能
- DBMS分类
- 关系数据库系统
支持关系模型的数据库系统 - 面向对象的数据库系统
支持以对象形式对数据建模的数据库系统 - 对象关系数据库系统
在传统的关系数据模型基础上,提供元组、数组、集合等更丰富的数据类型以及处理新的数据类型操作的能力,这样形成的数据模型称为对象关系数据模型。基于对象关系数据模型的DBS称为对象关系数据库系统。
- 关系数据库系统
- DBMS特征
2.数据库三级模式两级映像
- 数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构
- 外模式
也称为用户模式或子模式,是用户和数据库系统的接口,是用户用到的那部分数据的描述,由若干个外部记录类型组成。描述外模式的数据定义语言称为外模式DDL - 概念模式
也称模式,是数据库中全体数据的逻辑结构和特征的描述,它由若干个概念记录类型组成,只涉及行的描述,不涉及具体的值。概念模式的一个具体值称为模式的一个实例,同一个模式可以有很多实例。 - 内模式
也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。描述内模式的数据定义语言称为内模式DDL
- 外模式
- DBMS的两级映像功能保证了数据的独立性
- 外模式/模式映像
该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换 - 模式/内模式映像
该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。
- 外模式/模式映像
3.数据库的分析和设计过程
4.数据模型
- 模型:对现实世界特征的模拟和抽象
- 数学模型:对现实世界数据特征的抽象
- 数据模型:用来描述数据的一组概念和定义
- 数据模型的三要素:
- 数据结构
所研究的对象类型的集合,是对系统静态特性的描述 - 数据操作
对数据库中各种对象的实例(值)允许执行的操作的集合,包括操作和操作规则。数据操作是对系统动态特性的描述 - 数据的约束条件
是一组完整性规则的集合。对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效、相容
- 数据结构
关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。
关系模型是由若干个关系模式组成的集合。一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念。
关系模型的优点是:概念单一,存储路径对用户是透明的,所以具有更好的数据独立性和安全保密性,简化了程序的开发和数据库的建立工作。
至少包含四个关系模式:三个实体+多对多联系
- E-R图向关系模型转换的规则
- 一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的码(关键字)就是关系的码
- 一个1:1联系可以转换为一个独立的关系模式,也可以和任意一端对应的关系模式合并。
- 若转化为一个独立的模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码
- 若与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性
- 一个1:n联系可以转换为一个独立的关系模式,也可以和任意n端对应的关系模式合并。
- 若转换为一个独立的模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。若和n端实体对应的关系模式合并,则需要在该关系模式的属性中加入1端关系模式的码和联系本身的属性
- 一个m:n联系转换为一个独立的关系模式,和该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合
- 三个以上实体间的一个多元联系可以转换为一个独立的关系模式,和该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
5.关系代数
- 候选码:如果关系中的某一属性组能唯一标识 一个元组,而其子集不能,则称该属性组为候选码
- 主码:能够唯一标识 一条记录的 最小属性集
(若一个关系有多个候选码,则选其一为主码 - 主属性:包含在候选码中的属性
主属性和非主属性是互斥的,即一个属性要么是主属性,要么是非主属性 - 外码:是本关系的属性但不是码,而是另一个关系的主码
(参照表和被参照表可以是同一个表,
例如课程(课号,课名,先修课)) - 全码:关系中的所有属性组都是该关系模式的候选码
- 关系的三种类型
- 基本关系(也称基本表、基表):是实际存在的表,它是实际存储数据的逻辑表示
- 查询表:查询结果对应的表
- 视图表:是由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以常称为虚表
- 关系代数表达式查询优化的原则有:
- 提早执行选取运算。
对于有选择运算的表达式,应优化成尽可能先执行选择运算的等价表达式,以得到较小的中间结果,减少运算量以及从外存读块的次数 - 合并乘积和其后的选择运算为连接运算
- 把投影运算和其后的其他运算同时进行,以避免重复扫描关系
- 把投影运算和其前后的二目运算结合起来,因为没有必要为去掉某些字段再扫描一遍关系
- 在执行连接前对关系适当地预处理,能快速地找到要连接的元组
- 存储公共子表达式。对于有公共子表达式的结果应存于外存(中间结果),这样,当从外存读出它的时间比计算的时间少时,可节约操作时间。
- 提早执行选取运算。
6.数据库完整性约束
7.关系型数据库SQL
- SQL是在关系数据库中最普遍使用的语言,它不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能
- SQL具有综合统一、高度非过程化、面向集合的操作方式,两种使用方式,语言简洁且易学易用等特点
- SQL支持关系数据库的三级模式结构:视图对应外模式、基本表对应模式、存储文件对应内模式
8.关系数据库的规范化
- 求候选码
- 首先,把关系模式的函数依赖关系用“有向图”的方式表示
- 其次,找入度为0 的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
- 再者,若入度为0的属性集不能遍历图中所有结点,则需要尝试性的把一些中间节点(既有入度,也有出度的结点)并入 入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。
可以作为主键-》候选码-》找入度为0,看是否能遍历所有节点:情况①能,则为候选码;情况②不能,加入一些中间结点进行尝试
9.数据库的控制功能
-
事务:一个操作序列,是数据库环境中不可分割的逻辑工作单位
-
事务的四个特性:
- 原子性
事务的所有操作在数据库中要么全做,要么全都不做 - 一致性
一个事务独立执行的结果会保持数据的一致性,即数据不会因为事务的执行而遭受破坏 - 隔离性
一个事务的执行不能被其他事务干扰 - 持久性
一个事务一旦提交,它对数据库中数据的改变必须是永久的,即便系统出现故障时也是如此
- 原子性
-
并发操作:指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。
并发操作带来问题的原因是事务的并发操作破坏了事务的隔离性 -
DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据
-
并发控制的主要技术是封锁
- 排他锁(X锁)
又称写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,知道T释放A上的锁 - 共享锁(S锁)
又称读锁,若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁
- 排他锁(X锁)
- 数据库中的四类故障:
- 事务内部故障
事物内部的故障有的可以通过事务程序本身发现。例如,银行转账事务,把账号A的金额转X到账号B,此时应该把账号A的余额-X,把账号B的余额+X。若账号A的余额不足,则两个事务都不做,否则都做。
但有些是非预期的,不能由事务程序处理,例如运算溢出、并发事务发生死锁等 - 系统故障
通常称为软故障,是指造成系统停止运行的任何事件,使得系统要重新启动,例如CPU故障、OS故障和突然停电等。 - 介质故障
通常称为硬故障,如磁盘损坏、磁头碰撞和瞬时强磁干扰。此类故障发生几率小,但破坏性最大 - 计算机病毒
计算机病毒是一种人为的故障和破坏,是在计算机程序中插入的破坏,计算机功能或者数据可以繁殖和传播的一组计算机指令或程序代码
- 事务内部故障
人为错误、硬盘损坏、计算机病毒、断电或是天灾人祸等都有可能造成数据的损失,所以必须强调备份的重要性
-
静态转储和动态转储
- 静态转储:在转储期间不允许对数据库进行任何存取、修改操作
- 动态转储:在转储期间允许对数据库进行存取、修改操作,故转储和用户事务可并发执行
-
海量转储和增量转储
- 海量转储:每次转储全部数据
- 增量转储:每次只转储上次转储后更新过的数据
-
日志文件
在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统就利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。故DBMS利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复。 -
数据恢复的三个步骤
- 首先,反向扫描日志文件,查找该事务的更新操作
- 然后,对事务的更新操作执行逆操作
- 最后,继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到回到事务的开始标志
10.数据仓库和数据挖掘
- 数据仓库(Data Warehouse)可简写为DW或DWH,数据仓库是为了企业所有级别的决策制定计划过程,提供所有数据类型的战略集合。它出于分析性报告和决策支持的目的而创建。为需要业务智能的企业,为需要指导业务流程改进、监视时间,成本,质量以及控制等。数据仓库是依照分析需求、分析维度、分析指标进行设计的。
- 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,它用于支持企业或组织的决策分析处理。是为了方便多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。
11.大数据基本概念
程序设计语言
1.基本概念
- 低级语言:通常称机器语言和汇编语言为低级语言。
- 机器语言:指用0,1字符串组成的机器指令序列,是最基本的计算机语言。
- 汇编语言:指用符号表示指令的语言
- 高级语言:是从人类的逻辑思维角度出发、面向各类应用的程序语言,其抽象程度大大提高,需要编译成特定机器上的目标代码才能执行。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
- 程序设计语言的定义一般都涉及语法、语义、语用和语境等方面
- 语法:由程序设计语言的基本符号组成程序中的各个语法成分的一组规则,其中由基本字符构成的符号书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可通过形式语言进行描述。
- 语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。
- 语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响
- 语境:理解和实现程序设计语言的环境,包括编译环境和运行环境。
- 程序设计语言的分类
- 命令式程序设计语言
命令式程序设计语言是基于动作的语言,在这种语言中,计算被看作是动作的序列。命令式语言族开始于Fortran、Pascal和C语言,体现了命令式程序设计的关键思想 - 面向对象的程序设计语言
面向对象的程序设计很大程度上应归功于模拟领域发展而来的Simula,Simula提出了对象和类的概念。C++、Java和Smalltalk是面向对象程序设计语言的代表 - 函数式程序设计语言
函数式程序设计语言是一类以2-演算为基础的语言。该语言的代表是LISP,其中大量使用了递归。 - 逻辑型程序设计语言
逻辑型程序设计语言是一类以形式逻辑为基础的语言。该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog
- 命令式程序设计语言
- 程序设计语言的基本成分
- 数据成分
- 常量和变量
- 全局量和局部量
- 数据类型
- 基本类型:整型int,字符型char、实型float&double和布尔类型bool
- 特殊类型:空类型void
- 用户定义类型:枚举类型enum
- 构造类型:数组、结构和联合
- 指针类型:type
- 抽象数据类型:类类型
- 运算成分
- 算术运算:加减乘除
- 逻辑运算:或与非
- 关系运算
- 控制成分
- 顺序结构
- 选择结构
- 循环结构
- 函数和函数的调用
- 数据成分
2.编译与解释
- 汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化的程序设计语言。
用汇编语言编写的程序称为汇编语言源程序。
汇编语言源程序由若干条语句组成。
一个程序中有三类语句:指令语句、伪指令语句和宏指令语句 - 编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序。编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段,实际的编译器可能会把其中的某些阶段结合在一起处理
- 解释程序是一种语言处理程序,在词法、语法和语义分析方面和编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。故,解释程序并不产生目标程序,这是它和编译程序的主要区别。
- 词法分析阶段的任务是:对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个“单词”符号。“单词”符号是程序设计语言的基本语法单位,如关键字、标识符等
- 语法分析阶段的任务是:在词法分析的基础上,根据语言的语法规则把单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。语法分析和词法分析本质上都是对源程序的结构进行分析。
- 语义分析阶段主要是:审查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查。
3.文法
这小节建议直接看最后的例题,会做题即可
还有对于表中的几种类型有印象。
4.有限自动机
同上小节,会做题即可
- 找出初态和终态
- 理清关系
- 带入验证
5.正规式
6.表达式
7.传值与引用(传址)
- 传值调用:形参取的是实参的值,形参的改变不会导致实参的值发生改变
- 引用(传址)调用:形参取的是实参的地址,即相当于实参存储单元地址的引用因此其值改变的同时就改变了实参的值
8.各种程序语言特点
- Fortran
科学计算,执行效率高 - Pascal
为教学而开发,表达能力强,Delphi - C
指针操作能力强,高效 - Lisp
函数式程序语言,符号处理,人工智能 - C++
面向对象,高效 - Java
面向对象,中间代码,跨平台 - C#
面向对象,中间代码,Net - Prolog
逻辑推理,简洁性,表达能力,数据库和专家系统
软件工程
1.概述
同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,称其为计算机软件的生存周期。通常,软件生存周期包括可行性分析、项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动
-
软件生存周期
- 可行性分析
由软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性 - 需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。主要解决“做什么”的问题 - 概要设计
主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等 - 详细设计
对每个模块完成的功能进行具体描述,要把功能转变为精确的、结构化的过程 - 程序编码
把软件设计的结果转换成计算机可运行的程序代码。在程序编码时,必须要制定统一、符合标准的编写规范,以保证程序的可读性、易维护性,提高程序的运行效率 - 软件测试
在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正 - 维护
在软件开发完成并投入使用后,由于各种原因,软件会不能继续适应用户的要求。延续软件的使用寿命,就要对软件进行维护,包括纠错性维护和改进性维护两个方面
- 可行性分析
-
软件能力成熟度模型(CMM)把软件组织的过程能力分为五个成熟度级别:初始级、可重复级、已定义级、已管理级和优化级。按照成熟度级别由低到高,软件开发生产精度越来越高,每单位工程的生产周期越来越短。
- 初始级
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力 - 可重复级
建立了基本的项目管理过程来跟踪费用、进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得的成功 - 已定义级
已把软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。 - 已管理级
收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制 - 优化级
过程的量化反馈和先进的新思想、新技术促使过程不断促进
- 初始级
-
阶段式模型:结构类似于CMM,它关注组织的成熟度。
有五个成熟度等级- 初始的:过程不可预测且缺乏控制
- 已管理的:过程为项目服务
- 已定义的:过程为组织服务
- 定量管理的:过程已度量和控制
- 优化的:集中于过程改进
-
连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。
CMMI中包括6个过程域能力等级,等级号为0~5- CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标
- CL1(已执行的):其共性目标是过程把可标识的输入工作产品转换为可标识的输出工作产品,以实现支持过程域的特定目标
- CL2(已管理的):其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作把使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审
- CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进
- CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则
- CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效
-
统一过程(UP)模型:是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。迭代的意思是把整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程包括四个阶段:初始阶段、精化阶段、构建阶段、移交阶段- 初始阶段
生命周期目标 - 精化阶段
生命周期架构 - 构建阶段
初始运作功能 - 移交阶段
产品发布
- 初始阶段
2.软件开发模型
-
瀑布模型:迭代模型/迭代开发方法
-
演化模型:快速应用开发
-
增量模型:构件组装模型/基于构建的开发方法
-
螺旋模型:统一过程/统一开发方法
-
快速原型模型:敏捷开发方法
-
V模型:基于架构的开发方法
-
喷泉模型:模型驱动的开发方法
-
基于构件的开发模型:本质上是演化模型,以迭代方式构件软件
3.软件开发方法
- 结构化方法由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流开发方法。结构化分析是根据分解和抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作。
结构化方法总的指导思想是自顶向下、逐层分解,其基本原则是功能的分解和抽象。它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题,但是不适合大规模、特别复杂的项目,且难以适应需求的变化。 - Jackson方法是一种面向数据结构的开发方法。因为一个问题的数据结构和处理该数据结构的控制结构有着惊人的相似之处。这种方法首先描述问题的输入、输出数据结构,分析其对应性,然后推出相应的程序结构,从而给出问题的软件过程描述。
JSP方法是以数据结构为驱动的,适合于小规模的项目。当输入数据结构和输出数据结构之间没有对应关系时,难以应用此方法。基于JSP方法的局限性,又发展了JSP方法,它是JSP方法的扩充。 - 原型化方法:并非所有的需求都能够预先定义,而且反复修改是不可避免的。开发原型化系统首先要确定用户需求,开发原始模型,然后征求用户对初始原型的改进意见,并根据意见修改原型。
原型化方法比较适合于用户需求不清、业务理论不确定、需求经常变化的情况,当系统规模不是很大也不太复杂时,采用该方法是比较好的 - 敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。
敏捷过程的典型方法有很多,主要有极限编程、水晶法、并列争球法、自适应软件开发几种。
极限编程(XP)是一种轻量级(敏捷)、高效、低风险、柔性、可预测、科学的软件开发方式。它由价值观、原则、实践和行为4个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生存周期。
有印象,这些是属于极限编程的即可
4.需求分析
- 功能需求:考虑软件要做什么
- 性能需求:考虑软件开发的技术性指标
- 用户或人的因素:考虑用户的类型
- 环境需求:考虑未来软件应用的环境,包括软件和硬件
- 界面需求:考虑对数据格式、数据存储介质的规定
- 文档需求:考虑需要哪些文档,针对哪些读者
- 数据需求:考虑数据的格式、接受、发送数据的频率等
- 资源使用需求:考虑软件运行时所需数据、内存空间等资源
- 安全保密要求
- 可靠性要求:考虑系统的可靠性
- 软件成本消耗和开发进度需求
- 其他非功能性要求
5.系统设计
- 内聚:度量 一个模块内 不同元素 彼此结合的紧密程度(高内聚,一家人要团结紧密)
- 耦合:度量 模块间 互相连接的紧密程度(低耦合,与外人保持边界感)
- 各种耦合类型
- 内容耦合
有以下几种情形- 一个模块直接访问另一个模块的内部数据
- 一个模块不通过正常入口转到另一个模块内部
- 两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
- 一个模块有多个入口
- 公共耦合
一组模块访问同一个公共数据环境。其中公共的数据环境可以是全部数据结构、共享的通信区、内存的公共覆盖区等 - 外部耦合
一组模块都访问同一个全局简单变量。而且不是同一全局数据结构,不是通过参数表传递该全局变量的信息 - 控制耦合
一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能 - 标记耦合
一组模块通过参数表传递记录信息。这个记录是某一数据结构的子结构,而非简单变量 - 数据耦合
一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的 - 非直接耦合
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
- 内容耦合
6.系统测试
- 软件测试的原则和目的
- 尽早、不断的进行测试
- 程序员避免测试自己设计的程序
- 既要选择有效、合理的数据,也要选择无效、不合理的数据
- 修改后应进行回归测试
- 尚未发现的错误数量和该程序已发现错误数成正比
- 测试阶段
- 单元测试
也称为模块测试,在模块编写完成且无编译错误后就可以进行。单元测试侧重于模块中的内部处理逻辑和数据结构。一般用白盒测试法 - 集成测试
把模块按系统设计说明书的要求组合起来进行测试。即使所有的模块都通过了测试,在集成之后,仍然可能出现问题 - 确认测试
始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正 - 系统测试
是把已经确认的软件、计算机硬件、外设和网络等其他因素结合在一起,进行信息系统的各种集成测试和确认测试,其目的是通过与系统的需求相较,发现所开发的系统和用户需求不符或矛盾的地方
- 单元测试
7.软件开发项目管理
- 风险是指“损失或伤害的可能性”
- 风险管理包含
- 风险识别
- 风险预测
- 风险评估
- 风险控制
8.软件质量
软件质量模型由三个层次组成:第一层是质量特性,第二层是质量子特性,第三层是度量指标。该模型的质量特性和质量子特性的含义为:
- 功能性
和一组功能及其指定的性质有关的一组属性。其中功能是指满足明确或隐含需求的那些功能- 适合性:与规定任务能否提供 一组功能以及这组功能的适合程度有关的软件属性
- 准确性:与能否得到正确的或相符的结果或效果有关的软件属性
- 互用性:与同其他指定系统进行交互操作的能力相关的软件属性
- 依从性:使软件服从有关的标准、约定、法规及类似规定的软件属性
- 安全性:与避免对程序及数据的非授权的故意或意外访问的能力有关的软件属性
- 可靠性
与在规定的一段时间内和规定的条件下,软件维持其性能水平的能力有关的一组属性- 成熟性:与由软件故障引起失效的频度有关的软件属性
- 容错性:与在软件错误或违反指定接口情况下,维持指定的性能水平的能力有关的软件属性
- 易恢复性:与在故障发生后重新建立其性能水平并恢复直接受影响数据的能力,以及为达此目的所需的时间有关的软件属性
- 易使用性
与为使用所需的努力和由一组规定的或隐含的用户对这样的使用所做的个别评价有关的一组属性- 易理解性:与用户为理解逻辑概念及其应用范围所需努力有关的软件属性
- 易学性:与用户为学习软件应用所需努力有关的软件属性
- 易操作性:与用户为进行操作或控制所需努力有关的软件属性
- 效率
与在规定条件下,软件的性能水平和所用资源量之间的关系有关的一组属性- 时间特性:与软件执行其功能时的响应和处理时间以及吞吐量有关的软件属性
- 资源特性:与软件执行其功能时所使用的资源量以及使用资源的持续时间有关的软件属性
- 可维护性
与进行规定的修改所需努力有关的一组属性- 易分析性:与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性
- 易改变性:与进行修改、调试或适应环境变化所需努力有关的软件属性
- 稳定性:与修改造成的未预料后果的风险有关的软件属性
- 易测试性:与为 确认修改软件所需努力有关的软件属性
- 可移植性
与 软件从一种环境转移到另一种环境的能力有关的一组属性- 适应性:与软件无需采用有别于为该软件准备的处理和手段就能适应规定的环境有关的软件属性
- 易安装性:与在指定环境下安装软件所需努力有关的软件属性
- 一致性:使软件服从与可移植性有关的标准或约定的软件属性
- 易替换性:与软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性
9.软件度量
建议用方法二:回路个数+1
结构化开发方法(数据流图
1.系统设计基本原理
- 抽象
抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不是很重要或非本质的方面 - 模块化
指把一个待开发的软件分解为若干个小的、简单的部分/模块,每个模块可独立地开发、测试,最后组装成完整的程序。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改 - 信息隐蔽
是开发整体程序结构使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用 - 模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系紧密程度。
衡量模块独立程度的标准有两个:耦合和内聚。耦合是指模块间联系的紧密程度。耦合度越高,则模块的独立性越差
内聚是指模块内部各元素间联系的紧密程度。内聚度越低,则模块的独立性越差。故,模块独立就是希望每个模块都是高内聚、低耦合的。
-
耦合类型
- 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
- 数据耦合:一组模块借助参数表传递简单数据
- 标记耦合:一组模块通过参数表传递记录信息(数据结构)
- 控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息
- 外部耦合:一组模块都访问同一全局简单变量,且不是通过参数表传递该全局变量的信息
- 公共耦合:多个模块都访问同一个公共数据环境。
- 内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口
-
内聚类型
- 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
- 顺序内聚:处理元素相关,而且必须顺序执行
- 通信内聚:所有处理元素集中在一个数据结构的区域上
- 过程内聚:处理元素相关,且必须按特定的次序执行
- 瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行
- 逻辑内聚:完成逻辑上相关的一组任务
- 偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务
例题
2.系统总体结构设计
- 系统结构设计应遵循以下原则:
- 分解-协调原则
- 自顶向下原则
- 信息隐蔽、抽象的原则
- 一致性原则
- 明确性原则
- 模块之间的耦合度尽可能小,模块的内聚度尽可能高
- 模块的扇入系数和扇出系数要合理
- 模块的规模适当
- 子系统划分要遵循以下原则
- 子系统要具有相对独立性
- 子系统之间数据的依赖性尽量小
- 子系统划分的结构应使数据冗余较小
- 子系统的设置应考虑今后管理发展的需要
- 子系统的划分应便于系统分阶段实现
- 子系统的划分应考虑到各类资源的充分利用
- 模块是组成系统的基本单位,它的特点是可以组合、分解和更换。系统中任何一个处理功能都可以视为一个模块。根据模块功能具体化程度的不同,可以分为逻辑模块和物理模块
一个模块要具备以下四个要素:- 输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那里取得输入,进行加工后再把输出返回给调用者
- 处理功能:指模块把输入转换成输出所做的工作
- 内部数据:指仅供该模块本身引用的数据
- 程序代码:指用来实现模块功能的程序
3.数据流图
- 数据流图,又称数据流程图,是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
- 数据字典
数据流图描述了系统的分解,但没有对图中各成分进行说明。
数据字典用于对数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。
数据字典有四类条目:数据流条目、数据存储条目、加工条目和数据项条目。数据字典管理主要是指把字典条目按照某种格式组织后存储在字典中,并提供排序、查找、统计等功能。
对于一个软件系统,其数据流图可能有许多层,每一层又有许多张图。为了区分不同的加工和不同的DFD(DFD数据流图,Data Flow Diagram)子图,应该对每张图和每个加工进行编号,以利于管理
- 父图和子图
假设分层数据流图里的某张图A中的某个加工可用另一张图B来分解,则称图A是图B的父图,图B是图A的子图。
在一张图中,有些加工需要进一步分解,有些加工则不必分解。故,若父图中有n个加工,则它可有0~n张子图()这些子图位于同一层,但每张子图都对应于一张父图。 - 编号
- 顶层图只有一张,图中的加工也只有一个,所以不必编号
- 0层图只有一张,图中的加工号可以分别是0.1,0.2或者1.1,1.2等
- 子图号就是父图中被分解的加工号
- 图的加工号是由图号、圆点和序号组成
- 数据流图应该注意的问题
- 适当地为数据流、加工、数据存储、外部实体命名,名字应该反映该成分的实际含义,避免空洞的名字
- 画数据流而非控制流
- 每条数据流的输入或输出都是加工
- 一个加工的输出数据流不应该和输入数据流同名,即使它们的组成成分相同
- 允许一个加工有多条数据流流向另一个加工,也允许有一个加工有两个相同的输出数据流流向两个不同的加工。
- 保持父图和子图平衡。换言之,父图中某加工的输入/输出数据流必须和它的子图的输入/输出数据流在数量和名字上相同。注意,若父图的一个输入(或输出)数据流对应子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的
- 在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,则这个数据存储应该作为这个加工的内部文件而不必画出
- 保持数据守恒。换言之,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据中获得
- 每个加工必须既有输入数据流,又有输出数据流
- 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中,可能是只有读没有写,或者是只有写没有读
UML
1.概述
- 统一建模语言UML是面向对象软件的标准化建模语言。UML由3个要素组成:UML的基本构造块、支配这些构造块如何放置在一起的规则和运用于整个语言的一些公共机制。
- UML的词汇表包含3种构造块:
- 事物
是对模型中最具代表性的成分的抽象 - 关系
把事物结合在一起 - 图
聚集了相关的事物。
- 事物
- 事物包括
- 结构事物(Structural Thing)
通常是模型的静态部分,描述概念或物理元素。结构事物包括类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)和节点(Node) - 行为事物(Behavior Thing)
是UML模型的动态部分。它们是模型中的动词,描述了跨越时间和空间的行为。共有两类主要的行为事物:交互(Interaction)和状态机(State Machine) - 分组事物(Grouping Thing)
是UML模型的组织部分。它们是一些由模型分解成的“盒子”。在所有的分组事物中,最主要的分组事物是包(Package) - 注释事物(Annotation Thing)
是UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。注解(Note)是一种主要的注释事物。注解是一个依附于一个元素或一组元素之上,对它进行约束和解释的简单符号。
- 结构事物(Structural Thing)
- UML中有四种关系:
- 依赖Dependency
依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义 - 关联Association
关联是一种结构关系,它描述了一组链,链是对象之间的连接。- 聚合Aggregation
是一种特殊类型的关联,描述了整体和部分间的结构关系 - 组合Composition
也是一种特殊类型的关联,它同样体现了整体和部分间的关系,但比聚合更强,也称为强聚合
- 聚合Aggregation
- 泛化Generalization
泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。 - 实现Realization
实现是类元之间的语义关系,其中一个类元制定了由另一个类元保证执行的契约。在两种地方要遇到实现关系:一种是在接口和实现它们的类和构件之间;另一种是在用例和实现它们的协作之间
- 依赖Dependency
2.类图
- 类图(Class Diagram)展现了一组对象、接口、协作及其之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图
- 类图给出了系统的静态设计视图,包含主动类的类图给出了系统的静态进程视图。作为模型管理视图还可以含有包或子系统,二者都用于把模型元素聚集成更大的组块。
- 类图用于对系统的静态视图建模。这种视图主要支持系统的功能需求,即系统要提供给最终用户的服务
- 当对系统的静态设计建模时,通常以下述三种方式之一使用类图:对系统的词汇建模;对简单的协作建模;对逻辑数据库模式建模
3.用例图
- 用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及两者之间的关系。用例图通常包括用例、参与者、扩展关系、包含关系。
- 用例图用于对系统的静态用例视图进行建模,主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。
- 当对系统的静态用例视图建模时,可用下列两种方式来使用用例图:对系统的语境建模;对系统的需求建模
4.顺序图
- 顺序图(或称序列图)和协作图均被称为交互图,它们用于对系统的动态方面进行建模
- 一张交互图显示的是一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息
- 顺序图是强调消息时间序列的交互图,协作图是强调接受和发送消息的对象的结构组织的交互图
- 交互图用于对一个系统的动态方面建模。在大多数情况下,它包括对类、接口、构件和节点的具体的或原型化的实例及其之间传递的消息进行建模。交互图可以单独使用,用于可视化、详述、构造和文档化一个特定的对象群体的动态方面,也可用来对一个用例的特定控制流进行建模
5.活动图
- 活动图(Activity Diagram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程
- 活动图专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程
所谓分支◇,也可以理解为判断
6.状态图
7.通信图
8.构件图
构件图(Component Diagram)展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。如图示,它与类图相关,通常把构件映射为一个或多个 类、接口或协作
面向对象
1.基本概念
- 面向对象=对象+分类+继承+通过消息的通信
- 对象
在面向对象的系统中,对象是基本的运行实体,它既包括数据(属性),也包括作用于数据的操作(行为),所以一个对象把属性和行为封装为一个整体。从程序设计者角度看,对象是一个程序模块,从用户角度看,对象为他们提供了所希望的行为。在对象内的操作通常叫做方法。一个对象通常可由对象名、属性和操作三部分组成 - 消息
对象之间进行通信的一种构造叫做消息。当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息,接收到消息的对象经过解释,然后予以响应,这种通信机制叫做消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应 - 类
一个类定义了一组大体上相似的对象,一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象是类的具体化,是类的实例 - 继承
继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和操作。一个子类可以继承它的父类中的属性和操作,这些属性和操作在子类中不必定义。子类中还可以定义自己的属性和操作。 - 多态
不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样,把具有通用功能的消息存放在高层次,而把不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。
2.设计原则
- 单一职责原则:设计目的单一的类
- 开放-封闭原则:对扩展开放,对修改封闭
- 李氏(Liskov)替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象,而不是具体实现:针对接口编程,不要针对实现编程
- 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的
- 迪米特(Demeter)原则:一个对象应当对对其他对象有尽可能少的了解
3.设计模式的概念与分类
- 设计模式:主要关注软件系统的设计,与具体的实现语言无关
- 设计模式一般具有四要素:
- 模式名称
用一两个词来描述模式的问题、解决方案和效果。设计模式允许在较高的抽象层次上进行设计 - 问题
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,可能描述了特定的设计问题,如怎样用对象表示算法等;也可能描述了导致不灵活设计的类或对象结构 - 解决方案
描述了设计的组成成分、它们之间的相互关系及各自的职责和协作方式。模式就像一个模板,提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题 - 效果
描述了模式应用的效果及使用模式应权衡的问题
- 模式名称
4.创建型模式
- 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
- 创建型模式中有两个不断出现的主旋律。第一,它们都把关于该系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的实例是如何被创建和放在一起的整个系统关于这些对象所知道的是由抽象类所定义的接口。
- 从而,创建型模式在为什么被创建、谁创建它、它是如何被创建的以及何时创建这些方面给予了很大的灵活性。它们允许用结构和功能差别很大的“产品”对象配置——一个系统。配置可以是静态的(即在编译时指定),也可以是动态的(在运行时指定)
5.结构型模式
- 结构性模式设计如何组合类和对象以获得更大的结构。结构性模式采用继承机制来组合接口或实现。
- 结构性对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。
6.行为型模式
- 行为模式涉及算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的控制流。它们把用户的注意力从控制流转移到对象间的联系方式上来。
- 行为类模式使用继承机制在类间分派行为,主要有Template Method(模板方法)和Interpreter(解释器)两种模式
- 行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。其他的行为对象模式常把行为封装在一个对象中并把请求指派给它。
7.Java程序设计
- 优点
- 跨平台
- 代码可移动(与html相结合)
- 完全面向对象
- 编写的程序不易出错(没有指针,内存垃圾自动回收,不会产生内存泄漏)
- 简单、安全、多线程等
- Java vs C++
- 完全面向对象:无全局变量、无结构和联合、自动回收内存垃圾
- 没有指针
- 没有多继承
- 解释执行
- 类是一些属性和方法的封装体,类的定义用关键字class声明,用关键字public、protected、private指定类的成员的存取控制属性:
- private私用成员,只有类内部的方法才能访问
- protected保护成员,可被派生类和同一文件夹下的类访问
- public公用成员,可以从类的外部访问
- Java中用关键字extends表示类间的继承关系
- 父类的公有属性和方法成为子类的属性和方法,子类若有和父类同名、同参数类型的方法,则子类对象在调用该方法时,调用的是子类的方法,亦即方法的重置。若想要调用父类的同名方法,需要用super关键字(属性同理)
- 子类的对象可以作为祖先类的对象使用,即类的向上转换,反之则不行。具体表现为:可以用子类对象来对祖先类对象赋值,可以用子类对象作为实参去调用以父类对象为形参的函数
- 同一个类中的两个或两个以上方法,名字相同,而参数个数不同或参数类型不同,叫做重载。注意:方法名字和参数都一样,而仅仅返回值类型不同,这不是重载。
- 静态属性和静态方法的声明用关键字static实现。一个类的静态属性只有一个,由所有该类的对象共享。不需要创建对象也能访问类的静态属性和方法,访问方式为“类名.静态属性或静态方法”。静态方法和对象无关,则不能在静态方法中访问非静态属性和调用非静态方法
- this代表当前对象,super代表当前对象的父类
- this的用处
- 一个构造函数调用另一个构造函数,对构造函数的调用必须是第一条语句
- 把对象自身作为参数来调用一个函数
- super的用处
- 在子类中调用父类的同名方法,或在子类的构造函数中调用父类的构造函数,此时也必须是第一条语句
- 用final关键字定义的常量,在其初始化或第一次赋值后,其值不能被改变。常量必须先有值,然后才能使用。对于常量的第一次赋值只能在构造函数中进行。
- final对象的值不能被改变,指的是该对象不能再指向其他对象,而不是指不能改变当前对象内部的属性值。
- 函数参数声明为final后,函数中的值不能改变
- final方法是不能被重置的方法
- final类不能被继承,其所有方法都是final的,但属性可以不是final的
信息安全与多媒体基础
1.网络安全基本概念
2.网络安全威胁
3.网络攻击
4.防火墙技术
5.加密与数字签名
- 数字签名
6.各个网络层次的安全保障
7.音频相关概念
8.图像相关概念
9.多媒体的种类
- 表示媒体:信息的表示形式,例如文字、图像、视频等
- 显示媒体(表现媒体):表现和获取信息的物理设备,例如鼠标、打印机等
10.多媒体的计算问题
除以8是为了把单位从位b转换为字节B
K,M,G的进制,一般情况下表示容量时是二进制,表示速率时是十进制
法律法规与标准化知识
1.知识产权
2.保护期限
- 作品与软件产品:
- 对于公民:署名权、修改权(作品还有保护作品完整权)这种不涉及利益的可以无限制保护
- 对于单位:若不发表,就不保护;若发表,则50年,具体为首次发表后的第五十年的12月31日
- “丧尸”:注册商标有效期10年(若注册人死亡或倒闭1年后,未转移则可注销,期满后6个月必须续注)
- “专二”:发明专利权,保护期20年(从申请日开始)(丧尸****专门犯二~)
- “设计师”:实用新型和外观设计专利权,保护期10年(从申请日开始)
3.知识产权人确定
只要有单位基本上能有收益的皆归单位所有
除了作品还能有点署名权外其他都木得
委托创作默认创作方拥有;合同约定著作权归委托方,则委托方拥有咯
4.侵权判定
5.标准的分类与标准的编号
专业英语
1.试题分析
2.答题要领
3.答题步骤
实在时间不够的话,全部选同一选项,至少能对一两个
4.专业词汇