2025 软件设计师复习笔记(已通过)

0x01 计算机组成原理与体系结构

(1)数据的表示

进制转换

  • R 进制转换十进制采用按权展开法
    • 二进制:\((110.01)_2 = 1\times 2^2 +1\times 2^1 +0\times 2^0 + 0\times 2^{-1} + 1\times 2^{-2} = (6.25)_{10}\)
  • 十进制转换 R 进制采用短除法
    • 二进制:十进制数每次除以 2 的余数的倒序排列
  • 二进制转八进制:从右开始,每 3 位转换为十进制
  • 二进制转十六进制:从右开始,每 4 位转换为十进制
  • 反之同理

  • 原码:一个数字的二进制表达方式,并且首位表示符号(正 0 负 1),通常使用 8 位,即一个字节
  • 反码:正数反码与原码一致,负数反码除符号位外全部取反
  • 补码:正数补码与原码一致,负数补码是其反码加 1
  • 移码(用于作为浮点运算的阶码):补码基础上,符号位取反
1 -1 1+(-1)
原码 0000 0001 1000 0001 1000 0010
反码 0000 0001 1111 1110 1111 1111
补码 0000 0001 1111 1111 0000 0000
移码 1000 0001 0111 1111 1000 0000
  • 表示范围:(\(n\) 表示位数)
    • 原码:\(-(2^{n-1}-1)\ 到\ 2^{n-1}-1\)
    • 反码:\(-(2^{n-1}-1)\ 到\ 2^{n-1}-1\)
    • 补码:\(-2^{n-1}\ 到\ 2^{n-1}-1\)

浮点运算

  • 浮点数 \(N = M\times R^e\),如:\(1234 = 1.234\times 10^3\)
    • M:尾数,1.234
    • e:指数,3
    • R:基数,10
  • 运算顺序:对阶 → 尾数计算 → 结果格式化,以 \(1234 + 111\) 为例
    1. 对阶:统一浮点数的指数(阶码),一般将小的指数转换为大的指数,即 \(1.11\times 10^2\) 转换为 \(0.111\times 10^3\)
    2. 尾数计算:即 \((1.234+0.111)\times 10^3 = 1.345\times 10^3\)
    3. 结果格式化:使小数点前有且仅有一位非 0 的数字

(2)计算机结构

graph TB 计算机-->主机 & 外设 主机-->CPU & 主储存器 CPU-->运算器 & 控制器
  • 计算机由主机与外设构成,主机由 CPU 与主储存器构成,CPU 由运算器和控制器构成
  • 运算器包括:
    • 算术逻辑单元 ALU:算术运算与逻辑运算
    • 累加寄存器 AC:暂存中间结果
    • 数据缓冲寄存器 DR:暂存读写存储器的数据
    • 状态条件寄存器 PSW:保存运算结果状态信息,如:进位、零、奇偶等
  • 控制器包括:
    • 程序计数器 PC:存放当前要执行指令的地址
    • 指令寄存器 IR:暂存当前正在执行的指令
    • 指令译码器:将 IR 中的指令代码翻译为控制信号
    • 时序部件:产生 CPU 操作的时间控制信号

(3)Flynn 分类法

  • 一种计算机体系结构分类
体系结构类型 结构
(控制部分、处理器、主存模块)
关键特性 代表
单指令流单数据流
SISD
1 1 1 单处理器系统
单指多数
SIMD
1 多 多 各处理器异步执行同一指令 并行处理机
阵列处理机
超级向量处理机
多指单数
MISD
多 1 多 无法实现 流水线计算机
多指多数
MIMD
多 多 多 各级全面并行 多处理机系统
多计算机

(4)CISC 与 RISC

指令系统类型 指令 寻址 实现 其他
CISC
(复杂指令集)
数量多
使用频率差别大
可变长格式(指令的二进制编码长度可变)
微程序控制技术
(微码)
研制周期长
RISC
(精简指令集)
数量少
使用频率接近
定长格式
大部分为单周期指令
操作寄存器,只有 Load/Store 操作内存
增加了通用寄存器
硬布线逻辑控制为主
适合采用流水线
优化编译
支持高级语言
  • CISC 用于早期、特定用途的计算机
  • RISC 用于现代、通用的计算机
    • 排除了 CISC 一些复杂、不常用的指令
    • 通过引入寄存器来提高效率,大部分操作通过寄存器完成

(5)流水线技术

  • 流水线:在程序执行时,多条指令重叠进行操作的 一种准并行处理实现技术
周期 1 2 3 4 5
取指 指令1 指令2 指令3
分析 指令1 指令2 指令3
执行 指令1 指令2 指令3
  • 流水线周期:各部分中时间最长的一段
  • 流水线执行时间
    • 理论:\(各部分时长之和+(指令条数-1)\times流水线周期\)
    • 实践:\((各部分数+指令条数-1)\times流水线周期\)
  • 流水线吞吐率:单位时间内,流水线完成任务的数量/输出结果的数量
    • 吞吐率:\(TP=\frac {指令条数}{流水线执行时间}\)
    • 最大吞吐率:\(TP_\max=\lim\limits_{n \to \infty}\frac n{(k+n-1)\Delta t}=\frac 1{\Delta t}\)(流水线周期倒数)
  • 流水线加速比\(S=\frac {不使用流水线执行时间}{使用流水线执行时间}\)
  • 流水线效率:流水线设备利用率
    • \(E=\frac {n 个任务占用的时空区}{k 个流水段的总时空区}=\frac {指令条数\times各部分时长之和}{各部分数\times流水线执行时间}=\frac {T_0}{kT_k}\)

例:指令流水线分为三部分,用时分别为:取指 2 ns,分析 3ns,执行 1 ns

  • 流水线的周期为:\(max(2,3,1)=3\) ns
  • 100 条指令总时长理论为:\((2+3+1)+(100-1)\times3=303\) ns
  • 100 条指令总时长实践为:\([(1+1+1)+100-1]\times3=306\) ns
  • 100 条指令吞吐率为:\(\frac {100}{303}\)
  • 100 条指令最大吞吐率为:\(\frac 13\)
  • 100 条指令加速比为:\(\frac {600}{303}\)
  • 100 条指令时流水线效率为:\(\frac {100\times(2+3+1)}{3\times306}\)

(6)存储系统

  • 层次化存储(速度由快到慢,容量由小到大):
    1. CPU,即寄存器
    2. Cache(缓存),按内容存取
    3. 内存(主存)
    4. 外存(辅存),如:硬盘、光盘、U 盘等
  • 以读操作为例,使用“Cache + 主存储器”的系统平均周期:\(t_3=h\times t_1+(1-h)\times t_2\),其中:
    • \(h\) 表示 Cache 的访问命中率
      • \((1-h)\) 表示失效率
    • \(t_1\) 表示 Cache 的周期时间
    • \(t_2\) 表示主存周期时间

局部性

  • 局部性原理:在程序执行过程中,访问内存的地址往往呈现出局部聚集的特性
    • 程序倾向于在短时间内重复访问某些特定的内存区域
  • 工作集:进程运行时被频繁访问的页面集合
  • 时空局部性
    • 时间局部性:如果程序访问了一个内存单元,那么近期,它很可能会再次访问这个内存单元
      • 近期访问同一单元
    • 空间局部性:如果程序访问了一个内存单元,那么近期,它很可能会访问与该内存单元相邻的内存单元
      • 近期方位邻近单元

主存

  • 分类
    • 随机存储器 RAM
      • DRAM:动态
      • SRAM:静态
    • 只读存储器 ROM
      • MROM:掩模式
      • PROM:一次可编程
      • EPROM:可擦除
      • Flash Memory:闪存
  • 编址
    • \(8\times4\) 位存储器:8 个地址(000 到 111),每个地址存储 4 bit 数据

例:

  • 内存地址从 AC000H 到 C7FFFH,共有多少 K 个地址单元 \(\frac {(C7FFFH + 1)-AC000H}{2^{10}}=\frac {C8000H-AC000H}{2^{10}}=\frac {1C000H}{2^{10}}=\frac {7\times2^{14}}{2^{10}}=7\times16=112\)

  • 该内存地址按 16bit 编址,由 28 片存储器芯片构成,每片有 16K 个存储单元,则该芯片每个存储单元存储多少位

    1. 设需要 \(x\)
    2. 则有 \(1=\frac {112K\times16bit}{28\times16K\times x}\)
    3. 解得 \(x=4bit\)
    4. 即 4 位

磁盘

  • 磁盘工作原理:磁头在磁盘片的磁道上存取数据,每个磁盘片有一个磁道和多个扇区
  • \(磁盘存取时间=寻道时间+等待时间\)
    • 寻道时间:磁头移动到磁道的时间
    • 等待时间:目标扇区转到磁头下的时间
      • 磁盘开始工作后会一直旋转,如果缓冲区中的内容没有处理完成,则无法从磁盘读取数据,此时磁盘会继续旋转,直至缓冲区为空且磁头旋转至目标扇区

例:某磁盘的每个磁道划分为 11 个物理块(扇区),每块存放 1 个逻辑记录,逻辑记录 \(R_0,R_1,\cdots,R_{10}\) 依次存放在同一个磁道上,即物理块 \(n\) 存放逻辑记录 \(R_{n-1}\),磁盘的旋转周期为 33ms,磁头当前处在 \(R_0\) 开始处,系统使用单缓冲区顺序处理这些记录,每个记录处理时间为 3ms

  • 处理这 11 个记录的最长时间为:\(33\times(11-1)+\frac {33}{11}+3=336\)
  • 磁头从准备处理 \(R_{n-1}\) 到准备处理 \(R_n\) 需要 33ms,共计 \((11-1)\) 个,直至磁头准备处理 \(R_{10}\)\(\frac {33}{11}\)ms 读取,3ms 处理
  • 对信息存储优化分布后,处理这 11 个记录的最短时间为:\((\frac {33}{11}+3)\times11=66\)
  • 存放顺序为交错存储,即 0 6 1 7 2 8 3 9 4 10 5(类似栅栏密码)

(7)总线系统

  • 内部总线:计算机内部各功能模块之间用于传输数据和控制信号的通道
  • 系统总线:连接计算机系统中主要部件的公共通信线路
    • 数据总线:数据传输
    • 地址总线:地址信息传输
      • 32 位地址总线可以寻址 \(2^{32}\) 个不同的内存地址
    • 控制总线:控制信号传输
  • 外部总线:计算机与外部设备之间用于数据传输的接口总线

(8)可靠性

  • 串联系统
    • 系统可靠性:每个子系统的可靠性之积,\(R=R_1\times R_2\times\cdots\times R_n\)
    • 系统失效率:每个子系统的失效率之和,\(\lambda=\lambda_1+\lambda_2+\cdots+\lambda_n\)
  • 并联系统
    • 系统可靠性:\(R=1-(1-R_1)\times(1-R_2)\times\cdots\times(1-R_n)\)
    • 系统失效率:\(\mu=\frac 1{\frac 1\lambda\sum\limits_{j=1}^{n}\frac 1j}\)\(1-R\)

(9)校验码

  • 码距:编码系统中任意两个码字的最小距离(两个码字之间不同的个数)

    • 检测 \(e\) 个误码需要最小码距为 \(d\ge e+1\)
    • 纠正 \(t\) 个误码需要最小码距为 \(d\ge 2t+1\)
  • 循环校验码 CRC

    • 能检错,不能纠错

    • 采用模二除法,按位异或,如:10111 对 110 进行模二除法$$\begin{array}{l}10111\110\\hline0111\\ \ 110\\hline\ \ 0011\end{array}$$

