软件设计师软考笔记
软件设计师(中级)
软考方向
软考(软件水平考试)是由人力资源和社会保障部与工信部领导下的国家级考试。每年有2次考试,上半年考试时间为5月底,下半年考试时间为11月中旬。
软考分为三个级别层次,初级、中级和高级。五个专业:计算机软件、计算机网络、计算机应用、信息系统、信息服务。共计27个岗位资格考试。
计算机软件资格考试报名条件不限学历、资历,不限年龄、专业。只要你觉得自己可以,就可以参加适合自己的级别进行考试。
软考证书长期有效。不需要定期登记。
官网:ruankao.org.cn
时间:2020-10
软件设计师
软件设计师是软考的中级资格。
考试通过条件:
考试分为上午150分钟和下午150分钟两场,上午共75分,全部为单选题;下午共75分,为问答题;只有上午和下午的卷面得分都大于45分,才算考试通过,考试通过后颁发相应的资格证书。
《软件设计师教程》第五版(2018.2出版)是软考指定官方教材,分为12章节,共计676页。
注: 此版本中已经把多媒体相关的知识点从考试大纲中去除;
我的成绩
2021年上半年考试成绩:
- 上午:49分
- 下午:50分
刷题
确定题型
首先研究试卷的题型
上午选择题共75道,每道题1分,卷面共计75分,及格线45分。
下午案例题共5道,每道题15分,卷面共计75分,及格线45分。
第一道题:结构化开发方法与数据流图;
第二道题:数据库分析与设计,给出E-R图;
第三道题:面向对象分析与设计,给出UML图;
第四道题:算法(C语言);
第五道题:程序设计语言和设计模式,(C++ 或Java实现)
案例题答题小技巧:
根据题目的分值来推测要回答几方面,如果题目为4分, 则很大可能性是4个方面;如果是4.5分, 则很大可能性是3个方面;
设计模式(大题)2009-2019年共计11年的22场考试
2019下半年 观察者模式Observer 动态规划
2019上半年 策略模式Strategy 回溯法
2018下半年 状态模式 State 动态规划
2018上半年 生成器模式 Builder 动态规划
2017下半年 桥接模式 回溯法
2017上半年 生成器模式Builder 分治法
2016下半年 装饰模式Decorator 字符串模式匹配算法
2016上半年 适配器模式 Adapter 动态规划
2015下半年 策略模式 动态规划
2015上半年 访问者模式Visitor 回溯法
2014下半年 命令模式Command 动态规划
2014上半年 观察者模式 分治法
2013下半年 桥接模式 动态规划
2013上半年 原型模式Prototype 贪心
2012下半年 抽象工厂模式 贪心
2012上半年 装饰器模式 未知
2011下半年 状态模式 回溯法
2011上半年 组合模式Composition 排序算法
2010下半年 组合模式 优先队列
2010上半年 策略模式 有向图的拓扑排序
2009下半年 组合模式 回溯法求解0-1背包
2009上半年 桥接模式 最短路径算法
设计模式考察占比:
设计模式 | 出现次数 |
---|---|
策略模式 | 3 |
桥接模式 | 3 |
组合模式 | 3 |
状态模式 | 2 |
生成器模式 Builder | 2 |
观察者模式Observer | 2 |
装饰器模式 | 2 |
抽象工厂模式 | 1 |
命令模式 | 1 |
原型模式Prototype | 1 |
访问者模式Visitor | 1 |
适配器模式 | 1 |
下面是最近11年21场考试(2009-2019)的算法题考查情况:
算法 | 出现次数 |
---|---|
动态规划 | 7 |
回溯法 | 5 |
分治法 | 2 |
贪心算法 | 2 |
字符串模式匹配算法 | 1 |
排序算法 | 1 |
优先队列(二叉树) | 1 |
拓扑排序(图) | 1 |
最短路径(图) | 1 |
在最近7年的14场考试中(2013-2019)算法题考查,动态规划算法占比高达50%,其次是回溯算法、分治算法和贪心算法;
刷题计划
周六日两天时间刷题,刷两套题,如2019年上半年和2019年下半年;
周一到周五根据试题把自己不懂的知识点延伸进一步研究和学习;
这样的话一周可以解决2套试题,两个月可以刷16套题;最近8年的刷完并理解,基本上就差不多了。
编译器的工作过程:
词法分析-> 语法分析 ->中间代码生成 ->代码优化 ->目标代码生成
词法分析的输出是记号流, 也是语法分析的输入;
词法分析的任务是将源程序字符串转化成
磁盘调度管理中, 先进行移臂调度寻找磁道, 再进行旋转调度寻找扇区;
敏捷开发方法 scrum 的步骤
知识点汇总
CPU 组成
CPU 中央处理器主要由三部分组成:
- 控制单元
- 运算单元
- 存储单元

