中级软件设计师知识点
个人经验
我是2024年上半年准备软考的,本来我老婆推荐我考中级项目管理,因为可以多了解一些项目上的知识,当然可能主要还是因为她之前买了中级项目管理课程的备考视频课程,这个课程当时马上过期了她不想白白浪费掉买来的资源。我当时也觉得没什么大不了的,有视频资源应该好考一些,我大概提前两个多月就开始看视频做笔记,看了大半个月等到软考网站上公布了今年的软考考试计划以后,发现上半年不考中级项目管理了,当时就有点起了个大早赶了个晚集的感觉,只能重新准备中级软件设计师考试了。
中级项目集成管理考试笔记链接有兴趣的自取。
中级软件设计师考试上午题准备个人感觉没什么技巧,该死记的死记,该理解的理解,我大概花了一个半月左右利用一些零散时间学习。我主要参考的资料是:软件设计师精华知识点笔记 和 B站上的希赛中级软件设计师讲解视频。
下午题真是有技巧的,我本来是准备看看知识点刷刷题就可以考试了,后面做了几次下午历年考试题以后就发现这样的水平考试及格好像比较危险,于是后面半个月在B站上各种找资料,看了一周左右讲解历年下午题的视频以后瞬间感觉下午题有救了。我当时主要看的视频是 zst_2001博主的下午真题讲解
刷题阶段我主要用的软考通app,这也是网上搜索来的,用着也还行。
上午题
计算机网络概论
硬件
计算机硬件组成:运算器、控制器、存储器、输入设备、输出设备
中央处理器CPU
组成:运算器、控制器、寄存器组、控制总线
运算器组成:算术逻辑单元ALU、累加计算器AC(简称累加器,源操作数和结果暂存在此)、数据缓冲寄存器DR、状态条件寄存器PSW
控制器组成:指令寄存器IR Instruction Register【暂存CPU指令】、程序计数器PC Program Counter【存储指令的地址】、地址寄存器AR Address Register【CPU访问的内存地址】、指令译码器ID Instruction Decoder【分析指令操作码】
总线
PCI:并行、内总线
SCSI:并行、外总线
程序的局限性表现在时间局部性和空间局部性
时间局部性是指如果程序中的某条指令一旦被执行,则不久的将来该指令可能再次被执行;
空间局部性是指一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问。
存储
DRAM:集成率高、功耗低、动态刷新
SRAM:集成率低、功耗大、不需要动态刷新
指令系统
CICS:复杂指令系统,兼容性强,指令繁多、长度可变,由微程序实现
RICS:精简指令系统,指令少,使用频率接近,主要依靠硬件实现(增加通用寄存器),适合流水线
中断
功能:提供外设和CPU之间的并行工作;与DMA一样
中断向量:提供中断服务程序入口地址
DMA传输和等待传输需要一个总线周期
数的表示
原码(原数二进制表示)、反码(正数原码与反码相同,负数除符号位外全部取反)、补码(正数与原码相同,负数反码加1)
校验码
1、奇偶校验
积校验:所有位数(信息位和校验位)中1个数为奇数
偶校验:所有位数中1个数为偶数
只能检查错误,不能纠错
2、CRC循环冗余校验:模2除法运算,能检错不能纠错
3、海明校验:利用奇偶性来检错和纠错
哈夫曼编码
哈夫曼树特点:越小的值越在下层,左子节点值小于右子节点值,根节点值等于两个子节点之和
构造哈夫曼树:以此选出最小的两个数作为两个节点,子节点之和等于根节点;数组中如果有超过两个数小于当前根节点,则使用这两个数重新构造一个子树,否则就在当前分支继续构建;左子树路径为0,右子树路径为1;
节点码长:节点的层级
程序设计语言
概念
基本成分包括数据、运算、控制和传输
控制成分包括顺序、选择和循环3种结构
操作系统
输入输出技术
程序控制(查询)方式:CPU主动查询外设是否完成数据传输,效率极低。CPU串行
程序中断方式:外设完成数据传输后,向CPU发送中断,等待CPU处理数据,效率相对较高。适用于键盘等实时性较高的场景。CPU并行
DMA方式(直接主存存取):CPU只需完成必要的初始化等操作,数据传输的整个过程都有DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。适用于硬盘等高速设备;数据传输受存储周期控制。CPU并行
难点
1、信号量(P:申请资源 s=s-1, V:释放资源 s =s+1)
设备管理
IO管理软件请求层次:用户进程-->设备无关程序--> 设备驱动程序--> 中断处理程序 --> 硬件
编译
编译型语言处理过程为:预处理-编译-链接
编译过程
词法分析阶段依据语言的词法规则,主要是针对词汇的检查。
语法分析的任务是在词法分析的基础上,针对语法结构的检查。
语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。
符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。
进程资源图
是否可化简:非阻塞节点可化简,阻塞节点不可化简
自动机
有限自动机可识别的序列 必须要达到终态节点
软件工程
关系模式
数据冗余
带来的问题:数据冗余、插入异常、更新异常、删除异常
解决方案:关系拆分
模块耦合
内聚性
软件设计原则
模块化设计要求高内聚、低耦合
模块的大小要适中
模块的扇入和扇出要合理。模块的扇入指模块直接上级模块的个数。模块的直属下级模块个数即为模块的扇出
深度和宽度适当;复杂性
尽力使模块的作用域在其控制域之内
开发模型
喷泉模型:自下而上,各阶段互相迭代无间隙
原型法
适用于用户需求不清、需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性;
目的是弄清目标的要求,确定所希望的特性,并探讨多种方案的可行性,可以用来探索特殊的软件解决方案;
迅速地开发出一个让用户看得见的系统框架,可以用来支持用户界面设计。
极限编程(XP)
概念:强调计划赶不上变化,无需初期做很多文档,提倡测试先行降低bug率
最佳实践:简单设计、测试先行、持续集成、现场客户、计划游戏、小型发布、隐喻、重构、结对编程、集体代码所有制、每周工作40小时、编码标准
水晶方法(Crystal)
概念:根据项目规模和重要性来区别项目并赋以对应的方法
并列争球法(Scrum)
概念:使用迭代方法,把一段短的时间的迭代称为一个冲刺,并按照优先级开开发
自适应软件开发(ASD)
概念:基于复杂自适应系统理论,旨在提高组织的适应力
软件测试
语句覆盖:所有语句都要覆盖到
路径覆盖:所有语句出现的结果都要覆盖到
白盒测试
白盒测试中语句覆盖是覆盖度最弱的;
黑盒测试
在设计测试用例时,一个好的无效等价类,应该只从一个角度违反规则。
软件质量特性
ISO/IEC 9126软件质量模型
该模型的质量特性和质量子特性如下:
功能性(适合性、准确性、互用性、依从性、安全性)
可靠性(成熟性、容错性、易恢复性)
易使用性(易理解性、易学性、易操作性)
效率(时间特性、资源特性)
可维护性(易分析性、易改变性、稳定性、易测试性)
可移植性(适应性、易安装性、一致性、易替换性)
软件管理生命周期
概念
软件详细设计阶段的主要任务包括:模块内的数据结构进行设计、对数据库进行物理设计、对每个模块进行详细的算法设计、代码设计、输入/输出设计、用户界面设计等其他设计。
软件概要设计阶段的主要任务包括
(1) 软件系统总体结构设计,将系统划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
(2) 数据结构及数据库设计
软件可维护性
MTTR: 平均故障修复时间, MTTF:平均无故障时间
软件可维护性:M=1/(1+MTTR)
软件可靠性: M= MTTF/(1+MTTF)
数据流图与数据字典
概念
数据字典会对数据流图中元素进行定义说明
数据流图建模规范:自顶向下、从抽象到具体的原则。
结构化设计方法
结构图:由模块、调用、数据、控制信息和转接符号5种基本符号组成;注意控制信息和控制成分的区别
人机界面设计
人机交互“黄金三原则”包括:用户操纵控制、减少用户的记忆负担、保持界面的一致性。
流程图
程序复杂度
McCabe方法
方法一:流程图中封闭区域(环路)个数+1;
方法二:有向图边数为m,节点数为n,有向图环路复杂度为m-n+2。边和节点表示流程图所有节点和边;
面向对象
基本概念
面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。
多态
参数多态:应用广泛、最纯的多态。
包含多态:同样的操作可用于一个类型及其子类型。包含多态一般需要进行运行时的类型检查。包含多态在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另外一个类型的子类型。
强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。
过载多态:同一个名称(操作符﹑函数名)在不同的上下文中有不同的类型。 目前软设考查比较多的是过载多态。
重载:函数或者方法有同样的名称,但是参数列表不相同的情形,这些函数可以属于同一个类,这些函数之间互相称之为重载函数或者方法。
覆盖:子类中重新定义父类中已经定义的方法。
设计原则
共同封闭原则:包中的所有类对于同一种性质的变化应该是共同封闭的。一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响,而对于其他包则不造成任何影响。
共同重用原则:指一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么也就相当于重用了包中的所有类。
开放-封闭原则:对扩展开放,对修改封闭。
接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
单一职责原则:设计目的单一的类
对象关系划分
聚合关系:某些情况下A对象包含B对象,脱离A对象B也可以存在
组合关系:A对象包含B,B对象不能脱离A存在
UML图
对象图:展现了某一个时刻一组对象以及它们之间的关系。
类图:展现了一组对象、接口、协作和它们之间的关系。
用例图:展现了一组用例、参与者以及它们之间的关系。
序列图:是一种交互图,描述了以时间顺序组织的对象之间的交互活动。
组件图(Component Diagram)展现了一组组件之间的组织和依赖。
通信图(communication diagram)是一种交互图,它强调收发消息的对象或参与者的结构组织。
部署图(Deploy Diagram)展示面向对象系统、构件(制品)的配置、物理资源之间的关系。
设计模式
类
工厂方法模式 factory method
适配器模式 adapter(也属于对象型)
模版方法模式 template method、解释器模式 interpreter
对象
抽象工厂模式 abstract factory、 原型模式 prototype、单例模式 singleton、构建器模式 builder
桥接模式 bridge、组合模式 composite、装饰器模式 decorator、外观模式 facade、享元模式 flyweight、代理模式 proxy
职责链模式 chain of responsibility、命令模式 command、迭代器模式 iterator、中介者模式 mediator、备忘录模式memento、观察者模式 observer、状态模式 state、策略模式 strategy、访问者模式 visitor
口诀:公司模姐、四桥组装外箱带
创建型
工厂方法模式
定义一个创建对象的接口,由子类决定实例化哪一个类,使子类实例化过程延迟
动态生产一个对象
抽象工厂模式
提供一个接口创建一系列相关或相互依赖的对象,无需指定具体得类
生产一系列对象
原型模式
用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象
克隆对象
单例模式
保证一个类只有一个实例,并提供一个全局访问点
单实例
构建器模式
将一个复杂类的表示和构造分离,使相同过程构造出不同的表示
复杂对象构造
结构型
适配器模式
将一个类的接口转换成用户想要的另一种接口,使原本不相容的接口得以相容后协同工作
转换接口
桥接模式
将类的抽象部分和实现部分拆开,使他们可以独立变化,抽象部分使用实现部分的接口与实现部分关联。接口就像一个桥梁
继承树拆分
组合模式
将具有层级关系的多个对象组合成树形结构以表示整体-部分的层次结构,使用户对单个对象和组合对象操作具有一致性
树型目录结构
装饰器模式
动态的给一个对象添加额外的指责/功能,就像添加一些装饰
附加职责
外观模式
为子系统的一组接口提供一个接口,使得在外界看来系统只有一个样子(外观)
对外统一接口
享元模式
使大量细粒度对象共享元对象的方法
文章共享文字对象
代理模式
为外部提供一个代理用以控制对象的访问
快捷方式
行为型
模版方法模式
定义一个算法操作的骨架,在子类中具体实现各步骤,使子类不改变算法骨架的情况下重新定义具体步骤
解释器模式
给定一种语言,定义文法表示和解释器,该解释器用于根据文法解释对应的语句
职责链模式
通过将请求者/接收者的功能拆分为多个模块链接起来,在链上传递请求,直到接收者处理
传递职责
命令模式
将请求封装为一个对象,通过参数化对请求实现排队、记录日志、撤销等操作
日志记录、可撤销
迭代器模式
给定一种统一的方法顺序访问聚合对象中的元素,而又不需要暴漏对象内部实现
中介者模式
用一个中介对象来封装一系列对象的交互,使各对象不需要显示互相调用,还可以独立改变对象间的交互
间接引用
备忘录模式
捕获一个对象内部状态并在外部保存,从而可以将对象恢复到原先的状态
观察者模式
定义一种对象间一对多的依赖关系,一个对象变化时依赖它的所有对象都收到通知并更新
状态模式
允许一个对象在内部状态变化时改变行为
状态改变行为
策略模式
封装一系列算法,使他们之间可替换,达到算法独立于用户变化
多方案切换
访问者模式
在不改变类的前提下定义作用于类中元素的新方法
测试
包括4个层次
算法层:测试类中的方法,相当于单元测试
类层:测试方法与属性的相互作用
模版层:测试协同工作的类或者对象间的相互作用
系统层:把各个子系统组装成完整的面向对象软件系统
数据结构与算法
常见算法
直接插入排序
O(n2)
基本有序最优O(n)
O(1)
稳定
shell排序
O(nlogn)
O(1)
不稳定
直接排序(选择)
O(n2)
O(1)
不稳定
堆排序
O(nlogn)
O(1)
不稳定
冒泡排序
O(n2)
O(1)
稳定
快速排序
O(nlogn)
基本有序最差O(n2)
O(log2n),基本有序O(1)
不稳定
归并排序
O(nlogn)
O(n)
稳定
基数排序
O(d(n+rd))
O(rd)
稳定
算法流程
直接插入排序
从前向后开始,先将前i个元素排好序,后续元素与前i个元素依次对比插入对应位置;
shell排序
1、设定一个初始步长,以这个步长为间隔的元素为一组进行直接插入排序;
2、缩短步长继续进行插入排序;重复该步骤直至步长为1;
3、对数据再进行一次直接插入排序;
直接排序(选择)
1、在未排序队列中找到最小的元素,放到起始位置;
2、继续在未排序队列中找到最小元素,放到已排序队列末尾;
3、重复第二步直至所有元素排序完毕;
堆排序
1、先使用数组元素初始化一个大顶堆:初始化一个二叉树,然后执行堆化操作;
2、将堆首元素与堆尾元素互换,并将堆尾元素执行出堆放入有序数组末尾,执行堆化操作;
3、重复第二步直至堆中元素只有一个,直接出堆放入有序数组末尾;
冒泡排序
1、比较相邻的两个元素,如果第一个比第二个大就交换;
2、重复第一步直到最后一对元素,则最后的元素为最大的元素;
3、继续从头开始重复第一部和第二步,除去最后已排序的元素,直至最后只剩一个元素;
快速排序 - 分治策略
1、从数组中选择一个元素作为基准;将比基准元素小的放到左边,比基准元素大的放到右边,本次排序之后基准元素就位于数列的中间位置,这个称为分区;
2、递归方式对大于基准元素和小雨基准元素的序列重复第一步进行排序,直至各个子序列元素数大于1;
归并排序 - 分治策略
1、申请带排序数组大小的空间用来存放合并后的序列
2、设定两个指针,位置指向两个有序序列起始位置,比较两个指针对应的元素,将较小的元素放入合并空间中并将指针后移;
3、重复步骤三直到某一指针到达序列结尾,将另一序列剩余元素全部复制到合并空间的尾部;
4、递归分治逻辑:以待排序数组中间元素为分界,递归左右两个子序列分别归并排序(1-3步);
基数排序
算法策略
分治法:一个问题拆成多个小规模相同子问题,代码:一般有递归;算法:归并排序、快速排序、二分搜索
贪心法(一般用于求满意解):使用局部最优策略,但是不一定全局最优;算法:背包问题、最小生成树
动态规划法:最优子结构;自顶向下时间复杂度O(2n),代码结合递归;自下向上时间复杂度O(na)效率高,代码使用数据
回溯法:如果不通回到上一个节点;代码:向前+1/向后-1;算法:深度优先、N皇后问题
分支限界: 算法:广度优先
稀疏矩阵进行压缩存储方式:三元组顺序表和十字链表
树
平衡二叉树
1、是二叉排序树
2、任意一个左右子树高度差小于等于1
最优二叉树(哈夫曼树)特点:?
m阶B-树:
图
无向连通图:
沟通路径公示:n*(n-1)/2
无向图n个顶点e条边,采用邻接矩阵存储:矩阵大小n^2, 时间复杂度 n+e
信息安全
5要素:机密性、完整性、可用性、可控性、可审查性
加密技术
对称加密(非公开密钥)
加密逻辑:使用密钥加密,并发密钥发送给对方
加密深度低效率高、密钥分发困难;
加密算法:DES、AES、3DES、RC-5、IDEA。 口诀:3S+5I
非对称加密(公开密钥)
加密逻辑:下载对方的公钥加密数据,对方是用自己的私钥解密
加密深度高效率低;
加密算法
对称加密
分组加密:DES、AES、3DES、IDEA
流密码:RC-5
非对称加密:RSA、DSA、ECC
认证技术
数字签名
处理逻辑:先使用信息摘要技术对数据进行信息摘要,再使用发送端的私钥进行加密,接收端使用发送端公钥进行解密;接收方使用数据签名数据验证真实数据完整性;
作用:接收者可验证数据真实性、发送着无法否认发送过该数据、数据无法被伪造
信息摘要:MD5 128位,SHA 160位
数字证书
证书处理逻辑:ca中心给服务端颁发证书,客户端下载到证书以后到ca中心下载公钥进行加密,服务端通过公钥进行解密
作用:身份认证
网络安全协议
PGP:应用层,对邮件和文件进行加密
SSL:传输层至应用层,安全套接字协议
TLS:传输层
SET:应用层
IPSEC:网络层
网络协议
TCP:
SMTP: 邮件发送协议 25
POP3:邮件接收协议 110
UDP
SNMP:161
TFTP: 69
DHCP: 67
MIME:是一个互联网标准,扩展了电子邮件标准
病毒与木马
木马病毒:一般强调控制操作
蠕虫病毒:震网、
引导区病毒:破坏引导盘、文件目录
宏病毒:破坏OFFICE文件相关
数据库系统
规范化理论
概念
主属性:所有候选键属性都是主属性
非主属性:非候选键属性
范式
第一范式1NF:所有属性都不可以再拆分(每个属性都是单属性)
第二范式2NF:当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在某个属性只依赖主属性的一部分属性)。比较典型的例子就是候选键是单属性,单属性是不可能存在部分函数依赖的。
第三范式3NF:当且仅当R是2NF,且R中没有非主属性传递依赖于候选键时,R就是3NF(此时,也不会存在部分依赖)。一般解决方法是拆分传递依赖的非主属性为一个新的关系模式。本质就是主键要直接决定所有非主属性,不能通过非主属性间接决定。
BC范式BCNF:R属于BCNF是指 当且仅当其F中每个依赖的决定因素必定包含R的某个候选码
传递依赖:A-->B, B-->C, 则A-->C为传递依赖
冗余依赖:存在与传递依赖重复的依赖关系,则为冗余依赖
概念设计过程
冲突类型
属性冲突。同一属性可能会存在于不同的分E-R图,并且属性的类型、取值范围和数据单位等不一致。
命名冲突。相同意义的属性在不同的分E-R图中有着不同的命名,或是名词相同的属性在不同的分E-R图中代表这不同的意义。
结构冲突。同一实体在不同的分E-R图中有不同的属性;
关系代数
交集:取相同的数据/字段
并集:取所有数据/字段
差集:取不相同的数据/字段,以前面表为参照点
选择:用小写希腊字母(σ)来表示,相当于数据库关键字where的作用
投影:投影相当于数据库关键字select的作用,用大写希腊字母(π)表示
笛卡尔积:乘法结合,第一个表的每一条记录与第二个表的所有记录组合
自然连接:基于笛卡尔积结果,对相同属性值相同的数据进行选择,然后去除属于右侧表的重复属性
左外连接:左外连接将返回左表中的所有行,以及右表中与左表匹配的行,如果右表中没有匹配的行,则对应列的值为NULL
右外连接:右外连接则是返回右表中的所有行,以及左表中与右表匹配的行,如果左表中没有匹配的行,则对应列的值为NULL。
完全外连接:全连接返回了两个表中的所有行,并且在没有匹配的情况下,对应的列值为NULL
其他
著作权
著作权中修改权、署名权、保护作品完整权都是永久保护的
著作权是自作品完成之时就开始保护
COCOMO II模型
体系结构阶段,在模型层次结构中有3种不同规模估算选择,即:对象点、功能点和代码行。
应用组装模型:对象点
早期设计阶段模型:功能点,功能点可以转换为代码行
体系结构模型:把工作量表示为代码行数。
下午题
试题一
第一题
先从交互数据流少的加工开始
第二题
先从交互数据流少的加工开始
第三题
注意事项:
数据流一端必须是加工
技巧
父图子图平衡
加工既有输入也有输出
数据守恒:根据题目内容检查是否有数据缺失
试题二
第一题 - 补充联系
实体与实体联系:用菱形➕实现连接两个实体,实线上填写对应关系,菱形内填写联系名
实体与子实体联系:用实现连接,实现中间加一个小圆圈
弱实体:依赖其他实体而存在;表示:两个框嵌套
试题三
UML
关系
关联:两个对象有关联关系; 实线左右两侧上方标明多重度,0..1或者0..*
聚合:部分和整体生命周期不一致,整体消失部分仍存在 。实线右侧连接空心菱形
组合:部分和整体生命周期一致,整体消失部分也消失。实线右侧连接实心菱形
依赖:A变化B也跟着变化,B依赖A, B---->A
泛化:父类和子类的关系,父类是子类的泛化;表示:子元素指向父元素,实线+空心箭头
实现:一种是接口和实现接口的类之间;另一种是用例和实现用例的协作之间。表示:虚线+空心箭头
用例图
关系
扩展关系:用例之间
包含关系:用例之间
泛化关系:用例与用例、参与者与参与者
关联关系:参与者和用例之间关系
试题六 - JAVA
类图中常见符号含义:
implements 类实现接口
抽象类及抽象方法
抽象方法:在父类中定义方法但不实现,在具体子类中实现对应的方法;
抽象类中不一定有抽象方法,有抽象方法的一定是抽象类
Cloneable
通用接口,其他类可以implements该接口
静态方法
Last updated