目录
计算机网络概论
计算机系统基础知识
中央处理单元
- CPU(中央处理单元)的组成部件:运算器、控制器、寄存器组和内部总线
数据表示
- 补码
在补码表示中,最高位为符号位,0表示正号,1表示负号,正数的补码与反码都与原码相同,负数的补码等于其补码的末位+1
A-B=A+B的补码,通过这个公式可以把减法运算转化为加法运算,从而不必单独设计运算器的减法逻辑
- 浮点数:N=2^E*F,E称为阶码,决定数值范围,F称为尾数,决定数值精度
校验码
- 海明码利用奇偶性进行检错和纠错
- 数据位为n,校验位为k,满足:2^k-1>=n+k
- 校验位Pi在2^(i-1)
- 被校验的海明码下标=校验位的下标和
- 码距最小为2n+1
- 循环冗余校验码,左边为信息码(数据),右边为校验码
- 校验码由信息码产生,校验码位数越多,校验能力越强
- 采用的是模2运算
计算机体系结构
计算机体系结构的发展
- 指令集发展的两种途径
指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其他 |
CISC(复杂指令集) | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长 |
RISC(精简指令集) | 数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有少部分store/load操作内存 | 支持方式少 | 增加通用寄存器,硬布线逻辑控制为主,适合采用流水线 | 使用频率较高的指令是设计重点,以提高执行速度 |
存储系统
- 高速缓存(cache):存放主存的部分拷贝信息,判断CPU访问的信息是否在cache中,如果命中,直接访问,如果未命中,将要访问的信息进行替换。目的提高CPU访问主存数据或指令的效率
- 存储器类别:
DRAM:动态随机存取储器,最为常见的系统内存,电容存储信息,因电容存在自放电,数据需周期性刷新
SRAM:静态随机存取寄存器,晶体管存储信息
EPROM:可擦除可编程只读存储器,晶体管存储信息
EEPROM:电可擦可编程只读存储器,晶体管存储信息
输入/输出技术
- 直接程序控制:外设数据的输入输出过程是在CPU执行程序的控制下完成的
- 中断方式:当IO系统与外设交换数据时,CPU无需等待也不必查询IO的状态,而可以抽身出来处理其他任务。CPU与外设可并行操作
- 数据传输过程中,需要由CPU通过执行程序来实现,限制了数据的传送速度
- DMA(direct memory access,直接内存存取)是指数据在内存与IO设备间的直接成块传送,即内存与IO设备间传送一个数据块的过程中,不需要CPU的任何干涉,只需要CPU在过程开始启动与过程结束时的处理,实际操作由DMA硬件直接执行完成,CPU在此传送过程中可做其他事情
- 外设与CPU可并行工作,数据传输过程不需要CPU干预
安全性、可靠性与系统性能评测基础知识
加密技术和认证技术
- 数据加密技术分为两类:对称加密(私人密钥加密),如DES算法;非对称加密(公开密钥加密),如RSA算法
- X509数字证书标准推荐使用的密码算法是RSA,国密SM2数字证书采用的公钥密码算法是ECC(基于椭圆曲线的公钥密码算法)
- 数字时间戳服务,能提供电子文件的日期和时间信息的安全保护。在报文中添加时间戳可以防止重放攻击
- 口令认证:基于用户所知道的秘密而进行认证,简单易于实现,但口令认证只认口令而不考虑其他因素(监听、盗用、攻击等),因此安全性较低
计算机可靠性
- 可靠性:从它开始运行到某时刻这段时间内能正常运行的概率
- 串联系统R=R1*R2*....*RN, 并联系统R=1-(1-R1)(1-R2)*...*(1-RN)
程序设计语言基础知识
程序设计语言概述
程序设计语言的基本概念
- 对于大多数通用程序设计语言,用上下文无关文法描述其语法即可
- 高级程序语言划分,按照程序执行角度
- 编译类程序设计语言,如C、C++、java等,先编译成机器语言,再由机器运行机器码(二进制),执行效率较高
- 解释类程序设计语言,如python、JS等,不需要编译,每执行一次就翻译一次,执行效率比较低
- 脚本类程序设计语言,是一种解释性语言,由解释器解释运行,如python、JS等
- 标记语言常用于描述格式化和链接
语言处理程序基础
编译程序基本原理
- 编译程序的功能是将高级语言书写的源程序翻译成与之等价的目标程序。
- 编译程序的工作过程分为6个阶段:词法分析-》语法分析-》语义分析-》中间代码生成-》代码优化-》目标代码生成。语法分析的输入是记号流,构造出语法树,判断输入串的语法是否正确。
- 语法分析中递归子程序分析属于“自上而下”的分析法:自顶而下的语法分析法,是一种自顶向下的构建语法树的方法,它从源程序的起始符号开始,通过递归调用子程序,不断展开非终结符号,直到最终得到一课语法树
- 中间代码的后缀式(逆波兰式):把运算符写在运算对象的后面,如x:=(a+b)*(c+d),其后缀式为xab+cd+*:=。优点是根据运算对象和运算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值
- 有限自动机:状态转换图中每个状态对应图中的一个结点,每个转换函数对应图中的一条有向弧
- 中间代码:将高级语言源程序通过编译或解释方式进行翻译时,可以先生成与源程序等价的某种中间代码
- 常用的中间代码有后缀式、三地址码、三元式、四元式和树等形式
- 中间代码和具体机器无关,使用中间代码有利于进行,与机器无关的优化处理和提高编译程序的可移植性
- 可以将不同高级程序语言翻译成同种中间代码
- 中间代码可以跨平台
解释程序基本原理
- 解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式
- 高级语言编译与解释方式的比较:
- 效率:编译比解释方式的效率更高。运行程序时,解释程序需要反复扫描源程序,如每一次引用变量都要进行类型检查,甚至需要重新进行存储分配,从而降低了程序的运行速度;编译程序生成源程序的目标代码,编译一次就可以多次运行,运行效率更高
- 灵活性:解释方式比编译方式更灵活。由于解释程序需要反复检查源程序,当解释器直接运行源程序时,”在运行中”修改程序就成为可能,另外,当解释器直接在源程序上工作时,它可以对错误进行更准确的定位
- 可移植性:解释方式比编译方式的可移植性更好。解释器是边解释边执行,只要有相应的解释器,解释程序就可以运行在各种系统上,可移植性好;编译器是先翻译后执行,它对源程序进行编译的结果是可以直接在电脑上运行的机器码,但该机器码可在这种操作系统下运行不能在另一种操作系统下运行,要想移植,需要该源代码并使用不同的编译器,因此编译器的可移植性更差
数据结构
线性结构
栈和队列
- 栈帧:用来存储执行被调用函数的一段专用空间
- 调用者通过实参向被调用函数传递参数,被调用函数通过形参来接收调用者传递过来的实参,然后在函数体内执行各种操作。被调用函数执行完毕后,应该知道返回到哪里,因此栈帧中应包含形参变量、局部变量、返回地址。其中全局变量是指整体程序都可使用的变量,因此全局变量定义在函数体外,所以在栈帧中无需包括全局变量
树
二叉树的性质与存储结构
- 二叉树的性质
- 第i层,最多有2^(i-1)个结点
- 高度为k的二叉树最多有2^k-1个结点
- 任何一个二叉树n0=n2+1
- n个结点的完全二叉树深度为logn+1
- 不同类型二叉树的定义和特点
- 满二叉树,完全二叉树且没有度为1的结点
- 线索二叉树:在遍历过程中,记录结点的前驱和后继结点
- 最优二叉树(哈夫曼树):带权路径长度最短的树
- 二叉排序树:左子树的结点
- 平衡二叉树:左子树和右子树的高度差绝对值不超过1
二叉树的遍历
- 先序遍历:访问根节点,先序遍历左子树、先序遍历右子树
- 中序遍历:中序遍历左子树,根节点,中序遍历右子树
- 后序遍历:后序遍历左子树,后序遍历右子树,根节点
最优二叉树
- 哈夫曼编码:让电文中出现次数较多的字符采用尽可能短的编码,那么电文码串总长度可减少。
- 构造最优二叉树的哈夫曼方法:
- 选择权值最小的两个结点构建一棵二叉树,根节点的权值为左右子树结点权值之和,递归执行
- 将树中每个结点的左分支标上0,右分支标记1,叶子节点的字符编码为从根节点到叶子节点的路径上0、1组成的字符串
图
图的定义与存储
- 图的基本存储结构有邻接矩阵表示法和邻接链表表示法
- 邻接矩阵表示法:用一个矩阵表示图中顶点之间的关系,具有n个顶点的图,其邻接矩阵是一个n阶方阵
- 邻接链表表示法:为图中的每个顶点建立一个单链表,第i个单链表的结点表示依附于顶点vi的边(有向图中是以vi为尾的弧)
拓扑排序和关键路径
- 关键路径:从源点到汇点的路径中,长度最长的路径。关键路径上的所有活动都是关键活动,如果任何一项关键活动没有按期完成,就会影响整个工程的进度
- 顶点事件的最早发生时间ve(j)=max{ve(i)+dut}
- 顶点事件的最晚发生时间Vl(i)=min{v(j)-dut}
排序
简单排序
- 插入排序:待排序元素与有序子数组比较,找到合适位置插入
- 时间复杂度O(n*n),最好情况(正序)时间复杂度O(n),最坏情况(逆序)时间复杂度O(n*n)
- 辅助空间:O(1)
- 稳定的排序方法
- 冒泡排序:相邻元素两两比较,若为逆序,则交换顺序
- 时间复杂度O(n*n),最好情况(正序)时间复杂度O(n),最坏情况(逆序)时间复杂度O(n*n)
- 辅助空间:O(1)
- 稳定的排序方法
- 简单选择排序:从所有还没有比较的数据中选择一个最小的,与当前元素比较,如果比当前元素小,则进行交换。
- 时间复杂度O(n*n),最好情况(正序)时间复杂度O(n*n),最坏情况(逆序)时间复杂度O(n*n)
- 辅助空间:O(1)
- 不稳定的排序方法
快速排序
- 快速排序:
- 时间复杂度O(n*logn),最好情况(正序)时间复杂度O(n*n),最坏情况(逆序)时间复杂度O(n*n)
- 辅助空间:O(logn)
- 不稳定的排序方法
堆排序
- 堆排序:待排序数组构建完全二叉树,不断地将最大的孩子结点换到根节点,所有子树交换完,最大的一个在根节点。将根节点与最后一个元素交换,最后一个节点断开二叉树关联
- 时间复杂度O(n*logn),最好情况(正序)时间复杂度O(n*logn),最坏情况(逆序)时间复杂度O(n*logn)
- 辅助空间:O(1)
- 不稳定的排序方法
归并排序
- 归并排序:时间复杂度O(n*logn),最好情况(正序)时间复杂度O(n*logn),最坏情况(逆序)时间复杂度O(n*logn)
- 辅助空间:O(n)
- 稳定的排序方法
操作系统知识
进程管理
进程间的通信
- PV操作是实现进程同步与互斥的常用方法。P表示申请一个资源,V表示释放一个资源,在进程执行前执行P操作,进程执行后执行V操作。
- 信号量S的物理意义:S>0表示资源可用数,S
进程调度
- 进程调度方式是指当有更高优先级的进程到来时如何分配CPU。调度方式分为可剥夺和不可剥夺两种:
- 可剥夺方式:当有更高优先级的进程到来时,强行将正在运行进程的CPU分配给高优先级的进程
- 不可剥夺方式:当有更高优先级的进程到来时,必须等待正在运行进程自动释放占用的CPU,然后将CPU分配给高优先级的进程
死锁
- 设某系统中有3个并发进程都需要4个同类资源,该系统不会发生死锁的最少资源数量:每个进程分配3个资源,再额外加1个资源,保证其中一个进程可运行,资源释放后再执行其他进程,3*3+1=10
存储管理
分页存储管理
- 计算机系统的页面有两部分组成:页号和页内地址,0-11位业内地址,每页大小为2^12=4K,12-31位为页号
- 逻辑地址为页号+页内地址,物理地址为块号+页内地址
段页式存储管理
- 段页式存储系统的结构如下,则系统最多可有1024个段,每个段最大允许有1024个页,页的大小为4K
虚拟存储管理
- 页面置换算法:
- 最佳置换算法,在最长时间内不再被访问的页面置换出去
- 先进先出置换算法,选择在主存中驻留时间最久的页面置换出去
- 最近最少未使用置换算法,每个页面设置一个访问字段,用于记录这个页面自上次被访问以来所经历的时间T,选择T最大的页面进行置换
- 最近未用置换算法,主存中的页面设置一个访问位,所有页面连接成一个循环队列,选择一个页面置换时,若访问位为1,则重置为0,检查下一个页面,若为0,则置换
设备管理
I/O软件
- I/O软件隐藏了I/O操作实现的细节,使得用户通过抽象的I/O命令就可使用I/O设备,方便用户使用
磁盘调度
- 磁盘的访问时间包括三个部分:一是磁头从原先位置移动到目的磁道所需要的时间,称为寻道时间;二是在到达目的磁道后等待被访问的记录块旋转到磁头下方的时间,称为旋转延迟或旋转到达时间;三是信息的传输时间(含读写时间)
- 磁盘调度分为移臂调度和旋转调度两类,并且是先进行移臂调度,然后再进行旋转调度
- 磁盘调度算法:
- 最短寻道时间优先:要求访问的磁道与当前磁头所在的磁道距离最近,使得每次的寻道时间最短
文件管理
文件的结构和组织
- 文件系统采用多级索引结构,文件长度计算
存取方法和存储空间的管理
- 位示图:某文件管理系统在磁盘上建立了位示图,记录磁盘的使用情况。若系统的字长为32位,磁盘的物理块依次编号为:0、1、2.....
- 4096号物理块的使用情况在位示图中的第***个字中描述。分析:系统的字长为32位,可以记录32个物理块的使用情况,则位示图中的第1个字,描述0-31号物理块的使用情况,第2个字描述32-63号物理块,4096在位示图的第129个字中描述
- 若磁盘的容量为200GB,物理块的大小为1MB,则位示图的大小为**个字。分析:磁盘有200*1024=204800个物理块,故位示图的大小为204800/32=6400个字
软件工程基础知识
软件工程概述
软件过程
- 软件过程能力成熟度模型(CMM):研究的目的是提供一种评价软件承接能力的方法,同时它可帮助软件组织改进其软件过程。将软件过程改进分为5个成熟等级:
-
- 1级初始级,过程无序,进度、预算、功能和质量等不可预测
- 2级可重复级,软件过程制度化,可重复
- 3级已定义级,过程实现标准化
- 4级已管理级,过程的定量化
- 5级优化级,过程可自发的不断改进,防止同类问题二次出现
软件过程模型
演化模型
- 演化模型特别适用于对软件需求缺乏准确认识的情况,典型的演化模型有原型模型和螺旋模型
- 原型模型比较适合于用户需求不清、需求经常变化的情况,当系统规模不是很大也不太复杂时,采用该方法比较好
- 螺旋模型特别适用于庞大、复杂并且具有高风险的系统
敏捷开发方法Scrum
- 三个工作:product backlog、sprint backlog、product increment
-
- product backlog(产品待办事项):产品经理需要完成的主要工作列表
- sprint backlog(冲刺待办事项):团队从产品代办事项中选择出来的冲刺事项
- product increment(增量 或 冲刺目标):团队对“已完成”、里程碑、冲刺目标的定义
- 五个事件:sprint、sprint planning、daily scrum、sprint review、sprint retrospective
-
- sprint planning(冲刺规划):明确冲刺交付物及如何实现
- sprint(冲刺):团队共同完成冲刺目标的实际时间段
- daily scrum(每日简短例会):昨天做了什么、今天计划做什么、是否遇到障碍
- sprint review(冲刺审查):冲刺结束时,团队非正式会议,一起演示增量或检查增量
- sprint retrospective(冲刺回顾):团队一起讨论哪些工作进展顺利、哪些工作有待改进
系统测试
系统测试与调试
- 测试设计与测试用例在需求分析阶段完成撰写
传统软件的测试策略
- 有效的软件测试实际上分为4步进行:单元测试、集成测试、确认测试、系统测试
- 单元测试:侧重于模块中的内部处理逻辑和数据结构
- 集成测试:把模块按系统说明书的要求组合起来进行测试,目标是利用已通过单元测试的构件建立设计中描述的程序结构,旨在发现与接口相关的错误的测试
- 确认测试:集中于用户可见的动作和用户可识别的系统输出
- 系统测试:将已经确认的软件、硬件、外设和网络等其他因素结合在一起,进行信息系统的各种集成测试和确认测试,目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方
测试方法
- 白盒测试
- 白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径覆盖
- 逻辑覆盖考察用测试数据运行被测程序时对程序逻辑的覆盖程度,主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、路径覆盖:
- 语句覆盖:被测试程序中的每条语句至少执行一次,对程序执行逻辑的覆盖很低
- 判定覆盖:被测程序中的每个判定表达式至少获得一次真值和假值
- 条件覆盖:每个判定语句中每个逻辑条件的各种可能的值至少满足一次
- 路径覆盖:覆盖被测程序中所有可能的路径,对程序执行逻辑的覆盖很高
- 覆盖路径:给流程图的所有结点标号,统计不同路径
- mccabe度量法统计环路复杂度:M(边)-N(顶点)+2;封闭区间+1
运行和维护知识
系统维护概述
- 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程:
- 提高软件可维护性是开发软件系统所有步骤的关键目的
- 软件维护是软件生命周期最长的一段,相对于软件开发任务而言,软件维护工作更加复杂
- 系统维护包括:硬件维护、软件维护、数据维护
- 硬件维护:设备保养性维护和故障维护
- 软件维护:根据需求变化或硬件环境的变化对应用程序进行部分或全部修改
- 正确性维护:(改正性维护),改正系统测试阶段尚未发现的错误
- 适应性维护:适应信息技术变化和管理需求变化而进行的修改,如硬件更换、管理人员提出新的信息需求
- 完善性维护(改善性):扩充功能和改善性能而进行的修改
- 预防性维护:主动增加预防性的新功能,使应用系统适应各类变化而不被淘汰
- 数据维护:数据库的安全性和完整性以及并发性控制,还要维护数据库中的数据
软件项目管理
风险管理
- 软件风险包含两个特性:不确定性、损失。不确定性是指风险可能发生也可能不发生,损失指如果风险发生就会产生恶性结果
- 评估风险影响:如果风险真的发生,风险的本质、范围和时间可能会影响风险所产生的后果
- 风险控制的目的是辅助项目组建立处理风险的策略
- 如果风险可以预测,可以避免其发生,但有些风险可以预测但无法避免
- 风险可划分为已知风险和未知风险,已知风险可以管理,未知风险不可管理(不可预测、不可控制、不可避免)
软件质量
软件质量特性
- ISO/IEC软件质量模型的质量特性和质量子特性如下:
- 功能性:适合性、准确性、互用性、依从性、安全性
- 可靠性:成熟性、容错性、易恢复性
- 易使用性:易理解性、易学性、易操作性
- 效率:时间特性、资源特性
- 可维护性:易分析性、易改变性、稳定性、易测试性
- 可移植性:适应性、易安装性、一致性、易替换性
考点补充
- MTTF(mean time to failure):平均无故障时间,取所有系统开始运行到发生故障之间的时间段的平均时间
- MTTR(mean time to repair):平均修复时间,从系统发生故障到维修结束之间的时间段的平均时间
- MTBF(mean time between failure):平均失效间隔,两次故障发生之间的时间段平均值
- 可靠性:MTTF/(1+MTTF)
- 可维护性:1/(1+MTTR)
- 可用性:MTBF/(1+MTBF)
结构化开发方法
系统分析与设计概要
系统设计的基本原理
- 衡量模块独立程度的标准有两个:耦合性和内聚性
- 耦合是模块之间的相对独立性的度量,包含7种类型:无直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合
- 无直接耦合:两个模块之间没有直接的关系
- 数据耦合:两个模块之间通过简单的数据值调用
- 标记耦合:两个模块之间传递的是数据结构
- 控制耦合:两个模块之间传递的是控制变量
- 外部耦合:两个模块之间通过软件之外的环境联结
- 公共耦合:两个模块之间通过公共数据环境联结,如全局简单变量、共享的通信区、内存的公共覆盖区等
- 内容耦合:一个模块直接使用另一个模块的内部数据
- 模块的内聚类型包括7种类型:功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚
- 顺序内聚:一个模块种的各个处理元素都密切相关于同一个功能且必须顺序执行,前一功能元素的输出就是下一个功能元素的输入
- 过程内聚:一个模块完成多个任务,这些任务按照指定的过程执行
- 逻辑内聚:模块内执行若干个逻辑相似的功能,通过参数确定该模块完成哪个功能
系统总体结构设计
- 系统结构设计原则:
- 分解-协调原则:解决复杂问题的一个很重要的原则就是把它分解成多个小问题分别处理,在处理过程中根据系统总体要求协调各部门的关系
- 自顶向下的原则:首先抓住系统总的功能目的,然后逐层分解,即先确定上层模块的功能,再确定下层模块的功能
- 信息隐蔽、抽象原则:上层模块只规定下层模块做什么、模块间的协调关系,但不规定怎么做,以保证各模块的相对独立性和内部结构的合理性
- 一致性原则:统一的规范、统一的标准
- 明确性原则:每个模块必须功能明确、接口明确
- 模块独立性要好,尽可能高内聚、低耦合
- 模块规模要适当:原有模块分解成若干功能尽可能单一的模块,但分解要适度,因为过小的模块有可能降低模块的独立性,造成系统接口的复杂性
- 优化模块结构时,适当的处理方法
- 使得模块功能完整
- 消除重复功能,改善软件结构
- 避免或减少模块之间的病态连接
- 模块的规模大小在考虑到各种具体情况的前提下,力争做到高内聚、低耦合、深度和宽度合理、扇入和扇出系数合理、模块规模适中等
- 在划分模块时,一个模块的作用范围应该在其控制范围之内。一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合,因而原则上一个模块的作用范围应该在其控制范围之内,若没有,则可以将判定所在模块合并到父模块中,使判定处于较高层次
结构化分析方法
数据流图
- 数据流图的基本图形元素:数据流、加工、数据存储、外部实体
- 数据流:由一组固定成分的数据组成,表示数据的流向
- 加工:输入数据流经过处理变成了输出数据流。数据流图中常见的3种错误:加工有输入但没有输出,加工有输出没有输入,加工中输入不足以产生输出
- 数据存储:以记录文件或记录表的形式来存储数据
- 外部实体:存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生数据的归宿地。如,对于一个考务处理系统而言,考生向系统提供报名单(输入数据流),所以考生是考务处理系统的一个源;而考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个宿
- 顶层图:描述系统的输入和输出,即系统从哪些外部实体接收数据流,以及系统发送数据流到哪些外部实体。顶层图只有一个加工,即待开发的软件系统
- 0层图:将顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得输入数据经过若干个加工处理后变换成顶层图的输出数据流
- 确定加工:根据功能分解、业务处理流程确定加工
- 确定数据流:父图中响应加工的输入/输出数据流为子图边界上的输入/输出数据流,子加工之间应增添一些新的数据流
- 数据存储:子图中需要保存某些中间数据,以备以后使用。新数据存储至少有一个加工为其写入数据,有一个加工读取数据
- 确定宿和源:将顶层图中的源和宿画在0层图中
数据字典
- 常用的加工逻辑描述方法有结构化语言、判定表和判定树3种
- 判定表:数据流图中某个加工的一组动作依赖于多个逻辑条件的取值,这时,用自然语言或结构化语言都不易于清楚地描述出来,而用判定表能够清楚地表示复杂的条件组合与应作的动作之间的对应关系
- 结构化语言:结构分为内层和外层
-
- 外层采用顺序、选择(IF-THEN-ELSE-ENDIF)、重复(DO-WHILE-ENDDO)3种基本结构
- 内层接近于自然语言的描述
WebApp分析与设计
WebApp设计
- 采用MVC(模型-视图-控制器)体系结构进行软件系统开发的优点:
- MVC模式的控制器和视图可以随着模型的扩展而进行相应的扩展,只要保持一种公共的接口,控制器和视图的旧版本也可以继续使用,提高系统的可维护性
- MVC模型允许使用各种不同视图来访问同一个服务器端的代码,即多个视图可以共享一个模型,有利于代码重用,提高系统的开发效率
面向对象技术
面向对象基础
面向对象的基础概念
- 面向对象的三大特征:封装、继承、多态
- 封装:一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开
- 继承:子类可以继承父类的属性和方法,子类中还可以定义自己的属性和方法。一个子类可以继承多个父类
- 多态:不同的对象收到同一个消息可以产生完全不同的结果
- 绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。静态绑定在编译时执行,动态绑定在运行时执行
面向对象分析
- 面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息
- 认定对象:在应用领域中,按自然存在的实体确定对象。在定义域中,首先将自然存在的“名词”作为一个对象,这通常是研究问题、定义域实体的良好开始
面向对象设计
- 面向对象的设计原则:
- 单一原则:当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任
- 开放封闭原则:可以扩展,即开放的;不可修改,即封闭的
- 里氏替换原则:在任何父类可以出现的地方,可以用子类的实例来赋值给父类型的引用
- 依赖倒置原则:细节依赖于抽象,即高模块不应该依赖于底层模块,二者都应该依赖于抽象
- 接口分离原则:不应该强迫客户依赖它们不用的方法,依赖于抽象,不依赖于具体
- 共同封闭原则:包中所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响
- 共同重用原则:一个包中的所有类应该是共同重用的,如果重用了包中的一个类,那么要重用包中的所有类
UML
UML中的图
- 用例图,展现参与者、用例(功能)
- 用例的关系:include包含关系、扩展关系extend、泛化关系
- 包含关系,当一个用例中所使用的某种功能,而该功能已经被另外的用例所定义,那么在用例执行过程中可以调用这个用例,这两个用例就是包含与被包含的关系
- 扩展关系,一个用例包含两种及两种以上的场景,可以将这个用例分为一个基本用例和多个扩展用例
- 泛化关系,即继承关系
- 用例的关系:include包含关系、扩展关系extend、泛化关系
- 类图,类之间的关系包括依赖、聚合、组合、泛化(继承)、实现
- 泛化关系是解题的突破点
- UML状态图
- 状态图由状态、转换、事件和活动组成,由于状态可以是单一的,也可以是嵌套的,所以活动可以在状态内执行,也可以在状态迁移时执行
- 转换(迁移)是两种状态之间的一种关系,表示对象在源状态执行一定的事件或动作,并且在某个特定事件发生而且某个特定条件满足时而进入目标状态,事件触发没有特定监护条件的迁移,对象也会离开当前状态
- 转换(迁移)是源状态和目标状态之间的一种关系,可以包含触发事件、监护条件、状态、动作
- 当某个事件发生后,对象的状态将发生变化,事件可以触发迁移
- UML活动图
- 活动图展现了在系统内从一个活动到另一个活动的流程
- 元素:开始、分支、并发分叉、并发汇合、结束
- UML构件图
- 构件图展现了一组构件之间的组织和依赖,专注于系统的静态实现视图,图中通常包括构件、接口以及各种关系。
设计模式
结构型设计模式
- 适配器模式,是结构型对象模式:
- 意图:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
- 适用性:1)想使用一个已经存在的类,而它的接口不符合要求;2)想创建一个可以服用的类,该类可以与其他不相关的类或不可预见的类协同工作
- 示例:驱动新能源汽车的发动机时,电能和光能汽车分别采用不同驱动方法,而客户端希望使用统一的驱动方法,需要定义一个统一的驱动接口屏蔽不同的驱动方法
- 桥接模式(Bridge),是结构型对象模式:
- 意图:将抽象部分与其实现部分分离,使它们可以独立变化
- 适用情况:不希望在抽象和它的实现部分之间有一个固定的绑定关系
- 示例:欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。该绘图软件的扩展性要求将不断扩充新的图形和新的绘图程序。以绘制直线和图形为例,得到如下图所示的类图。该设计采用()模式将抽象部分与其实现部分分离,使它们都可以独立地变化
行为设计模型
- 责任链模式,是行为型对象模式:
- 意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
- 适用性:1)有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;2)想在不明确指定接收者的情况下向多个对象中的一个提交一个请求;3)可处理一个请求的对象集合应被动态指定
- 示例:不同级别的日志信息记录方式不同,每个级别的日志处理对象根据信息级别高低,采用不同方式进行记录。每个日志处理对象检查消息的级别,如果达到它的级别则进行记录,否则不记录然后将消息传递给它的下一个日志处理对象
- 命令模式,是行为型对象模式
- 意图:将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作
- 适用性:抽象出待执行的动作以参数化某对象;在不同的时刻指定、排列和执行请求;支持取消操作;支持修改日志;用构建在原语操作上的高层操作构造一个系统
- 解释器模式,是行为型对象模式
- 意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
- 适用性:适用于当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树
- 迭代器模式,是行为型对象模式:
- 意图:提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示
- 适用性:访问一个聚合对象的内容而无须暴露它的内部表示;支持对聚合对象的多种遍历;为遍历不同的聚合结构提供一个统一的接口
- 中介者模式,是行为型对象模式:
- 意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
- 适用性:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;减少多个对象或类之间的通信复杂性
- 示例:在某系统中,不同组(GROUP)访问数据的权限不同,每个用户(User)可以是一个或多个组中的成员,每个组包含零个或多个用户。现要求在用户和组之间设计映射,将用户和组之间的关系由映射进行维护
- 备忘录模式,是行为型对象模式:
- 意图:在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态
- 适用性:必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态;如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性
- 观察者模式,是行为型对象模式:
- 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
- 适用性:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁
- 策略模式,是行为型对象模式:
- 意图:定义一系列算法,将它们一个一个封装起来,并且使它们可以相互替换
- 适用性:1)许多相关的类仅仅是行为有异;2)需要使用一个算法的不同变体;3)避免暴露复杂的、与算法有关的数据结构;4)定义了多种行为,以多个条件语句的形式出现
- 示例:将温度自动换算的系统,改造为一个更通用的应用,能够实现任意计量单位之间的换算,如千克与英镑之间的换算、厘米与英寸之间的换算等。
考点补充
- 采用面向对象方法进行软件开发,在分析阶段,架构师主要关注系统的行为,即系统应该做什么
算法设计与分析
动态规划法
动态规划法的基本思想
- 动态规划算法:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。这类问题的两个重要性质:
- 最优子结构:一个问题的最优解包含了其子问题的最优解
- 重叠子问题:用来解原问题的递归算法可以反复地解同样的子问题,而不是总在产生新的子问题
贪心法
贪心法的基本思想
- 贪心算法:不是从整体最优考虑,只是局部最优。这类问题的两个重要性质:
- 最优子结构:一个问题的最优解包含其子问题的最优解
- 贪心选择性质:问题的整体最优解可以通过一系列局部最优解的选择
数据库技术基础
基本概念
数据库的三级模式结构
- 数据库系统采用三级模式结构
- 外模式:用户与数据库系统的接口,是用户用到的那部分数据的描述
- 概念模式:也称模式,是数据库中全部数据的逻辑结构和特征的描述
- 内模式:数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式
数据模型
E-R模型
- 多对多的关系需要建立一个新的联系,如医生和病人,需要建立一个病房
- E-R图向关系模型的转换
- 一对一:可以转换为一个独立的关系模式,也可以与任何一端对应的关系模式合并
- 一对多:可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
- 多对多:转换为一个独立的关系模式,属性包括两个实体的主键以及联系的属性,关键字由两个实体的关键字组成
关系代数
5种基本的关系代数运算
- 并:RUS,由属于R或属于S的元组构成的集合
- 差:R-S,属于R但不属于S的元组构成的集合
- 广义笛卡尔积:R*S,两个元数分别为n目和m目的关系R和S的广义笛卡尔积是一个n+m列的元组集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组
- 投影:在关系中选择若干属性列组成新的关系
- 选择:从关系的水平方向进行运算,从关系R中选择满足给定条件的元组
关系数据库的规范化
规范化
- 第一范式(1NF):每一分量是不可再分的数据项
- 第二范式(2NF):每一个非主属性完全依赖于码
- 关系模式FIRST(sno,sname,status,city,pno,qty),函数依赖集F={sno->sname, sno->status,status->city,(sno,pno)->qty}。不满足二范式,FIRST的码为sno、pno,而非主属性sname、status、city部分函数依赖于码。将FIRST关系分解为FIRST1(sno,sname, status,city),FIRST2(sno,pno,qty)都属于2NF
- 第三范式(3NF):不存在非主属性对码的传递函数依赖
- FIRST1(sno,sname, status,city)不满足3NF,因为sno->status,status->city,存在非主属性city传递依赖于码sno。FIRST11(sno,sname, status),FIRST12(status,city)分别满足三范式
- 产生冗余和异常的两个重要原因是部份依赖和传递依赖
数据库的控制功能
事务管理
- 事务具有4个特性:原子性、一致性、隔离性、持久性
- 原子性:事务是原子的,要么都做,要么都不做
- 一致性:数据库只包含成功事务提交的结果
- 隔离性:当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的
- 持久性:一旦事务提交成功,即使数据库崩溃,其对数据库的更新操作也将永久有效
网络与信息安全基础知识
网络互连硬件
网络的传输介质
- 在无线通信技术中,蓝牙通信距离最短,一般为10m左右,用来连接本地外围的通信设备
网络的协议与标准
- TCP/IP分层模型由4个层次组成:
-
- 应用层:用户调用应用程序来访问TCP/IP互连网络,以享受网络上提供的各种服务
- 传输层:提供应用程序间的通信服务
- 网际层:又称IP层,处理机器之间的通信问题
- 网络接口层:又称数据链路层,负责接收IP数据报,并把数据报通过选定的网络发出去
- 应用层协议:DHCP、DNS、telnet
- 传输层协议:TCP(传输控制协议)、UDP(用户数据报)
- 连接性,TCP是面向链接的协议,收发数据前与对方建立可靠的链接,其会监听端口;UDP是面向无连接的协议,数据传输前,源端和目的端不建立链接
- 可靠性,TCP提供了可靠交互的服务,传输过程中采用许多方法保证连接上提供可靠的传输服务,如编号确认、流量控制、计时器等,确保数据无差错,不丢失,不重复,且按序到达;UDP提供尽可能最快的交付,但不保证可靠交付。
- 报文传输,TCP面向字节流,将应用层传过来的报文看成一串无结构的字节流,分解成多个TCP报文传输后,在目的站重新装配;UDP协议面向报文,不拆分应用报文,只保留报文边界,一次发送一个报文,接收方除去报文头部后,原封不动将报文交给上层应用。
- 吞吐控制,TCP阻塞控制、流量控制、重传机制、滑动窗口等机制保证传输质量;UDP没有
- 双工性,TCP只能点对点双工通信;UDP支持一对一、一对多、多对多交互通信
- 使用场景,TCP应用于万维网(www)、文件传输(FTP)、电子邮件(SMTP);UDP适用于实时通信,SNMP是一种异步请求/响应协议,采用UDP协议进行封装
- 网际层协议:ARP、RARP、IP、ICMP
Internet及应用
Internet地址
- IPV6:用128位二进制表示,能够表示的地址空间2^128
- IPV4:用32位二进制表示,能够表示的地址空间2^32
- IP地址:计算机设备进行网络通信时,需要以IP地址为唯一标识进行网络通信。IP地址可分为公网IP和私网IP,公网 IP 地址是一个全球唯一的地址,用于标识一个设备在公共互联网上的位置,私网IP用于内部网络间的通信,主要使用在企业内部局域网中。
- IP地址作用于网络层,不具备唯一性
- MAC地址:一种硬件地址,是由网络适配器制造商预先设定的,用于在计算机网络中识别物理设备,具有唯一性,作用于数据链路层
Internet服务
- 电子邮件服务相关协议:
-
- SMTP:simple mail transfer protocol,即简单邮件传输协议,描述电子邮件的信息格式及其传递处理方法,保证被传送的电子邮件能够正确的寻址和可靠的传输,它是面向文本的网络协议,缺点是不能用来传送非ASCII码文本和非文字性附件
- MIME:多用途Internet邮件扩充协议,在发送电子邮件附加多媒体数据时需采用MIME协议来支持邮件传输
- PEM:增强私密邮件保护协议
- PGP:主要用在电子邮箱的加密等服务中
- POP:保管用户未能及时取走的邮件
网络安全概述
- 漏洞扫描系统对信息系统和服务器进行定期扫描,可以发现高危风险和安全漏洞
- 入侵检测:目的是检测出系统中违背系统安全性规则或者威胁到系统安全的活动,发现入侵行为并报警,但不能阻止恶意攻击。入侵检测技术包括专家系统、模型检测、简单匹配
- 包过滤防火墙:在IP层(网络层)实现的防火墙技术,可根据包的源/目的IP地址、源/目的端口等包头信息判断是否允许包通过,可见包过滤防火墙技术决定让不让包通过,无法拦截对应用层的攻击
- Web应用防火墙:根据预先定义的过滤规则和安全防护规则,对所有访问Web服务器的HTTP请求和服务器响应,进行HTTP协议和内容的过滤,进而对Web服务器和Web应用提供安全防护功能
- 数据库审计:监控并记录用户对数据库服务器的各种操作,并可以对数据库操作命令进行回放
- ACL:Access Control List,访问控制列表。一种用于控制用户对资源的访问权限的方法,ACL中包含了一系列的访问规则,每个规则指定了哪些用户或用户组有权访问资源,以及具体的访问权限。
- SNAT:局域网主机共享单个公网IP地址接入internet
考点补充
- netstat:访问网络连接状态及相关信息的命令,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况
- ping:测试两台主机之间的连通性
- msconfig:旨在对 Microsoft Windows 启动过程进行故障排除。它可以禁用或重新启用在启动时运行的软件、设备驱动程序或 Windows 服务,还可以更改启动参数
- cmd:windows 命令解释器
标准化和软件知识产权基础知识
知识产权基础知识
计算机软件著作权
- 公民作为单位的雇员:如其开发的软件属于执行本职工作的结果,软件著作权应当归单位享有;若开发的软件不是执行本职工作的结果,著作权不属于单位享有,如果雇员主要使用了单位的设备,不能属于雇员个人享有。
- 委托开发软件作品:接受他人委托开发的软件,其著作权的归属由委托者与受委托者签订书面合同约定,无合同或合同未作明确约定的,其著作权由受委托者享有。
- 软件著作权中的翻译权是指将原软件从一种程序语言转换成另一种程序语言的权利
- 我国保护计算机软件著作权的两个基本法律文件:《中华人民共和国著作权法》和《计算机软件保护条例》
专利权概述
- 获取条件:专利权、商标权需要申请才能获得,著作权、商业秘密权自动获取
商标权考点
- 必须使用注册商标的是烟草类商品
- 商标权可申请延期,有可能无限期拥有知识产权
补充考点
三层C/S结构
- 三层C/S结构是将软件在逻辑上分成表示层、功能层和数据层三部分
- 三层C/S结构的优点:
- 具有更灵活的硬件系统,对于各层可以选择与其处理负荷和处理特性相适应的硬件
- 合理分割三层结构并使其独立,可以使系统的结构变得简单清晰,这样提高了程序得可维护性
- 应用各层可以并行开发,各层可以选择各自最适合得开发语言,有利于变更和维护应用技术规范,按层分割功能使得各个程序的处理逻辑变得十分简单
- 利用功能层有效地隔离开表示层和数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段非法地访问数据层,为严格的安全管理奠定了坚实的基础
- 系统可用性高,具有良好的开放性,可跨平台操作,支持异构数据库
高质量的软件
- 高质量的软件必须满足3个前提:1)软件必须满足用户规定的需求;2)软件应遵循规定标准所定义的一系列开发准则;3)软件还应满足某些隐含的需求,如可理解性、可维护性
高质量文档
- 高质量文档包括的特点:针对性、无歧义、易读性、完整性、灵活性、可追溯性
图像扫描仪
- 使用图像扫描仪以300DPI的分辨率扫描一幅3*4英寸的图片,数字图像的像素为900*1200
下午题
第三题UML建模
【软考中级-软件设计师】案例分析(三)下午题-分析与设计_哔哩哔哩_bilibili
2022年上半年真题解析
第四题算法题
分治法(递归)
- 基本思想:一个大问题分解成一些规模较小的子问题,分而治之。子问题相互独立且与原问题相同
- 两个基本要素:边界条件、递归体
- 典型实例:归并排序、最大子段和问题
动态规划法
- 基本思想:一个大问题分解成一些子问题,子问题往往不是相互独立的
- 基本要素:用一个表记录所有已解决的子问题的答案
- 典型实例:0-1背包、最长公共子序列
回溯法
- 基本思想:深度优先遍历的思想
- 基本要素:画树图更有利于理解深度遍历和回溯过程
- 典型案例:n皇后问题
第六题Java语言程序设计
- 考点:语法、设计模式