例:原始报文为 110 0101 0101,其生成的多项式为 \(x^4+x^3+x+1\),则 CRC 编码结果为:

  1. \(x^4+x^3+x+1\) 的二进制表示为 11011
  2. 对原始报文尾部添加 \((生成多项式长度-1)\) 个 0,即 110 0101 0101 0000
  3. 新生成的报文多项式的二进制表示进行模二除法,余数为 0011
  4. 用余数替换后补 0,得到编码结果,是 110 0101 0101 0011
  • 海明校验码

例:计算 1011 的海明码

  1. 根据公式 \(2^r\ge信息长度+r+1\) 得出 \(r\ge3\),即校验码至少需要 3 位,分别位于 \(2^0\)\(2^1\)\(2^2\)

  2. 此时得到如下表格:

7 6 5 4 3 2 1 位数
\(I_4=1\) \(I_3=1\) \(I_2=0\) \(I_1=1\) 信息位
\(r_2\) \(r_1\) \(r_0\) 校验位
  1. 每个信息位的二进制多项式表示为:\(7=2^2+2^1+2^0\)\(6=2^2+2^1\)\(5=2^2+2^0\)\(3=2^1+2^0\)

  2. 将包含相同多项式的信息位进行异或,得到该多项式对应的校验位的值:

\[2^2:r_2=I_4\oplus I_3\oplus I_2=1\oplus1\oplus0=0\\ 2^1:r_1=I_4\oplus I_3\oplus I_1=1\oplus1\oplus1=1\\ 2^0:r_0=I_4\oplus I_2\oplus I_1=1\oplus0\oplus1=0 \]

  1. 因此海明码是 0110011

例:对信息 0110111 纠错

  1. 依次对应 \(r_0=0,r_1=1,I_1=1,r_2=0,I_2=1,I_3=1,I_4=1\)

  2. 偶校验:

\[2^2:r_2\oplus I_4\oplus I_3\oplus I_2=0\oplus1\oplus1\oplus1=1\\ 2^1:r_1\oplus I_4\oplus I_3\oplus I_1=1\oplus1\oplus1\oplus1=0\\ 2^0:r_0\oplus I_4\oplus I_2\oplus I_1=0\oplus1\oplus1\oplus1=1 \]

  1. 即第 5 位(101)发生错误,需要取反

0x02 操作系统

  • 功能
    • 管理系统的软硬件、数据资源
    • 控制程序运行
    • 人机之间、应用软件与硬件之间的接口
  • 管理职能:进程管理、存储管理、文件管理、作业管理、设备管理
  • 微内核操作系统:虚设备与 spooling 技术

(1)进程管理

进程状态转换图

  • 五态模型

    graph LR 1[静止就绪]--恢复或挂起-->2[活跃就绪]--挂起-->1 3[运行]--挂起-->1 3--时间片到达-->2--调度-->3 4[静止阻塞]--等待事件发生-->1 4--恢复或激活-->5[活跃阻塞]--挂起-->4 3--等待某个事件-->5--等待事件发生-->2
  • 其中活跃就绪(就绪)、运行活跃阻塞(等待)构成三态模型

前趋图

  • 用于表达任务的并行关系和递进关系,如:

    flowchart LR 1((需求分析))-->2((项目设计))-->31((前端开发)) & 32((后端开发))-->4((代码测试))-->5((部署上线))

进程的同步与互斥

  • 同步:多个进程之间按照一定的顺序协调运行,确保某些操作按特定顺序完成
  • 互斥:多个进程不能同时访问共享资源,以避免数据冲突或不一致

PV 操作

  • 临界资源:各进程间需要互斥方式对其进行共享的资源

  • 临界区:每个进程中访问临界资源的代码

  • 信号量:一种特殊变量

  • PV 操作

    graph LR subgraph 进程队列 q[[ ]] end subgraph P 操作 p1[S=S-1]-->p2{S<0}--T-->q end subgraph V 操作 v1[S=S+1]-->v2{S<=0} q--T-->v2 end
    • 其中,S 是信号量

例 1:单缓冲区生产者、消费者问题 PV 原语描述:S1 初值为 1,S2 初值为 0

生产者 消费者
生产一个产品 P(S2),S2=1-1=0
P(S1),S1=1-1=0 从缓冲区取产品
送产品到缓冲区 V(S1),S1=0+1=1
V(S2),S2=0+1=1 消费产品

例 2:书店有一个收银员和 n 个顾客,信号量 S1、S2、Sn 初值分别为 0,0,n

顾客进程 i(i=1,2,...,n):

graph LR subgraph 付款 a1 & a2 end p["P(Sn)"]-->购书-->a1-->a2-->v["V(Sn)"]

收银员进程:

graph LR b1-->收费-->b2-->b1
  • a1、a2 分别为 V(S1)、P(S2)
    • V(S1) 用于唤醒收银员
    • P(S2) 用于支付
  • b1、b2 分别为 P(S1)、V(S2)
    • P(S1) 用于响应唤醒
    • V(S2) 用于收款

例 3:根据前趋图描述 PV 原语,S1=0,S2=0,S3=0,S4=0

graph LR 1((1)) & 2((2)) & 3((3))-->4((4))-->5((5))
  • 进程 1:V(S1)
  • 进程 2:V(S2)
  • 进程 3:V(S3)
  • 进程 4:P(S1) P(S2) P(S3) V(S4)
  • 进程 5:P(S4)

死锁问题

  • 当一个进程在等待一件不可能的事件时,发生了死锁;任一进程死锁都会导致系统死锁
  • 当系统至少有 \(1+\sum\limits_{i=1}^{n}(各进程数需要资源数-1)\) 个资源时,不可能发生死锁

例:系统有 3 个进程,各自都需要 5 个系统资源,为完全避免死锁,系统执行需要 \(1+[(5-1)+(5-1)+(5-1)]=13\) 个资源

  • 产生死锁的必要条件:互斥、占有和等待、非抢占、环路等待
  • 避免死锁:有序资源分配、银行家算法

