计算机组成与结构
计算机中数据的表示
数值数据的表示
- 定点数:所有数据的小数点位置是固定的,小数点位置在数据最高位是定点小数,在最低位是定点整数,会有溢出的情况发生
- 浮点数:阶符,阶码,数符,尾数 组成, 尾数决定精度,阶码决定数据范围,最适合浮点数阶码的数字编码是移码
数的机器码表示
- 原码:符号位表示该数的符号,0正1负 。原码中分+0和-0
- 反码:符号位表示法和原码一样,正数不变,负数要取反(除掉符号位)
- 补码:正数和原码相同,负数=反码加一,最适合加减运算的数字编码
- 移码:在数X上增加一个偏移量来定义的,常用于表示浮点数的阶码部分,如果机器字长n,规定偏移量是2的n-1次方,
- 移码定义:
校验码
- 奇偶检验码:通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)偶数(偶校验)
- 海明码:在数据位中插入k个校验码,通过扩大码距来实现检错和纠错。
数据位 n
校验位 k(满足公式成立的最小值) - 循环冗余校验码(CRC):利用生成多项式的k个数据位和产生的r个校验码来进行编码,编码长度是k+r
- 数制之间转换:2,8,10,16
CPU
- 运算器:执行所有算术运算,执行所有逻辑运算并进行逻辑测试(与或非,值比较,零值测试)
- 指令寄存器(IR):CPU执行指令的时候,先把它从内存中加载到缓冲寄存器中,再送入IR暂存,指令译码器根据IR的内容来产生各种微操作指令(保存当前正在执行的一条指令)
- 程序计数器(PC):PC具有寄存信息和计数两种功能,又称为指令计数器。程序执行分为:顺序执行,转移执行。 (计算之前就要用到)
- 程序开始执行之前,将程序的起始地址送入PC,该地址在程序加载到内存时确定,因此PC的内容即是程序第一条指令的地址
- 执行指令时CPU会自动修改PC内容,确保永远是将要执行的下一条指令地址,顺序执行的话,只是简单的加一
- 转移指令时,指令地址根据当前地址加上一个向前或向后的偏移量得到,或者根据转移指令给出的直接转移地址得到
地址寄存器(AR):AR保存当前CPU所访问的内存单元的地址。是为了解决内存和CPU速度不匹配的问题
指令译码器(ID):指令分为操作码和地址码两部分,由该部分进行解析,协调硬件的运行
- 时序控制逻辑:控制指令的执行时间顺序
- 总线逻辑:为多个功能部件服务的信息通路的控制电路
- 中断逻辑:控制各种中断请求,根据优先级来对中断请求排队。逐个交给CPU执行
寄存器组:
- 专用寄存器,通用寄存器。上面的都是专用的,通用的可以给程序猿控制(提高速度,貌似没卵用)
存储系统
分类
- 读写存储器(RAM):
- 只读存储器(ROM):
- 固定只读储存器(ROM)
- 可编程的只读存储器(PROM)
- 可擦除的可编程只读存储器(EPROM)
- 闪速存储器(Flash Memory)
相联存储器 CAM 按内容寻址的存储器
Cache
Cache:高速缓冲存储器:为了解决内存和CPU速度不匹配的问题而存在
特点
1
2
3
4位于CPU和主存之间,由硬件实现
容量小,速度快(比主存快5到10倍)
内容是主存内容的副本(所以cache无法扩大主存容量)
即可存放程序又可存放数据过程:判断CPU要访问的信息是否在Cache中
- —>在的话直接对Cache存储器寻址
- —>不在的话
- 1.若是读取操作,则从主存中读数据并写入Cache中
2.若是写入操作,则把数据写入主存即可
地址映像:
- 直接映像:主存按Cache的大小分成区,每个区的块数和Cache总块数相同,块号相同的映像到Cache中同一个块号那里(多个区中的同号块映像到Cache同号块上)
- 全相联映像:主存的块调入Cache不受限制(任意位置)
- 组相联映像:介于全相联和组相联之间
- 替换算法
- 随机替换算法 RAND:随机的
- 先进先出 FIFO : 总是把最先调用的Cache替换出去
- 最近最少使用 LRU:把当前近期Cache使用次数最少的那块替换出去(先看访问,再看修改状态)
- 优化替换算法:先执行一次程序统计Cache使用情况,第二次执行程序再选择最优的算法来替换
访问方式
寻址方式访问: 直接 , 顺序 , 随机
内容方式访问:相联存储器
磁盘
- 磁盘存储器:由盘片,驱动器,控制器和接口组成。其存储容量有两种指标:格式化容量和非格式化容量。
- 非格式化容量 = 面数(磁道数/面)内圆周长*最大位密度
- 格式化容量 = 面数 (磁道数/面)(扇区数/道)*(字节数/扇区)
- 光盘存储器
1
2
3
4
5【例题】
内存按字节编址从 A5000H 到 DCFFFH的区域,其存储容量为224KB 若用16K * 4bit 的存储器芯片构成该内存,需要( 28) 片
(因为位数来计算的4bit的话,前面的单位是减半的,所以最好是使用bit来计算)
解析:DCFFFH - A5000H = 38000H (16进制) 转换成二进制 0011 1000 0000 0000 0000b
去掉十个0 单位就成了kb,然后就是2的5,6,7次方求和 得到224KB
输入输出系统
- DMA方式(最快):
无需CPU介入,流程:向CPU申请DMA传送,获取CPU允许后,DMA控制器接管系统总线的控制权;过程中不需要CPU结束回到CPU控制
总线系统
- 内部总线: 用于芯片一级的互联,分为芯片内总线和元件级总线。芯片内总线用在集成多芯片,元件级总线用于一块电路板内元器件的连接
- 系统总线:插件板一级的互联,用于构成计算机各组成部分(CPU,内存,接口)
- 外部总线:又称通信总线,用于设备一级的互联,通过该总线与其他设备进行信息与
信息安全算法
非对称加密算法(加密)
- 非对称加密的算法:使用了 私钥和公钥,私钥用于解密和数字签名,公钥用于加密和认证证书的真实性
- RSA、RC-5是非对称加密算法,其中RSA因为效率问题,一般不用与大量的明文加密
- IDEA和RC4适宜于进行数据传输加密;
- RSA基于大数定律,通常用于对消息摘要进行签名
数字证书(CA认证)
- 数字证书:CA组织会给用户颁发数字证书, 由CA的私钥进行创建数字证书,数字签名,然后接收方使用CA的公钥来检查其真实性和数字签名
(检查文件内容是否被篡改)
①B可以验证消息P确实是来源于A;
②A不能否认发送过消息P;
③B不能编造或改变消息P。
信息摘要算法
SHA-1和MD5属于信息摘要算法
系统性能评测和可靠性基础
信息安全和病毒防护
操作系统
定义
分类
- 实时操作系统
- 分时操作系统
- 区别:
- 第一点区别是交互性强弱不同,分时系统交互型强,实时系统交互性弱但可靠性要求高;
- 第二点区别是对响应时间的敏感牲强,对随机发生的外部事件必须在被控制对象规定的时间做出及时响应并对其进行处理;
- 第三点区别是系统的设计目标不同,分时系统是设计成一个多用方的通用系统,交互能力强;而实时系统大都是专用桌统。
进程管理
- 同步是进程间的直接制约:进程合作的等待问题
- 互斥是进程间的间接制约:进程竞争一个资源(进程独占)
- PV操作:
- 实现进程同步,互斥的常用方法
- P操作(获取),S:=S-1 如果S>=0,执行P操作的线程继续执行,否则阻塞
- V操作(释放),S:=S+1 如果S>0,执行S操作的线程就会继续,否则从阻塞队列中唤醒一个线程
信号量:
信号量S的物理意义是:S≥0表示某资源的可用数,若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。进程资源图(分辨死锁,线程竞争)灵活辨别是否是安全序列
- $临界资源值 = 线程数 × ( 最大需求-1) + 1$
- 不发生死锁的临界:即有一个不是阻塞,其他的线程都是只差一个资源(阻塞等待中)
1
2
3eg: 某系统中有n个并发进程竞争资源R,每个进程都需要m个R,那么至少有()个R,才能保证系统不会发生死锁
假设每个并发进程都到达临界点m-1个R,则多加一个R保存不发送死锁
则需要 n*(m-1)
- 不发生死锁的临界:即有一个不是阻塞,其他的线程都是只差一个资源(阻塞等待中)
存储管理
- 分页:可以把同一线性地址空间映射到不同的物理空间
- 分段:可以给每一个进程分配不同的线性地址空间
- 页段混合
例题
- http://www.rkpass.cn/ruankao_work_version_0103/userfile/image/xt-xtgjs-16-x-x-2264-1.png
从图中可见,页内地址的长度是13位,2^11=8192,即8K;页号部分的地址长度是11位,每个段最大允许有2^11=2048个页;段号部分的地址长度是8位,2^8=256,最多可有256个段。
逻辑地址和物理地址的转换
通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址
*10H+通用寄存器内地址,就得到了真正要访问的地址
逻辑地址和物理地址的转换:
1
某计算机系统页面大小为4K ,进程的页面变换表如下所示。若进程的逻辑地址为2D16H。该地址经过变换后,其物理地址应为( )
页面大小为4K,1K=1024B=$2^10$,4K说明页内地址占12位。
- 把逻辑地址的16进制转化成2进制:2D16(H)=0010 1101 0001 0110
- 则页号为:0010 ,从表中可以看出,页号2对应的物理块号为4 即即0100
- 则页面地址为:1101 0001 0110
- 则物理地址为:0100 1101 0001 0110 = 4D16(H)
磁盘容量
例题:
1
某文件管理系统在磁盘上建立了位示图(bitmap) ,记录磁盘的使用情况。若计算机 系统的字长为 32 位,磁盘的容量为 300GB ,物理块的大小为4MB ,那么位示图的大小需要( )个字。
磁盘容量:300GB, 物理块大小4MB
- 所以一共有: $300*1024/4$个物理块
- 位示图:用1位表示一个磁盘块,1个字是32位,表示32块物理块
- 所以需要 $300*1024/4/32=2400(字)$
处理机
- 图灵机里:有限和无限的区别就是后继码是否唯一,唯一就是有限
- 要特别注意表达式的写法,一般这种题目看读取字符结尾就可以快速选择答案
设备管理
- 磁盘读取
- SCAN 扫描算法 磁头按当前运动方向,至最大/最小再逆序折回读取(一来一返)
- CSCAN 单向扫描算法 磁头按当前运动方向,至最大/小,立马到最小/大又按初始的运动方向进行读取(两个单向)
- 注意:当柱面是一样的时候,比较扇区的顺序
例题
1 | 某磁盘的转速为10 000 转/分,平均寻道时间是 6 ms,磁盘传输速率是 20 MB/s, 磁盘控制器延迟为 0.2 ms,读取一个 4 KB 的扇区所需的平均时间约( )。 |
- 平均寻道时间:6ms
- 平均旋转延迟:3ms:
等于旋转一周时间的一半,即:10000转/分 => 1min/10000转 = 6ms/转 => 3ms/转 - 控制器延迟:0.2ms
- 传输时间:0.2ms
4KB/20MB/s = 2*10-7s = 0.2ms - 读取一个4KB的扇区所需平均时间T=6ms+3ms+0.2ms+0.2ms = 9.4ms
- 平均磁盘访问时间 = 平均寻道时间 + 平均旋转延时 + 传输时间 + 控制器延时
文件管理
位视图存储
- 概括:用某号物理块除以字长得到第几个字,容量就要再除以物理块的大小再除字长
- 系统字长x,物理块大小y,那么第z号物理块需要第z/x个字来描述(注意是字长的区间)。容量为w(G) 需要 w×1024/y/x个字来表示
文件索引
- 分直接索引项,一级间接索引项,二级间接索引项
- 公式
- a位直接,b位一级,c位二级,数据块和索引块大小是dk,每个地址项是e字节,求逻辑块号X区间:
- 直接 地址索引:0 <= X < a(0开始计数)
- 一级 地址索引:a <= X < d×1024/e×b+a
- 二级 地址索引:d×1024/e×b+a <= X < (d×1024/e)^2×c+d×1024/e×b+a
求指向的内存大小:
- 直接:直接数×数据块大小 a×d
- 一级:一级数×索引块大小/地址项大小×数据块大小 b×d/e×d
- 二级:二级数×(索引块大小/地址项大小)^2 ×数据块大小 c×(d/e)^2×d
路径问题
- 全文件名,从根目录开始加上文件名 eg: \d\d\f.txt
- 相对路径从当前路径(当前工作目录)开始的路径 eg:d\
- 绝对路径从根目录开始的路径不含文件名 eg: \d\d\
作业管理
- 调度级别:高级调度(作业调度),中级调度(交换调度),低级调度(进程调度)
- 优先级调度算法:将给出的图看成树,左上为根。同层就是并发,父子关系就体现了优先级*
软件工程基础知识/程序语言概念
程序语言概念
标识符
常见的命名对象:变量、函数数据类型
语法分析
判断程序语句的形式是否正确
- 静态语义分析:编译不通过,报错
- 动态语义分析:死循环
文法分析
上下文无关文法描述
正规式
用来描述字符
常用的函数参数传递方式
- 传值:在传值调用方式下,是将实参的值传递给形参,该传递是单方向的,调用结束后不会再将形参的值传给实参。
- 引用:在引用调用方式下,实质上是将实参的地址传递给形参,借助指针在间接访问数据方式下(或者将形参看作是实参的别名),在被调用函数中对形参的修改实质上是对实参的修改。
软件生存周期
- 可行性分析
- 需求分析:功能,性能,数据,界面
- 概要设计:分模块,定功能和关系,详细的数据库设计,数据结构设计
- 详细设计:模块的详细算法设计,数据库的物理设计
- 程序编码:
- 软件测试
- 维护:纠错维护,改错维护
软件生存周期模型
- 瀑布模型:线性顺序模型,适用于对需求有完善了解,开发周期快(怕改变)
- 原型/演化模型:通过原型来不断演化,针对实现不能完整定义需求的软件项目(快速开发一部分)
- 螺旋模型:综合了瀑布和原型的优点,增加了风险分析
- 增量模型:先发布核心产品,然后根据需求不断增量,调试,直到完善
- 喷泉模型:面向对象开发过程,以用户需求为动力,以对象为驱动的模型,使开发具有迭代性和无间隙性
- V模型:瀑布模型演化而来,强调了软件开发过程中若干个测试级别。
项目管理
启动->度量->估算->风险分析->进度安排->追踪控制
成本估算
估算策略
- 自顶向下 先确定整体时间,再按模块,分配时间
- 自底向上 按模块分析需求时间,再向上累积得出全部时间
- 差别估算 和类似项目比较
估算方法
- 专家估算 :专家一人确定
- 类推估算 :自顶向下是类似项目总体参数对比,自底向上是两个相似的功能单元对比
- 算式估算 :上面两种带有主观性,这个是为了消除主观性
成本估算模型
- IBM 基于60项目的静态模型
- Putnam(普特南)模型:动态多变量模型
- Wolverton模型:基于一个成本矩阵
- COCOMO模型:
- 基本COCOMO模型 静态单变量模型
- 中级COCOMO模型 静态多变量模型
- 详细COCOMO模型 将系统分为系统,子系统,模块三层次,
包含了中级并考虑了软件开发流程中每一步的成本驱动影响
- 详细COCOMO模型 将系统分为系统,子系统,模块三层次,
- COCOMO模型将规模视为成本的主要因素,考虑多个成本驱动因子。在后来的版本COCOMO II中,还考虑了软件开发的不同阶段,包含三个阶段性模型,即应用组装模型、.卓期设计阶段模型和体系结构阶段模型。
风险分析
- 风险识别 :
- 风险评估 :成本,进度,性能是三种典型的风险参考水准
- 风险控制 :
- 风险策略管理
- 避免风险
- 控制风险
- 分散和中和风险
- 转移风险
进度管理
- Gantt 甘特图:描述了任务的开始和结束,并行关系,但是不能体现依赖关系
- PERT技术:
- 关键路径是耗时最长的路径
1
2任务松弛时间 = 最迟开始时间 - 任务最早开始时间
最迟开始时间 = 从终点往回推,用最长时间(关键路径耗时)减去终点到该任务的时间
- 关键路径是耗时最长的路径
- 任务的延时,推迟问题。应当计算由于各种原因引起的推迟路径,计算出总时间,减去原时间,不能只看一段。
文档管理
- 针对性 分清阅读对象,来适应他们需求
- 精确性 确切的语句,不能有二义性
- 清晰性 简明,加以图表
- 灵活性 各个软件项目,规模复杂性有很多差别,但是能一律看待
人员管理
- 主程序员组 :住程序员,后备,资料员,若干程序员
- 无主程序员组 :相互平等,调动积极性,但是权责问题不明确
- 层次式程序员组 :组长,高级程序员,普通程序员。适合大型项目
软件过程管理
UP的结构
- 初始阶段: 建立商业案例,确定项目边界
- 精化阶段: 分析问题领域,建立体系结构基础
- 构建阶段: 剩余的构建和功能开发,集成为产品,此时是beta版
- 移交阶段: 测试,基于反馈调整,交付系统
敏捷开发方法
极限编程
- 将项目细分小模块,迭代编写,
- 先测试再编程
- 结对编程
- 水晶法 : 每一个项目都要有一套不同的策略和方法
- 并列争求法 :该方法使用迭代的方法,将30天一次的迭代,称为冲刺
自适应软件开发方法:
1.一个使命作为指导
2.特征视为客户的关键点
3.过程中的等待很重要
4.变化视为实际的调整,不看做改正
5.确定的交付时间,迫使开发人员考虑每一个版本的关键需求
6.风险也在考虑范围内
CMM 能力成熟度模型
五个级别:
初始级
可重复级
已定义级
定量管理级
优化级
CMMI 的任务是将已有的CMM模型结合在一起,构造为集成模型
程序流程图
简单路径:个人看法,看到选择结构就加一,初始是一个路径(输入到输出)
McCabe度量法:V(G)=m-n+2p
V(G):路径复杂度
m:所有流程线
n:所有节点数
p:该有向图的强联通分量(图是有几块组成)
ISO/IEC软件质量模型中
- 功能性:
- 可靠性: 用MTTF/(1+MTTF)来度量,其中MTTF为平均无故障时间
成熟性,容错性,易恢复性,兼容性 - 可用性:用MTBF/(1+MTBF)来度量,其中MTBF为平均失效间隔时间
- 可维护性: 用1/(1+MTTR)来度量,其中MTTR为平均修复时间
易分析性:为 判定软件修改所需的努力
易改变性:进行修改,适应环境变化所需的努力
稳定性:与修改造成的风险后果相关
易测试性:与确认修改所需的努力。 - 可移植性:
适应性、易安装性、一致性和易替换性
计算机网络与多媒体基础知识
SO/OSI七层网络体系结构
TCP/IP协议
- 物理介质(电信号的配送工具):
它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗干扰性等等。 - 链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;
- 网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;
- 传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序;
- 应用层:定义数据格式,并按照对应的格式解读数据。
应用层
HTTP与HTTPS
- HTTP 协议(超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
- HTTPS 协议:可以理解为HTTP+SSL/TLS
即 HTTP 下加入SSL层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。 - SSL(安全套接字层):SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
声音及其数字化
- 语言信号定义的频率最高值为4kHz
- 数字语音的采样频率定义为8kHz(采样频率大于语音频率的两倍确保无损)
图形和图像
- dpi:指单位面积内像素的多少。dpi越小,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。
数据结构与算法
表示时间复杂度的阶
- $O(1)$ :常量时间阶
- $O (n)$:线性时间阶
- $O(㏒n)$ :对数时间阶
- $O(n㏒n)$ :线性对数时间阶
- $O (nk)$: k≥2 ,k次方时间阶
- 以下六种计算算法时间的多项式是最常用的。其关系为:
O(1)<O(㏒n)<O(n)<O(n㏒n)<O(n2)<O(n3) - 指数时间的关系为:
O(2n)<O(n!)<O(nn) - 空间复杂度:
随着问题规模 n 的增大,算法运行所需存储量S(n)的增长率与 g(n) 的增长率相同,称S(n)(渐近)空间复杂度。
表
- 表是一种有限且有序的序列。实现的方式有两种:
- 数组-顺序存储结构(所有操作都可以用数组来实现,查找功能、在表尾插入数据删除数据很方便);
- 链表-非顺序存储结构(每个数据不必存在连续存储,插入、删除数据很方便)。
栈:
- 栈限制数据插入和删除只能在一个位置上进行,就是表的末端,即栈顶(特点先进后出);用数组和链表(单链表即可)对所有操作(只有push、pop(top)操作)都是常数时间。
- 堆排序只需要一个临时变量空间
队列:
插入(表的末尾)在一端进行,删除(表的开头)在另一端进行。特点:先进先出;用数组和链表(单链表)实现对所有的操作都是常数时间的。但需注意:用数组实现时,多用的循环数组。
循环队列
- 循环队列中元素个数计算方法是固定的,即(尾-头)%长度,但是由于是循环队列所以尾可能会小于头,所以要加上长度,使尾-头保持是正整数,然后再对长度求余,即元素个数
二叉树
- 深度:树的层数;
- 度:(对节点来说是)一个节点的孩子数;(对整棵树来说是)其节点的度的最大值。
- 完全二叉树: 将满二叉树从右向左删除节点所得的二叉树为完全二叉树。
- 如果一棵树有 n 个 叶子节点,那么 度为2的节点 就有 n -1个。如果我们知道一棵完全二叉树有 n 个叶子节点,那么它的节点数最多 2n 个。
- 对任意一棵树,设它有n个结点,这n个结点的度数之和为n-1.
任何二叉树中度为0的结点比度为2的结点多一个。
对非空二叉排序树进行中序遍历,得到递增有序的序列,先序和后序序列则不是。
- 二叉排序树中结点在左、右子树上的分布并不均匀
遍历
- 前序遍历:根节点—>左子树—>右子树
- 中序遍历:左节点—>根子树—>右子树
- 后序遍历:左节点—>右子树—>根子树
例题
表达式”$X=A+B(C-D)/E$”的后缀表示形式是$XABCD-E/+=$
图
有向图顶点的度等于它的入度和出度之和
排序算法特点总结
UML与面向对象(设计模式)
面向对象的基本概念
- 多态:同一操作作用于不同的对象,可以有不同的解释(直接调用方法,动态绑定)
- 多重继承:一个类有多个父类。多重继承可能出现二义性的成员(混淆)
结构化分析和设计
- 分析阶段:主要关注系统的行为(应该做什么)
- 结构化方法:数据流图—>系统结构图—>数据库/数据文件
- 接口设计的任务:描述软件与外部环境之间的交互关系,软件内模块之间的调用关系
UML常见的图
类图
类图(Class diagram):是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。
序列图(顺序图)
着重体现对象间消息传递的时间顺序
状态图
- 概念:描述对象的所有状态以及事件发生而引起的状态之间的转移
- 方式:
1
2
3
4
5起始点:实心圆
状态之间的转换:使用开箭头的线段
状态:圆角矩形
判断点:空心圆
一个或多个终止点:内部包含实心圆的圆
活动图
- 概念:描述满足用例要求所要进行的活动以及活动时间的约束关系
通信图
- 概述:描述的是对象和对象之间的关系,即一个类操作的实现
- 对象:框名称中带有
:
表示是一个对象 - 消息:对象连线上面的箭头所指的标识是对象之间通信的消息
高内聚低耦合
模块之间的连接方式
- 内容耦合(Content Coupling)
如果发生下列情形,两个模块之间就发生了内容耦合。
一个模块直接访问另一个模块的内部数据;
一个模块不通过正常入口转到另一模块内部;
两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
一个模块有多个入口。 公共耦合(Common Coupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。外部耦合(External Coupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。控制耦合(Control Coupling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。印记耦合(Stamp Coupling)
如果一组模块通过参数表传递记录信息,就是标记耦合。它是某一数据结构的子结构,而不是简单变量。数据耦合(Data Coupling)
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。非直接耦合(Nondirect Coupling)
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。
设计模式
命令(Command)模式
- 概念:将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
- 适用:
①抽象出待执行的动作以参数化某对象,此模式是过程语言中的回调(callback)机制的一个面向对象的替代方式;
②在不同的时刻指定、排列和执行请求;
③支持取消操作;
④支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍;
⑤用构建在原语操作上的高层操作构造一个系统。
责任链(Chain of Responsibility)
- 概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
- 适用:
①有多个的对象可以处理一个请求,哪个对象处理该请求在运行时刻自动确定;
②在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;
③可处理一个请求的对象集合应被动态指定。
观察者(Observer)模式
- 概念:一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。
- 特点:类应该对扩展开放,对修改关闭
抽象主题(Subject):
抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。具体主题(ConcreteSubject):
将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做具体被观察者(Concrete Observable)角色。抽象观察者(Observer):
为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。具体观察者(ConcreteObserver):
存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态 像协调。如果需要,具体观察者角色可以保持一个指向具体主题对象的引用。
策略(Strategy)模式
- 概念:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。
- 适用:
①许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法;
②需要使用一个算法的不同变体。例如,定义一些反应不同空间的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式;
③算法使用客户不座该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构;
④一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,将相关的条件分支移入它们各自的Strategy类中,以代替这些条件语旬。
生成器(Builder)模式
- 概念:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 适用:
①当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
②当构造过程必须允许被构造的对象有不同的表示时。
工厂方法(Factory Method)模式
- 概念:定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。
- 适用:
①当一个类不知道它所必须创建的对象的类的时候;
②当一个类希望由它的子类来指定它所创建的对象的时候;
③当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
原型(Prototype)模式
- 概念:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
- 适用:
①当一个系统应该独立于它的产品创建、构成和表示时;
②当要实例化的类是在运行时刻指定时,例如,通过动态装载;
③为了避免创建一个与产品类层次平行的工厂类层次时;
④当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
单例(Singleton)设计模式
- 概念:是一种创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问这个唯一实例的全局访问点。
- 适用:
①当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;
②当这个唯一实例应该是通过子类化可扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时。
装饰器 (Decorator) 模式
- 概念:用于将一个对象加以包装以提供一些额外的行为
外观 (Facade) 模式
- 概念:将一系列对象加以包装以简化其接口
数据库
安全措施
- 权限
- 视图表:通过建立用户视图,用户或应用程序只能通过视图来操作数据,保证了视图之外的数据的安全性。
- 数据文件加密
关系代数
- 自然连接:是一种特殊的等值连接
修改表结构
- 增加字段:ALTER TABLE 表名 ADD 字段名 字段类型;
- 删除字段:ALTER TABLE 表名 DROP COLUMN 字段列名;
- 增加约束:ALTER TABLE 表名 ADD CHECK(字段名<>’’)或者 ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);
- 删除约束:ALTER TABLE 表名 DROP CONSTRAINT 约束名;
- 修改字段缺省值:ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值;
- 修改字段数据类型:ALTER TABLE 表名 ALTER COLUMN 字段名TYPE l类型;
- 重命名字段:ALTER TABLE 表名 RENAME COLUMN 旧字段名TO 新字段名;
- 重命名表:ALTER TABLE 表名 RENAME TO 新表名。
软测与软件项目开发管理
软件需求分析
软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类,前者常用工具为数据流图( DFD )、数据字典( DD )、判定表、判定树等。
白盒测试和黑盒测试
白盒测试:路径覆盖就是让程序中所有可能执行的路径都执行一遍。
系统可靠度
- 例题
- 串联部件的可靠度=各部件的可靠度的乘积
- 并联部件的可靠度=1-部件失效率的乘积
- 图中的系统是先并后串,先求出三个R并联可靠度为$1-(1-R)*3$
- ,然后求出两个R并联可靠度为$1-(1-R)*2$
- 最终整个系统的可靠度是两者之积$(1-(1-R)3)(1-(1-R)*2)$
知识产权
著作权
- 通过合约约定的项目,如果没有明确约定软件著作权的归宿,则著作权由甲方享有
专利
- 同一发明创造只能被授予一项专利
软件危机
软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。