24年软件设计师!看这篇就够了(规划+知识点) 整理了软件设计师考试重要基础知识和各种考点~
祝大家逢考必过~
一,关于软考:
考试时间:
一年有两次软考,一般是五月末和十一月的中旬,具体时间官网通知:中国计算机技术职业资格网中国计算机技术职业资格网https://www.ruankao.org.cn/exam/plan
考试时长:
考试总时长240min
(注:基础知识模块开考90min后可以交卷,考应用技术模块,推荐做完选择题的同学可以留足时间给应用技术模块,画图和分析题目需要时间比较久)
题型和分值:
基础知识:120min
应用技术:120min
题型: 数据流图;
ER图;
UML类图;
算法题;
设计模式(java/c++选一道);
二,前言:
备考时间:2024/4月--2024/5月
推荐课程:B站up主zst_2001
学习路线(推荐)
1、上午题—计算机系统(5~6分) 总时长为8h 35min 23s
2、上午题—程序设计语言(固定6分)总时长为6h 47min 4s
3、下午题—试题一(15分)总时长为13h 10min 14s
4、上午题—知识产权(2~3分)总时长为1h 52min 43s
5、上午题—数据库(固定6分)总时长为17h 11min 44s
6、下午题—试题二(15分)总时长为10h 20min 10s
7、上午题—面向对象(3~4分)总时长为3h 46min 40s
8、上午题—UML(3~4分)总时长为6h 45min 37s
9、下午题—试题三(15分)总时长为11h 2min 20s
10、上午题—设计模式(固定4分)总时长为14h 17min 58s
11、下午题—试题六(15分)总时长为17h 17min 4s
12、上午题—操作系统(固定6分)总时长为12h 46min 56s
13、上午题—结构化开发(3~4分)总时长为3h 45min 22s
14、上午题—软件工程(上)(上+下一共:10分左右)总时长为15h 15min 13s
15、上午题—软件工程(下)(上+下一共:10分左右)总时长为3h 21min 58s
16、上午题—信息安全(5分左右)总时长为2h 27min 30s
17、上午题—计算机网络(固定5分)总时长为5h 36min 46s
18、上午题—数据结构(上)(上+下一共:5分左右)总时长为18h 28min 28s
19、上午题—数据结构(下)(上+下一共:5分左右)总时长为6h 28min 27s
20、上午题—算法(4~5分)总时长为9h 53min 24s
21、下午题—试题四(15分)总时长为9h 50min 3s
备考建议
备考时间充足的同学可以按路线完整刷一遍+刷一遍真题+错题回顾,时间紧张的同学可以直接听真题解析边看边做+错题回顾,模拟题可以做可以不做。
三,知识点整理
#1 计算机系统
1,海明码:
n个数据位,k个校验位,满足2^k-1≥n+k,码距为2只能检错,码距≥3时可能纠错
2,循环冗余校验码(crc):
k个数据位,r个校验位,码长k+r,采取模2运算,可以检错不能纠错,码距为2
3,RISC和CISC
RISC支持高级语言
CISC采用微码
4,Cache
①按冲突从小到大排:全相联映射<组相联映射<直接映射
②Cache与主存地址的映射是由硬件自动完成的
5,中断:
①中断向量:提供中断程序的入口地址
②中断响应时间:发出中断请求-进入中断服务程序的时间
③保存现场:返回继续执行源程序
6,输入输出(I/O)控制方式
①,程序查询方式
②中断查询方式
③直接存储器方式(DMA),主存与外设
CPU是在一个总线周期结束后响应DMA请求的,每传送一个数据都要一个存储周期。
④电源断电不可屏蔽,I/O中断可屏蔽
7,总线
①SCSI不属于系统总线
②总线复用可以减少总线中信息线的数量
③并行传输成本高速度快适合短距离传输
串行传输成本低速度慢适合长距离传输
④PCI内并,SCSI外并
8,加密解密(解决窃听,防止主动攻击)
①对称加密(私有密钥加密)
②非对称加密(公开密钥加密)
③混合加密:
发送发把明文对称加密后,再用接收方的公钥把加密后的明文和对称密钥加密,可以加密大量明文
9,摘要与数字签名(认证,防止被动攻击)
摘要:明文与hash码加密后得到,也就是说一个明文既要加密为密文,也要进行hash运算为信息摘要
数字签名(真实性):发送私钥签名,接收方公钥验证
数字证书(我们信任CA):
CA私钥加密,CA公钥解密,得到发送者的私钥签名
10,加密算法
11,可靠性公式
①串联
②并联
12,其他知识点
①指令寄存器的位数取决于指令字长
②CPU访问速度的快慢:通用寄存器>Cache>内存>外存
③被动攻击:流量分析,会话拦截
④主动攻击:重放,ip地址欺诈,拒绝服务,系统干涉,修改数据命令
#2 程序设计语言
1,编译程序和解释程序:
①编译程序的话,源程序要参与目标程序的执行
②解释程序是翻译成独立保存的目标程序,然后执行程序
2,程序语言的控制成分:
顺序结构,选择结构,循环结构
3,规定数据具有类型的作用:
①合理分配存储单元
②规定数据单位的取值范围和合理运算
③对表达式的合法性检查
4,传值调用和引用调用:
①传值调用:可以传递常数变量表达式
②引用调用(传址):不能传递常数和表达式
5,全局变量和局部变量:
全局变量在函数调用后值会变,而局部变量调用完不会影响原来的值
6,编译方式和解释方式和符号表
①编译方式:词法分析(记号流),语法分析(语法树,主要分析语句结构),语义分析(类型检查,不能发现动态语义错误),中间代码生成(后缀式,三地址码,三元式,四元式,树;与具体机器无关),代码优化,目标代码生成(与具体机器模切相关,执行寄存器的分配工作)
②解释方式:词法分析,语法分析,语意分析(不可省略且顺序不可交换,参与运行控制,程序执行速度慢)
③符号表:收集,记录源程序中相关符号的类型和特征等信息,并将其存入符号表中,记录源程序各个字符的必要信息,辅助语义的检查和代码生成
7,有限自动机(正确识别正规集词法分析工具):
包括初态和终态,DFA(确定的)和NFA(不确定的)两种自动机,反3符号表示取空
8,上下文无关文法
9,中缀式和后缀式(逆波兰):
①优先级相同的时候,从右往左
②后缀可利用栈转中缀
10,其他知识
①编译完成后,反编译不可还原源程序,只能得到功能等价的汇编程序
②脚本语言(php(适合动态网页),JavaScript,python)是动态语言,也就是弱类型语言,运行在解释器或虚拟机上
③数据空间要采取堆存储分配策略
④编译过程分配的是逻辑地址,程序运行时才是物理地址
⑤语法指导翻译是一种静态语义分析
⑥C语言得到可执行文件的顺序:预处理-编译-汇编-链接
⑦元组可重复,不可修改
#5 知识产权
1,工作产权:专利,商标
2,人身权:发表权(有时间限制),署名权(开发者身份权),修改权,保护作品完整权
3,知识产权具有很强的地域性,在本地具有的专利权,离开了本土使用就不需要使用费
4,计算机软件著作权法:《著作权法》,《计算机软件保护条例》(国务院)
主体:人
客体:源程序,目标程序,软件文档
生效时间:自完成开发后
保护期:自开发后50年,除开发者身份权外全无效
声明:若无合同规定,著作权为开发者,对软件归属有特别规定,则按规定来
5,非职务软件:
①所开发软件不是本职工作的结果
②所开发软件与工作内容无直接联系
③所开发软件没有用到公司的物质技术条件
只有满足三个才享有软件著作权,一般员工只享有署名权
6,商业秘密:技术秘密和经营秘密
7,专利权(设备,装置):
①先到先得,同时申请可协商
②一个发明只能一个人享有专利权,一个专利可以有共同申请人
8,商标权:
①10年有效,到期前六个月可续注册,可无限续注
②同一天申请商标权,先使用可获准注册,协商不满意的话,可以抽签决定
#6,数据库
1,数据库三级模式结构
①三级模式
外模式(子模式):视图
概念模式(模式):基本表
内模式(存储模式):存储文件
②二级映像
外模式/模式映像:逻辑独立性
模式/内模式映像:物理独立性
2,码(键)
超码:包含码的属性集,如(学生,姓名)
全码:所有属性集合才为关系模式的码,称为全码,比如(学生,姓名,班级)
3,关系模式
几元关系:有几个属性列就有几个元
4,完整性约束
5,投影与选择与连接
①投影π:针对垂直方向
关系R 关系S 选择 投影
②选择α:针对水平方向
-注意表达,选择会先把所有元组选择出来,然后根据选择的列数条件筛选出适合的元组
例:第一句表示筛选第一列的值为5的元组
第二句筛选第一列的值>第三列的值的元组
③连接⋈(需要先进行笛卡尔积):
。θ连接:I和J为条件
。等值连接:X和Y为条件列
。自然连接,如果没有同名属性,则退化为笛卡尔积,同名的属性值要同时相等,比如有A和B两个属性,则RA和SA相等,且RB和SA要相等:
例子:笛卡尔积R×S如下:
观察有一个同名属性A,则自然连接为
左外连接,右外连接,全外连接(都是先自然连接再进行补充的)
全外连接=左外连接+右外连接
6,SQL语句:
①笛卡尔积转SQL语句:R×S>>R,S
②自然连接转SQL语句:∧转and,∨转or
③删除或者新建列:
修改关键字也可以是modify or alter
④实体完整性:主键
参照完整性:外键
⑤SQL语言分类
7,聚合函数(where不能加聚合函数)
①一般方法
②执行顺序
③注意事项:
如果select语句后有存在聚合函数,则需要对select的属性列分组
④对视图进行操作,相当于对实表进行操作
⑤对索引进行操作,改变的是计算机的内模式
8,函数依赖
①定义
②闭包(部分属性推出整个函数集)
A(R1,R2)---------->R(R1,R2,R3,R4,R5)
③全码:所有属性的集合为一个候选码
9,范式(1nf不可再分):
①1nf-2nf:消除非主属性的部分函数依赖
②2nf-3nf:消除非主属性的传递函数依赖
③3nf-bcnf:消除主属性对不包括它的候选码的部分依赖和传递依赖
10,如何判断是否存在传递依赖 (X为候选键)
也就是Z传递函数依赖于X
11,无损连接:能否通过自然连接得到原关系模式
12,需求分析阶段(包括确定系统边界):
①需求说明文档
②数据字典
③数据流程图
13,概念结构分析阶段
①冲突:属性冲突(属性名一样,范围之类的不同),命名冲突,结构冲突(同一实体在不同ER图的属性不同)
14,逻辑结构设计阶段(关系规范化)
15,事物管理:
①原子性
②一致性
③隔离性
④持久性
16,封锁
①排它锁:只允许X锁(写锁)对象读取和修改,也不允许其他人上锁
②共享锁:任何人都可以对S锁对象读取,只允许加S锁,除非上锁人取消,否则不能对S锁对象修改
17,分布式数据库
#7 面向对象
1,类的分类
①实体类:是核心类
②接口类(边界类):是对象和系统交互的媒介
③控制类:是协调者
2,对象
①对象名
②属性(状态)
③方法
3,消息
对象与对象直接进行通信的构造
4,封装
封装是信息隐藏技术,对象是封装的数据和行为的整体
5,继承
子类与父类直接共享数据和方法的机制
多重继承可以使子类具有二义性
6,多态
父类名 对象 =new 子类名();
如: Person 小红 =new student();
小红.run();
编译的时候是先去Person类里面找这个run方法,如果编译通过,就去student里面执行run的子类方法
7,绑定
①静态绑定:编译
②动态绑定:运行,与类的继承和多态有关
8,面向对象设计原则
①单一责任原则:一个原因
②开放-封闭原则:对扩展开放,对修改关闭
③里氏替换原则:基类出现,则子类也可以出现
④依赖倒置原则:依赖抽象,不依赖细节/实现,高层不依赖低层
⑤接口分离原则:不依赖具体
⑥共同封闭原则:只对当前包中类有影响
⑦共同重用原则:对当前包所有类都重用
9,面向对象分析
①认定对象(确定问题域,名词)
②组织对象
③描述对象的相互作用
④确定对象的操作
⑤定义对象的内部信息
10,面向对象设计
①识别类和对象
②定义属性
③定义服务
④识别关系
⑤识别包
11,面向对象测试
①算法层
②类层
③模板层
④系统层
12,其他知识
①静态方法只能访问该类静态成员
②静态对象共享静态成员值(类似指针)
③图形的文字,斜字体抽象类,正体具体类
#8 UML语言
1,事物
①结构事物:静态,名词
②行为事物:动态,动词
③分组事物:包
④注释事物:注解
2,关系
①依赖中,A为依赖事物,B为独立事物
②关联多重度:A类的实例可对应B类多个实例
③用面向对象开发方法时,当两个关联关系为多对多,则需要新建新类(多对多联系)
聚合: ,组合:
3,图
①类图:词汇,写作,逻辑数据库建模
类图的属性修饰符含义:
+ :public 公有的
- : private 私有的
#:protected 受保护的
~ :package 包的
②用例图(语境,需求建模)
关联:参与者与用例
扩展和包含:用例与用例
泛化:用例与用例,参与者与参与者
③序列图(顺序图,动态)
注意:一个用例一个顺序图!!!
④通信图(协作图,动态)
⑤状态图(反应型对象):状态,活动,转换,事件
1,状态(只有一个开始,可以没有结束)
2,活动
3,转换(状态可以转给自己)
⑥活动图(特殊的状态图)
要点:可以用于复杂用例的流程建模
⑦构件图(组件图,物理建模)
⑧部署图(物理建模)
展现硬件和软件之间的联系,实施阶段使用
⑨总结:UML图总结
#9 设计模式(非常重要)
一,概念和分类(24种模式都得熟悉)
二,具体阐述
1,概念性模式
①工厂方法模式(一个工厂一个产品)
②抽象工厂模式(一个工厂多个产品)
③生成器模式
④单例模式
一个类只有一个实例
⑤原型模式
可以进行复制
2,结构性模式
①适配器模式
②桥接模式
③组合模式
④装饰器模式
⑤外观模式
⑥享元模式
⑦代理模式
3,行为性模式
①责任链模式
②命令模式
③解释器模式(类)
④迭代器模式
⑤中介者模式
⑥备忘录模式
⑦观察者模式
⑧状态者模式
⑨策略模式
⑩模板方法(类)
⑩①访问者
#10 操作系统
一,操作系统层次
二,前趋图
三,死锁
四,进程
①共享同一个进程的这些线程之间是不可见的
②优先淘汰在内存,未访问,未修改的页面
五,分页存储管理
做题步骤:先看页内占多少,剩下的就是页号,对应页号的物理块作为物理地址前面数字
六,缓冲区
七,调度算法
旋转调度算法
多级索引
位示图:
I/O系统的层次结构
八,其他知识
进行磁盘调度时,先移臂,再旋转
#11,结构化开发
一,耦合( 高耦合度独立性差)
无直接耦合:不传递信息
数据耦合:简单的值传递
标记耦合:复杂值和数据结构传递
控制耦合:控制变量
外部耦合:软件之外的传递
公共耦合:公共变量的交互
内部耦合:直接使用另一方内部数据
二,内聚
偶然内聚:无联系
逻辑内聚:逻辑上相似
时间内聚:同时执行
过程内聚:指定的次序或过程执行
通信内聚:数据结构执行
顺序内聚:顺序执行
功能内聚:共同执行,缺一不可,最强内聚!
#15,信息安全
---内网------DMZ(公共)------外网--
一,防火墙
①包过滤防火墙(网络层)
处理:源ip地址,目的ip地址,端口号
特点:速度快,对用户透明,不能处理新威胁
②应用代理防火墙(应用层)
处理:彻底隔绝内网与外围的直接通信
特点:速度慢,配置困难,检查协议特征
③状态检测防火墙
特点:结合了前面两种防火墙的优点
二,病毒
三,网络攻击
入侵检测:专家系统,简单匹配,模型检测
四,网络安全
①传输层安全协议:SSL,TLS
②远程连接:SSH(安全),telnet,RFB
③邮件协议:MIME,PGP
④HTTPS:443 端口
⑤HTTP:80 端口
⑥外部网关:BGP
五,其他知识
#16,计算机网络
一,网络设备
物理层:中继器,集线器(多端口中继器)
数据链路层:网桥,交换机(多端口网桥)
网络层:路由器
应用层:网关
二,协议簇
注:TCP和UDP是建立在ip之上的
三,TCP:
四,邮件协议(TCP)
SMTP(发送):端口号25
POP3(接收):端口号110
MIME:邮件附加功能协议(不安全)
PEM:邮件私密协议
#12 软件工程
一,CMM
①初始级:杂乱无章,靠英雄
②可重复级:基本项目管理
③已定义级:文档化,标准化
④已管理级:详细度量,产品质量
⑤优化级:定量分析,改进标准化
二,CMMI(CMM的集成)
①阶段式模型
②连续式模型(0-5分)
三,模型
①瀑布模型
特点:软件需求目标明确,有开发经验,在原项目上替换改进,每一步写一个文档
缺点:难以适应需求变化,一般后期才能发现问题,风控弱
②V模型(瀑布模型的变体)
③增量模型(具有瀑布模型特点)
特点:可以短时间提交第一个增量,一般第一个增量为核心产品,后续对每一个增量根据用户进行完善
缺点:如果初始增量无符合要求,则后续增量修改可能也有影响
③演化模型(原型模型,螺旋模型)
原型模型
特点:用户前期需求不清晰,变化大,规模不大,不复杂的项目,能快速低成本构造原型,不能快速上市
螺旋模型
特点:可以进行风险分析,开发分周期进行,支持动态需求变化,支持大规模且复杂的项目
缺点:提交时间长,对专业知识要求苛刻,成本高
④喷泉模型(步骤间可越界)
特点:适用于面向对象开发 有迭代性和无间隙性,活动可以交叉进行,各活动可同时进行
缺点:因为可以同时开发,所以需要大量开发人员检查文档,要严格管理文档
⑤统一过程模型
特点:将大项目分为小项目。
初始阶段:生命周期目标
精化阶段:生命周期架构
构建阶段:运作功能
移交阶段:产品发布
四,敏捷方法
1,极限编程XP
特点:沟通,简单性,反馈和勇气,十二实践
2,水晶法crystal
特点:每个项目都要有特定的策略,约定,方法论
3,并列争求法scrum
特点:迭代,冲刺
4,自适应软件开发ASD
特点:六个基本原则
5,敏捷统一过程AUP
特点:大型上连续,小型上迭代
五,系统设计
1,概要设计
①总体设计:按功能划分模块,子系统
②模块间数据结构设计
③编写概要设计文稿
2,详细设计
①详细算法设计
②模块内数据结构设计
③数据库物理设计和其他设计
六,PERT图
要点:
①开始时刻的最早和最迟时刻都是0
②结束时刻的最早最迟时刻都相等
③最早时刻从开始时刻开始求,最迟时刻从结束时刻开始求
④最迟一般取前一个的最小值,最早一般取最大值
七,McCabe度量法
复杂度=剪头-结点+2
复杂度=闭合圈+1
八,软件配置
#3 数据结构
计算算法时间复杂度
一,顺序表
①插入,删除的时间复杂度:最坏为O(n)
②查询的时间复杂度为O(1)
二,单链表
①插入,删除,查询的时间复杂度最坏都为O(n)
三,栈(递归使用)
四,顺序队列与队列链式存储
①从对头出,从队尾进
②顺序队列的入队和出队每次都要修改队列长度,循环队列可以不用
②链式存储队列的入队和出队不需要遍历整个链表
注:若存储规模确定,顺序表存储队列比单链表效率高
五,串
串的朴素next值计算
next[1]=0
next[2]=1
六,矩阵
①,对称性矩阵
②三对角矩阵
③稀疏矩阵
特点:与三元组表有关
七,树
①度:树的非叶子结点的度
②树的结点数=所有结点的度+1(叶子结点度为0)
③度为m的树第i层至少有m^(i-1)个结点
④高度为h,度为m的树的结点至多个数:
八,二叉树
1,二叉树
n0=n2+1,也就是叶子结点比度为2结点多(最优二叉树才有)
2,完全二叉树
除第n-1层满外,第n层只需要从左到右依次有结点就行
3,平衡二叉树
4,二叉链表与三叉链表
①二叉链表的空指针数:n+1
②三叉链表的空指针数:n+2
5,最优二叉树(哈夫曼树)
①只存在结点值为0和2的结点,总结点值为2n-1
②一般权重小的放左边,大的放右边
九,图
1,图的度数:即顶点所连边的条数,不管有向图还是无向图,总的度数=边数×2
2,连通图和强连通图
3,图的遍历方法:深度优先和广度优先
4,有向无环图的拓扑序列
步骤:
①从入度为0的顶点开始,输出并删除所连的边
②重复第①步,直到剩下一个顶点
特点:假设vi顶点在vj顶点之前
5,顺序查找和折半查找
①顺序查找(有序)
1.1 对于顺序存储,链式存储都可以
1.2 平均查找长度:(n+1)/2
②折半查找(有序)
2.1 只适合顺序存储,有序排列
2.2 最多查找时间:log2n(下取整)+1
例题:
A选项步骤:
视频地址:2015年上半年第60题_哔哩哔哩_bilibili
十,哈希表
①具有散列性
②冲突尽可能少
③尽可能使关键字的所有组成都起作用
十一,堆(优先队列的实现结构)
①小顶堆:根节点小的堆
②大顶堆:根节点大的堆
十二,排序
①直接插入排序:
1.1 稳定
1.2 适用于基本有序的排列,可以达到最好
1.3,复杂度
②希尔排序(分组完再插入排序):
2.1 不稳定
2.2 复杂度
③简单选择排序:
3.1 不稳定
3.2 可归位
3.3 复杂度
④堆排序(选择排序)
4.1 不稳定
4.2 可归位(每次都交换根节点和尾节点)
4.3 大顶堆:排序完从小到大
4.4 复杂度
⑤快速排序(中位数作为基准最佳)
5.1 不稳定
5.2 可归位
5.3 复杂度
⑥冒泡排序
6.1 稳定
6.2 可归位
6.3 复杂度
⑦归并排序
7.1 稳定
7.2 复杂度
总结①
总结:具有稳定性:插入排序,冒泡排序,归并排序
总结③:第一趟排序完能确认某个元素最终位置的排序:冒泡排序,简单选择排序,堆排序,快速排序
#20 算法设计
一,动态规划(解决全局最优解问题)
特点:全局最优解,最优子结构,子问题不独立,可以来回调用
①0-1背包
②最长公共子序列
③矩阵连乘(最大为On3)
二,贪心算法
特点:局部最优解,具有最优子结构,贪心性质
①部分背包问题
②构造哈希树
三,回溯法
特点:深度优先遍历
①N皇后问题
四,分治法(将大问题化为小问题)
①归并排序
④最大字段和(nlgn)
五,分支限界法
特点:广度优先遍历(时间复杂度n+e)
题外话:
之前说出完成绩就准备出这个知识整理,熬了几天夜终于弄完了,也算给软考备考时光画个句号,24年的题目相比前几年,少了很多诸如前驱图的简单题,考纲冷门题相比前几年多了不少,可能出题意向有改变的趋势,不过目前的整理知识拿来合格是完全没问题的,放心跟视频学知识点~,祝大家考试顺利~