银行家算法

  • 分配资源的原则:
    1. 当进程对资源的最大需求不超过系统中的资源数时可以接纳(\(进程需求\lt系统总量\)
    2. 进程可以分期请求资源,但请求的总数不能超过最大需求量(\(\sum分期资源\lt总需求\)
    3. 当前不能满足,可以延迟分配,但总能使进程在有限时间内获得资源

例:系统内三类互斥资源 R1、R2、R3,可用资源数分别为 9、8、5,T0 时有 P1~P5 五个进程,安全序列为:

最大需求量 已分配资源
R1 R2 R3 R1 R2 R3
P1 6 5 2 1 2 1
P2 2 2 1 2 1 1
P3 8 1 1 2 1 0
P4 1 2 1 1 2 0
P5 3 4 4 1 1 3
  1. 系统剩余资源:

\[ R_1=9-(1+2+2+1+1)=2\\R_2=8-(2+1+1+2+1)=1\\R_3=5-(1+1+0+0+3)=0 \]

  1. 进程还需资源:
R1 R2 R3
P1 5 3 1
P2 0 1 0
P3 6 0 1
P4 0 0 1
P5 2 3 1
  1. 如果按序列 \(P_2\rightarrow P_4\rightarrow P_5\rightarrow P_1\rightarrow P_3\),则
现有资源 需要资源 已经分配 现有+已经分配 完成
R1 R2 R3 R1 R2 R3 R1 R2 R3 R1 R2 R3
P2 2 1 0 0 1 0 2 1 1 4 2 1 True
P4 4 2 1 0 0 1 1 2 0 5 4 1 True
P5 5 4 1 2 3 1 1 1 3 6 5 4 True
P1 6 5 4 5 3 1 1 2 1 7 7 5 True
P3 7 7 5 6 0 1 2 1 0 9 8 5 True

(如果现有资源大于需要资源,则可以假定该进程可以完成,并释放已经分配的资源,从而提高现有资源数量)

(2)存储管理

分区存储组织

  • 首次适应法:从头开始,在首次能够容纳新作业空间的区块,切割空间并分配给该作业
  • 最佳适应法:将所有空闲区块按从小到大连接成链,依次找到能够容纳新作业空间的区块并切割
  • 最差适应法:在最大空闲区块中切割(避免小块空闲区块过多)
  • 循环首次适应法:将所有空闲区块,从最后一次分配开始,按顺序连接成环,进行首次适应法

段页式存储

页式存储

  • 将用户程序等分为大小相同的页并编号,通过页表将页号与物理块号(页帧号)进行映射,指向对应的物理地址
    • 逻辑地址:页号+页内地址
  • 优点:利用率高、碎片小、分配与管理简单
  • 缺点:增加系统开销、可能产生抖动现象

例:进程 P 有 6 个页面,页号从 0 到 5,页面大小 4K,页面变换表如下,状态位 1 和 0 分别表示页面在和不在内存:

页号 页帧号 状态为 访问位 修改位
0 2 1 1 0
1 3 1 0 1
2 5 1 1 0
3 - 0 0 0
4 - 0 0 0
5 6 1 1 1
  • 如果系统分配给该进程 4 个存储块,该进程要访问的逻辑地址为 5A29H,则变换后的物理地址为:
    1. 由于 \(4K=2^{12}\),则页内地址共 12 位,高于 12 位的部分为页号
    2. 因此 5A29H 地址的 A29 为页内地址,页号为 5
    3. 页号 5 对应的页帧号(物理块号)为 6
    4. 则变换后的物理地址为 6A29H
  • 如果该进程要访问的页面 4 不存在,则需要淘汰的页面的页号为:
    1. 由于页面 4 的状态位为 0,表示页面 4 不在内存,则需要淘汰的页面必然在内存中,即 0、1、2、5 之一
    2. 由于页面 1 的访问位为 0,可以被淘汰;而其他页面的访问位均为 1 不可淘汰
    3. 则需要淘汰的页面的页号为 1

段式存储

  • 将用户程序按逻辑结构分为大小可能不同的段并编号,通过段表将段号、段长与基址进行映射,指向对应的物理地址
    • 逻辑地址:段号+段内地址
  • 优点:多道程序共享内存、各段程序修改互不影响
  • 缺点:内存利用率低、内存碎片浪费大

段页式存储

  • 将程序的逻辑地址空间划分为多个逻辑段,每个段再被划分为固定大小的页面,内存地址空间也被划分为固定大小的页面帧
    • 程序运行时,段被加载到内存中,段内的页面被映射到内存的页面帧中;通过段表和页表的两级映射机制,将逻辑地址转换为物理地址
  • 优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
  • 缺点:复杂和开销随管理软件的增加而增加,所需硬件与占用内容也会增加,继而降低执行速度

页面置换算法

  • 最优算法 OPT、随机算法 RAND、先进先出算法 FIFO、最近最少使用算法 LRU

  • FIFO 抖动现象:分配更多的资源反而效率变低

    • 3 页

      访问顺序 4 3 2 1 4 3 5 4 3 2 1 5
      1 4 4 4 3 2 1 4 4 4 3 5 5
      2 3 3 2 1 4 3 3 3 5 2 2
      3 2 1 4 3 5 5 5 2 1 1
      缺页

      共计缺页 9 次

    • 4 页

      访问顺序 4 3 2 1 4 3 5 4 3 2 1 5
      1 4 4 4 4 4 4 3 2 1 5 4 3
      2 3 3 3 3 3 2 1 5 4 3 2
      3 2 2 2 2 1 5 4 3 2 1
      4 1 1 1 5 4 3 2 1 5
      缺页

      共计缺页 10 次

例 1:内存空间 3 页,初始内存为空,访问序列为 5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1

  • FIFO

    5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1
    1 5 5 5 0 0 1 2 3 0 4 2 2 2 3 0 0 0 1 2 5
    2 0 0 1 1 2 3 0 4 2 3 3 3 0 1 1 1 2 5 0
    3 1 2 2 3 0 4 2 3 0 0 0 1 2 2 2 5 0 1
    缺页
  • LRU

    5 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 5 0 1
    1 5 5 5 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1
    2 0 0 0 0 0 0 0 0 3 2 2 2 2 2 2 2 5 5 5
    3 1 1 1 3 3 3 2 2 3 3 3 3 3 0 0 0 0 0
    缺页

例 2:有按字节编址的 8 位计算机系统,采用虚拟页式存储管理方案,页面大小位 1KB,无快表。用户程序中,swap A,B 占用页号 0 和 1,A 占用页号 2 和 3,B 占用页号 4 和 5。swap A,B 是 16 位指令,AB 表示该指令的两个 16 位操作数。swap 指令存放在内存的 1023 单元,A 存放在内存的 3071 单元,B 存放在内存的 5119 单元

  • 执行 swap 指令需要访问内存的次数为:
    • “无快表” 说明每次从页表读取对应物理块需要访问两次,因此上述执行该指令需要访问内存 \(2\times6=12\)
  • 上述行为将产生的缺页中断次数为:
    1. 指令虽然跨页,但仅计算一次缺页中断
    2. 两个操作数都跨页,都计算两次缺页中断
    3. 则总的缺页中断次数为 \(1+2+2=5\)

(3)文件管理

文件

  • 属性:
    • R:只读属性
    • A:存档属性
    • S:系统文件
    • H:隐藏文件
  • 文件名:驱动器号、路径、主文件名、扩展名

索引文件结构

  • 从索引节点到物理盘块称为直接索引,其中增加的 N 次索引节点,则称为 N 级间接索引

    • 如果索引节点有 13 个节点中,则:

      索引节点 索引方式
      0 直接索引
      1 直接索引
      2 直接索引
      3 直接索引
      4 直接索引
      5 直接索引
      6 直接索引
      7 直接索引
      8 直接索引
      9 直接索引
      10 一级间接索引
      11 二级间接索引
      12 三次间接索引

      此时,当一个物理盘块大小为 \(4K\),每个索引节点为 4 字节,那么按上述索引方法,能够存储的文件最大为:\(4K\times10+4K\times\frac {4K}{4字节}+4K\times(\frac {4K}{4字节})^2+4K\times(\frac {4K}{4字节})^3\)

  • 相应的,间接存储层次越多,能够存放的文件大小越大,读取效率越低

例:索引节点有 8 个 4 字节地址项:0~7,其中 0~4 采用直接索引,5、6 采用一级间接索引,7 采用二级间接索引。磁盘索引块与磁盘数据块大小均为 1KB 字节,某文件的索引为:

索引节点 二级间接索引地址 一级间接索引地址 直接索引地址
0 50
1 67
2 68
3 78
4 89
5 58……136 90
6 187……129 91
7 156:261……516
……
168:518……1021
156……168 101
  • 若访问该文件逻辑块号 5 和 261 的信息,则对应的物理块号分别为:

    1. 0 节点对应的物理块号为 0,1 对应 1,……,5 的 0 对应 6,5 的 1 对应 7,……

    2. 一个一级间接索引能够存储 \(\frac {磁盘索引块:1K}{地址项大小:4} = 2^8 = 256\) 个地址

    3. \(261=256(一个一级间接索引地址数)+5(5个直接索引数)\) 说明逻辑块 261 对应 6 节点的第 0 个索引节点

    逻辑块 物理块
    5 58
    261 187
  • 101 物理块号存放的是:二级地址索引表

树形目录结构

  • 绝对路径:从盘符开始的路径
  • 相对路径:从当前路径开始的路径

位示图法

  • 空闲存储空间管理方法:空闲区表法、空闲链表法、位示图法、成组链接法
  • 位示图中,0 表示已占用,1 表示未占用(空闲)

例:磁盘上物理块编号依次为 0、1、2、……,系统中字长为 32 位,每一位对应文件存储器的一个物理块,0 空闲 1 占用,位示图如下,如果 4195 号物理块分配给某文件,则

31 30 …… 4 3 2 1 0
0 1 …… 1 0 0 0 1
  • 该物理块的使用情况在位示图的第几个字的描述:
    1. \(4195 号物理块=第 4196 个物理块\)
    2. \(\frac {4196}{32}=131.125>131\)
    3. 向上取整(即前 131 个字要填满),该物理块位于第 132 个字
  • 系统应将:
    1. \(131\times32=4192\),即第 132 字的第 0 位置为 4192
    2. 依此类推,4195 位于第 132 字的第 3 位置
    3. 系统应将该字的第 3 位置置 1

(4)设备管理

数据传输控制方式

  • 包括:程序控制方式、程序中断方式、DMA、通道、输入输出处理机

(5)微内核操作系统

实质 优点 缺点
单体内核 将图形、设备驱动及文件系统等功能全部在内核中实现,运行在内核状态和同一地址空间 减少进程间通信和状态切换的系统开销,获得较高的运行效率 内核庞大,占用资源多
不易剪裁
系统的稳定性和安全性不好
微内核 只实现基本功能,其他功能防止内核外 内核精炼,便于剪裁和移植
系统服务程序运行在用户地址空间,系统的可靠性、稳定性和安全性较高
可用于分布式系统
用户状态和内核状态需要频繁切换,从而导致系统效率不如单体内核

0x03 数据库系统

(1)三级模式、两级映射

  • 三级模式:
    • 外模式:用户级数据库、用户视图
      • 视图 View
    • 概念模式:概念级数据库、DBA 视图
      • 表 Table
    • 内模式:物理级数据库、内部视图
      • 数据存储
  • 两级映射:外模式-概念模式映射、概念模式-内模式映射

(2)设计过程

  1. 需求分析:产出数据流图、数据字典、需求说明书
  2. 概念结构设计:产出 E-R 模型
  3. 逻辑结构设计:产出关系模式
  4. 物理设计

(3)E-R 模型

  • 方框表示实体、椭圆表示属性、菱形表示联系,如:

    graph LR s1([学号]) & s2([姓名]) & s3([性别])---s[学生] c[课程]---c1([课程编号]) & c2([课程名]) & c3([授课教师]) s--M---sc{选课}--N---c sc---sc1([成绩])
    • M、N 表示学生与课程间存在多对多关系
  • 集成

    • 方法:
      • 多个局部 E-R 图一次集成
      • 逐步集成,每次集成两个局部 E-R 图
    • 产生的冲突
      • 属性冲突:属性域冲突、属性取值冲突
      • 命名冲突:同名异义、异名同义
      • 结构冲突:同一对象在不同应用具有不同的抽象、同一实体在不同局部 E-R 图中所包含的属性个数与属性排列次序不一致
  • 一个实体型转换为一个关系模式

    • \(1:1\) 联系
    • \(1:n\) 联系
    • \(m:n\) 联系

例:对于三个不同实体集和它们之间的多对多关系 \(m:n:p\),最少可以转换的关系模式个数为:

graph LR A--m---l{ }--n---B l--p---C
  1. 每个实体转成一个关系模式:3
  2. 联系转为多对多关系模式:1
  3. 因此最少可以转换为 \(3+1=4\) 个关系模式

(4)关系代数

  • 并:\(S1\cup S2\),两个数据中的所有内容(去重)
  • 交:\(S1\cap S2\),两个数据中相同的内容
  • 差:\(S1-S2\),S1 中除去包含在 S2 的数据(结果为 S1 有而 S2 没有的),如:\(\{1,2\}-\{1\}=\{2\}\)
  • 笛卡尔积:\(S1\times S2\),S1 的每项与 S2 的每项全排列,如:\(\{1,2\}\times\{3,4\}=\{13,14,23,24\}\)
  • 投影:\(\Pi_{S_{p1},S_{p2}}(S1)\),取出 S1 中的 \(S_{p1}\) 列和 \(S_{p_2}\)
  • 选择:\(\sigma_{S_p=x}(S1)\),取出 S1 中满足 \(S_p\) 列值为 \(x\) 的所有行
  • 连接:\(S1\Join_{S1.S_p=S2.S_p} S2\),取出 S1 中 \(S_p\) 的值和 S2 中 \(S_p\) 的值相同的所有行及其在两个表中所有列的值,如:\(\{12,34\}\Join_{1=1}\{17,68,39\}=\{127,349\}\)
    • 没有条件则称为自然连接,即把两个表中相同列做等值

(5)规范化理论

  • \(R(U)\) 是属性 \(U\) 上的一个关系模式,\(X\)\(Y\)\(U\) 的子集,\(r\)\(R\) 的任意关系,如果对于 \(r\) 中的任意两个元组 \(u\)\(v\),只要有 \(u[X]=v[X]\),就有 \(u[Y]=v[Y]\),则称 \(X\) 函数决定 \(Y\)\(Y\) 函数依赖于 \(Y\),记为 \(X\rightarrow Y\)
    • 部分函数依赖:函数 \(A\) 与函数 \(B\) 共同决定函数 \(C\),且函数 \(A\) 也可以决定函数 \(C\)
    • 传递函数依赖:函数 \(A\) 决定函数 \(B\),函数 \(B\) 决定函数 \(C\),且函数 \(B\) 不能决定函数 \(A\)
  • 非规范化可能会导致:数据冗余、更新异常、插入异常、删除异常
  • 键包括:
    • 超键:唯一标识元组
    • 候选键:超键消除多余属性的结果
      • 根据函数依赖关系图,以入度为 0 的属性为起点尝试遍历该关系图,如果遍历成功则该属性可以作为候选键;如果遍历失败,但加入其中的一些中间结点可以遍历成功,则这些结点的集合作为候选键
      • 没有入度为 0 的结点,则可以选取任一结点
    • 主键:候选键任选之一
    • 外键:其他关系的主键

例 1:关系 R 如下,R 的候选关键字(候选键)为:A1

graph LR A1-->A2-->A3-->A2-->A4

例 2:关系 P 如下,候选码为:\(\{A,B,C,D\}\)

graph LR A & B & D--ABD-->E A & B--AB-->G-->H B-->F C-->J C & J--CJ-->I

例 3:关系 R 如下,候选关键字为:A 和 B

graph LR A-->B & C B-->A & C
  • 范式 NF(主属性是候选键的一部分)
    • 第一范式 1NF:属性值都是不可分的原子值
    • 第二范式 2NF:1NF 消除非主属性对候选键的部分依赖
    • 第三范式 3NF:2NF 消除非主属性对候选键的传递依赖
    • BC 范式 BCNF:3NF 消除主属性对候选键的传递依赖

例 4:某公司有部门(部门号、部门名、负责人、电话)、商品(商品号、商品名、单价、库存量)、职工(职工号、姓名、住址)三个实体,假设每个部门有一个负责人、一个电话、若干员工,每个商品只由一个部门负责销售

  • 部门关系不属于 3NF 的原因:
    1. 部门号可以作为该表的主键,即不存在部分依赖
    2. 因此不属于 3NF 的原因是未消除传递函数依赖
  • 如果要得到表(职工号、姓名、部门名、月销售额),需要:
    1. 职工与部门存在多对一的关系,新增的要在“多”的一边
    2. 因此需要在职工表中新增部门号
  • 在构建上述的表时,需要增加的关系模式是:销售(职工号、商品号、日期、数量)
  • 设数据库模式 \(\rho=\{R1,R2,\cdots,Rk\}\) 是关系模式 R 的一个分解,F 是 R 上的函数依赖集,\(\rho\) 中每个模式 Ri 上的 FD 集是 Fi,如果 \(\{F1,F2,\cdots,Fk\}\) 与 F 是等价的,那么长分解 \(\rho\) 保持 FD
  • 无损分解:可以还原的分解
    • 如:成绩(学号、姓名、课程号、课程名、成绩) 的无损分解可以是 成绩(学号、课程号、分数),学生(学号、姓名),课程(课程号、课程名)
  • 如果 R 的分解为 \(\rho=\{R_1, R_2\}\),F 为 R 满足的函数依赖集合,分解 \(\rho\) 具有无损连接性的充要条件是 \(R_1\cap R_2\rightarrow(R_1-R_2)\)\(R_1\cap R_2\rightarrow(R_2-R_1)\)

例 5:设 \(R=ABC, F=\{A\rightarrow B\}\),则 \(\rho_1=\{R_1(AB), R_2(AC)\}, \rho_2=\{R_1(AB), R_3(BC)\}\) 是不是无损分解

  1. 对于 \(\rho_1\)\(R_1\cap R_2=A,R_1-R_2=B,R_2-R_1=C\),满足 \(A\rightarrow B\)\(A\rightarrow C\)
  2. 对于 \(\rho_1\)\(R_1\cap R_3=B,R_1-R_3=A,R_3-R_1=C\),满足 \(B\rightarrow A\)\(B\rightarrow C\)
  3. 由于 \(F\) 中仅有 \(A\rightarrow B\),因此仅有 \(\rho_1\) 是无损分解

(6)并发控制

  • 事务的 ACID:
    • 原子性:事务不可拆分
    • 一致性:事务执行前后,数据保持一致,没有丢失
    • 隔离性:事务间相互隔离
    • 持续性:事务的结果持续影响
  • 并发产生的问题:
    • 丢失更新:在多个事务中对同一数据更新操作,某些操作可能会丢失,即被后来的操作覆盖
    • 不可重复读:在同一事务的两次读取中,期间可能数据被其他事务更新,导致两次读取结果不一致
    • 脏数据读出:某个事务中产生的临时数据,会被其他事务作为实际数据读出
  • 封锁协议(X 锁:写锁,S 锁:读锁)
    • 一级封锁协议:事务在修改数据前加 X 锁,直至事务结束后释放(防止丢失更新)
    • 二级封锁协议:一级封锁协议基础上,事务在读取数据前加 S 锁,直至读取完成后释放(+防止脏数据读出)
    • 三级封锁协议:一级封锁协议基础上,事务在读取数据前加 S 锁,直至事务结束后释放(+防止不可重复读)
    • 两段锁协议:可串行化,但可能会死锁
  • 死锁的预防、解除

(7)完整性约束

  • 包括:
    • 实体完整性约束
    • 参照完整性约束
    • 用户自定义完整性约束
  • 触发器(Trigger):通过脚本实现更加复杂的完整性约束

(8)安全

措施 说明
用户标识与鉴定 用户账户、口令、随机数检验
存取控制 用户授权(包括操作类型、数据对象的权限)
密码存储与传输 对远程终端信息用密码传输
视图保护 视图授权
审计 记录用户操作

(9)备份与恢复

备份

  • 按备份方式:

    • 冷备份(静态备份):在数据库关闭情况下,将数据库的所有文件备份
    • 热备份(动态备份):在数据库运行情况下,通过备份软件,将数据库的所有文件备份
    方式 优点 缺点
    冷备份 方法简易、易于归档、易于恢复、低维护、高安全 单时间点恢复
    不能进行其他工作
    不能按表或按用户恢复
    热备份 可在表空间或数据库文件级备份,用时短
    备份时数据库可用于其他工作
    可对几乎所有数据库实体做恢复
    恢复速度快
    错误后果严重
    失败的结果无法用于时间点恢复
    难于维护
  • 按备份量:

    • 完全备份:备份所有数据
    • 差量备份:仅备份上一次完全备份后变化的数据
    • 增量备份:备份上一次备份后变化的数据
  • 静态/动态 海量/增量 转储

    • 系统中是否允许事务运行分为动态(是)与静态(否)
    • 每次转储全部(海量)或上一次转储后更新的数据(增量)

故障与恢复

故障关系 故障原因 解决方法
事务本身可预期故障 自身逻辑 程序中预先设置 rollback
事务本身不可预故障 算术溢出、违反存储保护 由 DBMS 的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态
系统故障 系统停止运作 检查点法
介质故障 外存被破坏 根据日志重做业务

(10)数据仓库与数据挖掘

  • 数据仓库特点:面向主题、集成、相对稳定、反映历史变化

  • 数据仓库构建流程:

    graph LR 数据源--抽取/清理/装载/刷新-->数据仓库<-->OLAP服务器 数据仓库--服务--->数据挖掘工具等

    数据集市:部门级子数据仓库

  • 数据挖掘方法:决策树、神经网络、遗传算法、关联规则挖掘算法

  • 数据挖掘分类:

    • 关联分析:数据间相互关系
    • 序列模式分析:数据间先后(因果)关系
    • 分类分析:为每个记录赋予标记后,按标记分类
    • 聚类分析:分类分析逆过程

(11)反规范化

  • 用于解决系统多次连接表实现查询的低效率问题
  • 方法:增加派生性冗余、增加冗余列、重新组表、分割表

(12)大数据

  • 大数据的 4V:

    • 数据量 Volume
    • 速度 Velocity
    • 多样性 Variety
    • 值 Value
  • 大数据处理系统的重要特征

    • 高可扩展
    • 高性能
    • 高容错
    • 支持异构环境
    • 较短的分析延迟
    • 易用且开放的接口
    • 低成本
    • 向下兼容
  • 对比传统数据:

    维度 传统数据 大数据
    数据量 GB、TB PB+
    数据分析需求 现有数据的分析与检测 深度分析
    硬件平台 高端服务器 集群

0x04 计算机网络

(1)OSI/RM 七层模型

层次 名称 主要功能 主要设备及协议
7 应用层 实现具体的应用功能 POP3、FTP、HTTP、Telnet、SMTP、DHCP、TFTP、SNMP、DNS
6 表示层 数据的格式与表达、加密、压缩
5 会话层 建立、管理、终止会话
4 传输层 端到端的连接 TCP、UDP
3 网络层 分组传输和路由选择 三层交换机、路由器
ARP、RARP、IP、ICMP、IGMP
2 数据链路层 传送以帧为单位的信息 网桥、交换机、网卡
PPTP、L2TP、SLIP、PPP
1 物理层 二进制传输 中继器、集线器
  • 局域网:物理层、数据链路层

例:网络如下,IP 全局广播分组不能够通过的路径:

graph TB 计算机P-->21{网桥} & 3{路由器} 21-->1{集线器} & 计算机Q 1-->计算机R 3-->22{交换机} & 计算机S 22-->计算机T
  • 计算机 P 通过网桥、集线器可以到达计算机 R、Q
  • 计算机 P 通过路由器不可以到达计算机 T、S
  • 计算机 R、Q 通过集线器可以到达对方
  • 计算机 T、S 通过交换机可以到达对方

(2)标准与协议

协议簇

多个协议的整合体

  • TCP/IP 协议:Internet 标准协议簇

    • 特点:可扩展、可靠、应用广泛、牺牲速度和效率
  • IPX/SPX 协议:局域网联机

  • NETBEUI 协议:不支持路由,速度较快

TCP

  • 三次握手

    sequenceDiagram participant A participant B A->>B: SYN(SEQ=x) B->>A: SYN(SEQ=y, ACK=x+1) A->>B: SYN(SEQ=x+1, ACK=y+1)

    其中,TCP 连接状态依次为:SYN_RECV、SYN_RECV、ESTABLISHED

  • 四次挥手

    sequenceDiagram participant A participant B A->>B: FIN B->>A: ACK A->>B: FIN B->>A: ACK

DHCP

  • 用于 IP 地址动态分配
  • 采用客户机/服务器模型
  • 租约(地址可使用有效期)默认为 8 天
    • 当租约过半的时候需向 DHCP 服务器申请续租
    • 当租约超过 87.5% 时未续约或没有和当初提供 IP 的 DHCP 服务器联系上时,则开始联系其他 DHCP 服务器
  • 分配策略包括:固定分配、动态分配、自动分配
  • 当 IP 为 169.254.0.0/16 或 0.0.0.0 时,分别在 Windows 和 Linux 系统中表示 DHCP 失效

DNS

  • 用于客户端查询域名服务器中域名对应的 IP
  • 主机向本地域名服务器的查询采用递归查询
    • 递归查询:服务器必须回答目标 IP 与域名的映射关系
  • 本地域名服务器向根域名服务器的查询采用迭代查询
    • 迭代查询:服务器收到一次迭代查询回复一次结果,结果可能是目标 IP 与域名的映射关系其他 DNS 服务器地址

例:主机 1 对主机 2 进行域名查询的过程如下,说明:

graph TB 根域名服务器<-->本地域名服务器<-->主机1 & z[中介域名服务器] z<-->授权域名服务器---主机2
  • 根域名服务器采用迭代查询
  • 中介域名服务器采用递归查询

(3)类型与拓扑结构

  • 按分布范围:
    • 局域网:LAN
    • 城域网:MAN
    • 广域网:WAN
    • 因特网
  • 按拓扑结构:总线型、星型、环型

(4)规划与设计

  • 规划原则:实用性、开放性、先进性

  • 设计任务:

    • 确定网络总体目标
    • 确定总体设计原则
    • 通信子网设计
    • 资源子网设计
    • 设备选型
    • 网络操作系统与服务器资源设备
    • 网络安全设计
  • 设计原则:

    • 可用性:网络或网络设备可用于执行预期任务时间所占总量的百分比
    • 可靠性:网络设备或计算机持续执行预订功能的可能性
    • 可恢复性:网络从故障中恢复的难易程度与时间
    • 适应性:在用户改变应用要求时,网络的应变能力
    • 可伸缩性:网络技术或设备随着用户需求的增长而扩充的能力
  • 实施原则:可靠性、安全性、高效性、可扩展性

  • 实施步骤:

    graph LR 工程实施计划-->网络设备到货验收-->设备安装-->系统测试-->系统试运行-->用户培训-->系统转换
  • 其他设计

    • 逻辑网络设计:逻辑网络设计图,IP 地址方案,安全方案,具体的软硬件、广域网连接设备和基本服务,招聘和培训网络员工的具体说明、对软硬件、服务、员工和培训的费用初步估计

    • 物理网络设计:网络物理结构图和布线方案、设备和部件的详细列表清单、软硬件和安装费用的估算、安装日程表、安装后的测试计划、用户培训计划

    • 分层设计:

      • 接入层:向本地网段提供用户接入

      • 汇聚层:网络访问策略控制、数据包处理、过滤、寻址

      • 核心层:数据交换

        graph TB Internet--防火墙---核心交换机---1[汇聚交换机] & 2[汇聚交换机] 1---11[接入交换机] & 12[接入交换机] 2---21[接入交换机] & 22[接入交换机]

(5)IP 与子网划分

IP 地址及其分类

IPv4

类别 点分十进制 二进制
A 类 0.0.0.0~
127.255.255.255
00000000 00000000 00000000 00000000~
01111111 11111111 11111111 11111111
(0 开头)
B 类 128.0.0.0~
191.255.255.255
10000000 00000000 00000000 00000000~
10111111 11111111 11111111 11111111
(10 开头)
C 类 192.0.0.0~
223.255.255.255
11000000 00000000 00000000 00000000~
11011111 11111111 11111111 11111111
(110 开头)
D 类组播 224.0.0.0~
239.255.255.255
11100000 00000000 00000000 00000000~
11101111 11111111 11111111 11111111
(1110 开头)
E 类保留 240.0.0.0~
255.255.255.255
11110000 00000000 00000000 00000000~
11111111 11111111 11111111 11111111
(1111 开头)
  • 其中,全 0 和全 1 都不能表示主机,因此每类地址最多能够表示的主机台数为:\(2^{主机号数}-(1个全零地址+1个全一地址)\)
  • A 类地址前 8 位是网络号,其余 24 位是主机号,最多表示 \((2^{32-8}-2)\) 台主机
  • B 类地址前 16 位是网络号,最多表示 \((2^{32-16}-2)\) 台主机
  • C 类地址前 24 位是网络号,最多表示 \((2^{32-24}-2)\) 台主机
  • X.X.X.X/24 中 24 表示 IP 地址中,前 24 位表示网络号,即后 8 位表示主机号最多表示 \((2^8-2=254)\) 台主机

子网

  • 通过子网掩码实现子网划分与合并
    • 划分:取部分主机号作为子网号,将一个网络划分为多个子网
    • 合并:取部分网络号作为主机号,将多个网络合并为一个大网络
  • 子网掩码中,1 对应的部分表示网络号,0 对应的部分表示主机号
    • \(子网个数=2^{除分类外网络号位数}\)

例 1:将 B 类 IP 地址 168.195.0.0 划为 27 个子网,子网掩码为:

  1. B 类网络前 16 位是网络号,因此子网掩码前 16 位是 255(11111111)
  2. \(2^4<27<2^5\),说明至少 5 位网络号才能支持 27 个子网
  3. 综上,子网掩码为 255.255.248.011111111 11111111 11111000 00000000

例 2:将 B 类 IP 地址 168.195.0.0 划为若干个子网,每个子网有主机 700 台,子网掩码为:

  1. B 类网络前 16 位是网络号,因此子网掩码前 16 位是 255(11111111)
  2. \(2^9-2<700<2^{10}-2\),说明至少 10 位主机号才能支持 700 台主机,即网络号至多为 \(32-16-10=6\)
  3. 综上,子网掩码为 255.255.252.011111111 11111111 11111100 00000000

例 3:某网络地址块为 210.115.192.0/20,则可以被划分的 C 类子网个数为:

  1. 网络号有 20 位,主机号有 12 位
  2. C 类子网指网络号要有 24 位,主机号则有 8 位
  3. 因此可以有 4 位用来划分子网,对应的有 \(2^4=16\) 个 C 类子网

特殊含义的 IP 地址

IP 说明
127 网段 回播地址
网络号全 0 地址 当前子网中的主机
网络号全 1 地址 本地子网的广播
主机号全 1 地址 特定子网的广播
10.0.0.0/8 10.0.0.1~10.255.255.254
172.16.0.0/12 172.16.0.1~172.31.255.254
192.168.0.0/16 192.168.255.254
169.254.0.0 保留地址,用于 DHCP 失效(Windows)
0.0.0.0 保留地址,用于 DHCP 失效(Linux)

(6)HTML

  • 超文本标记语言

(7)无线网

  • 优势:移动、灵活、低成本、易扩充
  • 接入方式:有接入点模式、无接入点模式
  • 分类
    • 无线局域网:WLAN,802.11,WiFi
    • 无线城域网:WMAN,802.16,WiMax
    • 无线广域网:WWAN,3G / 4G
    • 无线个人网:WPAN,802.15,蓝牙

(8)网络接入技术

  • 有线接入
    • PSTN:公用交换电话网络
    • DDN:数字数据网络
    • ISDN:综合业务数字网络
    • ADSL:非对称数字用户线路
    • HFC:同轴光纤技术
  • 无线接入
    • WiFi:IEEE 802.11
    • 蓝牙:IEEE 802.15
    • IrDA:红外
    • WAPI
  • 3G / 4G
    • 3G
      • WCDMA
      • CDMA 2000
      • TD-SCDMA
    • 4G
      • LTE-Advanced
      • WiMAX:802.16m

(9)IPv6

  • 目的:用于替代 IPv4
  • 特点:
    • 地址长度为 128 位
    • 灵活、简洁的 IP 报文头部格式
    • 高安全性
    • 支持更多服务类型
    • 允许协议演变,可扩展
  • 地址分类:
    • 单播地址:用于单个接口的标识符
    • 任播地址:泛播地址,一组接口的标识符
    • 组播地址:用于将数据包同时发送给一组特定的接收者,与 IPv4 组播类似

0x05 系统安全分析与设计

(1)信息系统安全属性

  • 保密性:最小授权原则、防暴露、信息加密、物理保密
  • 完整性:安全协议、校验码、密码校验、数字签名、公证
  • 可用性:综合保障(IP 过滤、业务流控制、路由选择控制、审计跟踪)
  • 不可抵赖性:数字签名

(2)对称加密与非对称加密

对称加密

  • 原理:发送方将明文通过密钥加密为密文,接收方将密文通过同一密钥解密为明文

    graph LR 1[明文]--加密密钥:1234-->密文--解密密钥:1234-->明文
  • 缺陷:

    • 加密强度不高
    • 密钥分发困难
  • 常见算法:DES、AES、RC-5、IDEA 等

非对称加密

  • 原理:发送方将明文通过公钥加密为密文,接收方通过私钥解密为明文

    graph LR 1[明文]--加密公钥:1234-->密文--解密私钥:5678-->明文
  • 缺陷:加密速度慢

  • 常见算法:RSA、Elgamal、ECC 等

(3)信息摘要

  • 信息摘要是原始信息的特征值,当原始信息变化时,信息摘要也随之改变
    • 用于验证信息是否被篡改
  • 信息摘要采用单向散列函数(单向 Hash 函数)与固定长度的散列值
    • 单向指无法通过信息摘要还原出明文
  • 常用算法:MD5、SHA 等
    • MD5 与 SHA 的散列值分别为 128 位和 160 位,由于 SHA 的密钥长度更长,SHA 安全性较 MD5 更高

(4)数字签名

  • 实现不可抵赖性

  • 实现方法:

    graph LR subgraph A 11[明文]--产生信息摘要-->摘要--加密(数字签名)A的私钥-->12[密文] end 11--传输-->21 12--传输数字签名-->22 subgraph B 21[明文]--产生信息摘要-->产生的摘要<-->解密的摘要 22[密文]--解密(签名验证)A的公钥-->解密的摘要 end

(5)数字证书与 PGP

  • 数字证书用于对称加密的密钥传输
    • 产生数字证书:发送方将明文用对称密钥加密传输,并将对称密钥通过接收方的公钥加密成数字证书并发送
    • 使用数字证书:接收方通过私钥解密数字证书得到对称密钥,再用对称密钥解密密文得到明文
  • PGP(优良报名协议)用于消息加密与验证,应用于电子邮件、文件存储等
  • PGP 承认的证书格式
    • PGP 证书:包含 PGP 版本号,证书持有者的公钥、信息,证书拥有者的数字签名,证书的有效期,密钥首选的对称加密算法
    • X.509 证书:包含证书的版本、序列号、有效期、发行商名、主体名,主体公钥信息,签名算法标识,发布者数字签名

例:设计一个邮件系统,要求邮件以加密方式传输,最大附件内容 500MB,发送者不可抵赖,被第三方截获后不可被篡改

  • 设发送方 A 的公钥为 Ea、私钥为 Da;接收方 B 的公钥为 Eb、私钥为 Db
  • 附件内容采用对称加密,生成密钥 K
  • 对称加密密钥 K 通过数字证书传输:A 用 Eb 加密后传输,B 用 Db 解密
  • 对附件内容生成信息摘要,防止篡改
  • 对信息摘要生成数字签名,保证不可抵赖:A 用 Da 加密后传输,B 用 Ea 解密并与邮件的信息摘要对比

(6)各网络层次的安全保障

  • 物理层:隔离与屏蔽
  • 数据链路层:链路加密、PPTP、L2TP
  • 网络层:防火墙、IPSec
  • 传输层:SSL、TLS、SET
  • 会话层:SSL
  • 表示层:SSL
  • 应用层:SSL、PGP、HTTPS

(7)网络威胁与攻击

名称 说明
重放攻击 ARP 截获并重新发送
拒绝服务攻击 DoS 合法访问被无条件阻止
窃听 窃听系统中信息资源与敏感信息
业务流分析 监听并统计通信频度、信息流向、总量变化等
信息泄露 信息被泄露或透露给非授权实体
破坏信息完整性 信息被非授权地修改、增删
非授权访问 信息被非授权的实体访问
假冒 欺骗通信系统,冒充合法用户
旁路控制 利用安全漏洞获取非授权的权力
授权侵犯(内部攻击) 使用被授予的权力做被允许以外的事
特洛伊木马 恶意程序伪装成或包含在无害的程序
陷阱门(后门攻击) 触发预置恶意程序
抵赖 否认自己发布的信息

(8)防火墙技术

graph LR 防火墙-->n[网络级] & a[应用级] n-->包过滤 & 状态检测-->屏蔽路由器 a-->双穴主机 & 屏蔽主机 & 屏蔽子网
  • 屏蔽路由器:

    graph LR 内部网络---屏蔽路由器---Internet
  • 双穴主机:

    graph LR 内部网络---双穴主机---Internet
  • 屏蔽主机:

    graph TB Internet---屏蔽路由器---主机 & 堡垒主机 & 内部网络 主机-.->堡垒主机-.->屏蔽路由器
  • 屏蔽子网:

    graph LR subgraph DMZ 1[路由器]---被屏蔽子网---2[路由器] 被屏蔽子网---堡垒主机 end Internet---1 2---内部网络

0x06 数据结构与算法基础

参考《数据结构 | 博客园-SRIGT》(Java 版)

0x07 编译原理

(1)编译过程

graph LR 源程序-->词法分析-->语义分析-->中间代码生成-->代码优化-->目标代码生成-->目标程序 语义分析-.->目标代码生成
  • 错误分类
    • 词法错误:非法字符、关键字或标识符拼写错误
    • 语法错误:语法结构错误、if/endif 不匹配、分号缺失
    • 语义错误:死循环、零除数、逻辑错误
  • 词法分析通过正规式、有限自动机进行
  • 中间代码转低级语言代码需要考虑硬件系统结构

(2)文法

  • 一个形式文法是一个有序四元组 \(G=(V,T,S,P)\),其中:

    • \(V\):非终结符,可理解为占位符
    • \(T\):终结符,语言的最终结果,\(V\cap T=\empty\)
    • \(S\):起始符,语言开始的符号
    • \(P\):产生式,用终结符代替非终结符的规则,形如 \(\alpha\rightarrow\beta\)
  • 正则闭包:所有幂的并,\(A^+=A^1\cup A^2\cup A^3\cup\dots\cup A^n\cup\dots\)

    • 闭包:正则闭包基础上增加 \(A^0=\{\varepsilon\}\)\(A^*=A^0\cup A^+\)
      • 如:\(a^*=\{a,aa,aaa,\dots,\varepsilon\}\)\((ab)^*=\{ab,abab,ababab,\dots,\varepsilon\}\)
  • 文法分类

    类型 别称 说明 对应的自动机
    0 型 短语语法 \(G\) 的每条产生式 \(\alpha\rightarrow\beta\) 满足 \(\alpha\) 属于 \(V\) 的正则闭包,且至少含有一个非终结符,而 \(\beta\) 属于 V 的闭包 图灵机
    1 型 上下文有关语法 \(G\) 的任何产生式 \(\alpha\rightarrow\beta\) 满足 $ \alpha
    2 型 上下文无关语法 \(G\) 的任何产生式 \(A\rightarrow\beta\)\(A\) 为终结符,\(\beta\)\(V\) 的闭包
    3 型 正规文法、正规式 \(G\) 的任何产生式 \(A\rightarrow\alpha B\)\(A\rightarrow\alpha\)\(\alpha\) 属于非终结符的闭包,\(A\)\(B\) 都属于终结符 有限自动机
  • 语法推导树应具有以下特征:

    • 每个节点都有一个标记,标记是 \(V\) 的一个符号
    • 根的标记是 \(S\)
    • 若某节点 \(n\) 至少有一个他自己除外的子孙,并且有标记 \(A\),则 \(A\) 肯定在 \(V_N\)
    • 如果节点 \(n\) 的直接子孙从左到右的次序是节点 \(n_1,n_2,\dots,n_k\),其标记依次为 \(A_1,A_2,\dotsm,A_k\),那么 \(A\rightarrow A_1A_2\dots A_k\) 一定是 \(P\) 中的一个产生式

例:文法 \(G=(\{a,b\},\{S,A\},S,P)\),其中:\(S\rightarrow aAS|a\)\(A\rightarrow SbA|SS|ba\),则句型 \(aabAa\) 的推导树为:

  1. \(\{a,b\}\) 为终结符,\(\{S,A\}\) 为非终结符

  2. 根据 \(S\rightarrow aAS\)\(A\rightarrow SbA\)\(S\rightarrow a\) 得到如下推导树

    graph TB S1[S]---a1[a] & A1[A] & S2[S] A1---S & b & A S---a2[a] S2---a3[a]

    从左到右的叶子节点依次为 \(aabAa\),符合句型

(3)有限自动机

  • 有限自动机可以表示为四元组 \(M=(S,\Sigma,\delta,S_0,Z)\)

    • \(S\) 是一个有限集,每个元素为一个状态
    • \(\Sigma\) 是一个有穷字母表,每个元素为一个输入字符
    • \(\delta\) 是转换函数,是一个单值对照
    • \(S_0\) 属于 \(S\),是其唯一的初始态
    • \(Z\) 是一个终态集,可空
  • 有限自动机可以通过状态转换图表示

    • 如:\(DFA=(\{S,A,B,C,f\},\{1,0\},\delta,S,\{f\})\),其中:\(\delta(S,0)=B,\delta(S,1)=A,\delta(A,0)=f,\delta(A,1)=C,\delta(B,0)=C,\delta(B,1)=f,\delta(C,0)=f,\delta(C,1)=f\)

      graph LR S--1-->A--0-->f((f)) A--1-->C B--0-->C --0,1-->f S--0-->B--1-->f

例:有限自动机如下,A 是初态,C 是终态,串 0000、1111、0101、1010 中该自动机可识别的是:

graph LR A--1-->A--0-->B--0-->B--1-->C C--1-->A C--0-->B
  1. A 的出度为 2,除自反外,串中至少有一个 0 时才存在可能,排除 1111
  2. C 的入度为 1,对应地,串的最后一位为 1 时才存在可能,排除 0000、1010
  3. 因此,该自动机可识别 0101(ABCBC)

(4)※ 正规式

  • 描述程序语言单词的表达式,对于字母 \(\Sigma\),其上的正规式及其表示的正规集可以递归定义如下:

    • \(\varepsilon\) 是一个正规式,其表示集合 \(L(\varepsilon)=\{\varepsilon\}\)

    • \(a\)\(\Sigma\) 上的字符,则 \(a\) 是一个正则式,表示的正规集 \(L(a)=\{a\}\)

    • 若正规式 \(r\)\(s\) 分别表示正规集 \(L(r)=L(s)\),则:

      正规式 表示集合
      $r s$
      \(r\cdot s\) \(L(r)L(s)\)
      \(r^*\) \((L(r))^*\)
      \((r)\) \(L(r)\)
  • 正规式一般由字母、或、连接、闭包运算符组成,或者为空

    • 闭包运算符 \(*\) 具有最高优先级,连接运算符 \(\cdot\) 次之,或运算符 \(|\) 最低

例:文法 \(G[S]\) 如下:\(G[S]:\ S\rightarrow aA|bB,\ A\rightarrow bS|b,\ B\rightarrow aS|a\)

  • \(ababab\)\(bababa\)\(abbaab\)\(babba\) 中无法识别的是:
    • \(ababab\)\(S\rightarrow aA,\ A\rightarrow bS\)
    • \(bababa\)\(S\rightarrow bB,\ B\rightarrow aS\)
    • \(abbaab\)\(S\rightarrow aA,\ A\rightarrow bS,\ S\rightarrow bB,\ B\rightarrow aS\)
    • \(babba\):无法识别
  • 正规式 \((a|b)^*\)\((ab)^*\)\((ab|ba)^*\)\((ab)^*(ba)^*\) 中,该文法对应的正规式为:
    • 根据上一问的结果,可得 \((ab|ba)^*\)

(5)※ 表达式

graph TB +---A +---B
  • 对于上述的树,三种表达式的结果为:
    • 前缀表达式:+ab(中左右)
    • 中缀表达式:a+b(左中右)
    • 后缀表达式:ab+(左右中)

例:表达式 \((a-b)*(c+5)\) 的后缀式为:\(ab-c5+*\)

(6)※ 函数调用

  • 函数的组成包括:int function(float x) {}

    • int:返回值类型
    • function:过程名
    • float x:形式参数(列表)
    • { }:过程体
  • 函数的调用分为:

    传递方式 主要特点
    传值调用 形参取的是实参的值,形参的改变不会导致调用点所传的实参值发生改变
    传址调用
    引用调用
    形参取的是实参的地址,形参的改变导致调用点所传的实参值发生改变

(7)常见程序语言特点

  • Fortran:科学计算,执行效率高
  • Pascal:用于教学,表达能力强
  • Lisp:用于人工智能,函数式程序语言,符号处理
  • Prolog:用于逻辑推理,简洁,表达能力,数据库和专家系统
  • C:指针操作强,高效
  • C++:面向对象,高效
  • Java:面向对象,中间代码,跨平台
  • C#:面向对象,中间代码,.Net 平台

0x08 法律法规

(1)概述

  • 相关法律法规:著作权法、计算机软件保护条例、商标法、专利法
  • 知识产权包括:著作权及邻接权、专利权、工业品外观设计权、商标权、地理标志权、集成电路布图设计权

(2)保护期限

客体类型 权力类型 保护期限
公民作品 署名、修改、保护作品完整权
发表、使用、获得报酬权 终生与死后 50 年
单位作品 发表、使用、获得报酬权 首次发表后 50 年,未发表则不保护
公民软件产品 署名、修改权
发表、复制、发行、出租、信息网络传播、翻译、使用许可、获得报酬、转让权 终生与死后 50 年,若合作则以最长寿的死后 50 年
单位软件产品 发表、复制、发行、出租、信息网络传播、翻译、使用许可、获得报酬、转让权 首次发表后 50 年,未发表则不保护
注册商标 10 年,注册人死亡或倒闭 1 年后,未转移则可注销,满 6 个月必须续注
发明专利权 申请日开始 20 年
实用新型和外观设计专利权 申请日开始 10 年
商业秘密 不定,公开后不保护

(3)知识产权所有人

情况说明 判断说明 归属
作品 职务作品 利用单位的物质技术条件进行创作,并由单位承担责任 除著名权,其他著作权归单位
有合同约定,其著作权属于单位
其他 作者拥有著作权,单位有权在其业务范围内优先使用
软件 属于本职工作中明确规定的开发目标 单位享有著作权
属于从事本职工作获得的结果
使用了单位资金、专用设备、未公开的信息等物质、技术条件,并由单位或组织承担责任的软件
专利权 本职工作中作出的发明创造 单位享有专利
履行本单位交付的本职工作之外的任务所作出的发明创造
离职、退休或调动工作 1 年后,与原单位工作相关
作品软件 委托创作 有合同约定,著作权归委托方 委托方
合同中未约定著作权归属 创作方
合作开发 只进行组织、提供咨询意见、物质条件、或进行其他辅助工作的 不享有著作权
共同创作的 共同享有,按人数比例
成果可分割的,可分开申请
商标 谁先申请谁拥有(除知名商标非法抢注)
同时申请,根据谁先使用(需提供证据)
无法提供证据,协商归属,协商无效时使用抽签
专利 谁先申请谁拥有
同时申请则协商归属,不能同时驳回

(4)侵权判定

  • 中国公民、法人、其他组织的作品,无论是否发表,都享有著作权
    • 开发软件所用的思想、处理过程、操作方法、数学概念不受保护
  • 著作权法不适用于:
    • 法律、法规,国家机关的决议、决定、命令等具有立法、行政、司法性质的文件,及其官方正式译文
    • 时事新闻
    • 历法、通用数表、通用表格和公式
侵权 不侵权
未经许可发表他人作品
未经合作作者许可,将与他人合作创作的作品当作自己单独创作的作品发表
未参加创作,在他人作品上署名
歪曲、篡改他人作品
使用他人作品未支付报酬
未经出版者许可,使用其出版图书、期刊的版式设计
个人学习、研究、欣赏
适当引用
公开演讲内容
用于教学或科学研究
复制馆藏作品
免费表演他人作品
室外公共场所艺术品临摹、绘画、摄影、录像
将汉语作品译成少数民族语言作品或盲文出版

(5)标准

分类

  • 国际标准:ISO、IEC 等
  • 国家标准:GB(中国)、ANSI(美国)、BS(英国)、JIS(日本)
  • 区域标准:PASC(太平洋)、CEN(欧洲)、ASAC(亚洲)、ARSO(非洲)
  • 行业标准:GJB(中国军用)、MIT-S(美国军用)、IEEE(电气电子工程师学会)
  • 地方标准
  • 企业标准
  • 项目规范

编号

  • 国际、外国标准编号:标准代号+专业类号+顺序号+年代号
  • 中国:
    • 强制标准:GB
    • 推荐标准:GB/T
    • 指定标准:GB/Z
    • 实物标准:GSB
  • 行业:汉语拼音大写字母
    • 电子行业:SJ
  • 地方:DB+省级行政区划代码前两位
  • 企业:Q+企业代号

0x09 多媒体

(1)概念

音频

  • 声音的带宽:声波频率范围
    • 人耳:20Hz~20kHz
    • 说话:300Hz~3400Hz(4k)
  • 采样:将声音的模拟信号转换为数字信号
    • 采样频率:一定时间内的采样次数
      • 应为声音最高频率的两倍,如:固话为 8k
    • 采样精度:频率划分的密度

图像

  • 亮度:图像明亮程度
  • 色调:图像颜色偏向
  • 饱和度:图像色彩艳丽程度
  • 彩色空间:
    • RGB:三原色光
    • YUV:用于彩色电视兼容黑白电视
    • CMY(CMYK):印刷
      • Cyan:艳青
      • Magenta:洋红
      • Yellow:黄色
      • K:黑色
    • HSV(HSB):艺术

媒体

  • 感觉媒体:人们接触信息的感觉形式
    • 视、听、触、嗅、味
  • 表示媒体:信息的表现形式
    • 文字、音频、图形、图像、动画、视频等
  • 显示(表现)媒体:表现和获取信息的物理设备
    • 输入:键盘、鼠标、麦克风等输入设备
    • 输出:显示器、打印机、音响等输出设备
  • 存储媒体:存储信息的物理设备
    • 磁盘、光盘、内存等
  • 传输媒体:传输信息的物理设备
    • 电缆、光纤、交换设备等

(2)容量计算

  • 图像:
    • 像素、位数:\(横向像素\times纵向像素\times单像素位数\div单字节位数\)
      • 如:图像 \(640\times480\),像素 16 位,则容量为:\(640\times480\times16\div8=614400B\)
    • 像素、色数:\(横向像素\times纵向像素\times\log_2(色数)\div单字节位数\)
      • 如:图像 \(640\times480\),256 色,则容量为:\(640\times480\times\log_2(256)\div8=307200B\)
  • 音频:\(采样频率\times量化\div采样位数\times声道数\div单字节位数\)
    • 如:采样频率 44.1kHz,样本精度 16bit,双声道立体声,则未压缩的数据传输率为:\(\frac {44.1kHz\times16bit\times2}{1s}=1411.2kb/s\)
  • 视频:\((每帧图像容量\times每秒帧数+音频容量)\times时间\)
    • 如:每帧 6.4MB,帧速率 30fps,则 10s 的视频信息的原始数据量为:\((6.4MB\times30)\times10=1920MB\)

(3)常见多媒体标准

  • JPEG
    • 有损压缩
    • 离散余弦算法
  • JPEG-2000
    • 有损&无损
    • 高压缩比
    • 小波变换算法
    • 应用:医学图像
  • MPEG-1
    • 离散余弦算法
    • 应用:VCD、MP3
  • MPEG-2
    • 离散余弦算法、哈夫曼
    • 应用:DVD、AAC、有线/卫星电视
  • MPEG-4:多媒体传输集成框架
    • 特点:强交互性、具备数码权限管理
    • 应用:无线通信、网络应用、可视电话
  • MPEG-7:多媒体内容描述接口
    • 特点:具备描述功能
  • MPEG-21:标准集成

(4)数据压缩技术

  • 数据压缩的目的是减少冗余
    • 冗余包括:空间(几何)、时间、视觉、信息熵、结构、知识
  • 有损压缩(熵压缩法)
    • 预测编码(运动补偿、自适应、线性、非线性预测、\(\delta\) 调制)
    • 变换编码(KLT、DCT、ADCT、DWT)
    • 基于模型编码(分形、轮廓、识别合成编码)
    • 直接影射(矢量量化、神经网络)
  • 无损压缩(冗余压缩法、熵编码法)
    • 变长编码
    • 行程编码
    • 算术编码

0x0A 软件工程

(1)软件开发模型

瀑布模型 SDLC

graph LR 软件计划-->需求分析-->软件设计-->程序编码-->软件测试-->运行维护-->运行维护
  • 阶段分割
    • 定义阶段:软件计划、需求分析
    • 开发阶段:软件设计、程序编码、软件测试
    • 维护阶段:运行维护
  • 缺点:无法灵活应对需求的变化

原型模型、演化模型、增量模型

graph LR 快速原型模型---原型-->增量模型 & 演化模型 原型-.->螺旋模型 演化模型-->螺旋模型 瀑布模型-->增量模型 & 螺旋模型
  • 原型法:通过预先制作简易的系统,向客户进行演示,从而清楚客户的需求
    • 主要应用于需求分析阶段,解决需求不明确
  • 演化模型:基于原型不断演化和改进,得到最终产品
    • 逐步完善
  • 增量模型:结合原型与瀑布模型,先完成核心需求,并将此作为原型逐步增加功能,得到最终产品
    • 逐步新增

螺旋模型

  • 主要特征:引入了风险分析

V 模型

graph LR 需求分析-->概要设计-->详细设计-->程序编码--->单元测试-->集成测试-->系统测试-->验收测试
  • 与瀑布模型区别在于,强调测试的重要性
  • 需求分析期间准备验收测试、系统测试的计划;概要设计期间准备集成测试的计划;详细设计期间准备单元测试的计划

喷泉模型

  • 面向对象的开发模型
    • 迭代
    • 无间隙

构建组装模型 CBSD

graph LR 需求分析与定义-->软件架构设计-->构件库建立-->应用软件构建-->测试与发布
  • 优势:提高软件开发的复用性,能够降本增效
  • 构件标准:CORBA、COM/DCOM/COM+、EJB

快速开发模型 RAD

graph LR 业务建模-->数据建模-->过程建模-->应用生成-->测试与交付
  • 结合瀑布开发模型构件组装模型

(2)软件开发方法

统一过程开发方法 UP

graph LR 初始-->细化-->构建-->交付-->初始
  • 特点:
    • 用例为驱动
    • 架构为核心
    • 迭代增量
  • 初始阶段:
    • 确定项目的范围和边界
    • 识别系统的关键用例
    • 展示系统的候选架构
    • 估计项目费用和时间
    • 评估项目风险
  • 细化阶段:
    • 分析系统问题领域
    • 建立软件架构基础
    • 淘汰最高风险元素
  • 构建阶段:
    • 开发剩余的构件
    • 构件组装与测试
  • 交付阶段:
    • 进行 \(\beta\) 测试
    • 制作发布版本
    • 用户文档定稿
    • 确认新系统
    • 培训与调整产品

敏捷开发方法

  • 敏捷开发方法包括:自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程
    • 适用于小型项目
  • 基本原则:短平快会议、小型版本发布、较少的文档、合作为重、客户直接参与、自动化测试、适应性计划调整、结对编程、测试驱动开发、持续集成、重构
  • 价值观:沟通、简单、反馈、勇气
  • 原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作
  • 最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、周作 40h、现场客户、编码标准

信息系统开发方法

  • 结构化法
    • 用户至上
    • 严格区分工作阶段,每阶段有任务和成果
    • 强调系统开发过程的整体性和全局性
    • 系统开发过程工程化,文档资料标准化
    • 自顶向下,逐步分解
  • 原型法
    • 适用于需求不明确
    • 分为:抛弃式原型、演化式原型
  • 面向对象方法
    • 高复用
    • 建立全面、合理、统一的模型
    • 阶段分为:分析、设计、实现
  • 面向服务方法
    • 主要抽象级别:操作、服务、业务流程
    • 层次:
      • 基础设计层:底层服务构件
      • 应用结构层:服务间接口、服务级协定
      • 业务组织层:业务流程建模、服务流程编排
    • 服务建模的阶段分为:服务发现、服务规约、服务实现

(3)需求开发

  • 需求分类:
    • 方式一:
      • 业务需求
      • 用户需求
      • 系统需求
        • 功能需求、性能需求、设计约束
    • 方式二(QFD):
      • 基本需求、期望需求、兴奋需求
  • 需求获取方法:
    • 收集资料、联合需求计划、用户访谈、书面调查、情节串联板、现场观摩、参加业务实践、阅读历史文档、抽空调查

(4)结构化设计

  • 结构化设计分为概要设计详细设计

  • 设计原则:

    • 自顶向下、逐步求精

    • 信息隐蔽

    • 模块独立(高内聚、低耦合、复杂度)

      • 内聚

        类型 说明
        功能内聚 完成单一功能,各部分协同工作,缺一不可
        顺序内聚 处理元素相关,且必须顺序执行
        通信内聚 所有处理元素集中在一个数据结构的区域上
        过程内聚 处理元素相关,且必须按特定顺序执行
        瞬时内聚
        时间内聚
        所包含的任务必须在同一时间间隔内执行
        逻辑内聚 完成逻辑上相关的一组任务
        偶然内聚
        巧合内聚
        完成一组无关系或松散关系的任务
      • 耦合

        类型 说明
        非直接耦合 两模块无直接关系,其联系通过主模块的控制和调用来实现
        数据耦合 一组模块借助参数表传递简单数据
        标记耦合 一组模块通过参数表传递记录信息
        控制耦合 模块间传递的信息中包含用于控制模块内逻辑的信息
        外部耦合 一组模块都访问同一全局简单变量,且不通过参数表传递该全局变量的信息
        公共耦合 多模块都访问同一公共数据环境
        内容耦合 一个模块直接访问另一模块内的数据
        一个模块不通过正常入口转到另一模块内
        两个模块有部分代码重叠
        一个模块有多入口
  • 实现方法:

    • 保持模块大小适中
    • 尽可能减少调用的深度
    • 多扇入,少扇出
    • 单入口,多出口
    • 模块的作用域应在模块内
    • 功能应可预测

(5)软件测试

https://www.bilibili.com/video/BV17K4y1w7wH?t=0.6&p=146

原则

  • 尽早且不断地进行测试
  • 避免测试自己设计的程序
  • 充分考虑有效和无效、合理和不合理的数据
  • 修改后应进行回归测试
  • 未发现错误数与已发现错误数成正比

类型

  • 动态测试
    • 黑盒测试
    • 灰盒测试
    • 白盒测试
  • 静态测试
    • 桌前检查
    • 代码走查
    • 代码审查

用例设计

  • 黑盒测试

    • 等价类划分
    • 边界值分析
    • 错误推测
    • 因果图
  • 白盒测试

    • 基本路径测试
    • 循环覆盖测试
    • 逻辑覆盖测试

    逻辑覆盖测试包括:语句覆盖、判断覆盖、条件覆盖、条件判定覆盖、修正的条件判定覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖

(6)测试阶段

  • 测试流程:

    graph LR 测试用例-->驱动模块 & 被测模块-->测试结果 subgraph 被测模块-->1[桩模块] & 2[桩模块] & 3[桩模块] end
  • 测试阶段包括:

    graph LR 单元测试-->集成测试-->确认测试---系统测试
    • 以上测试阶段的顺序称为 “冒烟测试”
    • 确认测试系统测试的顺序和取舍根据实际情况分析
  • 单元测试通常用于测试模块的功能

  • 集成测试通常用于测试模块之间的接口组装,组装方法包括:

    • 一次性组装
    • 增量式组装:自顶向下、自底向上、混合式
  • 确认测试通常用于测试软件是否按照需求完成,包括:

    • 内部确认测试、Alpha 测试、Beta 测试、验收测试
  • 集成测试通常用于测试软硬件以及网络之间的集成,包括:

    • 恢复测试、安全性测试、压力测试、性能测试、可靠性测试、可用性测试、可维护性测试、安装测试

    性能测试包括:负载测试、强度测试、容量测试

(7)McCabe 复杂度

  • McCabe 复杂度公式为:\(V(G)=E-N+2P\)(有向图 \(G\) 的环路复杂度)

    • \(E\):控制流图中边的数量
    • \(N\):节点数
    • \(P\):连通分量数,通常为 \(1\),此时公式简化为 \(V(G)=E-N+2\)
  • 计算前需要将流程图转换为控制流图,对与缺失的节点需要补充

    • 举例:流程图为

      graph TB 1-->2{2}-->3{3}-->4 2 & 3 & 4 -->7{7}-->9 & 10{10}-->12 10-->9

      此时,控制流图为

      graph TB 1((1))-->2((2))-->3((3)) & 6((6)) 3-->4((4)) & 5((5)) 4-->5-->6-->7((7))-->8((8)) & 10((10)) 8-->9((9))-->11((11))-->12((12)) 10-->8 & 11

(8)系统运行与维护

  • 软件维护:需要提供软件支持的全部活动
    • 交付前完成的活动:交付后运行的计划和维护计划等
    • 交付后完成的活动:软件修改、培训、帮助资料等
  • 软件的可维护性主要考虑以下几点:
    • 易分析性、易改变性、稳定性、易测试性
  • 软件的维护类型包括:
    • 改正性维护、适应性维护、完善性维护、预防性维护

(9)软件过程改进 CMMI

  • 软件的开发成熟度模型(Capability Maturity Model for software,简称 CMM)

    • CMMI 在 CMM 基础上进行了扩充
  • 组织能力成熟度

    等级(阶段式) 过程域
    已管理级 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证
    已定义级 需求开发、技术解决方案、产品集成、验证、确认、组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境
    定量管理级 组织级过程性能、定量项目管理
    优化级 组织级改革与实施、因果分析和解决方案
  • 软件过程能力

    分组(连续式) 过程域
    过程管理 组织级过程焦点、组织级过程定义、组织级培训、组织级过程性能、组织级改革与实施
    项目管理 项目计划、项目监督与控制、供应商合同管理、集成项目管理、风险管理、集成化团队、定量项目管理
    工程 需求管理、需求开发、技术解决方案、产品集成、验证、确认
    支持 配置管理、度量和分析、过程和产品质量保证、决策分析和解决方案、组织级集成环境、因果分析和解决方案

(10)项目管理

  • 项目管理包括:范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理、整体管理
  • 进度安排的常用图形描述方法包括:
    • Gantt 图:不能清晰描述任务之间的逻辑关系
    • PERT 图:可以给出哪些任务完成后才能开始另一些任务
  • 风险主要指损失或伤害的可能性
    • 风险包括:项目风险、技术风险、商业风险
    • \(风险曝光度=风险出现概率\times风险可能造成的损失\)

0x0B 面向对象系统设计

(1)概述

  • 对象:对现实世界中事物或概念的抽象表示,封装了数据(属性)和可以操作这些数据的行为(方法),是类的具体实例
  • 类:定义对象的蓝图或模板,描述了一组具有相同属性和方法的对象的共同特征和行为
    • 如:实体类、边界类、控制类
  • 抽象:通过提取事物的核心特征和行为,忽略细节,从而创建出通用的类或接口来表示一类对象的共性
  • 封装:将对象的属性和方法组合在一起,隐藏对象的内部实现细节,仅通过定义好的接口(如方法)与外部交互
  • 继承:允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和类的层次化组织
  • 泛化:继承的一种表现形式,子类是父类的一种更具体的实现
  • 多态:同一个接口可以被不同的实例以不同的方式实现
  • 接口:定义了一组方法的签名(即方法的名称、参数类型和返回类型),但不提供方法的具体实现
  • 消息:一个对象向另一个对象发送的请求,用于调用目标对象的方法或访问其属性
  • 组件:封装了特定的功能或行为,并通过定义好的接口与其他组件进行交互
  • 模式:描述了一种经过验证的、有效的设计方法或架构
  • 复用:重复使用已有的代码、组件、模块或设计思想

(2)设计原则

  • 单一职责原则:设计目的单一的类
  • 开闭原则:对扩展开发,对修改封闭
  • 里氏替换原则:子类可以替换父类
  • 依赖倒置原则:依赖抽象而非具体实现,针对接口编程而非实现
  • 接口隔离原则:多个专门的接口
  • 合成复用原则:选择组合而非继承
  • 迪米特原则:一个对象尽少对其他对象的了解

(3)设计模式

概念

  • 架构模式:软件设计中的高层决策,反映了开发软件系统过程中所作的基本设计决策
    • 如:C/S 架构
  • 设计模式:主要关注软件系统的设计,与具体的实现语言无关
  • 惯用法:关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系

分类

有下划线的模式表示可以是类模式或对象模式,其他仅表示对象模式

  • 创建型模式
    • 工厂方法模式:定义创建对象的接口,由子类决定实例化哪个类
    • 抽象工厂模式:创建相关或依赖对象的家族,而不需明确指定具体类
    • 原型模式:通过复制现有实例来创建新实例,而不是通过新建实例
    • 单例模式:确保一个类只有一个实例,并提供一个全局访问点
    • 构建器模式:逐步构建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就能构建它们
  • 结构型模式
    • 适配器模式:将一个类的接口转换成客户端所期望的另一种接口,使原本不兼容的类可以合作(转换接口
    • 桥接模式:将抽象与实现解耦,让它们可以独立变化(继承树拆分
    • 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使用户对单个对象和组合对象的使用具有一致性(树形目录结构
    • 装饰器模式:动态地给对象添加额外的职责,而不改变其结构(附加职责
    • 外观模式:为子系统中的一组接口提供一个一致的高层接口,使子系统更容易使用(对外统一接口
    • 享元模式:通过共享来高效地支持大量细粒度的对象
    • 代理模式:为其他对象提供一种代理,以控制对这个对象的访问
  • 行为型模式
    • 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系(传递职责
    • 命令模式:将请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化(可撤销的日志记录
    • 解释器模式:定义语言的文法规则,并提供解释器来解析语言中的句子
    • 迭代器模式:顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示
    • 中介者模式:通过中介者对象协调多个对象的交互,减少对象间的直接耦合(间接引用
    • 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
    • 观察者模式:对象间的一对多依赖关系,当一个对象状态改变时,所有依赖于它的对象都会得到通知并自动更新
    • 状态模式:允许一个对象在其内部状态改变时改变其行为,对象看起来好像修改了其类(状态作为类
    • 策略模式:定义一系列算法,把它们一个个封装起来,并使它们可互换,让算法的变化独立于使用算法的客户(多方案切换
    • 模板方法模式:定义一个操作中的算法骨架,将一些步骤延迟到子类中实现
    • 访问者模式:为一个对象结构中的对象添加新的能力,而不改变对象的结构

0x0C 数据流图

(1)基本概念

元素 说明 图元
数据流 由一组固定成分的数据组成,表示数据的流向
每个数据流通常有一个合适的名词,反映数据流的含义
箭头
加工 描述输入数据流到输出数据流之间的变换 圆、圆角矩形
数据存储
(文件)
表示暂时存储的数据
流向文件的数据表示写文件,流出的表示读文件
平行线、无右边框矩形
外部实体 只存在于软件系统外的人员或组织 矩形

(2)分层

  • 结合上述数据流图:

    • 顶层图:

      graph LR 仓库管理员--事务-->采购子系统--订货报表-->采购员
    • 0 层图:

      graph LR 仓库管理员--事务-->库存管理 订货管理--订货报表-->采购员 D1库存清单<-->库存管理 库存管理--订货信息-->D2订货信息--订货信息-->订货管理
    • 1 层图:

(3)数据字典

符号 说明 举例
\(=\) 被定义为
\(+\) \(x=a+b\) 表示 \(x\)\(a\)\(b\) 组成
\([\dots,\dots]\)\([\dots|\dots]\) \(x=[a,b]\) 表示 \(x\)\(a\)\(b\) 组成
\(\{\dots\}\) 重复 \(x=\{a\}\) 表示 \(x\) 由 0 个或多个 \(a\) 组成
\((\dots)\) 可选 \(x=(a)\) 表示 \(x\) 可以含有 \(a\) 或不含有

(4)平衡原则

  • 父图与子图平衡:在分层中,子图(如 \(L0\) 层图)中输入和输出的数据流必须与父图(如顶层图)中的对应数据流保持一致
  • 子图内平衡:任一加工必须既有输入也有输出
    • 黑洞:只有输入
    • 奇迹:只有输出

0x0D 数据库设计

(1)设计过程

graph LR 需求分析-->概念结构设计-->逻辑结构设计-->物理设计
  • 理论依据:
    • 需求分析、概念结构设计:数据处理要求、当前和未来的数据要求
    • 逻辑结构设计:数据处理要求、转换规则、规范化理论、DBMS 特性、用户的数据模型
    • 物理设计:数据处理要求、DBMS 特性、硬件特性、OS 特性、视图、完整性约束、应用处理说明书
  • 应用工具与产出:
    • 需求分析:数据流图、数据字典、需求说明书
    • 概念结构设计:E-R 模型
    • 逻辑结构设计:关系模式

(2)E-R 模型

  • 实体间联系类型:一对一、一对多、多对多
  • E-R 图向关系模型转换的基本原则:实体和联系分别转换成关系,属性转换成相应关系的属性

0x0E UML

  • UML 建模包括:用例图、类图与对象图、顺序图、活动图、状态图、通信图、构件图

(1)用例图

  • 主要展示包含关系 <<include>>、扩展关系 <<extend>>、泛化关系
  • 图例:
    • 人:参与者
    • 椭圆:用例

(2)类图与对象图

  • 多重度:

    • 1:表示一个集合中的一个对象对应另一个集合中一个对象
    • 0..*:表示一个集合中的一个对象对应另一个集合中零个或多个对象(可以不对应)
    • 1..*:表示一个集合中的一个对象对应另一个集合中一个或多个对象(至少对应一个)
    • *:表示一个集合中的一个对象对应另一个集合中多个对象
  • 关系表示:

    • 虚线实心三角箭头:依赖关系

    • 实线空心三角箭头:泛化关系

    • 虚线空心三角箭头:实现关系

    • 实线实心菱形箭头:组合关系

    • 实线空心菱形箭头:聚合关系

      组合关系与聚合关系统称关联关系

(3)顺序图

图例:

  • 顶部矩形:对象
  • 竖向虚线:生命线
  • 实线箭头:调用
    • 上方文字:消息
  • 虚线箭头:返回
  • 叉:生命线结束

(4)活动图

  • 类似程序流程图
  • 图例:
    • 实心圆:开始节点
    • 圆角矩形:活动节点
    • 菱形:判断节点
    • 粗线:散发/归拢分支
    • 实心圆环:结束节点

(5)状态图

图例:

  • 实心圆:开始节点
  • 圆角矩形:状态节点
    • 箭头始发侧为源状态,结束侧为目标状态
  • 箭头:转换
    • 上方文字格式:触发条件[监护条件]/动作
  • 实心圆环:结束节点

(6)通信图

  • 与顺序图类似,又称协作图
  • 图例:
    • 矩形:通信节点
    • 实线箭头:调用
    • 虚线箭头:返回

0x0F 算法

参考《JavaScript 数据结构与基础算法 | 博客园-SRIGT》第 0x05 至 0x07 章的内容

posted @ 2025-07-04 06:37  SRIGT  阅读(77)  评论(0)    收藏  举报