上午题
一 计算机系统知识 5~6'
1、计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。CPU是硬件系统的核心。
2、CPU的功能:
(控制器) 程序控制、操作控制、时间控制
(运算器) 数据处理
此外,CPU 还需要对系统内部和外部的中断(异常)做出响应,进行相应的处理。
3、CPU组成:主要由运算器、控制器、寄存器组和内部总线等部件组成。
1)运算器:由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器等组成
①算术逻辑单元(ALU)
②累加寄存器(AC):为 ALU 提供一个工作区。
③数据缓冲寄存器(DR):作为CPU和内存、外部设备之间数据传送中转,操作速度上的缓冲;在单累加器结构的运算器中,数据缓冲寄存器还可兼作为操作数寄存器。
④状态条件寄存器(PSW)。
2)控制器:不仅要保证程序的正确执行,而且要能够处理异常事件。
一般包括指令控制逻辑、时序控制逻辑、总线控制還辑和中断控制逻辑等几个部分。
①指令寄存器(IR)。保存当前cpu执行的指令,对用户是完全透明的。
②程序计数器(PC)。
寄存信息和计数两种功能
顺序执行,修改的过程通常只是简单地对PC加1
转移执行,转移指令,跟踪地址指令的寄存器
为从内存读取指令操作码,要将程序计数器
的内容送到地址总线上
程序员可访问
③地址奇存器(AR)。AR 保存当前 CPU 所访问的内存单元的地址。
④指令译码器(ID)。指令包含操作码和地址码两部分,对指令中的操作码字段进行分析解释,识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
3)寄存器组 :分为专用寄存器和通用寄存器。
4、进制转换
5、容量计算
6、数据表示:对阶,小阶向大阶对齐,浮点数(尾数)向右移
原码:最高位表示数的符号,其他表示数值,0为正,1为负
反码:
正数的反码和原码相同
负数的反码是由其原码的符号位不变,其余位按位取反
补码:
正数的补码和原码相同
负数的补码是由其原码的符号位不变,其余位按位取反,再在最低位加1
7、寻址
立即寻址。操作数就包含在指令中。
直接寻址。操作数存放在内存单元中,指令中直接给出操作数所在存储单元的地址。
寄存器寻址。操作数存放在某一寄存器中,指令中给出存放操作数的寄存器名。
寄存器间接寻址。操作数存放在内存单元中,操作数所在存储单元的地址在某个寄存器中。
间接寻址。指令中给出操作数地址的地址。
相对寻址。指令地址码给出的是一个偏移量(可正可负),操作数地址等于本条指令的地址加上该偏移量。
变址寻址。操作数地址等于变址寄存器的内容加偏移量。
寻址方式获取的操作数的速度:立即寻址》》寄存器寻址》》直接寻址》》寄存器间接寻址》》间接寻址》》相对寻址==变址寻址
8、校验码
奇偶校验码:只能检错,不能纠错
海明码:利用奇偶性来检错和纠错的校验方法。
设数据位是n位,校验位是k位,则n和k必须满足以下关系:
循环冗余校验码:可以检错但不能纠错。
9、
10、流水线计算
1)流水线周期:指的是流水线执行过程中最长的一段。
2)流水线执行时间:指令全部的执行时间 + (n - 1)x 流水线周期△t
指令全部的执行时间=第1条指令的执行时间
3)流水线 吞吐率
,指的是单位时间内,流水线所完成的指令数量。
吞吐率 = 指令条数 / 流水线执行时间。
最大吞吐率 = 1 / 流水线周期△t。
4)流水线加速比 = 不使用流水线执行时间 / 使用流水线执行时间
11、Cache 和主存之间的交互功能全部由硬件实现。
Cache(SRAM 静态随机存储器)
主存储器 (DRAM 动态随机存储器)
Cache 存储器部分用来存放主存的部分拷贝(副本)信息。
Cache地址映像:
直接:主存的块与Cache块的对应关系是固定。
全相联
组相联
冲突少顺序:全相联–》组相联–》直接映像
Cache 容量越大,则命中率越高,随着 Cache 容量的增加,其失效率接近 0%(命中率遂渐接近 100%)。
12、 IO控制方式
1)程序查询方式:
① CPU和I/O(外设)只能串行工作
CPU需要一直轮询检查,长期处于忙等状态。CPU利用率低。
② 一次只能读/写一个字
③ 由CPU将数据放入内存
2)中断驱动方式:
① I/O设备通过中断信号主动向CPU报告I/O操作已完成
② CPU和I/O(外设)可并行工作
③ CPU利用率得到提升
④ 一次只能读/写一个字
⑤ 由CPU将数据放入内存
3)直接存储器方式(DMA):
① CPU和I/O(外设)可并行工作
② 仅在传送数据块的开始和结束时才需要CPU的干预
只需要CPU在过程开始启动(即向设备发出“传送一块数据”的命令)与过程结束(CPU通过轮询或中断得知过程是否结束和下次操作是否准备就绪)时的处理。
③ 由外设直接将数据放入内存
④ 一次性读写的单位为“块”而不是字
CPU是在一个总线周期结束时响应DMA请求的。
13、 中断方式
1. 中断向量:提供中断服务程序的入口地址
2. 中断响应时间:发出中断请求开始,到进入中断服务程序
3. 保存现场,返回来执行源程序
中断处理方法。中断处理方法有中断信号线法、中断软件查询法、菊花链法、总线仲裁法及中断向量表法。
中断优先级控制。为了便于实现多级中断嵌套,使用堆栈
来保护断点和现场最有效。
14、 微机中的总线分为数据总线、地址总线和控制总线3类。系统总线
有时也称内总线
,目前比较流行的内总线如下(前3个)。
(1) ISA(Industry Standard Architecture)总线:它是工业标准总线,向上兼容更早的 PC总线,在PC总线62个插座信号的基础上,再扩充另一个具有36个信号的插座构成ISA总线。它主要包括24条地址线、16条数据线等。
(2) EISA(Extended Industry Standard Architecture)总线:它是在ISA 总线的基础上发展起来的 32 位总线。该总线定义32位地址线、32位数据线,以及其他控制信号线、电源线等共196个连接点。EISA 总线的传输速率达33MB/s。该总线利用总线插座与 ISA 总线相兼容。
(3) PCI(Peripheral Component Interconnection)总线:这是当前最流行的总线之一,是由Intel 公司推出的一种局部总线。PCI总线是目前微型机上广泛采用的内总线,采用并行传输方式。PCI总线有适于32位机的124个信号的标准和适于64位机的188个信号的标准。PCI总线的传输速率至少为133Mb/s,64位PCI总线的传输速率为266Mb/s。PCI总线的工作与CPU的工作是相互独立的,也就是说,PCI总线时钟与处理器时钟是独立的、非同步的。PCI总线上的设备是即插即用的。接在PCI总线上的设备均可以提出总线请求,通过PCI管理器中的仲裁机构允许该设备成为主控设备,主控设备与从属设备间可以进行点对点的数据传输。PCI总线能够对所传输的地址和数据信号进行奇偶校验检测。
。。。。。。。。。。。略
15、
对称密钥算法(私钥、私有密钥算法):适合大量明文信息。
1. DES
2. 3DES
3. RC-5
4. IDEA
5. AES
6. RC4
非对称密钥(公钥、公开密钥加密)算法:
1. RSA
2. ECC
3. DSA
Hash函数、MD5摘要算法 128位、SHA-1安全散列算法
验证对方的身份,防止假冒【数字签名、数字证书】
防止数据被窃听 【加密】
防止发送方否认发送过数据 【数据签名】
防止发送的报文被篡改 【摘要】
用发送方的私钥进行签名,发送方的公钥进行验证。
16、 计算机可靠性
(1)串联系统:可靠性R=R_1 R_2 ...R_n
,失效率λ=λ_1+λ_2+...+λ_n
。
(2)并联系统:可靠性R=1-(1-R_1)(1- R_2)...(1-R_n)
,失效率
二 程序设计语言 6′
1、编译程序和解释程序
解释器:翻译源程序时不生成独立的目标程序。
编译器:翻译时将源程序翻译成独立保存的目标程序。
机器上运行的是与源程序等价的目标程序。
源程序和编译程序都不再参与目标程序的运行过程。
解释程序和源程序要参与到程序的运行过程中。
2、数据类型:
①便于为数据合理分配存储单元
②便于对参与表达式计算的数据对象进行检查
③便于规定数据对象的取值范围及能够进行的运算
3、
传值调用:
将实参的值传递给形参,实参可以是变量、常量和表达式。
不可以实现形参和实参间双向传递数据的效果。
传引用(地址)调用:
将实参的地址传递给形参,形参必须有地址,实参不能是常量(值),表达式。
可以实现双向传递数据。
4、
编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
解释方式:词法分析、语法分析、语义分析
编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换即词法分析、语法分析、语义分析是必须的。
编译器方式中中间代码生成和代码优化不是必要,可省略。
即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码。
5、符号表
不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
6、
词法分析:分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。
输入:源程序 输出:记号流
语法分析:对各条语句的结构进行合理性分析,分析程序中的句子结构是否正确。
输入:记号流 输出:语法(分析)树
语义分析:是进行类型分析和检查。
输入:语法树
语法分析可以发现程序中的语法错误,但不能发现程序中所有的语义错误。
语义分析可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现。
目标代码生成阶段的工作与具体的机器密切相关。
寄存器的分配处于目标代码生成阶段。
中间代码生成
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器)。
可以将不同的高级程序语言翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。
7、正规式
8、
有限自动机是词法分析的一个工具,它能正确地识别正规集。
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不唯一的
正确识别:最后停留在终态,ε为空
9、大多数程序设计语言的语法规则用 上下文无关文法 描述即可。
10、中缀、后缀 —— 栈
优先级:()> 逻辑与∧ 逻辑或∨
三 数据结构 5'
1、大O表示法
递归式时间复杂度 = 递归的次数 x 递归的时间复杂度
空间复杂度=递归调用的深度
2、递归式主方法
3、
高度为h的m叉树至多结点数为( m^h − 1 ) / ( m − 1 )
具有n个结点的m叉树的最小高度为 ⌈ l o g m ( n ( m − 1 ) + 1 ) ⌉
具有n个结点的二叉树有种
顺序存储需要维护结点和左、右孩子的关系:结点编号为n,则左孩子为 2n,右孩子为2n+ 1。
链式存储有二叉链表和三叉链表。对于n个结点的二叉树,二叉链表的空指针为n + 1
,三叉链表的空指针为n + 2
。
4、
深度优先搜索遍历借助栈结构实现。不唯一,DFS,先序遍历。
空间复杂度:O(n),时间复杂度:O(e);
广度优先搜索遍历借助队列结构实现。不唯一,BFS,层序遍历。
空间复杂度:O(n),时间复杂度:O(e);
5、带权连通无向图
- 构造最小生成树的算法有普里姆算法和克鲁斯卡尔算法两种,
- prim:O(v2)边稠密;从顶点开始,找集合边最小;
- (贪心算法)kruskal:不断选择未被选的最小权值边,O(eloge),边稀疏;
- 求最短路径的算法有两种:
- (1)(贪心算法)Dijkstra:某一顶点到其他顶点的最短路径(单源),O(v2)
- (2)(动态规划)Floyed:适用所有顶点间最短路径和带权无向图,
-
时间复杂度:O(v3)空间复杂度:O(n2)
拓扑排序:AOV网,关键路径--AOE网
6、
⭕️ 不稳定算法 4个:选些雪块堆
简单选择、希尔、快排、堆排
⭕️ 移动鸡
元素移动次数与初始序列无关:基数排序
⭕️ 比较 跪着选对
元素比较次数与初始序列无关:归并 折半 简单选择 堆排
⭕️ 时间 鬼计选对
时间复杂度与初始序列无关:归并 基数 简单选择 堆排
⭕️ 快速冒泡 有糖
排序趟数与初始序列有关
⭕️ 平均复杂度最快算法:快些堆
log2n
7、出栈顺序,卡特兰数:
四 知识产权 2~3′
1、
著作权 又称版权:是指作者对其创作的作品享有的人身权和财产权。
人身权:发表权、署名权、修改权、保护作品完整权。(认罚数休宝)
仅发表权有时间性,终生+死亡后50年。另外三个永永远远。
财产权包括作品的使用权和获得报酬权。
2、
知识产权的地域性 —— 只能在其本国领城内受法律保护
。
商标权:我国商标权的保护期限自核准注册之日起10年内有效,但可以根据其所有人的需要无限地延长权利期限,在期限届满前6个月内申请续展注册,每次续展注册的有效期为10年,续展注册的次数不限。如果商标权人逾期不办理续展注册,其商标权也将终止。商业秘密受法律保护的期限是不确定的,该秘密一旦被公众所知悉,即成为公众可以自由使用的知识。
3、计算机软件著作权
主体是指享有著作权的人,根据《中华人民共和国著作权法》和《计算机软件保护条例》规定,主体包括公民、法人和其他组织。
客体是受保护的对象,著作权法保护的计算机软件是计算机程序及其有关文档。计算机程序包括源程序和目标程序。文档一般以程序设计说明书、流程图和用户手册等表现。
4、计算机软件著作权的权利
- 计算机软件的著作人身权
《中华人民共和国著作权法》规定,软件作品享有两类权力,一类是软件著作权的人身权(精神权利);另一类是软件著作权的财产权(经济权利)。《计算机软件保护条例》规定,软件著作权人享有发表权和开发者身份权,这两项权力与软件著作权人的人身权是不可分离的。- 发表权
- 开发者身份权(署名权)。开发者的身份权不随软件开发者的消亡而丧失,且无时间限制。
- 计算机软件的著作财产权
使用权、复制权、修改权、发行权、翻译权、注释权、信息网络传播权、出租权、使用许可权和获得报酬权 - 计算机软件著作权的保护期
根据《著作权法》和《计算机软件保护条例》的规定,计算机软件著作权的权利自软件开发完成之日起产生,保护期为50年。保护期满,除开发者身份权外,其他权利终止。
5、软件盗版 行为是指任何未经软件著作权人许可,擅自对软件进行复制、传播,或以其他方式超出许可范围传播、销售和使用的行为。
6、《计算机软件保护条例》是国务院颁布的,用来保护软件著作权人的利益。
7、
职务开发软件著作权的归属:
根据《计算机软件保护条例》规定,可以得出这样的结论:当公民作为某单位的雇员时,如其开发的软件属于执行本职工作的结果,该软件著作权应当归单位享有。若开发的软件不是执行本职工作的结果,其著作权就不属单位享有。
委托开发的软件著作权归属:
托开发软件作品著作权关系的建立,一般由委托方
与受委托方
订立合同而成立。
《计算机软件保护条例》第十一条规定:“接受他人委托开发的软件,其著作权的归属
由委托者与受委托者签订书面合同约定
;无书面合同
或者合同未作明确
约定的,其著作权
由受托人
享有。
8、商业秘密:《反不正当竞争》中商业秘密定义为“指不为公众所知悉的、能为权利人带来经济利益、具有实用性并经权利人采取保密措施的技术信息和经营信息”。
9、
专利:
专利申请人及其代理人在办理各种手续时都应当采用书面形式。一份专利申请文件只能就一项发明创造提出专利申请,即“一份申请一项发明”原则。两个或者两个以上的人分别就同样的发明创造申请专利的,专利权授给最先申请人。同一天申请协商。
五 数据库 6′
1、根据模型应用的不同目的,可将数据模型分成:
①概念数据模型:从信息世界中抽象的数据模型
②结构数据模型:从计算机世界中抽象出的DBMS支持的数据模型。主要分为层次、网状、关系和面向对象模型。
关系模型:二维表格结构
2、数据库的三级模式结构
概念模式/模式——基本表
外模式/用户模式/子模式——视图
内模式/存储模式——存储文件
3、数据库的两级映像
模式/内模式映像:实现了概念模式与内模式转换。—— 物理独立性
外模式/模式映像:实现了外模式与概念模式转换。—— 逻辑独立性
4、关系模型基本术语
关系:一个关系就是一张二维表。
元组:表中一行即为一个元组。对应存储文件中的一个记录值。
属性:表中的列。相当于记录中的数据项或字段值。
域:属性取值范围。
关系模式:对关系的描述。格式:关系名(属性名1,属性名2......)
码=键
候选码/候选键:属性或属性集合,唯一地表示一个元组。
主键/主码:候选码中选择一个。
主属性:包含在任何候选码中的属性。否则为非主属性。
外码/外键:如果一个属性不是关系的主键却是另一个关系的主键。
全码:所有属性组是候选码。
超码:一个包含码的属性集。
5、关系模型
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。
关系完整性约束:
①实体完整性:主码的值不能为空或部分为空,即主属性不能取空值。
②参照完整性:
③用户自定义完整性
6、笛卡尔积:
7、关系代数
集合运算
专门的关系运算符:选择 投影 连接 除
连接
θ连接、等值连接:在基于笛卡尔积的基础上选择满足条件的结果。
自然连接:除去重复属性的等值连接。
外连接:
8、
投影、选择转SQL语言
select 属性 from 表名/关系 where 条件
笛卡尔积转SQL语言
select R.A,R.B,R.C,S.A,S.B,S.C from R,S
自然连接转SQL语言
9、SQL语言
建立数据库:create database 数据库名
建立基本表:create table 表名
(列名 数据类型 完整性约束,
......,
.......
)
not null,unique,not null unique,default
primary key(属性)
foreign key(id) referencces 表名(id)
check (条件)
增加列:alter table 表名 add 列名 类型
修改列:alter table 表名 alter column 列名 新类型
删除列:alter table 表名 drop column 列名
删除基本表:drop table 表名
insert 插入语句:
①直接插入元组值:insert into 表名(列名序列) values (元组值)
②插入一个查询的结果值:insert into 表名(列名序列) select 查询语句
delete from 表名 where 条件
update 表名
set 列名=值,...
where 条件
select (distinct 去除重复行) 列名
from 表名
where 行条件
group by 列条件
having 组条件
order by 列名 asc升序/desc降序
- 选择查询
- 条件表达式 where 条件
- select 列名 as '别名' from 表名
- 字符串匹配:(not) like '匹配串'
- %(百分号)代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串,如 acb、addgb、ab 等都满足该匹配串。
- _(下划线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串,acb、afb 等都满足该匹配串。
- 聚合函数 avg count min max
- 表的连接查询
- select 列名 from 表1,表2 where 连接条件
- 查询结果的并交差
- union intersect except
10、SQL访问控制
授权:grant 权限 on 对象类型 对象名 to 用户
收回权限:revoke 权限 on 对象类型 对象名 from 用户
11、视图:从一个或多个基本表或视图中导出的表,是一个虚拟表
create view 视图名(列表名)
as select 查询子句
[with check option];
12、索引:改变的是内模式。
13、关系模式:R<U,F>
R关系名,U属性,F为属性组U上的一组数据依赖。A→B:A决定B,B依赖于A
14、关系数据库规范化 函数依赖
15、规范化
1NF
若关系模式R的 每一个分量是不可再分的数据项,则关系模式R属于第范式(1NF)
存在问题 : 冗余 、修改异常、 插入异常 、 删除异常
2NF
若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF
(即当 1NF消除了非主属性对码的部分函数依赖,则称为2NF )
3NF
若关系模式R(U, F)中不存在这样的码X、属性组Y及非主属性Z(Z不属于y),
使得X→Y,Y→X,Y→Z成立,则称关系模式R∈3NF
(即当 2NF消除了非主属性对码的传递函数依赖,则称为3NF )
3NF的模式必是2NF的模式。
产生冗余和异常的两个重要原因是部分依赖和传递依赖。
16、模式分解 ——无损连接性,保持函数依赖
17、E-R图转换为关系模式
对于联系:
一对一 : 联系 作为一个属性 随便加入 哪个实体中
一对多 : 联系可以单独转换为一个关系模式, 也可 以 作为一个属性加入到N端中(N端实体包含1端的主键)
多对多 : 联系必须单独转换为一个关系模式(且此关系模式应该包含两端实体的主键)
18、数据库的控制功能——事务管理
原子性 :事务的所有操作在数据库中 要么全做,要么全都不做
一致性 :数据不会因为事务的执行而被破坏
隔离性 :一个事务的 执行不能被 其他事务 干扰
持久性 :事务一旦提交 ,对数据库中数据的 改变必须是永久 的,
即便系统出现故障时也是如此
19、数据库的保存与恢复
恢复的基本原理是“建立数据冗余”(重复存储) 。建立冗余数据的方法是进行 数据转储 和 登记日志文件 。
20、并发控制技术——封锁
排他锁(X锁) :若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
共享锁(S锁) :若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。
21、分布式数据库
分片 透明:用户或应用程序 不需要知道逻辑上访问的表具体是怎么分块存储的
复制 透明:采用复制技术的分布方法,用户不需知道数据是复制到哪些节点,如何复制的
位置 透明:用户无须知道数据存放的物理位置
逻辑 透明:用户或应用程序 无需知道局部场地使用的是哪种数据模型
共享 性:指数据存储在 不同的结点数据共享
自治 性:指 每结点对本地数据都能独立管理
可用 性:指 当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
分布 性:指 数据在不同场地上的存储
六 面向对象 3~4'
1、
对象 :基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体 。
消息 : 对象之间进行通信的一种构造称为消息
类 :是对象的抽象 ,定义了一组大体相似的对象结构,定义了 数据 和 行为 。包括:
实体类(对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类 )
边界类(系统内部与系统外部的业务主角之间进行 交互建模 的类)
控制类(对用例特有的控制行为进行建模 ,被动出现的特定行为的类)
继承 : 父类 和 子类 之间 共享数据和方法 的机制。是类之间的一种关系
多态 :不同的对象收到 同一个消息时产生完全不同的反应 。包括:
参数多态(不同类型参数多种结构类型,最纯的多态)
包含多态(父子类型关系,子类型化)
过载多态(类似于重载,一个名字不同含义,上下文)
强制多态(强制类型转换)
多态由继承机制支持
覆盖 :子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。即 在子类中重定义一个与父类同名同参的方法
函数重载 : 与覆盖要区分开 ,函数重载与子类父类无关,且 函数是同名不同参数
封装 :一种 信息隐蔽技术 ,其目的是 使对象的使用者和生产者分离 ,也就是使其他开发人员 无需了解所要使用的软件组件内部的工作机制,只需知道如何使用组件
静态类型 是指一个对象的类型 在编译时 就 确定
动态类型 指对象类型在 运行时 才能 确定
静态绑定 (静态分配)是基于静态类型的,在程序 执行前方法已经被绑定
动态绑定 是基于动态类型的, 运行时 根据变量实际引用的对象类型 决定调用哪个方法 , 动态绑定支持多态和继承。
2、面向对象设计的原则
(1) 单一责任原则 (Single Responsibility Principle,SRP)。就一个类而言,应该仅有一个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
每个类只负责自己的事情,而不是变成万能的。
(2)开放-封闭原则 (Open & Close Principle,OCP)。软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。对扩展开放,修改关闭。
扩展新类而不是修改旧类。
(3)里氏替换原则 (Liskov Substitution Principle,LSP)。子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
继承父类而不去改变父类。
(4)依赖倒置原则 (Dependence Inversion Principle,DIP)。抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
(5)接口分离原则 (Interface Segregation Principle,ISP)。不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。即:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。
每个类都有自己的专用接口,而不是建立万能接口。
(6) 重用发布等价原则 (Release Reuse Equivalency Principle,REP)。重用的粒度就是发布的粒度。
(7)共同封闭原则 (Common Closure Principle,CCP)。包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
(8)共同重用原则 (Common Reuse Principle,CRP)。一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
(9) 无环依赖原则 (Acyclic Dependencies Principle,ADP)。在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的五环图形。
(10)稳定依赖原则 (Stable Dependencies Principle,SDP)。朝着稳定的方向进行依赖。
(11)稳定抽象原则 (Stable Abstractions Principle,SAP)。包的抽象程度应该和其稳定程度一致。
3、面向对象分析 :是为了 确定问题域,理解问题 。包含五个活动:
认定对象 (按自然存在的实体 确定对象 )
组织对象 (分析对象关系, 抽象成类 )
对象间的相互作用 (描述各对象 在 应用 系统中的关系 )
确定对象的操作 (操作,如创建增加删除等)定义对象的内部信息 (属性)
4、面向对象设计 :是设计分析模型和实现相应源代码在目标代码环境中这种源代码可被执行。 设计问题域的解决方案。
识别类及对象,定义属性,定义服务,识别关系,识别包
5、面向对象 程序设计 :用面向对象 程序 设计 语言实现设计方案
6、面向对象 测试 :与普通测试步骤并无不同。可分为四个层次:
算法层 ( 测试 类中定义的 每个方法 ,类似 单元测试 )
类层 ( 测试同一个类中所有方法与属性 的 相互作用 ,特有的模块测试)
模板层 (测试一组 协同工作的类 之间的 相互作用 ,类似集成测试)
系统层 (类似 系统测试 )
七 UML 统一建模语言 3~4'
1、
UML的 基本构造块包括 :
事物 (对模型中最具有代表性的成分的抽象)
关系 (把事务结合在一起)
图 (聚集了相关的事物)
UML中有4种关系:依赖、关联、泛化和实现
1)依赖 :一个事物的语义依赖于另一个事物的语义的变化而变化
A依赖B,依赖事物A,独立事物B。
2)关联 :是一种 结构关系 ,描述了一组链,链是对象之间的连接。
角色;多重度
分 为 组合 和 聚合 ,都是 部分和整体 的关系 ,其中 组合事物 之间 关系更强 。
聚合 空心:
部分和整体的生命周期不一致,整体消失了,部分仍然存在部分可以脱离整体存在。
组合 实心:
部分和整体的生命周期一致,整体消失了,部分也消失了,部分不可以脱离整体而存在。
两个类之间的关联,实际上是两个类所扮演角色的关联,
因此,两个类之间可以有多个由不同角色标识的关联。
关联类
3)泛化 : 一般 / 特殊 的关系, 子类和父类 之间的 关系。子类继承父类,父类泛化子类。
4)实现 :一个类元指定了另一个类元保证执行的契约。一般实现接口。
2、系统静态建模
1)类图:一组对象、协作、接口之间的关系。
权限修饰符 +public;- pricate;# protected;~ package
类图用于对系统的静态设计视图建模。通常以下述3种方式之一使用类图。
(1)对系统的词汇建模。(2)对简单的协作建模。(3)对逻辑数据库模式建模。
2)对象图:在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链。
3)用例图: 静态图 ,展现了一组用例、参与者以及它们之间的关系。
参与者 :是人、硬件或其他系统可以扮演的 角色
用例 :是参与者完成的一系列 操作
用例之间的 关系 : 包含 ( 必须要做 )、 扩展 ( 可做可不做 )、 泛化
用例图:对系统需求建模;对系统语境建模。
3、系统动态建模
1)序列图( 顺序图 ):动态图 ,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互。
调用 / 同步消息 :进行阻塞调用,调用者中止执行,等待控制权返回。需要等待返回消息,用 实心三角箭头 表示
异步消息 :发出消息后继续执行,不引起调用者阻塞,也不等待返回消息,由 空心箭头 表示
返回消息 :由 从右到左 的 虚线箭头 表示
实现方法,看实线指向自己,如果指向自己就是实现方法。
2)通信图( 协作图 ) : 只强调事件之间的通信 ,而且也没有固定的画法规则, 和顺序图统称为交互图.
3)状态图:一个对象
格式:事件【监控条件】/动作
4)活动图:从一个活动到另一个活动的流程。
活动的分岔和汇合线是一条水平粗线
每个分岔的分支数代表了可同时运行的线程数。活动图中能够并行执行的是在一个分岔粗线下的分支上的活动。
4、物理建模
1)构件图(组件图):静态图 ,为系统 静态实现视图 ,展现了一组构件之间的组织和依赖
2)部署图:静态图,部署图物理模块的节点分布,软硬件之间的关系,在实施阶段使用。
八 设计模式 4'
1、
创工厂类,原生单抽(创工厂累就去原神单抽)
结构对象:傣族乔氏享外装
行为类:行嘞芥末
行为对象:邢队泽明爹终被冠状测方
2、创建型设计模式
- 创建型模式关注点 “ 怎样创建出对象 ? ”
- “ 将对象的创建与使用分离 ” 。
- 降低系统的耦合度
- 使用者无需关注对象的创建细节
- 对象的创建由相关的工厂来完成; (各种工厂模式)
- 对象的创建由一个建造者来完成; (建造者模式) 【建造者会让用户指定一些细节】
- 对象的创建由原来对象克隆完成; (原型模式)
- 对象始终在系统中只有一个实例; (单例模式)
- 核心本质
- 实例化对象不适用new,用工厂方法代替。
- 将选择实现类,创建对象统一管理和控制,从而讲调用者跟我们实现类解耦。
1)单例模式:一个单一的类, 负责创建自己的对象, 同时确保系统中只有单个对象被创建 。
特点:
单例特点某个类只能有一个实例;
(构造器私有)它必须自行创建这个实例;
(自己编写实例化逻辑)它必须自行向整个系统提供这个实例;
(对外提供实例化方 法)
2)引入:简单工厂模式(静态工厂模式)
3)工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展。
4)抽象工厂模式:不可以增加产品,可以增加产品族。
九 操作系统 6'
1、
2、前趋图 有向无环图
几个箭头几个信号量,左v+ 右p-
p入v出
3、三态模型
4、进程资源图
5、互斥与同步
p申请,v释放
同步在外,互斥在内
生产者与消费者问题
6、死锁避免 —— 银行家算法
7、死锁计算问题
系统内有n个进程,每个进程都需要R个资源:
那么其 发生死锁 的 最大资源数 为 n*(R-1) 。
其 不发生死锁 的 最小资源数 为 n*(R-1)+1
8、线程
传统的进程有两个属性:可拥有资源的独立单位,可独立调度和分配的基本单位
引入线程后,线程是独立调度的最小单位 ,进程是拥有资源的最小单位
线程可以共享进程的公共数据、全局变量、代码、文件等资源,
但不能共享线程独有的资源,如线程的栈指针等标识数据
9、页内存储管理
10、段页式存储管理
11、单缓冲区
双缓冲区
12、移臂调度算法 / 磁盘调度算法
13、旋转调度算法
最少时间 = (旋转时间+处理时间)*总处理记录数
最长时间 = (旋转时间+处理时间)+(总数-1)*(旋转时间+处理时间+(旋转时间*(总记录数-2)))
(磁道时间*磁道个数+延迟时间+传输时间) * 总块数
14、多级索引结构
15、树形文件目录
相对路径 :是从 当前路径开始 的路径
绝对路径 :是从 根目录开始 的路径,前没有\,后有\
全文件名 = 绝对路径 + 文件名 。
十 结构化开发 3~4'
1、系统设计的基本原理
抽象 (重点说明本质方面,忽略非本质方面)
模块化 (可组合、分解和更换的单元)
信息隐蔽 (将每个程序的成分隐蔽或封装在一个单一的设计模块中)
模块独立 (每个模块完成一个相对独立的特定子功能,且与其他模块之间的联系简单)
2、模块独立性度量
耦合性:五鼠标空外公内
无直接耦合。指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,块独立性最高。
数据耦合。指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
标记耦合。指两个模块之间传递的是数据结构。
控制耦合。指一个模块调用另一个模块时,传递的是控制变量,被调用块通过该控制变量的值有选择地执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。
外部耦合。模块间通过软件之外的环境联结(如IO将模块耦合到特定的设备、格式、通信协议上)时称为外部耦合。
公共耦合。指通过一个公共数据环境相互作用的那些模块间的耦合。
内容耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种模块之间的耦合称为内容耦合。
内聚性:恭顺通过实践落欧(恭顺通过实践了哦)
偶然内聚(巧合内聚)。指一个模块内的各处理元素之间没有任何联系。
逻辑内聚。指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
时间内聚。把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
过程内聚。指一个模块完成多个任务,这些任务必须按指定的过程执行。
通信内聚。指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
顺序内聚。指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
功能内聚。这是最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。
3、系统结构设计原则
为保证总体结构设计顺利完成,应遵循以下几条原则。
(1)分解-协调原则。整个系统是一个整体,具有整体目的和功能,但这些目的和功能的实现又是由相互联系的各个组成部分共同工作的结果。
(2)自顶向下的原则。首先抓住系统总的功能目的,然后逐层分解,即先确定上层模块的
功能,再确定下层模块的功能。
(3)信息隐蔽、抽象的原则。上层模块只规定下层模块做什么和所属模块间的协调关系,但不规定怎么做。
(4)一致性原则。要保证整个软件设计过程中具有统一的规范、统一的标准和统一的文件模式等
(5)明确性原则。每个模块必须功能明确、接口明确,消除多重功能和无用接口。
(6)高内聚,低耦合。
(7)模块的扇入系数和扇出系数要合理。一个模块直接调用其他模块的个数称为模块的扇出系数:反之,一个模块被其他模块调用时,直接调用它的模块个数称为模块的扇入系数。模块的扇入、扇出系数必须适当。经验表明,一个设计得好的系统的平均扇入、扇出系数通常是3或4,一般不应超过7,否则会引起出错概率的增大。但菜单调用型模块的扇入与扇出系数可以大一些,公用模块的扇入系数可以大一些。
(8)模块的规模适当。
(9)模块的作用范围应该在其控制范围之内。
4、系统文档
(1))用户与系统分析人员在系统规划和系统分析阶段通过文档进行沟通。这里的文档主要包括可行性研究报告、总体规划报告、系统开发合同和系统方案说明书等。
系统开发合同 + 系统方案说明书 = 项目开发计划
(2)系统开发人员与项目管理人员通过文档在项目期内进行沟通。这里的文档主要有系统开发计划、系统开发月报以及系统开发总结报告等项目管理文件。
(3)系统测试人员与系统开发人员通过文档进行沟通。系统测试人员可以根据系统方案说明书、系统开发合同、系统设计说明书和测试计划等文档对系统开发人员所开发的系统进行测试。
(4)系统开发人员与用户在系统运行期间进行沟通。用户通过系统开发人员撰写的文档运行系统。这里的文档主要是用户手册和操作指南。
(5)系统开发人员与系统维护人员通过文档进行沟通。这里的文档主要有系统设计说明书和系统开发总结报告。有的开发总结报告写得很详细,分为研制报告、技术报告和技术手册3个文档,其中的技术手册记录了系统开发过程中的各种主要技术细节。这样,即使系统维护人员不是原来的开发人员,也可以在这些文档的基础上进行系统的维护与升级。
(6)用户与维修人员在运行维护期间进行沟通。用户在使用信息系统的过程中,将运行过程中的问题进行记载,形成系统运行报告和维护修改建议。
5、数据字典
数据字典有以下4|类条目:数据流、数据项、数据存储和基本加工,不包括外部实体。
十一 软件工程 10'
1、软件过程
1)能力成熟度模型CMM
①初始级(Initial)
软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。
②可重复级(Repeatable)
建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。
③已定义级(Defined)
管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。
④已管理级(Managed)
制定了软件过程和产品质量的详细度量标准。软件过程的产品质量都被开发组织的成员所理解和控制。
⑤优化级(Optimized)
加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。
2)能力成熟度模型集成(CMMI)
①阶段式模型
阶段式模型的结构类似于CMM,它关注组织的成熟度。CMMI-SE/SW/IPPD1.1版中有5A个成熟度等级。
初始的:过程不可预测且缺乏控制。
已管理的:过程为项目服务。
已定义的:过程为组织服务
定量管理的:过程已度量和控制。
优化的:集中于过程改进。
②连续式模型
CL0(未完成的):过程域未执行或未得到CL,中定义的所有目标。
CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2(已管理的):其共性目标集中于已管理的过程的制度化。
CL3(已定义级的):其共性目标集中于已定义的过程的制度化。
CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。
CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。
2、软件过程模型
1)瀑布模型:以文档作为驱动,适用于需求明确或者二次开发替换原有(需求稳定明确)。
2)V模型:瀑布模型的一个变体,增加了很多轮测试 ,并且测试贯穿于软件开发的各个阶段 ,不像其他模型都是软件开发完再测试。
3)增量模型: 首先开发核心模块功能,而后与用户确认之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发, 优先级最高的服务最先交付。
由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不用的是 增量模型的每一次增量版本都可作为独立可操作的作品 ,而原型的构造一般是为了演示。
4)演化模型:对软件需求缺乏准确认识
4.1)原型模型:需求不明确,规模不是很大,不可直接上市。
4.2)螺旋模型:风险分析,大规模。
四步:制定计划——风险分析——实施工程——用户评估
5)喷泉模型:以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法 。使开发过程具有迭代性和无间隙性。各开发活动(如分析、设计和编码)之间不存在明显的边界。
6)统一过程up模型
RUP 角色表述“谁做”,制品表述“做什么”,活动表述“怎么做”,工作流表述“什么时候做”。
初始阶段:生命周期目标
精化阶段:生命周期架构
构建阶段:初始运作功能
移交阶段:产品发布
3、敏捷方法
①极限编程(XP)
它由价值观、原则、实践和行为4个部分组成。
4大价值观:沟通、简单性、反馈和勇气。
5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
12个最佳实践:
计划游戏(快速制定计划、随着细节的不断变化而完善)、小型发布(系统的设计要能够尽可能早地交付)、隐喻(找到合适的比喻传达信息)、简单设计(只处理当前的需求,使设计保持简单)、测试先行(先写测试代码,然后再编写程序)、重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求)、结对编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时、现场客户和编码标准。
②水晶法(Crystal):认为每一个不同的项目都需要一套不同的策略、约定和方法论。
③并列争求法:把每30天一次的选代称为一个“冲刺”,并按需求的优先级别来实现产品。多个自组织和自治的小组并行地递增实现产品。协调是通过简短的日常情况会议来进行,就像橄榄球中的“并列争球”。
④自适应软件开发(ASD)
ASD有6个基本的原则:有一个使命作为指导;特征被视为客户价值的关键点;过程中的等待是很重要的,因此“重做”与“做”同样关键:变化不被视为改正,而是被视为对软件开发实际情况的调整;确定的交付时间迫使开发人员认真考虑每一个生产的版本的关键需求:风险也包含其中。
⑤敏捷统一过程(AUP)
采用“在大型上连续”以及在“在小型上迭代”的原理来构建软件系统。采用经典的UP阶段性活动(初始、精化、构建和转换),提供了一系列活动,能够使团队为软件项目构想出一个全面的过程流。在每个活动里,一个团队迭代使用敏捷,并将有意义的软件增量尽可能快地交付给最终用户。每个AUP迭代执行以下活动:建模。实现。测试。部署。配置及项目管理。环境管理。
4、软件需求
功能需求。老考虑系统要做什么,在何时做,在何时以及如何修改或升级。
性能需求。考虑软件开发的技术性指标。例如,存储容量限制、执行速度、响应时间及吞吐量。
数据需求。考虑输入、输出数据的格式,接收、发送数据的频率,数据的准确性和精度,数据流量,数据需保持的时间。
......
5、系统设计
1)设计软件系统总体结构
其基本任务是采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息:评价模块结构的质量。
软件系统总体结构的设计是概要设计关键的一步,直接影响到下一个阶段详细设计与编码的工作。软件系统的质量及一些整体特性都在软件系统总体结构的设计中决定。
2)数据结构及数据库设计
(1)数据结构的设计。(2)数据库的设计。①概念设计。②逻辑设计。③ 物理设计。
3)编写概要设计文档
文档主要有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。
4)评审
6、详细设计
(1)算法设计。
(2)对模块内的数据结构进行设计。
(3)对数据库进行物理设计,即确定数据库的物理结构。
(4)其他设计。① 代码设计。②输入/输出格式设计。③ 用户界面设计。
(5)编写详细设计说明书。
(6)评审。
7、系统测试目的,意义,原则
(1)应尽早并不断地进行测试。测试应贯穿在开发的各个阶段,应尽早纠正错误,消除隐患
(2)测试工作应该避免由原开发软件的人或小组承担,测试工作应由专门人员来进行。
(3)在设计测试方案时,不仅要确定输入数据,而且要测试对象是否正确。
(4)要设计有效合理的输入条件,也要包含不合理、失效的输入条件。
(5)在测试程序时,不仅要检验程序是否做了该做的事,还要检验是否做了不该做的事。
(6)严格按照测试计划来进行,避免测试的随意性。
(7)测试例子都是精心设计出来的,可以为重新测试或追加测试提供方便。
(8)系统功能扩充后,都需要重新开始测试,而这些工作的重复性很高,可以利用以前的测试用例,或在其基础上修改,然后进行测试。
(9)系统测试阶段的测试目标来自于需求分析阶段。
8、单元测试 / 模块测试
接口、局部数据结构、重要执行路径、出错处理、边界条件。
单元测试过程:
由于模块不是独立运行的程序,各模块之间存在调用与被调用的关系。在对每个模块进行测试时需要开发两种模块。
驱动模块。相当于一个主程序,接收测试例子的数据,将这些数据送到测试模块,输出测试结果.
桩模块(也称为存根模块)。桩模块用来代替测试模块中所调用的子模块,其内部可进行少量的数据处理,目的是为了检验入口,输出调用和返回的信息。
9、测试方法
1)静态测试。被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。① 人工检测。②计算机辅助静态分析。
2)动态测试。动态测试是指通过运行程序发现错误。在对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法。
①黑盒测试 / 功能测试
常用的黑盒测试技术有等价类划分、边界值分析、错误推测和因果图等。
②McCabe 度量法
通过定义环路复杂度,建立程序复杂性的度量。
计算有向图G的环路复杂性的公式为
V(G)=m-n+2,环路个数=箭头-节点+2
其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。
③白盒测试 / 结构测试
(1)逻辑覆盖。考察用测试数据运行被测程序时对程序逻辑的覆盖程度。
① 语句覆盖。选择足够的测试数据,使被测试程序中的每条语句至少执行一次。语句覆盖对程序执行逻辑的覆盖很低,因此一般认为它是很弱的逻辑覆盖。
②判定/分支覆盖。设计足够的测试用例,使得被测程序中的每个判定表达式至少获得一次“真”值和“假”值,或者说是程序中的每一个取“真”分支和取“假”分支至少都通过一次,因此判定覆盖也称为分支覆盖。判定盖要比语句覆盖更强一些。
③ 条件覆盖。构造一组测试用例,使得每一判定语句中每个逻辑条件的名种可能的值至少满足一次。
④)判定/条件覆盖。设计足够的测试用例,使得判定中每个条件的所有可能取值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。
⑤ 条件组合覆盖。设计足够的测试用例,使得每个判定中条件的各种可能值的组合都至少出现一次。满足条件组合覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的。
⑥路径覆盖。路径覆盖是指覆盖被测试程序中所有可能的路径。
(2)循环覆盖。执行足够的测试用例,使得循环中的每个条件都得到验证。
(3)基本路径测试。
10、系统可维护性的评价指标包括理解、测试、修改。
11、
文档是软件可维护性的决定因素。
软件可维护性是软件开发各个阶段的关键目标。
在开发的时候就需要考虑维护。
编写高质量文档可以提高软件开发的质量。
文档也是软件产品的一部分,没有文档的软件就不能称之为软件。
软件文档的编制在软件开发工作中占有突出的地位和相当大的工作量。
高质量文档对于软件产品的效益有着重要的意义.
总的来说,软件文档只好不坏,选项中说软件文档不好的就是不正确的。
12、软件维护
正确性:改正在系统开发阶段而发生而系统测试阶段尚未发现的错误。
适应性:应用软件适应信息技术变化和管理需求变化而做出的更改。
完善性:扩充功能和改善性能,增加没有规定的功能与性能特征。
预防性:增加预防性的新功能。
13、可靠性、可用性、可维护性【以下纯背得分】
TF可靠 BF可用 同人TR是1可维护
可靠性、可用性和可维护性是软件的质量属性,软件工程中,用 0-1 之间的数来度量。
可靠性是指一个系统对于给定的时间间隔内、在给定条件下无失效运作的概率。可以用 **MTTF/ (1+MTTF)**来度量,其中 MTTF 为平均无故障时间。
可用性是在给定的时间点上,一个系统能够按照规格说明正确运作的概率。可以用MTBF/ (1+MTBF) 来度量,其中 MTBF 为平均失效间隔时间。
可维护性是在给定的使用条件下,在规定的时间间隔内,使用规定的过程和资源完成维护活动的概率。可以用1/(1+MTTR) 来度量,其中MTTR 为平均修复时间。
MTTF (Mean Time To Failure) =平均故障时间
MTBF (Mean Time Between Failures) =平均故障间隔时间
MTTR (Mean Time To Repair) =平均修复时间
14、沟通路径
有主程序员:n个成员小组,1个主程序员,普通程序员只需要与主程序员沟通。
沟通路径:n-1
。
无主程序员:n个成员的项目小组,相互之间都可以沟通。
沟通路径:n (n-1) /2
。
15、软件项目估算
1)COCOMO模型
基本COCOMO 模型:静态单变量模型
中级COCOMO 模型:静态多变量模型
详细COCOMO 模型:将软件系统模型分为系统、子系统和模块3个层次。
2)COCOMOⅡ模型:有三个阶段性模型
应用组装模型【对象】
早期设计阶段模型【功能点】
体系结构阶段模型【代码行】
在模型层次结构中有3种不同的规模估算选择:对象点、功能点和代码行。
16、进度管理
1)甘特图 Gantt 图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
2)PERT图
3)项目活动图
松弛时间 = 关键路径长度(最迟时间)- 最早时间
缩短关键路径上的活动才能缩短整个项目的工时
最少需要多少工时=关键路径=最长的路径
17、软件配置管理
第一个版本:
软件配罝管理其主要目标包括:
变更标识、变更控制、版本控制、确保变更正确的实现、变更报告
软件配罝管理其主要内容包括:
版本管理、配罝支持、变更支持、过程支持、团队支持、变化报告、审计支持。
第二个版本:
软件配罝管理其主要内容包括:
软件配置标识、变更管理、版本控制、系统建立、配置审核、配置状态报告。
配置数据库可以分为以下三类。
开发库。专供开发人员使用,其中的信息可能做频繁修改,对其控制相当宽松。
受控库。
产品库。在开发的软件产品完成系统测试后,作为最终产品存入产品库,等待交付用户或现场安装。
18、风险管理
风险的特性:具有不确定性,可能会造成损失。不确定性是指风险可能发生也可能不发生;损失是指如果风险发生,就会产生恶性后果。
风险的类别:
项目风险涉及各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能导致项目损失。
技术风险涉及到技术相关的可能会导致项目损失的问题。商业风险与市场因素相关。
社会风险涉及到政策、法规等因素。
风险暴露:又称风险曝光度,测量的是资产的整个安全性风险,它将表示实际损失的可能性与表示大量可能损失的资讯结合到单一数字评估中。在形式最简单的定量性风险分析中,风险曝光度可通过将风险可能性及影响相乘算出。
如果风险真的发生,有3个因素可能会影响风险所产生的后果,即风险的本质、范围和时间。
风险曝光度(Risk Exposure,RE)=错误出现率(风险出现率)×错误造成损失(风险损失)。
风险避免
是最好的风险控制策略。
19、软件质量
十二 信息安全 5'
1、
内部网络【安全】
DMZ 隔离区 :公用服务器,web服务器 ftp服务器等
外部网络【不安全】
2、防火墙
1)包过滤防火墙
一般有一个包检查块(通常称为包过滤器),包过滤器处在网络层和数据链路层。
过滤型的防火墙通常直接转发报文,它对用户完全透明,速度较快。
其优点是防火墙对每条传入和传出网络的包实行低水平控制:每个包的字段都被检查,例如源地址、目的地址、协议和端口等;包过滤防火墙是两个网络之间访问的唯一来源:包过滤通常被包含在路由器数据包中,所以不需要额外的系统来处理这个特征。
缺点是不能防范黑客攻击;不支持应用层协议,因为它不识别数据包中的应用层协议,访问控制粒度太粗糙;不能处理新的安全威胁。
2)应用代理网关防火墙
应用代理网关防火墙彻底隔断内网与外网的直接通信,内网用户对外网的访问变成防火墙对外网的访问,然后再由防火墙转发给内网用户。所有通信都必须经应用层代理软件转发,访问者任何时候都不能与服务器建立直接的TCP连接,应用层的协议会话过程必须符合代理的安全策略要求。
缺点是难以配置;处理速度非常慢。
3)状态检测技术防火墙
3、病毒
计算机病毒的特征包括:传播性、隐蔽性、感染性、潜伏性、触发性、破坏性等
Worm表示蠕虫病毒、Trojan表示特洛伊木马、Backdoor表示后门病毒、Macro表示宏病毒宏
病毒感染的对象主要是文本文档、电子表格等
木马软件:冰河蠕虫
木马程序的客户端运行在攻击者的机器上。
病毒:欢乐时光、熊猫烧香、红色代码、爱虫病毒、震网
4、网络攻击
拒绝服务攻击(Dos攻击):目的是使计算机或网络无法提供正常的服务拒绝服务攻击是不断向计算机发起请求来实现的。
重放攻击:攻击者发送一个目的主机已经接受过的报文来达到攻击目的攻击者利用网络监听或者其他方式盗取认证凭据,之后再重新发送给认证服务器主要用于身份认证过程,目的是破坏认证的正确性。
口令入侵攻击:使用某些合法用户的账号和口令登录到目的主机,然后再实施攻击活动
特洛伊木马:被伪装成程序或游戏,当用户下载了带有木马的软件或附件时,这个程序就会向黑客发起连接请求,建立连接后黑客就实施攻击活动。
端口欺骗攻击:采用端口扫描找到系统漏洞从而实施攻击。
网络监听:攻击者可以接收某一网段在同一条物理通道上传输的所有信息,使用网络监听可以轻松截取包括账号和口令在内的信息资料。
IP欺骗攻击:产生的IP数据包为伪造的源IP地址,以便冒充其他系统或发件人的身份。
Sql注入攻击:是黑客对数据库进行攻击的常用手段之一。没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据首先获取数据库的权限,就可获取用户账号和口令信息,以及对某些数据修改等。
入侵检测技术:专家系统、模型检测、简单匹配
5、网络安全
SSL(安全套接层 端口号443):传输层安全协议,用于实现 Web 安全通信。1996年发布的SSL3.0协议草案已经成为一个事实上的Web 安全标准。
TLS(传输层安全协议):是SSL3.0的后续版本。
终端设备与远程站点之间建立安全连接的协议是SSH。是由建立在应用层和传输层基础上的安全协议。SSH是专为远程登录会话和其他网络服务提供安全性的协议。SSH最初是UNIX上的程序。
HTTPS是以安全为目标的HTTP通道,即使用SSL加密算法的HTTP。
MIME(多用途互联网邮件扩展类型)是一个互联网标准,扩展了电子邮件标准,使其能够支持:非ASCI字符文本,非文本格式附件(二进制、声音、图像等),由多部分(multiple parts)组成的消息体,包含非 ASCПI字符的头信息(Header information)。
PGP(优良保密协议)是一个基于RSA公匙加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,还能对邮件加上数字签名从而使收信人可以确认邮件的发送方。
6、信息安全
包括5个基本要素:机密性、完整性、可用性、可控性与可审查性。
机密性:确保信息不暴露给未授权的实体或进程。
完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改,
可用性:得到授权的实体在需要时可访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作。
可控性:可以控制授权范围内的信息流向及行为方式。
可审查性:对出现的信息安全问题提供调查的依据和手段。信息的存储安全包括信息使用的安全(如用户的标识与验证、用户存取权限限制、安全问题跟踪等)、系统安全监控、计算机病毒防治、数据的加密和防止非法的攻击等。
十三 计算机网络 5'
1、网络设备
物理层:中继器、集线器(多端口中继器)
数据链路层:网桥、交换机(多端口网桥)
网络层:路由器
应用层:网关
2、协议簇
3、TCP和UDP
TCP【面向连接、可靠】可靠传输、连接管理、差错校验和重传、流量控制、拥塞控制、端口寻址,其中流量控制采用的是:可变大小的滑动窗口协议。
利用TCP在源主机和目的主机之间建立和关闭连接操作时,均需要通过三次握手来确认建立和关闭是否成功。
127.0.0.1是本地回送地址,当网络连接不可用时,为了测试编写好的网络程序,通常使用的目的主机P地址为127.0.0.1。
UDP【无连接、不可靠】开销较小
4、SMTP 25 和 POP3 110【TCP C/S模式】
SMTP:发送邮件
传输ASCII文本,传输文字附件
MIME:邮件附件扩展类型
PEM:私密邮件
POP3:接受邮件
5、ARP 地址解析协议和RARP 【IP地址→物理MAC地址 网络层】
当计算机需要与任何其他的计算机进行通信时,
首先需要查询ARP高速缓存,如果存在,便使用与它对应的物理地址直接将数据报发送给所需的物理网卡;
如果没有该IP地址,那么ARP便在局域网上以广播方式发送一个ARP请求request包。
如果局域网上P地址与某台计算机中的IP地址相一致,那么该计算机便生成一个单播ARP应答response信息,信息中包含对应的物理地址。
ARP协议软件IP地址与物理地址的组合添加到它的高速缓存中,这时即可开始数据通信。
7、DHCP(动态主机配置协议)
集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。
DHCP 客户端可以从 DHCP 服务器获得本机IP地址、DNS服务器地址、DHCP 服务器地址和默认网关的地址等。
Linux无效地址:0.0.0.0
Windows无效地址:169.254.X.X
169.254.X.X是 Windows 系统在 DHCP 信息租用失败时自动给客户机分配的 IP 地址。
8、URL
地理模式:顶级域
9、浏览器
DNS域名查询的次序是:
本地的 hosts文件→本地DNS缓存→本地DNS服务器→根域名服务器。
主域名服务器在接收到域名请求后,查询顺序是:
本地缓存、本地hosts文件、本地数据库、转发域名服务器。
10、IP地址和子网掩码【网络号+子网号+主机】
11、IPV6
IPV6【128位】
IPV4【32位】
12、无线网络
蓝牙覆盖的范围最小,通信距离最短。
13、Windows命令
ipconfig/release:DHCP 客户端手工释放 IP 地址
ipconfig/flushdns:清除本地 DNS 缓存内容
ipconfig/displaydns:显示本地 DNS 内容
ipconfig/registerdns:DNS 客户端手工向服务器进行注册
ipconfig:显示所有网络适配器的IP地址、子网掩码和缺省网关值
ipconfig/all:显示所有网络适配器的完整 TCP/IP 配置信息,包括 DHCP 服务是否已启动
ipconfig/renew:DHCP 客户端手工向服务器刷新请求(重新申请IP地址)
使用ping命令进行网络检测,按照由近及远原则,首先执行的是ping 127.0.0.1,其次是ping本地IP,再次是ping 默认网关,最后是ping 远程主机。
14、路由
如果路由器收到了由多个路由协议转发的、关于某个目标的多条路由,则比较各个路由的管理距离,并采用管理距离小的路由来源提供的路由信息。
十四 算法 4~5'
1、回溯法
按照 深度优先
的策略,从根结点出发搜索解空间树。
n皇后问题
问题描述:
给定一个N x N的棋盘,要在棋盘上摆放 N 个皇后,并且满足 N 个皇后中任意两个皇后都不处于同一行、同一列、同一斜线上(正斜线、反斜线)。
【软考中按行来摆放皇后】
判断同一列:Qi列 == Qj列
判断同一斜线:|Qi行 - Qj行| == |Qi列 - Qj列|
代码实现(非递归):
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#define N 4 //定义有多少个皇后
int q[N + 1]; //存储皇后的列号
//说明:对应q下标表示第几行,即第几个皇后,q[i]=val,val表示第i+1个皇后,放在第i+1行的value+1列
//放置第j个皇后位置,检查第j个皇后的位置是否合法
int check(int j) {
int i;
for (i = 1; i < j; i++) {
// 说明
// 1. q[i] == q[j] 表示判断第j个皇后是否和i-1个皇后在同一列
// 2. abs(i - j) == abs(q[i] - q[j]) 表示判断第j个皇后和第i个皇后在同一斜线
// 判断是否在同一列和同一斜线
if (q[i] == q[j] || abs(i - j) == abs(q[i] - q[j])) {
return 0;
}
}
return 1;
}
//求解N皇后的方案
void queen() {
int i;
//初始化皇后的列号数组q为0,表示还没有开始摆放皇后
for (i = 0; i <= N; i++) {
q[i] = 0;
}
int answer = 0; //方案数
int j = 1;//表示正在摆放第j个皇后,初始化为1
while (j >= 1) {
q[j] = q[j] + 1;//棋盘从0列开始,让第j个皇后向后一列摆放到第1列
while (q[j] <= N && !check(j)) {//判断第j个皇后的位置是否合法,是否与之前的皇后位置冲突
//不冲突,接着放n+1个皇后,即开始递归
q[j] = q[j] + 1;
}
if (q[j] <= N) { //表示第j个皇后找到一个合法的摆放位置
if (j == N) { //找到了N皇后的一组解
answer = answer + 1;
printf("方案%d:", answer);
for (i = 1; i <= N; i++) {
printf(" %d ", q[i]);
}
printf("\n");
} else {
//继续摆放下一个皇后,走下一列
j = j + 1;
}
} else {
//表示第j个皇后找不到一个合法的摆放位置
q[j] = 0; //还原第j个皇后的位置
j = j - 1; //回溯
}
}
}
int main() {
queen();
return 0;
}
代码实现(递归):
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#define N 4 //定义有多少个皇后
int q[N + 1]; //存储皇后的列号
//说明:对应q下标表示第几行,即第几个皇后,q[i]=val,val表示第i+1个皇后,放在第i+1行的value+1列
//放置第j个皇后位置,检查第j个皇后的位置是否合法
int answer;
int check(int j) {
int i;
for (i = 1; i < j; i++) {
// 说明
// 1. q[i] == q[j] 表示判断第j个皇后是否和i-1个皇后在同一列
// 2. abs(i - j) == abs(q[i] - q[j]) 表示判断第j个皇后和第i个皇后在同一斜线
// 判断是否在同一列和同一斜线
if (q[i] == q[j] || abs(i - j) == abs(q[i] - q[j])) {
return 0;
}
}
return 1;
}
//递归求解n皇后
void queen(int j) {
int i;
for (i = 1; i <= N; i++) {
q[j] = i;
if (check(j)) { //当摆放的皇后位置合法时
if (j == N) { //找到了N皇后的一组解
answer = answer + 1;
printf("方案%d: ", answer);
for (i = 1; i <= N; i++) {
printf("%d ", q[i]);
}
printf("\n");
} else {
queen(j + 1);
}
}
}
}
int main() {
queen(1);
return 0;
}
2、分治法
一般来说,分治算法在每一层递归上都有3个步骤。
(1)分解。将原问题分解成一系列子问题。
(2)求解。递归地求解各子问题。若子问题足够小,则直接求解。
(3)合并。将子问题的解合并成原问题的解。
3、动态规划法
0-1背包问题
时间复杂度和空间复杂度均为 O(NW)
其中N是物品数量,W是背包容量。
i 为第几个物品,j为当前背包容量。
① 不选第 i 个物品
f[i][j] = f[i-1][j]
② 选第 i 个物品
前提条件:if(j>=w[i])
f[i][j] = max ( v[i]+f[i-1][j-w[i]] , f[i-1][j] )
#include <stdio.h>
#define N 4 //物品数量
#define W 5 //背包容量
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int i, j;
int v[] = {0, 2, 4, 5, 6};//物品价值数组
int w[] = {0, 1, 2, 3, 4};//物品重量数组
int f[N + 1][W + 1] = {};//子问题解数组
for (i = 1; i <= N; i++) {
for (j = 1; j <= W; j++) {
f[i][j]=f[i-1][j];//默认不选第i个物品
if(j>=w[i]){//选第i个物品的前提条件
f[i][j]=max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);
}
/*if (j >= w[i]) {//选第i个物品
//不选第i个物品 和 选第i个物品 两者的较大值
f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);
} else {//不选第i个物品
//从前i-1个物品中选,背包容量为j时的最大价值
f[i][j] = f[i - 1][j];
}*/
}
}
printf("%d\n", f[N][W]);
for (i = 0; i <= N; i++) {
for (j = 0; j <= W; j++) {
printf("%d", f[i][j]);
}
printf("\n");
}
return 0;
}
矩阵连乘
时间复杂度为O(n^3),空间复杂度为O(n^2)
两个矩阵A(_{m*n}) 和 B(_{n*p}) 相乘的次数为:m*n*p
相乘之后得到新的矩阵为:(A*B)_{(m*p)}
例如:A1_{(3*4)} 和A2_{(4*5)} 相乘的次数为:3*4*5
相乘之后得到新的矩阵为:(A1*A2)_{(3*5)}
最长公共子序列的时间复杂度为O(n^2)
下午题
试题一 数据流图 15′
形式:说明 + 2图 + 问题
数据流图DFD基本图形元素 ——
矩形 E :外部实体
数据存储:D
加工 P :圆角矩形
外部实体:当前系统之外的人、物、外部系统
人:学生、老师、员工、主观、医生、客户、供应商......
物:传感器、控制器、单车、车辆、采购部门......
外部系统:支付系统、车辆交易系统、库存管理系统、道闸控制系统......
数据存储:存储数据和提供数据,存储加工的输出数据和提供加工的输入数据
例子:客户表、订单表、学生表、课表文件、维修记录文件
加工:将输入数据处理后得到输出数据
一个加工至少有一个输入数据流和一个输出数据流加工
只有输入没有输出:黑洞
只有输出没有输入:白洞
输入数据不足以产生输出数据:灰洞
数据流的起点或终点必须有一个是加工。
问题一 实体
问题二 数据存储 +表/文件
问题三 补充缺失数据流
第一种方法:父图子图平衡 连连看
第二种方法:加工既有输入数据流又有输出数据流
第三种方法:数据守恒
格式:
试题二 ER图 15′
问题一:补充联系 1:1 1:* *:*
问题二:补充关系模式缺失属性,并给出某几个关系的主键和外键
1)一对一联系转换
例:
一种方式是将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性包括该联系所关联的两个实体的码及联系的属性,关系的码取自任一方实体的码;
另一种方式是将联系归并到关联的两个实体的任一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性即可,归并后的实体码保持不变。
2)一对多联系转换
一种方式是将联系转换成一个独立的关系模式关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码;
另一种方式是将联系归并到关联的两个实体的多方,给待归并的多方实体属性集中增加一方实体的码和该联系的属性即可,归并后的多方实体码保持不变。
3)多对多联系转换
多对多联系只能转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组。
4)三个联系实体转换
5)实体和子实体的转换(超类和子类的转换)
试题三 UML 15′