控制单元:
控制单元是整个CPU的控制指挥中心。它根据用户预先编好的程序,依次从存储器中取出各条指令。存放在指令寄存器IR中,通过指令译码器分析应该进行什么操作,然后通过操作控制器向响应的部件发出控制信号。
控制单元中包含程序计数器、指令寄存器、地址寄存器、指令译码器。
运算单元:
运算单元可以执行算数运算和逻辑运算,运算单元所进行的全部操作都是控制单元发出的控制信号来指挥的,所以它是执行部件。
存储单元:
包括高速缓存和寄存器组,是CPU暂存数据的地方。里面保存着等待处理或者已经被处理过的数据。高速缓存和寄存器组的容量都非常下,寄存器的容量则更小,但访问速度是极快的。
寄存器组可分为通用寄存器和专用寄存器。控制单元和运算单元中的寄存器是专用寄存器,其作用是固定的,而通用寄存器可以由程序员支配。
程序计数器(PC):
存放执行指令的地址,计算之前就要用到;
指令寄存器(IR):
用于暂存当前正在执行的指令;
地址寄存器(AR):
保存当前CPU所要访问的内存单元地址;
累加器(AC):
它是一个通用寄存器,用来暂存运算单元ALU 的运算结果;
当执行一条指令时,首先需要根据程序计数器PC中存放的指令地址,将指令从内存取到指令寄存器IR中,这一过程叫 “取址”。
与此同时,PC中的地址或自动加1(顺序执行)或转移指针指向下一个指令的地址(转移执行),如此循环,执行每一条指令。
内存页面的逻辑地址转换为物理地址
操作系统,内存页面的逻辑地址转换为物理地址(页面变换表);
文件系统的索引结构
文件系统, 索引文件结构(直接索引, 一级间接索引, 二级间接索引)
快速排序
基本步骤如下:
- 选取一个元素作为pivot;(可以随机/固定/策略选则)
- 将小于pivot 的元素放在pivot的左边;
- 将大于pivot 的元素放在pivot的右边;
- 分别对左右子序列重复前三个步骤, 直到序列长度为1, 完成排序;
首先初始化左右两个指针分别指向序列的最左边元素和最右边元素, 可以取最左边元素作为基准元素pivot, 然后取最右边指针所指向的元素与pivot比较, 小于pivot就放在
实例: 对 19 97 9 17 1 8 使用快排进行排序;
图的遍历
有向图的深度遍历和广度遍历
拓扑排序
有向无环图
熟悉知名端口号
知名端口号的范围: 0-1023
HTTP 超文本传输协议 80
FTP 文件传输协议 21
SSH 安全远程登录协议 22 (SFTP也是用 22端口)
TELNET 远程登录协议 23
SMTP 简单邮件协议 25
POP3 邮局协议 110
IMAP 交互式邮件存取协议 143
注: FTP 和 TELNET 因为不是安全通信协议, 所以使用的越来越少, 取而代之的是 SFTP 和 SSH 协议;
关系代数运算
测试技术
黑盒测试、白盒测试
测试覆盖率从低到高分别是:
语句覆盖(最低)
判定覆盖
条件覆盖
路径覆盖(最高)
软件可靠性,平均无故障时间,平均修复时间
哈夫曼树
哈夫曼树又叫最优二叉树,它是一种带权路径长度最短的树。
基本概念
路径长度:
从树中一个结点到另一个结点的路径上的分支数目成为路径长度。
树的路径长度
所有叶子节点到根节点的路径长度之和;
权:树的节点上带有权重;
树的带权路径长度(WPL)
所有叶子节点到根节点的带权路径长度之和。
应用
哈夫曼树应用于哈夫曼编码, 是一种无损压缩算法;
构造哈夫曼树
给出一组权值集合{ 5,29,7,8,14,23,3,11},构造哈夫曼树。
方法:每次取权值最小的两个结点进行构造,记录新构造的父节点,删掉已取出的两个结点;
第一次,取出3和5,构造出权值为8的父节点, 记录8 ,然后删掉3和5;
再取权值最小的两个结点, 7和8, 构造出权值为15的父节点, 记录15 ,然后删掉7和8;
再取权值最小的两个结点, 8和11, 构造出权值为19的父节点, 记录19 ,然后删掉8和11;
依次类推,直到最后构建出根节点, 此时哈夫曼树构造完成;
哈夫曼树中的所有叶子结点就是最初给的那组权值集合, 然后再求出所有叶子节点的带权路径长度之和,就可以了;
注: 同一组权值集合构造出的哈夫曼树可能不唯一, 但最后的带权路径长度是相同的.
海明校验码
海明码可以通过增加检验位的方式实现纠错。
海明码中所需要的校验位数满足这样的规定:
K 表示数据信息位数,r 表示添加的校验位数,N 表示添加了校验位数后整个信息的二进制位数,他们之间的关系应满足:
2^r^ >= K + r +1 = N ;
例题: 已知数据信息为16位,最少应附加()位校验位,才能实现海明码纠错。
答案:5。 K = 16, 2^r^ >= 16 + r +1 ;
流水线 pipeline
流水线周期:
流水线周期为指令执行时间最长的一段。(若指令分为取址、分析、执行三个步骤,耗时分别为2ns,2ns,1ns, 那么流水线周期为2ns)
执行时间计算
执行时间 = 第一条指令执行时间 + (指令数 -1) * 流水线周期;
① 理论公式: (t1+t2+…+tk) + (n-1) * Δt ;
② 实践公式: (k + n-1) * Δt ;
k 为一条指令的操作步骤数, n为指令数;
注: 两个公式的区别在于第一条指令的执行时间怎么算。理论公式按照一条指令的实际执行时间计算,实践公式按照 一条指令的操作步骤数 * 周期时间 进行计算;
吞吐量计算
流水线的吞吐量是指单位时间内流水线所完成的任务数量;
TP = 指令条数/ 流水线执行时间;
加速比计算
完成同一批任务,不使用流水线所用的时间与使用流水线的时间之比为流水线的加速比。
S = 不使用流水线所用的时间 / 使用流水线所用的时间;
注:加速比越高越好;
前趋图与PV操作
前趋图是用来表达一系列活动的前后约束关系。(哪些任务可以并行,哪些任务有先后关系)
PV操作用于控制进程间的同步与互斥;
P操作:
- 信号量自减1;
- 自减1后的结果仍大于或等于0, 则进程继续执行;
- 自减1后的结果小于0, 则进程被阻塞后放入等待队列中;
V操作:
- 信号量自加1;
- 自加1后的结果大于0, 则进程继续执行;
- 自加1后的结果小于或等于0, 则从该信号量的等待队列中释放一个进程;
下面是一个经典的真题(2017.5):

