软件设计师考试
目录
- 1. DONE 知识点分布
- 2. DONE 计算机组成与体系结构
- 3. DONE 操作系统基本原理
- 4. DONE 数据库系统
- 5. DONE 计算机网络
- 6. DONE 系统安全分析与设计
- 7. DONE 数据结构与算法基础
- 8. DONE 程序设计语言与语言处理程序基础
- 9. DONE 法律法规
- 10. DONE 多媒体基础
- 11. DONE 软件工程
- 12. DONE 系统设计
- 13. DONE 数据流图DFD
- 14. DONE 数据库设计
- 15. DONE UML建模
- 16. 数据结构与算法应用
1. DONE 知识点分布
- 软件工程基础知识
- 面向对象
- 数据结构与算法
- 程序设计语言
- 计算机硬件基础
- 操作系统
- 数据库系统
- 计算机网络
- 信息安全知识
- 多媒体基础
- 知识产权与标准化
2. DONE 计算机组成与体系结构
2.1. DONE 前言
- 数据表示
- 计算机结构
- Flynn 分类法
- CISC 与 RISC (指令集)
- 流水线技术
- 储存系统
- 总线系统
- 可靠性
- 校验码
2.2. DONE 数据的表示
2.2.1. DONE 进制转换
2.2.2. DONE 原码/反码/补码/移码
表示1 | 表示-1 | 1-1结果 | 解释 | 范围 | 备注 | |
---|---|---|---|---|---|---|
原码 | 00000001 | 100000001 | 100000010 结果为 2 | 高位为符号为,0正数,1负数 | -2n-1 ~ 2n-1 | 不适合负数运算 |
反码 | 00000001 | 111111110 | 111111111 结果为 -0 | 高位为符号为,0正数,1负数。对于负数,非符号位在原码的基础上取反 | -2n-1 ~ 2n-1 | |
补码 | 00000001 | 111111111 | 00000000 结果为0 | 对于负数,在原码的基础上,取反+1 | -2n ~ 2n-1 | 计算机的实际储存方式 |
移码 | 100000001 | 011111111 | 100000000 结果为0 | 在补码的基础上, 符号位取反 | -2n ~ 2n -1 | 在处理浮点数时使用 |
对于原码和反码, 因为有 -0 这个数, 所以范围少了1
对于补码, 没有 -0 , -128 可通过 -127 - 1 计算, 也就是 100000001 + 111111111 = 100000000
数据到计算机内存的过程:
数据(-1) -> 原码(100000001) -> 反码 (111111110) -> 补码(111111111) -> 计算机内存
2.2.3. DONE 浮点数运算
浮点数表示: N = M * Re
- M 尾数
- R 基础
- e 指数
运算步骤
- 对阶: 指数按高次对齐
- 尾数计算
- 结果格式化: 确保 尾数 小数点左边为个位数,且不为0
2.3. DONE 计算机结构
主机
- 主储存器
- CPU
- 运算器
- 算数逻辑单元 ALU
- 累加寄存器 AC : 储存运算中需要运算的值
- 数据缓冲寄存器 DR : 读写内存时暂存数据
- 状态条件寄存器 PSW : 储存运算过程中相关的标识位,比如说进位
- 控制器
- 程序计数器 PC : 用来下一条指令的位置寻址
- 指令寄存器 IR
- 指令译码器
- 时序部件
- 运算器
2.4. DONE Flynn 分类法
体系结构类型 | 结构 | 关键特性 | 代表 |
---|---|---|---|
单指令/单数据流 SISD | 控制部分:1;处理器:1;主存模块:1 | 单处理器 | |
单指令/多数据流 SIMD | 控制部分:1;处理器:多;主存模块:多 | 各处理器以异步形式执行同一条指令 | 并行处理器;阵列处理器;超级向量处理器 |
多指令/单数据流 MISD | 控制部分:多;处理器:1;主存模块:多 | 被证明不实际 | 无 |
多指令/多数据流 MIMD | 控制部分:多;处理器:多;主存模块:多 | 能够实现作业、任务、指令等各级全面并行 | 多处理器系统 |
2.5. DONE CISC 和 RISC
指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其他 |
---|---|---|---|---|
CISC | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长 |
RISC | 数量少,使用频率接近,大部分为单周期指令,操作寄存器,只有Load/Store操作内存 | 支持方式少 | 增加了通用寄存器;硬布线逻辑控制为主;适合采用流水线 | 优化编译,有效支持高级语言 |
- CISC 属于过去计算机少的年代的产物。 很多指令都是厂商定制的
- RISC 为了通用性,对指令做了简化,精简指令集
2.6. DONE 流水线
2.6.1. DONE 概念
流水线指在程序执行时,多条指令重叠进行操作的一种准并行处理实现技术
2.6.2. DONE 流水线计算
- 流水线的周期: 执行时长最长的一段
- 流水线的总执行时间:
- 理论公式: 1条指令的执行时间 + (指令条数-1)* 流水线周期。 \((k+n-1)*\Delta t\)
- 实践公式: 假定每个步骤的时间与周期相等, 如上图,总的步骤为 (指令条数+单条指令的步骤数-1), 再乘以周期则为总时间
- 示例:
若指定流水线分为取指、分析、执行3部分,时间分别为2ns 2ns 1ns, 那么周期是多少?100条指令全部执行完需要多久?
- 周期为 2ns
- 按照理论公式: (2+2+1)+ 99*2 = 203
- 按照实践公式: (3+99)*2= 204
2.6.3. DONE 流水线吞出率计算
- 吞吐率(Though Put rate, TP)指单位时间内流水线完成的任务数量
- 对于上述例子,TP=100/203
- 最大吞吐率
- 相当于看成每条指令的执行时间都为周期。n 无穷大时,可以忽略流水线的建立时间
2.6.4. DONE 流水线的加速比
上述例子: 5*100/203
2.6.5. DONE 流水线的效率
流水线的效率指的是流水线的设备利用率
\begin{equation} 流水线的效率E = \frac{n个任务占用的时空区}{k个流水线段的总时空区} = \frac{T_0}{kT_k} \end{equation}
上述的效率为 E=(1+1+1+3)*4 / (15*4)
2.7. DONE 储存结构
2.7.1. DONE 层次化储存结构
2.7.2. DONE Cache-概念
- Cache的功能: 提交CPU数据输入输出的速率,突破冯诺依曼瓶颈,即CPU与储存系统间数据传输的带宽限制
- 程序执行的局部性原理,当引入Cache时,会大大加快执行效率。 例如把循环语句的变量储存到Cache中,就大大减少寻址时间
- 计算系统的平均周期: 假定 h 为Cache的命中率, t1 为Cache的周期时间, t2 为主存的周期时间, 那么两者结合的系统平均周期为:
如果 h=95%, t1 = 1ns , t2=1000ns, 得到 t3= 50.95ns, 而没有Cache时,t3 会是 1000ns.
2.7.3. DONE 局部性原理
- 时间局部性: 例如 循环语句变量的储存
- 空间局部性: 例如 数组的储存
- 工作集理论:工作集指的是进程运行时被频繁访问的页面集合
2.7.4. DONE 主存-分类
- 随机存取储存器(RAM): 我们常说的内存。 断电后信息丢失
- 只读存储器(ROM): 比如说 BIOS。 断电后信息不丢失
2.7.5. DONE 主存-编址
- 主存的编址指的是把芯片组成响应的储存器
- 内存地址忽略后面的 H , 且是16进制
- 上图中, 8*4 表示有8个地址单元, 每个地址单元有 4bit
- 芯片组成储存器时,可以并排或竖排
- (c7fff+1-ac000)/1024, 共 112 个地址单元
- (112*16)/(28*16)=4 位
2.7.6. DONE 磁盘结构与参数
- 机械硬盘,软盘等: 扇区储存数据,磁头读取数据
- 寻道时间指磁头移动到磁道所需的时间
- 等待时间为等待读写的扇区转到磁头下方所用的时间
- 注意,磁头经过后,才算读取完。对于上述,读取需要3ms
- 单缓冲区意味着缓冲只能储存一个物理块的信息
- 处理记录时,磁盘还是会继续转动
- 最长: (33+3)*10+(3+3)=366
- 最短: (3+3)*11=66 , 处理当前的物理块,磁盘刚好准备读下一个物理块
2.8. DONE 总线
根据所处位置不同
- 内部总线: 微机中外围芯片与处理器的总线
- 系统总线: 微机中插件板与系统的总线
- 数据总线
- 地址总线
- 控制总线
- 外部总线: PCI等
2.9. DONE 系统可靠性分析-串联系统与并联系统
2.9.1. DONE 串联系统
- 可靠度 = 所有系统的可靠度之积
2.9.2. DONE 并联系统
- R 为可靠度
- u 为失效率
2.9.3. DONE 模冗余系统
- R1 -> Rm 为功能相同的冗余系统
2.9.4. DONE 混合系统
- R 可靠度
2.10. TODO 校验码
2.10.1. DONE 差错控制-CRC与海明校验码
- 检错: 检查出错误
- 纠错: 检查出错误并纠正。 (通过冗余信息)
- 码距: 整个编码系统中任意两个码字的最小距离 (即变化多少位可以得到另外一个码字)
- 若用1位二进制编码, A=0,B=1, 那么码距为1。假设传输时0变成1,无法检错,因为0/1都是合法的
- 若用2位,A=00,B=11, 那么码距为2。假设传输时有个0变成1,可以检错,因为编码出来的是非法的
- 若用3位,A=000,B=111,码距为3,可以检错。也可以纠错,比如把110看成111
2.10.2. TODO 海明校验码
2n 放校验位 (n从0算起)
根据上述公式,算出有 I 个信息位时,需要多少校验位
2.10.3. TODO 循环校验码-CRC
3. DONE 操作系统基本原理
3.1. DONE 概述
- 进程管理
- 存储管理
- 文件管理
- 作业管理
- 设备管理
- 微内核操作系统
3.2. DONE 进程管理
3.2.1. DONE 进程状态
3.2.2. DONE 前趋图
- 前趋图用来表达完成一系列任务的先后的约束关系
3.2.3. DONE 进程的同步与互斥
- 互斥,在某一个时刻,某个资源只允许一个进程使用
同步,当差距较大时,速度大的等待速度小的
- 市场是互斥问题,只能生产者或消费者之一入场
- 入市场是同步问题,生产者需要等消费者消费完,才能再次将商品搬入市场
3.2.4. DONE PV操作
- 临界资源: 进程间需要互斥方式对其进行共享的资源,如打印机等
- 临界区: 每个进程中访问临界资源的那段代码
- 信号量: 运用于PV操作中的特殊变量,如上图S
- P操作:当 S<0 时,将进程放入进程的等待队列, (阻塞)
- V操作:当 S<=0 时, 将进程从等待队列取出, (唤醒)即使F也不会阻塞
PV操作用来解决并发进程间某些约束关系的问题
生产者和消费者分别执行PV操作,可以防止缓冲区溢出
主要注意, P操作会阻塞,V操作不会阻塞
- 将前趋图转成PV操作
3.2.5. DONE 死锁问题
- 如果一个进程在等待不可能发生的事情,则发生 死锁
- 如果一个或多个进程发生死锁,则造成 系统死锁
13个, 因为多出来的一个资源分配给其他一个进程后,他的资源满足了,从而运行下去直至资源释放。
- 满足四大条件才会产生死锁
- 互斥
- 保持和等待
- 不剥夺
- 环路等待
3.2.6. DONE 银行家算法
分配资源的原则:
- 当进程需要的资源,不超过系统所能提供的最大资源时,可以接纳该进程
- 进程可以分期请求资源,但请求的总数不能超过最大的需求量
- 当系统的资源不能满足进程的请求资源时,可以推迟分配,但总能使进程在有限的时间内得到资源
3.3. DONE 储存管理
3.3.1. DONE 分区储存组织
- 最佳适应算法会导致很多小的内存块
3.3.2. DONE 页式储存组织
- 使用分区储存,可能无法提供足够大的连续内存给用户空间。
- 当内存分成相同大小的块状(比如4K)
- 逻辑地址记录页号,从0算起
物理地址使用块号,可能不是从0算起,使用页表查询出来。
- 4k表示 212, 说明地址的后12位是页内地址, 为A29
- 剩余的5即是页号,其物理块号就是页帧号,为6
- 可以淘汰的页号需要是没访问的,也就是访问位为0,为1
3.3.3. DONE 段式储存组织
- 段大小可以不一致
段表储存 段号,段长,基址
3.3.4. DONE 段页式存储
- 先分段,再分页
3.3.5. DONE 快表
- 小容量的相联存储器
- 由高速缓存组成,速度快
- 从硬件上保证内容按并行查找
- 一般存放当前访问最频繁的少数活动页面的页号
3.3.6. DONE 页面置换算法
- 解决系统能提供的页数少于程序申请的页数的问题
- 最优算法 OPT
- 随机算法 RAND
- 先进先出算法 FIFO: 可能产生抖动,即分配的页数多,反而效率低了(如下图)
- 最近最少使用算法 LRU: 不会产生抖动
缺页:页不在内存中
- 没有快表,说明每读一次块,需要两次内存访问(因为要查表)
- 指令只产生一次缺页中断
3.4. DONE 文件管理
3.4.1. DONE 索引文件结构
- 一般是13个节点
- 一个盘块4K
- 一个索引节点可以储存 4k/4 = 1024 个地址
- 逻辑块号从0开始计数
3.4.2. DONE 文件与树形目录结构
3.4.3. DONE 空闲储存空间的管理
- 空闲区表法
- 空闲链表法
- 位示图法
成组链接法
- 用 0(空闲) 1(占用)表示物理块
- x个字中,从1算法, 第x位置,从0算起
- 4195号物理块,是第4196个物理块
- 4196/32=131.125, 说明前131个字占满了,故放在132个字中
- 131*32=4192, 4196-4192=4, 故放在该字的第4个,也就是第3位置
3.5. DONE 设备管理
3.5.1. DONE 数据传输控制方式
内存与外设间的传输控制方案:
- 程序控制方式: 又称为程序查询方式,CPU介入最多。需要CPU每隔一段时间询问外设传输状态
- 程序中断方式: 如果外设完成数据传输,会发出中断信号
- DMA方式: 有专门的DMA控制器管控内存与外设的数据交换,CPU参与少
- 通道
- 输入输出处理机
3.5.2. DONE 虚设备与SPOOLING技术
- 将输入的内存先放入缓冲区
- 类似于任务队列
3.6. DONE 微内核操作系统
实质 | 优点 | 缺点 | |
---|---|---|---|
单体内核 | 将图形、驱动、文件系统等功能全部在内核中实现,运行在内核态 | 减少进程间通信和状态切换的系统开销,获得较高的运行效率 | 内核庞大,占用资源多,不易剪裁。系统稳定性和安全性不好 |
微内核 | 只实现基本功能,将图形等放在内核之外 | 内核精简,便于剪裁和移植,可用于分布式系统 | 用户态和内核态需要频繁切换导致效率降低 |
微内核
4. DONE 数据库系统
4.1. DONE 概述
- 数据库模式
- ER模型
- 关系代数与元组演算
- 规范化理论
- 并发控制
- 数据库完整性约束
- 分布式数据库
- 数据仓库与数据挖掘
4.2. DONE 数据库模式
4.2.1. DONE 三级模式-两级映射
- 内模式:与物理数据库关联, 关注数据的储存方式
- 概念模式:数据表
- 外模式:视图
- 外模式-概念模式映射
- 概念模式-内模式映射
4.2.2. DONE 数据库设计过程
4.3. DONE ER模型
- 椭圆 - 属性
- 矩形 - 实体
- 菱形 - 联系
集成产生的冲突
- 属性冲突:包括属性域冲突和属性取值冲突,例如性别的值一个实体用的是男女,另一个male/female
- 命名冲突:同名异义,异名同义。例如:一个实体用教师命名属性,另一个用老师
- 结构冲突:一个对象在不同的应用中有不同的抽象。例如属性个数不一样
- 1:1 联系至少0个
- 1:n 联系至少0个
- m:n 联系至少1个
- 一个实体转成一个关系模式
- 联系可转一个,选C
- 简单把关系模式对应地看成表
4.4. DONE 关系代数
- 并 \(S_1 \cup S_2\)
- 交 \(S_1 \cap S_2\)
- 差 \(S_1 - S_2\)
- 笛卡尔积: 两张表的所有属性都包含 m x n。 S1 X S2
- 投影: 选择特定列 π(col1,col2) (S1)
- 选择: 选择特定行 σ(col1=value) (S1)
- 联接: 与笛卡尔积的区别是相同的属性会合并成一个列,如果没有条件,就是自然联接 \(S_1 \bowtie S_2\)
4.5. DONE 规范化理论
4.5.1. DONE 函数依赖
- 如果函数X可以决定函数Y, 那么称 Y 依赖于 X,记作 X->Y
- 比如,在数据库中, 根据 学号 确定 姓名
- 部分函数依赖: 主键是多个组合字段, 但是其中一个字段也可以确定一条记录。 (A+B)->C , A->C
- 传递函数依赖: A->B , B->C , 可以得出 A->C ,(注意 B->A 不能成立)
4.5.2. DONE 价值与用途
非规范化的关系模式存在的问题:
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
4.5.3. DONE 键
- 超键可能存在多余属性, 而候选键不存在
- 候选键可以有多个,主键只有一个
4.5.4. DONE 求候选键
- 画出有向图
- 留意 ABD->E 这个的箭头
4.5.5. DONE 范式
4.5.6. DONE 模式分解
- 保持函数依赖的分解
- p={A,B,C} 存在 A->B B->C 如果有两个关系模式 {A,B} {B,C} ,就保持了函数依赖。如果是 {A,B} {A,C} 则没有, 因为无法推出 B->
- 无损分解
- 有损,不能还原
- 无损,可以还原. 就是通过联表操作,可以还原成原来的整表
4.6. DONE 并发控制
4.6.1. DONE 基本概念
事务:
- 原子性
- 一致性: 执行之前和之后状态一致, 比如转账操作,执行前后金额总数相同
- 隔离性
- 持续性: 事务执行后,结果与影响是持续的
并发产生的问题:
- 丢失更新
- 不可重复读问题
- “脏”数据的读出
4.6.2. DONE 封锁协议
- 一级封锁协议: 事务T在修改数据R之前必须对其进行加X锁(写锁),直到 事务结束 后释放。 (可以防止丢失更新)
- 二级封锁协议: 在一级封锁协议的前提下,再加S锁(读锁), 直到 读取 完后释放。(可以防止丢失更新和脏数据的读出)
- 三级封锁协议: 与二级封锁协议不同的是,直到 事务结束 后释放。 (三个问题都可以防止)
- 两段锁协议: 可串行化, 可能发生死锁
4.7. DONE 完整性约束
- 实体完整性约束。 (设置主键)
- 参照完整性约束。 (设置外键)
- 用户自定义完整性约束。
- 触发器。 (编写函数)
4.8. DONE 数据库安全
措施 | 说明 |
---|---|
用户标识和鉴定 | 最外层的机制,指账户登陆 |
存取控制 | 操作类型(读/写)和对象的限制设置 |
密码的储存和传输 | 对远程终端信息用密码传输 |
视图的保护 | |
审计 | 使用一个文件和数据库专门自动记录用户对数据库的所有操作 |
4.9. DONE 数据备份
- 冷备份(静态备份)。 停止数据库后,对数据库文件的备份
- 热备份(动态备份)。 在运行状态下进行备份
- 可以按表按用户恢复
- 完全备份
- 差量备份: 仅备份上次 完全备份 之后变化的数据
- 增量备份: 仅备份上次 备份 后变化的数据, 备份快
说明例子:
日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|---|---|---|---|---|---|
完 | 增 | 增 | 差 | 增 | 增 | 增 |
- 如上,如果要恢复到周二的数据, 那么需要依次执行 日、一、二
- 如果是周三,那么是 日、三
- 静态海量转储:无事务运行时,转储全部数据库
- 静态增量转储
- 动态海量转储
- 动态增量转储
日志文件:记录对数据库的任何操作,并将记录结果保存在独立的文件中。也可以用来恢复数据
4.10. DONE 数据库故障与恢复
故障关系 | 故障原因 | 解决方法 |
---|---|---|
事务本身的可预期故障 | 本身逻辑 | rollback |
事务本身的不可预期故障 | 算术溢出、违反储存保护 | 由DBMS通过日志文件撤销修改,回退到事务初始状态 |
系统故障 | 系统停止运转 | 使用检查点法 |
介质故障 | 外存被破坏 | 使用日志重做业务 |
4.11. DONE 数据仓库与数据挖掘
数据仓库的特点
- 面向主题
- 集成的
- 相对稳定(非易失), 一般不修改
- 反映历史变化
- 数据集市: 部门级的数据仓库, 可集成成企业级的仓库
4.12. DONE 数据挖掘方法分类
数据挖掘: 可以挖掘到未知的数据
方法:
- 决策树
- 神经网络
- 遗传算法
- 关联规则挖掘算法
分类:
- 关联分析:挖掘出隐藏在数据间的相互关系
- 序列模式分析:侧重点是分析数据间的前后关系(因果关系)
- 分类分析:为每一条记录赋予一个标记再按标记分类
- 聚类分析:分类分析法的逆过程
4.13. DONE 反规范化
规范化的缺点
- 导致数据表过多,增加查询工作量
- 系统需要通过多次联接才能进行查询操作,使得系统效率大大降低
技术手段:
- 增加派生性冗余列
- 增加冗余列
- 重新组表
- 分割表
4.14. DONE 大数据
4V
- 数据量 Volume
- 速度 Velocity
- 多样性 Variety
- 值 Value
比较维度 | 传统数据 | 大数据 |
---|---|---|
数据量 | GB,TB | PB |
数据分析需求 | 现有数据的分析与检测 | 深度分析(关联分析,回归分析) |
硬件平台 | 高性能服务器 | 集群 |
大数据处理系统应有的特征
- 高度可扩展性
- 高性能
- 高容错
- 支持异构环境
- 较短的分析延时
- 易用且开放的接口
- 较低的成本
- 向下兼容性
5. DONE 计算机网络
5.1. DONE OSI/RM 七层模型
- 物理层: 二进制传输, 中继器、集线器
- 中继器: 延长传输距离,例如将两条100米的网线连接起来
- 数据链路层: 传送以帧为单位的信息, 网桥、网卡、交换器、PPTP、L2TP、SLIP、PPP
- 网桥:用来连接相同类型的网络
- 交换机: 多端口网桥
- 网络层: 分组传输和路由选择, 三层交换机、路由器、IP、ICMP
- 传输层: 端到端的连接,TCP、UDP
- 会话层: 建立、管理和中止会话
- 表示层: 数据的格式与表达、加密、压缩
- 应用层: 实现具体的应用功能
- IP广播只能在局域网内
- 通过1,2层设备连接的属于同一局域网
- 路由器是网络层设备(3层),故 P,S不是同一个局域网, 选B
5.2. 网络技术标准与协议
5.2.1. DONE 协议组
- TCP/IP协议: Internet, 可扩展,可靠,应用最高,牺牲速度和效率
- IPX/SPX协议: 路由,大型企业网, 局域网对战游戏
NETBEUI协议: IBM, 不支持路由,速度快
TCP/IP 协议组
- ARP: IP -> Mac
- RARP: Mac -> IP
5.2.2. DONE DHCP
- 基于UDP, 动态分配IP
- 特殊的IP:
- 169.254.X.X window
- 0.0.0.0 linux
- 说明没有和 DHCP 联系上
5.2.3. DONE DNS
- 主机向本地域名服务器的查询采用 递归查询 。 服务器必须回答映射关系
- 本地域名服务器向根域名服务器的查询采用 迭代查询 。 服务器收到一次回复一次,该结果可能是其他DNS服务器地址
5.3. DONE 计算机网络拓扑结构
- 按分布范围
- 局域网 LAN
- 城域网 MAN
- 广域网 WAN
- 因特网
按拓扑结构
5.4. DONE 网络规划与设计
5.4.1. DONE 逻辑网络设计
5.4.2. DONE 物理网络设计
5.4.3. DONE 分层设计
- 核心层一般有冗余机器, 防止出故障
5.5. DONE IP地址
- A类, 0.0.0.0 -> 127.255.255.255
- 前1段是网络号
- 后3段才是主机地址, 其中全0为网络地址,全1为广播地址,不分给主机用
- 共有 224-2 个主机地址
- B类, 128.0.0.0 -> 191.255.255.255
- 前2段是网络号
- 后2段是主机地址
- 共 216-2 个主机地址
- C类, 192.0.0.0 -> 223.255.255.255
- 前3段是网络号
- 共 28-2 个主机地址
- D类, 组播 224.0.0.0 -> 239.255.255.255
- E类, 保留 240.0.0.0 -> 255.255.255.255
5.6. DONE 子网划分
- 子网掩码
- 将一个网络划分成多个网络 (取部分主机号当子网号)
- 将多个网络合并成一个大网络 (取部分网络号当成主机号)
- 1010 1000 1100 0011 0000 0000 0000 0000
- B类网络前16位是网络号
- 25=32>27 取5位主机号当成子网号
- 子网掩码中, 1为网络号, 0为主机号
- 子网掩码 1111 1111 1111 1111 1111 1000 0000 0000 255.255.248.0
- 1010 1000 1100 0011 0000 0000 0000 0000
- 2k-2 要刚好大于等于 700 , k=10,
- 子网掩码 1111 1111 1111 1111 1111 1100 0000 0000 255.255.252.0
如何判断两个IP地址属不属于相同的子网
- 转成10进制
- 分析网络号和子网号分别是多少位
- 如果前面的位数相同,那么在同一子网
5.7. DONE 无分类编址
类似 172.18.129.0/24, 表示前24位为网络号, 也就是只能容纳 254 台主机
- 32-20=12 有12位作为主机号
- C类网络前 24 位网络号
- 24-20 = 4 , 故16个
5.8. DONE 特殊含义的IP地址
5.9. DONE html
5.10. DONE 无线网
5.11. DONE 网络接入技术
- PSTN 老式的电话拨号上网
- ADSL 也是用电话线
- HFC 家里电视的机顶盒
5.12. DONE IPv6
6. DONE 系统安全分析与设计
6.1. DONE 信息系统安全属性
- 保密性: 最小授权原则、防暴露、物理加密、信息加密
- 完整性: 安全协议、校验码、密码校验、数字签名、公证
- 可用性: 综合保障(IP过滤、业务流控制、路由选择控制、审计跟踪)
- 不可抵赖性: 数字签名
6.2. DONE 加密技术
6.2.1. DONE 对称加密
- 加密密钥和解密密钥一致
- DES: 替换+移位、56位密钥、64位数据块、速度快、密钥易产生
- 3DES(3重DES): 两个56位密钥K1,K2
- 加密 K1加密->K2解密->K1加密
- 解密 K1解密->K2加密->K1解密
- AES
- RC-5
- IDEA
- 加密速度快
- 加密强度不高
- 密钥分发困难
6.2.2. DONE 非对称加密
- 有公钥和私钥
- 加密速度慢
- 公钥加密,私钥解密
- RSA: 512(现在1024)位密钥、计算量大、难破解
- Elgamal
- ECC
- 其他算法:背包算法、Rabin、D-H
6.3. DONE 信息摘要
- 单向散列函数,固定长度的hash值
- MD5: 128位 4 * 32
- SHA: 160位
- SHA256: 4*64
6.4. DONE 数字签名
- A 传输数据给 B
- A用私钥A加密, B用公钥A解密
- 因为公钥A只能解密出私钥A的信息,故可以证明信息是由A产生的
- 一般把这种说法说成: A用私钥A签名, B用公钥A验签。 (因为该传递过程没有保密性)
- 在正常使用过程中, 一般 A 把信息生成摘要, 然后对摘要进行签名
6.5. DONE 数字信封与PGP
数字信封
- A将原文用对称加密后传输,然后 用公钥B 加密密钥发送给B
- B用私钥B解密出密钥,然后解密密文
数字证书
- 可以把公钥和持有者绑定起来
- 有 PGP证书 和 X.509证书
- PGP
6.6. DONE 网络安全
6.6.1. DONE 各个网络层次的安全保障
6.6.2. DONE 网络威胁与攻击
威胁 | 描述 |
---|---|
重放攻击(ARP) | 截获某次合法通信,拷贝后重复发送 |
拒绝服务(DOS) | 对信息或其他资源的合法访问被无条件阻止 |
窃听 | 窃取系统中的信息资源和敏感信息。例如对通信线路中的传输信号进行搭线监听 |
业务流分析 | 长期窃听 , 利用统计分析方法对通信频度、信息流向进行研究 |
信息泄漏 | |
破坏信息的完整性 | |
非授权访问 | |
假冒 | |
旁路控制 | 利用系统的安全缺陷获取非授权的权利 |
授权侵犯 | 也被称为“内部攻击”, 被授权的某个人将此权限用于其他目的 |
特洛伊木马 | 木马程序,被执行时会破坏用户的安全 |
陷阱门 | 某个系统设置了“机关”,使得当提供特定的输入数据时,允许违反安全策略 |
抵赖 | 一种来自用户的的攻击,例如:否认自己发布过的某条消息 |
6.6.3. DONE 防火墙
7. DONE 数据结构与算法基础
7.1. DONE 数组
数组类型 | 储存地址计算 |
---|---|
一维数组a[n] | a[i]的储存地址: a+i*len |
二维数组a[m][n] | a[i][j](按行存储):a+(i*n+j)*len, (按列储存): a+(i+j*m)*le n |
7.2. DONE 稀疏矩阵
做题时,直接用带入法
7.3. DONE 数据结构的定义
- 线性结构: 比如线性表
- 非线性结构: 比如树、图
7.4. DONE 线性表
7.4.1. DONE 定义
- (a1, a2, … , an)
- 两种存储方式
- 顺序表:储存空间连续
- 链表: 储存空间不一定连续 (会包含下一个位置的指针)
- 单链表
- 循环链表
- 双向链表
7.4.2. DONE 线性储存与链式储存对比
顺序储存 | 链式存储 | |
---|---|---|
储存密度 | 1,更优 | <1 |
容量分配 | 事先确定 | 动态改变 |
查找运算 | O(n/2),有序时更优 | O(n/2) |
读运算 | O(1) | O([n+1]/2) good:1, bad:n |
插入运算 | O(n/2),good:0,bad:1 | O(1) |
删除 | O([n-1]/2) | O(1) |
7.4.3. DONE 队列与栈
- 循坏队列
- 队空条件: head = tail
- 队满条件: head = (tail+1)%size
7.5. DONE 广义表
- 通常以递归形式定义
- 类似: LS1 = (a, (b, c), (d, e)), 即元素也可以是一个广义表
- 长度: 最外层的表的长度
- 深度: 递归定义的重数, 上述为2
- head(LS1) = 第一个元素
- tail(LS1) = 除了第一个元素剩下的 ((b,c), (d,e))
7.6. DONE 树与二叉树
7.6.1. DONE 定义
- 节点的度: 一个节点拥有的child的个数. 上述,1的度为2; 3为1; 7为0
- 树的度: 树中所有节点最大的度,上述为2
- 叶子节点: 度为0的节点
- 分支节点:
- 内部节点: 非叶子和根, 2,3,6
- 父节点:
- 子节点:
- 兄弟节点:同一层次的节点
- 层次:
- 满二叉树: 没有缺失的节点
- 完全二叉树: 最底层只缺了右边的节点,其他的层的节点都是满的
二叉树的特性:
- 层次从1开始算
- 第i层最多有 2(i-1) 个节点
- 深度为k的二叉树, 最多有 2i - 1 个节点
- 叶子节点 n0 与度为2的节点 n2 , 满足 n0=n2+1
- 如果对有 n 个节点的完全二叉树有以下特征:
- 如果 i = 1, 则无父节点; 如果 i>1, 其父节点为 |i/2|(向下取整)
- 如果 2i > n, 则i为叶子节点,无左子节点;否则,其左子节点是2i
- 如果 2i + 1 > n, 则 i 无右子节点;否则,其有子节点为 2i+1
7.6.2. DONE 二叉树遍历
- 层次遍历: 1 2 3 4 5 6 7 8
- 前序遍历: (根 -> 左子树 -> 右子树) 1 2 4 5 7 8 3 6
- 中序遍历: (左子树 -> 根 -> 右子树) 4 2 7 8 5 1 3 6
- 后序遍历: (左子树 -> 右子树 -> 根) 4 8 7 5 2 6 3 1
7.6.3. DONE 反向构造二叉树
- 根据已知的二叉树遍历序列,还原出二叉树
- 前+中 或 中+后 可以构建出
- 如果只有 前+后 不可以构建
7.6.4. DONE 树转二叉树
- 孩子节点 -> 左子树节点
兄弟节点 -> 右孩子节点
7.6.5. DONE 查找二叉树
- 左子树小于根
- 根小于右子树
- 又称排序二叉树
- 极大提高查找效率
- 不能有相同的节点
7.6.6. DONE 最优二叉树(哈夫曼树)
- 常用用于哈夫曼编码(无损压缩)
- 树的路径长度:树中的路径累加的值, (上面的12, 为2)
- 权: 节点的值
- 带权路径长度: 路径长度乘以权(上面的12 为 2*12 = 24)
- 树的带权路径长度: 叶子节点带权路径长度之和 (左树为 2*2+4*3+8*3+1=41)
哈夫曼的树的树的带权路径长度最小
- 构造哈夫曼树时,只有叶子节点才是初始的权值
7.6.7. DONE 线索二叉树
- 为了方便遍历,利用其叶子节点的指针
- 前序线索二叉树
- 叶子的左指针指向前序遍历的左边,右指向右边
- 上述的,前序遍历顺序为 ABDEHCFGI
- 故D左指向B,右指向E
- 中序和后序类似
7.6.8. DONE 平衡二叉树
- 同一序列,排序二叉树会有多种
- 任意节点的左右子树深度相差不超过1
- 每个节点的平衡度只能为 +1 0 -1
- 平衡度的计算, 左子树深度为正, 右子树为-
7.7. DONE 图
7.7.1. DONE 定义
- 无向图: 节点之间没有方向, 若每个顶点间都有边相连,则是 完全图
- 有向图: 节点之间有方向,若每个顶点间都有两条有向边相连 , 则是 完全图
7.7.2. DONE 图的储存
7.7.3. DONE 图的遍历
- 深度优先遍历 (上->下, 左->右): V1 V2 V4 V8 V5 V3 V6 V7
广度优先遍历 (左->右,上->下): V1 V2 V3 V4 V5 V6 V7 V8
- 广度优先: 从 0 的链表开始, 先访问完当前链表,再递归访问。 0 4 3 1 6 2 7 5
- 深度优先: 从 0 的链表开始, 从当前链表第一个就开始递归访问。 0 4 6 7 1 2 5 3
7.7.4. DONE 拓扑排序
- 用有向边表示活动的先后关系。这种有向图称之为 AOV网络
- 上图的拓扑排序有:02143567 01243567 02143657 01243657
7.8. DONE 算法基础
7.8.1. DONE 特性
- 有穷性: 执行有穷步骤后结束
- 确定性: 指令必须明确
- 输入 >=0
- 输出 >=1
- 有效性: 算法每个步骤能有效执行并得到确定的结果, 例如 b=0 , a/b 就是无效的
7.8.2. DONE 复杂度
- 时间复杂度: O(1) < O(lgn) < O(n) < O(nlgn) < O(n2) < O(n3) < O(2n)
- 空间复杂度: 执行过程中需要用到的临时空间
7.8.3. DONE 查找
7.8.4. DONE 排序
- 概念
- 稳定与不稳定排序: 例如 21 0 21 这串数字, 稳定的,第一个21必然在第二个21之前,不稳定的不保证
- 内排序与外排序
- 直接插入排序
- 将插入的第 i 个元素, 依次与 R1, R2…R(i-1) 比较,找到合适位置插入
- 双层 for 循环, 时间复杂度 O(n2), 空间复杂度 O(1)
- 希尔排序
- 有数组 n
- 取小于 n 的整数 d1 , 将其分成 d1 个组, 所有距离为 d1 整数倍的记录放在同一组
- 对这 d1 个组分别进行插入排序
- 取第二个增量 d2 < d1, 重复上述分组排序步骤
- 直到 dt = 1, 也就是对整个数组进行插入排序
- 直接选择排序
- 将所有记录中,选择最小的,与第1个记录交换
- 在剩余的记录中,选择最小的,与第2个交换
- 依次类推
- 堆排序
- 它是一个完全二叉树
- 建立小顶堆,取走根元素
- 然后重建堆
- 重复上述步骤
- 就可以得到排好序的数组
- 在选择 TopN 的场景, 非常高效
建立大顶堆的过程
- 先按照创建完全二叉树
- 调整最后一个建立的非叶子节点:将其与子节点比较,以取3个节点中最大的作为根为目的进行交换。如上:5与8交换
- 以上述方式调整倒数第二个非叶子节点
- 如果交换的节点是其他节点的根,那么需要递归交换。如上图1.3:3和8交换后,3与5还要进行交换
调整堆的过程:
- 取走根元素后, 将最后一个节点放到根元素位置
- 然后从根结点开始进行调整
- 冒泡排序
- 通过相邻元素进行对比交换
依次交换到顶
- 快速排序
- 确定一个基准
- 将小于基准的放在左边,大于的放在右边
- 然后递归对左右两边重复运行上述步骤
- 归并排序
- 将两个或两个以上的 有序表 合并成一个新的
- 取两个数组头部的最小值,放到新的数组
- 重复上述步骤
- 基数排序
- 先按照个位数分组,进行排序,然后依次按照十位/百位进行
- 各算法的复杂度
8. DONE 程序设计语言与语言处理程序基础
8.1. DONE 编译过程
8.2. DONE 文法定义
一个形式文法是一个有序四元组定义, G=(V,T,S,P)
- V: 非终结符。不是语言组成部分,不是最终结果,可理解为占位符
- T: 终结符。是语言的组成部分,是最终结果。
- S: 起始符。语言开始的符号
P: 产生式。用终结符替代非终结符的规则。形如 \aplha -> β
8.3. DONE 语法推导树
8.4. DONE 有限自动机
8.5. DONE 正规式
- D
- C
8.6. DONE 程序语言基础
8.6.1. DONE 表达式
- 按照计算优先级依据中缀遍历构造树
- D
8.6.2. DONE 函数调用-传值与传址
8.6.3. DONE 各种程序语言特点
9. DONE 法律法规
9.1. DONE 保护期限
9.2. DONE 知识产权人确定
9.3. DONE 侵权判定
9.4. DONE 标准化知识
10. DONE 多媒体基础
10.1.
10.2. DONE 音频
10.3. DONE 图像
10.4. DONE 媒体的种类
10.5. DONE 多媒体相关计算问题
10.6. DONE 常见的多媒体标准
10.7. DONE 数据压缩基础
10.8. DONE 有损压缩与无损压缩
11. DONE 软件工程
11.1. DONE 软件开发模型
11.1.1. DONE 瀑布模型SDLC
- 适合需求明确,二次开发
- 应用于结构化开发
11.1.3. DONE 构建组装模型CBSD
11.1.4. DONE 统一过程
11.1.5. DONE 敏捷开发方法
- 中小型项目
11.1.6. DONE 信息系统开发方法
11.4. DONE 软件测试
11.4.1. DONE 测试原则与类型
11.4.2. DONE 测试用例设计
11.4.3. DONE 测试阶段
11.4.4. DONE McCabe复杂度
11.5. DONE 系统运行与维护
11.6. DONE 软件过程改进-CMMI
11.7. DONE 项目管理
- 甘特图不能清晰的描述各任务之间的依赖关系
- 先正推算出最早开始时间,在逆推算出最晚开始时间
- C
12. DONE 系统设计
12.1. DONE 面向对象设计
12.1.1. DONE 设计原则
12.1.2. DONE 设计模式的概念
- 架构模式: 软件设计中的高层决策,例如 C/S 结构就属于架构模式, 架构模式反映了开发软件系统过程中所作的基本设计决策
- 设计模式: 比架构模式低一个层次。关注软件系统的设计, 与具体的实现语言无关。
- 惯用法: 最底层的模式,关注软件系统的设计与实现,与语言相关
13. DONE 数据流图DFD
13.1. DONE 基本概念
13.2. DONE 数据字典
符号 | 含义 | 例子 |
---|---|---|
= | 被定义为 | |
+ | 与 | x=a+b, 表示x由a与b组成 |
[…,…] | 或 | x=[a,b], 表示x由a或b组成 |
{…} | 重复 | x={a}, 表示x由0个或多个a组成 |
(…) | 可选 | x=(a), 表示a可以在x中出现,也可以不出现 |
例子:
- 机票=姓名+日期+终点+起点+费用
- 终点=[长沙|北京|上海]
13.3. DONE 平衡原则
- 父图与子图之间的平衡
子图内的平衡
绘制数据流图时,绘制加工的输入、输出可能出现的错误
- 黑洞, 有输入,没输出
- 奇迹, 有输出,没输出
- 输出输出名称一样
- 输入加工后不可能产生命名的输入流
14. DONE 数据库设计
14.1. DONE 设计过程
14.2. DONE ER模型
- 实体间联系类型
15. DONE UML建模
15.1. DONE 用例图
15.2. DONE 类图与对象图
- 聚合: 菱形处表示整体一方
- 多重度
- 0..*
- 0..1
15.3. DONE 顺序图
15.4. DONE 活动图
15.5. DONE 状态图
15.6. DONE 通信图