答案:
a: P(S1) b: V(S2) V(S3)
c: P(S2) d: V(S4)
e: P(S4) f: V(S5)
浮点数运算
浮点数表示:
N = M * R^e^ ;
如:
1000 = 1 * 10^3^
119 = 1.19 * 10^2^
运算过程:
对阶 -> 尾数运算 -> 结果格式化;
对阶是将两个浮点数的基数和指数转化为相同的形式,如上面的例子对阶后应该是
1000 = 1 * 10^3^
119 = 0.119 * 10^3^
注意: 对阶应该是指数低的往高的对等! 只有基数和指数对阶后, 才能进行尾数运算;
结果格式化是将结果标识位科学计数法的形式:
1119 = 1.119 * 10^3^
项目成本估算模型
COCOMO 2
软件成熟度模型
环路复杂度分析 McCabe
单一的顺序结构程序最为简单,循环和选择构成的环路越多,程序就越复杂。
McCabe 度量法以图论为工具,然后用该图的环路数作为程序复杂性的度量值。
在一个强连通的有向图G中,环路的个数:
V(G) = m - n + 2p ;
m 是图G 中弧的个数, n 为图G中结点数;p 为强连通分量个数;
注: 当模块的环路复杂度超过10 时,要充分测试这模块会变得特别难.
UML 图
通信图
带有数字序号, 描述对象与对象之间的关系;
箭头表示消息;
: 冒号前面是对象名, : 冒号后面是类名;
UML 状态图
网络互连设备
下面几个网络互连设备工作在网络的1-3 层:
互连设备 | 工作层次 | 功能 |
---|---|---|
路由器 | 网络层 | 通过逻辑IP地址进行网络之间的信息转发, 只能连接使用相同网络层协议的子网; |
三层交换机 | 网络层 | 带有路由功能的二层交换机 |
二层交换机 | 数据链路层 | 传统意义上上的交换机, 多端口网桥 |
网桥 | 数据链路层 | 根据帧物理地址MAC 进行网络之间的信息转发, 只能连接相同MAC层的网络 |
中继器 | 物理层 | 对接收信号进行再生和发送, 只起扩展传输距离的作用; |
集线器 | 物理层 | 多端口中继器 |
下面几个网络互连设备工作在网络的第 3层之上:
互连设备 | 工作层次 | 功能 |
---|---|---|
网关 | 高层 | 最复杂的网路互连设备, 用户连接网络层以上使用不同协议的子网; |
多层交换机 | 高层 | 带协议转换功能的交换机 |
正规式
1. 计算机系统
计算机硬件由运算器、控制器、存储器和输入、输出设备五部分组成。
其中运算器、控制器被集成到一块CPU中,存储器分为内部存储器和外部存储器。
IO 技术
首先理解IO,输入从外部IO设备输入到计算机内存,输出是指从计算机内存输出到外部IO设备。外部IO设备可以是磁盘、网络或终端。
IO技术的四种实现方式:
- 程序控制
- 中断方式
- DMA方式(Direct Memory Access 直接内存访问)
- IOP(Input Output Processor 输入/输出处理机)
程序控制
中断方式
利用中断方式完成数据输入、输出的过程为:当IO系统准备好后,发出中断请求信号通知CPU,CPU接到中断请求后,保存当前正在执行程序的现场,转入IO中断服务程序的执行,完成与IO系统的数据交换后再返回被打断的程序继续执行。
与程序控制的IO方式相比,中断的处理方式因为CPU无需等待而提高了效率。
DMA方式(直接内存访问)
数据不经CPU就直接在内存和IO设备之间进行传输。
输入/输出处理机 IOP
DMA方式的出现减轻了CPU对I/O 操作的控制,使得CPU的效率显著提高,而通道的出现进一步提高了CPU的效率。
通道是一个具有特殊功能的处理器,又称输入/输出处理器(Input Output Processor ,IOP),它分担了CPU的一部分功能,可以实现对外围设备的统一管理,完成外围设备与主存之间的数据传送。
通道方式大大提高了CPU的工作效率,然而这种效率的提高是以增加更多硬件为代价的。
IO设备管理软件一般分为4个层次,具体从上往下分别为
- 用户级IO层
- 设备无关的系统软件
- 设备驱动程序
- 中断处理程序
- 硬件
用户级IO层发出IO调用;
设备无关的系统软件负责设备名解析、阻塞进程、分配缓冲区;
设备驱动程序负责设置寄存器,检查设备状态;
中断处理程序:IO完成后唤醒设备驱动程序;
硬件完成具体的IO操作;
总线
定义:
一般来说,任何连接两个以上电子元器件的导线都可以称之为总线。
分类:
总线一般分为三类:内部总线、系统总线、外部总线。
内部总线:
CPU、内存、输入输出设备传递信息的共用通道;
系统总线:
系统总线的性能直接影响计算机的性能,常见的总线标准包括ISA总线、PCI 总线。
外部总线:
外部总线的标准较多,USB、IEEE-488等。
加密和认证
对称加密算法:对信息加密和解密使用相同的密码。
DES,3DES,RC5,AES 算法
非对称加密算法 :对信息加密和解密使用不同的密码,分别为公钥和私钥,公钥可以发送给任何人,私钥只能自己知道。
RSA 算法
非对称加密算法使用一对密钥进行加密和解密,公钥和私钥。
认证
加密算法可以防止数据泄漏,但并不能防止对数据的破坏。而认证可以对数据进行正确性和完整性的检查。认证技术有两种,一种是数字签名认证,一种是关键绩效指标认证(Key Performance Indicator ,KPI)
数字签名过程
信息发送者用Hash函数将信息生成摘要,
然后用自己的私钥对摘要加密(签名);
信息发送者把信息本身和已签名的信息摘要一起发送出去
数字加密过程
信息发送者用信息接收者的公钥加密,接受者收到密文后,用自己私钥解密,
计算机可靠性模型
计算机可靠性模型常见的有三种:
- 串联系统
- 并联系统
- N模冗余系统
下面是不同模型计算系统可靠性的公式:
串联系统
设串联系统中各子系统的可靠性分别为R1、R2、R3…RN ,则整个串联系统的可靠性为
R = R1 * R2 * R3 …* RN
并联系统
一个系统由N个子系统组成, 只有有一个子系统可用,那么整个系统就是正常可用的, 这样的系统成为并联系统;
R = 1- (1-R1 ) * (1-R2 ) * (1-R3 ) …* (1-RN )
N模冗余系统
系统的平均无故障时间(Mean Time Between Failure,MTBF)
系统从一次故障到下一次故障的平均时间,单位:小时;
MTBF 的计算:
2. 操作系统
3. 程序设计语言基础
4. 数据结构
线性结构
数组、矩阵和广义表
树
图
查找
排序
5. 算法设计与分析
基本概念
算法分析基础
五大常用算法
分治法
动态规划
贪心算法
回溯法
分支限界法
其他算法
概率算法
近似算法
数据挖掘算法
智能优化算法
6. 面向对象技术
面向对象基础
面向对象三大特性:
封装
继承
多态
多态
多态有四种不同的形式:
- 参数多态
- 包含多态
- 强制多态
- 过载多态
参数多态
应用最广、最纯的一种多态;
包含多态
同样的操作可用于一个类型及其子类型。包含多态一般需要运行时的类型检查。
强制多态
编译程序通过语义操作,把操作对象的类型强制进行转换。
过载多态
同一个函数名在不同的上下文中有不同的类型。
UML 统一建模语言
UML 统一建模语言是面向对象软件的标准化建模语言。由于其简单、统一,又能可视化的表达软件设计中的静态和动态信息,目前已经成为可视化建模语言实际上的工业标准。
官网:uml.org
目前版本为2.x
UML 包含三部分内容:事务、关系和图。
事务
结构事务,行为事务,分组事务,注释事务;
关系
依赖,关联,泛化,实现
图
UML2.0 提供了13种图,分为三类。6个静态程序结构,3个表示行为,4个代办交互的。
结构图:
类图、对象图、组件图、复合结构图、包图、部署图;
行为图:
用例图、活动图、状态图;
交互图:
序列图、通信图、时序图、交互概览图;
类图
+ 表示public
- 表示 private
# 表示protected
~ 表示default,也就是包权限
_下划线表示static
斜体表示抽象
设计模式
设计模式是面向对象程序设计中,可以复用的
按照设计模式的目的可分为三大类:
- 创建型设计模式
- 结构型设计模式
- 行为型设计模式
7. 软件工程基础
软件工程概述
软件生命周期
下面介绍了软件开发生命周期的7个阶段:
工作 | 描述 | 参与人员 | 产生文档 |
---|---|---|---|
可行性分析与项目开发计划 | 这个阶段的主要目的就是确认软件的开发目标和可行性; | 用户、项目负责人、系统分析师 | 可行性分析报告、项目开发计划 |
需求分析 | 该阶段的任务不是解决具体问题,而是确定软件系统的功能、性能、界面和数据等要求; | 用户、项目负责人、系统分析师 | 软件需求说明书 |
概要设计 | 设计软件的结构,明确由哪些模块组成,这些模块的层次结构、调用关系,每个模块的功能,同时还要设计系统的的总体数据结构和数据库结构; | 系统分析师、软件设计师 | 概要设计说明书 |
详细设计 | 对每个功能模块的功能进行具体描述,要把功能描述转化为精确的、结构化的过程描述; | 软件设计师、程序员 | 详细设计文档 |
编码 | 开发人员编写程序代码; | 软件设计师、程序员 | |
测试 | 保证软件质量的重要手段; | 测试人员 | 软件测试计划、测试用例、软件测试报告 |
维护 | 软件生命周期中时间最长的阶段; |
可行性分析与项目开发计划
需求分析
概要设计
详细设计
编码
测试
维护
软件过程
在开发产品或构建系统时,遵循一套可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图称为“软件过程”。
能力成熟度模型(CMM)
在美国国防部的支持下,1987年,卡内基梅隆大学软件工程研究院率先提出——软件过程能力成熟度模型(Capability Maturity of Software)。
CMM 将软件过程改进分为以下5个成熟度级别:
- 初始级
- 可重复级
- 已定义级
- 已管理级
- 优化级
能力成熟度模型集成(CMMI)
软件过程模型
软件过程模型通常又叫做软件开发模型.
瀑布开发
喷泉模型
敏捷开发
敏捷开发
极限编程XP
scrum 迭代式的增量开发方法
用户故事 Sprint 每日站会
需求分析
系统设计
概要设计
详细设计
系统测试
软件运维
运维是软件生命周期中时间最长的一个阶段。
软件需要维护的原因是多样性的,大致分为如下四种:
- 改正型维护
- 适应性维护
- 完善性维护
- 预防性维护
改正型维护
改正系统中存在的错误和缺陷。
适应性维护
在使用过程中,外部环境(新的硬、软件配置),数据环境(数据库、数据格式)发生变化,为使软件适应这种变化,而去修改的维护活动称为完善性维护。
完善性维护
在软件的使用过程中,用户往往会对软件提出新功能和性能要求,这种维护活动称为完善性维护。
预防性维护
进一步提高软件的可维护性、可靠性。为下一步改进软件打下基础。
软件项目管理
软件项目成本估算模型
COCOMO 估算模型
- 基本COCOMO 模型
- 中级COCOMO 模型
- 详细COCOMO 模型
COCOMOⅡ估算模型
- 应用组装模型(对象点)
- 早期设计阶段模型(功能点)
- 体系结构阶段模型(代码行)
层次结构的估算模型;
软件质量
软件度量
McCabe度量法
McCabe度量法是一种基于流程控制流的复杂性度量方法,又称环路度量。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。
环路数超过10,我们认为程序相当复杂,难以维护。
8. 结构化开发方法
结构化开发方法
需求分析阶段:(功能设计)
数据流图(DFD)
数据字典(Data Dictionary)
原型
数据设计:(数据设计)
E-R图
关系模式
程序设计:(程序设计)
UML 图
数据流程图
数据流程图或数据流图(Data Flow Diagram),简称 DFD,是描述系统中数据流程的一种图形工具。
DFD 将系统建模成输入-处理-输出的模型,即流入软件的数据对象,经过处理,最后以结果数据对象的形式输出软件。
DFD 采用分层的的方式表示,第一层是顶层DFD。顶层数据流图从整体描述系统,往下就是0层DFD,0层数据流图进一步细化形成第1层DFD,第1层数据流图进一步细化形成第2层DFD。
顶层图:

第0层图:

结构化开发方法就是采用这种自顶向下逐层分解的思想进行分析建模的。
自顶向下逐层分解充分体现了分解和抽象的原则。分解和抽象是处理任何复杂问题的两个基本手段。随着分解层次的增加,抽象级别越来越低,也越来越接近问题的解。自顶向下是分解的过程,自底向上是抽象的过程。
基本元素
数据流图中包含四个基本元素:
- 外部实体
- 数据流
- 加工
- 数据存储
其中数据流、加工、数据存储是软件系统内的数据处理模型,外部实体表示系统外的对象。
数据流平衡原则
数据流图的平衡原则很重要,
- 父图中的某个加工的输入输出数据流必须与其子图对应的输入输出数据流在数量和内容上保持一致;
- 子图内的加工应该既有输入也有输出;
数据流图是根据需求说明画出来的, 不能天马行空的画图.
数据字典
数据字典的作用是对数据流图中的数据元素进行定义和说明。
9. 数据库技术基础
基本概念
数据模型
E-R模型
概念模型是对信息世界建模,概念模型能够方便的、准确的表示信息世界中的常用概念。概念模型有很多表示方法,其中最为常用的是P.P.S.Chen 于1976年提出的实体-联系方法(Entity Relationship Approach)。
E-R模型是软件工程设计中的一个重要方法,因为它接近人的思维方式,容易理解并且和计算机无关。但是E-R模型只能表示实体间的语义关系,还不能进一步详细的说明数据结构,在解决实际问题时,通常先设计一个E-R模型,然后再把其转换为计算机能接受的数据模型。
基本E-R模型
基本E-R图由4种成分组成:
矩形框:表示实体,框中记录实体名;
菱形框:表示联系,框中记录
连线:
椭圆形框:表示属性;
扩充的E-R模型
尽管基本的E-R模型能够在大多数场景下建模,但某些特殊的情况仅用基本E-R模型无法表达清楚。需要扩充一部分内容:弱实体、特殊化。
弱实体
在扩充的E-R模型中,弱实体用双线矩形框表示。
一个实体的存在必须以另一个实体为前提,则将这个实体称为弱实体。
特殊化
某些实体一方面具有一些共性,另一方面还具有各自的特殊性。例如学生实体集可分为研究生、本科生、专科生等子集,将这种从普遍到特殊的过程称为“特殊化”。
在扩充的E-R模型中,超类-子类关系模型使用特殊化圆圈和连线来表示。超类到圆圈有一条连线;
双竖边矩形表示子类;有符号“U”的线表示特殊化。
关系代数
关系代数运算:
并 U
交 ∩
差 -
笛卡尔积 ×
投影 π
选择 σ
连接 ⋈
注意辨别关系代数符号
投影 π
投影是显示查询列,select 查询列;
选择 σ
选择是对结果集进行条件筛选。where 条件
连接 ⋈
连接 ⋈分为自然连接、左外连接、右外连接、全外连接;
等值连接:指定要等值比较的属性,
自然连接:
R ⋈ S 自然连接是一种特殊的等值连接,默认比较的属性是两个关系中相同的属性组,属性列数为两者之和减去重复属性列;
笛卡尔积 ×
可以认为笛卡尔积是无条件的连接,其他连接是有条件的连接。
规范化
规范化理论-函数依赖
函数依赖
学号可以确定姓名, 这就是函数依赖关系;
部分函数依赖
组合主键确定一个属性值;
传递函数依赖
A 确定B, B 确定C;
规范化理论-候选关键字
超键
可以确定唯一一个元组;(可以是单个属性, 也可以是组合属性) (学号)
候选键
候选键也是可以确定唯一一个元组的键, 如(学号, 姓名) 候选键可以有多个;
主键
主键只有一个;
外键:
其他关系的主键; 对表做关联;
求解候选键
方法:
- 将关系模式的函数依赖关系用 有向图的方式表示;
- 找入度为0的属性集作为起点, 尝试遍历有向图, 若能够正常遍历图中所有的点, 则该属性集为关系模式的候选键;
- 若入度为0的属性集不能够遍历图中所有结点, 则需要尝试将一些中间结点(既有入度也有出度的节点), 直至该集合能够遍历所有结点, 该属性集为候选键;
注意:
若 ABD 这个组合键确定 E, 应该如下图画法,三条线汇聚到一个点, 不能分别滑到E点;

SQL语言
10. 网络与信息安全基础
计算机网络始于20世纪70年代,1969年,美国国防部高级研究计划局所研制的 ARPANET 是计算机网络的先驱代表。该网络最初仅由4台计算机连接而成。
计算机网络
功能
计算机网络的主要功能如下:
- 数据通信
- 资源共享
- 负载均衡
- 高可靠性
分类
按通信距离可分为局域网、城域网、广域网;
网络拓扑结构
常用的网络拓扑结构有总线型、星型、环型、树型、分布式结构等。
交换机工作在数据链路层
TCP、UDP
IP协议
IP协议(Internet Protocol)
IPv4 采用32位(4个字节)表示,最多可以表示 2^32^ ,也就是42亿个网络地址。IPv4 地址一般采用十进制表示法,1个字节为一组,字节之间用英文点号隔开,如 192.168.0.1
。
IPv6 采用128位(16个字节)表示,可以彻底解决IPv4 地址不足的问题。IPv6 地址一般采用十六进制表示法,2个字节为一组(8个十六进制表示),每组之间用英文冒号隔开,如 fe80:0000:0000:ec96:139c:c5d4:95fb:deed
。
IP地址
根据网络规模的大小,将IP地址分为 A B C D E 这5类。A B C 三类为常用地址,D E 类为特殊地址。
根据IP地址的第一个字节,可以判断IP地址的分类。
IP地址由网络号和主机号2部分组成。我们平时所说的同一网段就是网络号相同的IP地址。
类别 | 最大网络数 | IP地址范围 | 单个网段最大主机数 | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7^ -2) | 1.0.0.1-127.255.255.254 | 16777214 | 10.0.0.0 - 10.255.255.255 |
B | 16384(2^14^) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0 - 172.31.255.255 |
C | 2097152(2^21^) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0 - 192.168.255.255 |
A类地址中,前8位表示网络号,后24位表示主机号(默认子网掩码:255.0.0.0),网络号最高的位必须是 0;
B类地址中,前16位表示网络号,后16位表示主机号(默认子网掩码:255.255.0.0),网络号最高的位必须是 10;
C类地址中,前24位表示网络号,后8位表示主机号(默认子网掩码:255.255.255.0),网络号最高的位必须是 110;
公有地址和私有地址
3类IP地址中,各自保留了一段区域作为私有地址。公有地址由 Internet 信息中心进行分配和注册;私有地址不能注册,专门为组织机构内部使用。其地址范围如下:
类别 | IP地址范围 | 私有IP地址范围 |
---|---|---|
A | 1.0.0.1-127.255.255.254 | 10.0.0.0 - 10.255.255.255 |
B | 128.0.0.0-191.255.255.255 | 172.16.0.0 - 172.31.255.255 |
C | 192.0.0.0-223.255.255.255 | 192.168.0.0 - 192.168.255.255 |
子网和子网掩码
互联网中主机数的迅速增长导致IP地址资源短缺问题,为了缓解IP地址不够用的问题,引入了子网和子网掩码的概念。
引入子网掩码,从逻辑上把一个大网络划分为一些小网络(子网)。
子网掩码和IP地址一样共32位,左边一段连续的1表示网络号的长度,右边一段连续的0表示主机号的长度。子网掩码用来指明一个IP地址的哪些位是网络号,子网掩码不能单独使用,必须结合IP地址一起使用,子网掩码与IP地址做 “与” 运算得出IP地址的网络号是多少。
例子:
IPv4 地址: 192.168.1.111,子网掩码 : 255.255.255.0 ,表示前24位表示网络号,后8位表示主机号;也可以用 192.168.1.111/24 表示。
DNS(域名系统)
ARP(地址解析协议)
ARP (Address Resolution Protocol)用于将IP地址解析为网络设备的物理地址(MAC地址)
ARP 表用于查询IP地址与MAC地址的对应关系。
RARP (Reverse Address Resolution Protocol)反向地址解析协议
ICMP 控制信息协议
ICMP (Internet Control Message Protocol)控制信息协议用于辅助支持IPv4,是IP协议的组成部分。
IP协议是一种尽力传送的通信协议。也就是说传送的数据报文有可能丢失、重复、延迟或乱序,因此需要一种在发生差错时报告的机制。ICMP就是专门用于发送差错报文的协议。
ICMP 定义了几种差错报文和信息报文,IP 在需要发送差错报文时要使用ICMP ,而ICMP 也是利用 IP来传送报文的。
ping 工具就是发送ICMP包进行目标是否可达测试。
ICMPv6
在 IPv6 中,ICMP的作用被扩大,如果没有 ICMPv6 ,IPv6就不能正常使用。
DHCP(动态主机配置协议)
NAT(网络地址转换协议)
NAT(Network Address Translator)是用于在本地网络使用内网IP地址,在连接互联网时转为全局IP地址的技术。除了转换IP地址外,还出现了可以转换TCP UDP 端口号的NAPT(Network Address Port Translator)技术。
NAT(NAPT) 实际上是为正在面临地址枯竭的IPv4 而开发的技术。不过在 IPv6 中为了提高网络安全性也在使用NAT。
例子:
内网地址为 10.0.0.10 的主机与 163.221.120.2 的主机进行通信。NAT 路由器将发送源地址 10.0.0.10 转换为全局IP地址 202.224.174.37 再发送数据。 当接收来自 163.221.120.2 主机的包时,目标地址202.224.174.37 先被转换为内网地址 10.0.0.10 ,再被转发。
在NAT 中,只有源地址、源端口、目标地址、目标端口、协议类型(TCP还是UDP)五项内容都一致时,才被认为是同一个通信连接。
IP隧道
HTTP 协议
11.标准化和软件知识产权基础
12.软件系统分析与设计
README
作者:银法王
参考:
软考官方教材和历年真题
修改记录:
米开 2020-10-17 第一次
米开 2021-05-29 软考