软考上午考试内容
1. 计算机系统
- 计算机硬件通过高/低电平来模拟1/0信息;
- 【p进制】: K n K n − 1 . . . K 2 K 1 K 0 K − 1 K − 2... K − m = K n × r n + . . . + K 1 × r 1 + K 0 × r 0 + K − 1 × r − 1 + . . . + K − m × r − m K_nK_{n-1}...K_2K_1K_0K_{-1}K_-2...K_{-m} = K_n\times r^n + ... + K_1\times r^1 + K_0\times r^0 + K_{-1}\times r^{-1} + ... + K_{-m}\times r^{-m} KnKn−1...K2K1K0K−1K−2...K−m=Kn×rn+...+K1×r1+K0×r0+K−1×r−1+...+K−m×r−m 其中, r r r充当位权;
- 几种进制的表示:
- 二进制(B);
- 八进制(O);
- 十进制(D);
- 十六进制(H): 0 − 9 & A = 10 , B = 11 , C = 12 , D = 13 , E = 14 , F = 15 0-9\And A=10,B=11,C=12,D=13,E=14,F=15 0−9&A=10,B=11,C=12,D=13,E=14,F=15
- 十进制 → \rightarrow →R进制的快速解决:
使用短除法,一直对余数除P直到见到除不了的商,其中从下到上是高位到低位;
例如:
- R进制 ↔ \leftrightarrow ↔P进制的快速解决:
- 【二进制 ↔ \leftrightarrow ↔十六进制】:以小数点为分界点,往左或往右以4位为一组研究问题,16进制是4位合并成1位,而二进制是1位拆分为成4位;
- 【八进制 ↔ \leftrightarrow ↔二进制】:以小数点为分界点,往左或往右以3位为一组研究问题,8进制是3位合并成1位,而二进制是1位拆分为成3位;
- 【八进制 ↔ \leftrightarrow ↔十六进制】:先转换成二进制,再用二进制进行转化;
- 计算机内的数据表示
- 真值:符合人类习惯的数字表示;
- 机械数:符号用0/1表示的在计算机中存储、显示、计算的数字,即正负性被数字化:
- 无符号数(unsigned);
- 有符号数(signed):
-
原码
正数原码与真值一致,负数原码为真值取反再加1,0有两种表示形式,表示范围是 − ( 2 n − 1 ) ≤ x ≤ ( 2 n − 1 ) -(2^n-1)\leq x \leq (2^n-1) −(2n−1)≤x≤(2n−1),写作 [ x ] 原 [x]_{原} [x]原;
-
反码
符号位为0的反码与真值一致,符号位为1的反码为数值位全部取反,0有两种表示形式,表示范围是 − ( 2 n − 1 ) ≤ x ≤ ( 2 n − 1 ) -(2^n-1)\leq x \leq (2^n-1) −(2n−1)≤x≤(2n−1),写作 [ x ] 反 [x]_{反} [x]反;
-
补码
正数的补码与真值一致,负数的补码为反码末位+1,且要考虑进位,0有一种表示形式,表示范围是 − 2 n ≤ x ≤ ( 2 n − 1 ) -2^n\leq x \leq (2^n-1) −2n≤x≤(2n−1)(解放了一个0的表示让数域扩张1位),写作 [ x ] 补 [x]_{补} [x]补;
将负数补码快速转变成原码的方法:将补码的尾数取反,末位+1;
将负数原码快速转化成补码的方法:在数值位中从右到左寻找到第一个“1”,将这个“1”左边的全部数值位全部取反;
-
移码
在补码基础上将符号位取反,且只能用于表示整数,0也只有一种表示方法,其表示范围为 − 2 n ≤ x ≤ ( 2 n − 1 ) -2^n\leq x \leq (2^n-1) −2n≤x≤(2n−1),写作 [ x ] 移 [x]_{移} [x]移;
- 上述四种的转化关系为:
graph LR O(真值)-->|正负数字化|A(原码)-->|最靠右的1以前所有数值位取反|B(补码)-->|符号位取反|D(移码) A-->|负数数值位取反|C(反码)-->|末位+1,考虑进位|B(补码)
-
- 定点数:小数点固定不变的数字,包含定点整数和定点小数两种;
- 浮点数:小数点可以移动的数字,它能表示更大范围的数字
-
其通常形式为:
阶符 码阶 数符 尾数 - 阶码(E) 通常是带符号的纯整数, 阶码 = 阶符 + 码阶 阶码 = 阶符 + 码阶 阶码=阶符+码阶;
- 尾数(M) 是带符号的纯小数, 尾数 = 数符 + 尾数 尾数 = 数符 + 尾数 尾数=数符+尾数;
-
浮点数常表示为: N = M × R E N = M \times R^E N=M×RE 其中,R是进制;
-
很显然,尾数决定数值的精度,阶码决定数值的范围;
-
-
码位:两个合法编码之间不同位数的个数。简单来说,就是两个编码之间相差有多少个比特,这个值是编码在数学上抽象的“距离”;
-
校验码:用于验证传送数据是否出现错误的数位:
-
奇偶校验
在数据末尾添加一位校验码,其目的是让新的编码中的“1”的总数是预先设置好的奇数或者偶数;
例如:“1101”采用偶校验,则偶校验码是“1”,合成的新的编码是“11011”;
-
CRC校验*
其将数据看作是二进制多项式,用事先预定的一个生成多项式(如CRC-16,CRC-32等)接收数据,然后进行异或运算(又叫模二运算,即位相同为0,位不同位1),由余数得到校验码。
检验的时候,如果用户使用相同的生成多项式进行异或除法,余数为0,则数据传输正确,反之则认为出错;
其广泛应用于数据通信中,它利用生成多项式为k个数据位产生r个校验码,编码总长度为k+r;
-
海明码
通过在数据之间插入校验码,扩大码距来实现检查和纠错;
其数位关系是: 2 k − 1 ≥ n + k 2^k-1\geq n+k 2k−1≥n+k 其中数据的位数是 n n n,校验码的位数是 k k k;
-
-
计算机系统组成
- 冯·诺依曼式计算机
- 计算机由:运算器、存储器、I/O设备和控制器组成(运算器和控制器现在集成为CPU);
- 指令和数据以同等地位存于存储器,可以按照地址进行访问;
- 指令和数据都用二进制存储;
- 指令由操作码和地址码组成;
- 存储程序;
- 以运算器为中心,I/O设备与存储之间的数据传输都要经过运算器(
这点迥异于现代计算机
);
- 主存储器(memory)
- 大致结构为:
graph TB subgraph 主存储器A[存储体]subgraph 主寄存器B1[MAR(地址寄存器)]B2[MDR(数据寄存器)]end end
- 关于主存的一些指标:
- 【存储单元】:存储体操作的最小单元,它是最小的寻址单元,类似于抽屉;
- 【存储字】(word):存储在一个存储单元中的二进制代码的组合,类似于抽屉中的物件;
- 【存储字长】:一个存储单元中存储字的位数,它决定一个存储单元能容纳多长的一个数据,类似于抽屉的大小;
- 1B = 8bit;
- 地址寄存器位数决定能对应多少种地址或者多少个存储单元,数据寄存器位数决定一个存储单元最多可以含有多大的存储字或者单个存储单元的大小;
- 对于一个存储体来说,其大小最大等于: M D R 位数 × 2 M A R 位数 , 单位 b MDR位数\times 2^{MAR位数}, 单位 b MDR位数×2MAR位数,单位b
- 大致结构为:
- CPU(central processing unit)
- 由运算器和控制器整合而成;
- 以下介绍主要的两部分:
- 运算器
- 其大致结构是:
graph TB subgraph 运算器A[ALU(算术逻辑单元)]B[ACC(累加器)]C[MQ<br>(乘商寄存器,用于存放商和乘积的低位)]D[X(通用寄存器)] end D-->A==>B-->C C-->B==>A
- ACC:累加器,用于存储操作数和运算结果;
- MQ:乘商寄存器,用于存放商和乘积的低位;
- X:通用寄存器,用于临时存储数据,包括各种操作数;
- ALU:算术逻辑单元,负责对操作数进行加减乘除运算并存入指定的存储器,是计算机的心脏;
- DR:数据寄缓存寄存器;
- PSW:状态寄存器,用于记录计算机的运行状态和指令运行标志,包括标志位,如:
OF
(溢出标志);
- 其大致结构是:
- 控制器
- 其大致结构是:
graph TB subgraph 控制器A[CU(控制单元)]B[IR(指令寄存器)]C[PC(程序计数器)] end
- CU(Control Unit):控制单元,读取并分析指令,给出具体的控制信号;
- IR(Instruction Register):指令寄存器,存储当前需要执行的指令;
- PC(Program Counter):程序计数器,存放下一条指令的地址,有自动+1的功能;
- AR(Address Register):地址寄存器,用于保存当前CPU所访问的内存单元地址;
- ID(Instruction Decoder):指令译码器,用于对指令的操作数继续分析;
- 一条指令的完成流程: 取指令 → 解码(分析指令) → 执行 → 更新 P C (跳转或者是 + 1 ) 取指令\rightarrow\ 解码(分析指令)\rightarrow\ 执行\rightarrow\ 更新PC(跳转或者是+1 ) 取指令→ 解码(分析指令)→ 执行→ 更新PC(跳转或者是+1)
- 其大致结构是:
- 运算器
- 【Flynn分类法】
- 根据指令流和数据流两个维度对计算机系统进行分类;
指令流: 在同一时刻,处理器执行的指令序列;
数据流: 在同一时刻,处理器操作的数据序列; - Flynn将计算机分为四种:
- SISD(Single Instruction Single Data)
- 单指令流单数据流型;
- 单个处理器,顺序执行指令,每次只操作一个数据;
- 示例:传统冯·诺依曼式计算机;
- SIMD(Single Instruction Multiple Data)
- 单指令流多数据流型;
- 单个控制单元,同时对多个数据执行相同的指令;
- 示例:GPU、向量处理器;
- MISD(Multiple Instruction Single Data)
- 多指令流单数据流型;
- 多个控制单元,对单个数据执行不同的指令;
- 非常少见,有文献认为流水线计算机是这一类;
- MIMD(Multiple Instruction Multiple Data)
- 多指令流多数据流型;
- 多个控制单元,对多个数据执行不同的指令;
- 示例:多核处理器、分布式系统、高性能计算机;
- SISD(Single Instruction Single Data)
- 根据指令流和数据流两个维度对计算机系统进行分类;
- 冯·诺依曼式计算机
-
指令系统
- 又叫【机械指令】,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位;
- 一台计算机的所有指令构成的集合被称为该机的指令系统,简称为指令集;
- 它包括:
操作码(OP) 地址码(A) 怎么操作 操作什么 - 七种寻址方式:
- 直接寻址:通过地址码可以直接找到操作数;
- 寄存器寻址:通过地址码找到寄存器,再从寄存器中取值;
- 立即寻址:操作数作为指令的一部分就存在指令中,直接访问即可;
- 寄存器间接寻址:通过地址码找到对应的寄存器,再从寄存器中通过二级地址找到操作数;
- 寄存器相对寻址:通过【基址寄存器】或者【变址寄存器】中存储的偏移量,结合地址码构建有效地址,再通过有效地址找到操作数;
- 变址 + 基址寻址:操作数的有效地址是一个【基址寄存器】和一个【变址寄存器】内容之和;
- 相对 + 变址寻址:操作数的有效地址是一个【基址寄存器】的值加上一个【变址寄存器】的值再加上地址码的8位/16位偏移量的值;
- 指令集的分类
-
CISC(complex)
复杂指令集,用于控制微程序组合起来执行控制;
功能的专化比较突出,速度较快,容量较大,常用于台式计算机、笔记本电脑;
-
RiSC(reduced)
限制指令集或者简单指令集,用于通过复杂组合逻辑执行控制;
功能单一,需要通过多条指令组合完成一个功能,速度较慢,容量较小,常用于手机、平板电脑、微处理器等;
-
- 指令控制方式
- 顺序方式:一条一条去执行;
- 重叠方式:多条指令同时执行,但需要时间间隔,常用于多核CPU;
- 流水方式:多条指令同时执行,但需要时间间隔,且在某一段时间上是前后渐进执行的,常用于单核CPU(
类似于多线程异步执行
):
- 对于上述图像来说,需要计算:
- 流水线周期:取指令执行时间最长的一部分时间
例如分成取值2ms+分析5ms+执行3ms,则其周期为5ms;
- 对于一条流水线来说, 流水线执行时间 = 一条指令执行时间 + (指令条数 − 1 ) × 流水线周期 流水线执行时间 = 一条指令执行时间 + (指令条数-1)\times流水线周期 流水线执行时间=一条指令执行时间+(指令条数−1)×流水线周期
- 吞吐率(TP):单位时间内流水线所完成的任务数量或者是结果数量,其计算公式为: T P = 指令条数 流水线执行时间 TP = \frac{指令条数}{流水线执行时间} TP=流水线执行时间指令条数
- 加速比 (S):使用流水线比不使用流水线快多少倍,其计算公式为: S = 不使用流水线的执行时间 使用流水线的执行时间 S = \frac{不使用流水线的执行时间}{使用流水线的执行时间} S=使用流水线的执行时间不使用流水线的执行时间
- 流水线周期:取指令执行时间最长的一部分时间
- 对于上述图像来说,需要计算:
-
输出输入方式(I/O方式)
- CPU与外部设备之间的数据传送方式;
- 主要有几种:
- 直接程序控制方式(
直接在CPU的控制之下
)- 无条件直接传送;
- 程序查询方式:先通过CPU查询外设状态,准备好了以后再和CPU交换数据;
- 中断方式
- 利用中断机制,使I/O系统在与外设交换数据时,CPU无需等待,也不用查询外设的I/O状态,大大提高了系统交互的效率;
- DMA方式
- 直接使用DMA通道,无需CPU干涉;
- IOP方式(输入/输出处理机方式)
- 使用专门的处理机,用于完成主机与外设之间的I/O操作;
- 直接程序控制方式(
-
存储系统
- 速度越快,成本越高,容量越小;
- 层次结构:
graph LR subgraph 辅助硬件CDE end A[[CPU]]<==>|超高速|B[[寄存器]]<==>|高速|C(Cache)<-->|适中|D[主存]<-.->|慢|E[辅存]<-.->|I/O方式|F{硬盘、软盘、U盘等} subgraph 外设F end
- 一些提高交互速度的方法:
- 主存——辅存:使用虚拟存储(
硬件 + 操作系统
); - Cache——主存:使用快表(
TLB
)等技术解决速度不匹配的问题(硬件自动完成
);
- 主存——辅存:使用虚拟存储(
- 分类:
- 按照位置分类:
- 内存:又叫主存,用来存储当前运行所需要的程序和数据,速度快,容量小;
- 外存:又叫辅存,用来存储当前不用的程序、数据、文件等,速度慢,容量大;
- I/O外存:用于拓展更多的存储容量,是作为I/O设备进行外部拓展;
例如:sony xperia 1 iv手机,12+256g的内外存空间,还支持最高1T的TF卡拓展(I/O外存);
- 按照材料分类,分为:磁存储器、光存储器、半导体存储器等;
- 按工作方式分类,可分为:
- SRAM:读/写存储器,既能读取数据,又能存入数据,充当缓存Cache;
- DROM:只读存储器,只能读取数据,不能存入数据,充当主存;
- ROM:非易失只读存储器,只能读取数据,不能存入数据,充当BIOS等固化程序存储;
- EPROM:紫外线照射可擦除可编程只读存储器;
- EEPROM:电离可擦除可编程只读存储器,常用于存储配置信息;
- Falsh Memory:闪存,可擦除可编程可读写存储器,被大量使用在U盘、SD卡、固态硬盘中;
- 按照位置分类:
- Cache
- 又叫高速缓存,位于CPU和主存之间;
- 其实对程序员“透明的”,即其运行过程(地址变换和数据块的替换算法)均由硬件实现;
- 通常被集成到CPU内,分为L1、L2、L3等多级缓存;
- 从Cache到主存有3种地址映像方式:
- 直接映像
即主存的块与Cache的块的对应关系是固定的,灵活性差;
- 全相联映像
即主存的任意一块可以对应Cache的任一块,灵活度高;
通过将主存和Cache用相同的“块"进行分割,并建立起地址之间的映射关系,其中主存地址被分为:标签(tag)和 块偏移量 两部分; - 组相联映射
结合上述的优缺点,对Cache先分组后分块,组间采用直接映射方式,组内的块采用全相联映射方式;
- 直接映像
- Cache的性能分析,需要计算:
- 等效访问时间
- 若 H H H 为Cache的命中率, t c t_{c} tc 为Cache的存取时间, t m t_m tm 为主存的访问时间,则等效访问时间为:
t a = H t c + ( 1 − H ) t m t_a = Ht_c + (1-H)t_m ta=Htc+(1−H)tm
- 若 H H H 为Cache的命中率, t c t_{c} tc 为Cache的存取时间, t m t_m tm 为主存的访问时间,则等效访问时间为:
- 速度提高倍数
r = t m t a r = \frac{t_m}{t_a} r=tatm
- 等效访问时间
- 主存的扩展
- 分为 位扩展 和 字扩展 两种情况;
假如存储器是 m × \times ×n 位的,则:
- 位拓展为 m$\times$2n,即单个存储字的字长变长,类似于串联;
- 字拓展为 2m × \times ×n,即存储体的数目变多,地址变长,类似于并联;
- 原内存:
1 1 0 - 位拓展:
1 1 0 - 字拓展:
1 1 0
- 位拓展:
- 分为 位扩展 和 字扩展 两种情况;
- 虚拟存储器
- 使得可以使用的内存空间远远大于主存的物理空间;
- 通过无关数据、程序打包暂存在外存,并进行快速调用的方法,使得外存部分的数据具有接近主存的访问速度;
- 磁盘存储器
- 磁盘分为:
- 磁片,可划分为:扇区、磁道;
- 磁头;
- 计算磁盘数据的存取时间,需要计算:
存取时间 = 寻道时间 + 等待时间 存取时间 = 寻道时间 + 等待时间 存取时间=寻道时间+等待时间
其中等待时间包含 【转动延迟】 和 【平均定位时间】 ;
- 磁盘分为:
-
总线
- 被称为 bus;
- 分为:
- 内部总线(片内总线):出现在芯片内部;
- 系统总线:用于连接各个计算机系统,按照传输信息的不同,可以分为:
- 数据总线(data bus);
- 地址总线(address bus);
- 控制总线(control bus);
- 通信总线:用于计算机与其他设备之间的信息于数据交换;
-
磁盘阵列
- 由多台【磁盘存储器】组成,是快速、大容量且高度可靠的外存子系统;
- 现代常用的【独立冗杂磁盘阵列】,即RAID,是一种由多块独立磁盘构成的冗杂阵列,其技术分为几种不同的等级,分别提供不同的速度、安全性和性价比:
- RAID 0:不具备容错能力;
- RAID 1:采用镜像容错;
- RAID 2:采用海明码进行错误校验;
- RaiD 3:减少用于检验的磁盘存储器台数,一般只有一台;
- RAID 4:可以独立对组内各磁盘进行读写;
- RAID 5:不设置专门的检验盘,同一台磁盘上既记录数据,也记录检验记录;
- RAID 6:采用两级数据冗余和新的数据编码以解决数据恢复问题;
-
计算机可靠性
- 指从它开始运行( t = 0 t=0 t=0)到某一个时刻 t t t 这段时间内正常运行的概率,记作R(t);
- 其计算逻辑是:
- 串联部件的可靠性 = 各部件的可靠度的乘积 串联部件的可靠性 = 各部件的可靠度的乘积 串联部件的可靠性=各部件的可靠度的乘积
- 并联部件的可靠性 = 1 − 部件失效率的乘积 并联部件的可靠性 = 1 - 部件失效率的乘积 并联部件的可靠性=1−部件失效率的乘积
2. 计算机网络基础
- 分类
-
按照分布范围分类,可分为:
- 局域网(LAN);
- 城域网(MAN);
- 广域网(WAN);
- 因特网(Internet);
-
按照拓扑结构分类,可分为:
- 总线型;
- 星型;
- 环型;
- 网状;
-
七层网络体系结构(OSI参考模型)
-
层次 名称 主要功能 主要设备及协议 7 应用层 实现具体的应用功能 POP3, FTP, HTTP, Telnet, SMTP, DHCP, TFTP, SNMP, DNS 6 表示层 数据的格式与表达、加密、压缩 POP3, FTP, HTTP, Telnet, SMTP, DHCP, TFTP, SNMP, DNS 5 会话层 建立、管理和终止会话 TCP, UDP 4 传输层 端到端的连接 TCP, UDP 3 网络层 分组传输和路由选择 三层交换机、路由器, ARP, RARP, IP, ICMP, IGMP 2 数据链路层 传送以帧为单位的信息 网桥、交换机、网卡, PPTP, L2TP, SLIP, PPP 1 物理层 二进制传输 中继器、集线器 - 防火墙:用于隔离内网和外网,分为:应用层防火墙、网络层防火墙和数据库防火墙;
-
-
主要的国际标准化组织:
- ISO —— 国际标准化组织。
- ANSI —— 美国国家标准研究所。
- NIST —— 美国国家标准和技术研究所。
- IEEE —— 电气和电子工程师协会。
- EIA —— 电子工业协会。
-
TCP/IP协议族
- 是互联网的核心协议,是事实上的国际标准;
以下是几个重点的介绍:
- 分层模型
- 与OSI参考模型一样,也采用层次体系模型;
- 分为:(
自上往下
)应用层 → \rightarrow →传输层 → \rightarrow →网际层 → \rightarrow →网络接口层; - 传输层协议:
- TCP协议(
三次握手
); - UDP协议(无连接,不可靠,没有拥塞控制和流量控制);
TCP可靠性高,UDP速率较高;
- TCP协议(
- 网际层协议:IP协议(
IPV4和IPV6
); - 网络接口层协议:WLAN, Ethernet, Token Ring,PPP, SLIP等(
基本都是网络接口或者实体相关的
);
- ARP & RARP
- ARP:地址解析协议,用于将IP地址转换为物理地址;
- RARP:反向地址解析协议,用于将物理地址转换为IP地址;
-
IP地址和IP协议
- 域名
- 指:用户所在的主机名字和地址(
助记的网络地址
); - 格式上由若干部分组成,每一部分又叫 子域名 ,并用
.
隔开。每个部分最少由两个字母或数字组成; - 域名依照分层结构进行构造,每个字域名都有其层次意义。通常情况下,一个完整、通用的主机域名有以下组成: 计算机主机名 . 本地名 . 组名 . 最高层域名 计算机主机名.本地名.组名.最高层域名 计算机主机名.本地名.组名.最高层域名
- 指:用户所在的主机名字和地址(
- IP地址
- 与域名类似,但其全由数字组成;
- 事实上的主机地址,由其唯一标识;
- 长度为32位,分为4段,每段8位(数字范围是0~255),可以用十进制数和二进制数表示;
- 其由两部分组成,一部分是网络地址,另一部分是主机地址。根据其每一部分的占比,可以分为5类IP地址:
- A类:1个字节网络地址 + 3个字节网络地址,网络地址的最高位必须是0;
- B类:2个字节网络地址 + 2个字节主机地址,网络地址的最高位必须是10;
- C类:3个字节网络地址 + 1个字节主机地址,网络地址的最高位必须是110;
- D类:4个字节网络地址,第一个字节固定是“1110”,主要用于广播地址;
- E类:4个字节网络地址,**第一个字节固定是“1111”,为将来使用保留,目前只用于实验和开发;
上述这五类IP地址都属于IPV4的范畴。
- 在IPV4的基础上,提出了下一代协议IPV6,其地址长度为 2 6 = 128 2^6 = 128 26=128 位,地址空间增大了 2 96 2^{96} 296 倍。更重要的是IPV6采用了只有8个字段的报文头部格式和更好的安全性,支持更多的服务类型;
- 一般使用的目的主机的IP地址是127.0.0.1;
在命令行上检测网络故障,可以使用以下步骤:
- ping 127.0.0.1先检查一下TCP/IP协议栈是否工作正常;
- ping 本地IP检查一下网卡是否工作正常;
- ping 网关地址检查网关连接性;
- ping 远程网站检查网络连通性;
- 【重难点】Internet网络
- DNS域名服务
- 全称为
Domain Name System
,即域名系统。DNS服务相当于使用电话簿查号码,实现域名和难记的IP地址的相互转换; - DNS使用的是UDP端口,端口号是53;
- 全称为
- 远程登录服务
- Telnet协议用的是TCP端口;
- 端口号一般是 23;
- 电子邮件服务
- 协议上分为:SMTP(
简单邮件协议
)、POP3(接收邮件
); - 两者均采用TCP端口,前者采用25,后者采用110;
- 协议上分为:SMTP(
- WWW服务
- 采用交互式图形界面的Internet服务;
- 用的是TCP端口,端口号是80;
- 文件传输服务
- 用于在计算机之间传输文件;
- 主要依靠两条TCP连接:
- 控制连接,用于传输命令和参数,端口号是21;
- 数据连接,用于传送文件,端口号是20;
- DNS域名服务
- 域名
-
3. 数据库系统
- 数据库:长期存储在计算机内的、有组织的、可共享的数据集合;
-
数据库管理系统(DBMS)
数据库系统的核心软件,在操作系统的支持下工作;
- 其特征有:
- 数据结构化。统一管理;
- 较强的数据独立性;
- 提供CRUD功能;
- 其分类有:
- 关系型数据库:支持关系模型;
- 面向对象的数据库系统:支持对象形式;
- 对象关系数据库系统:在关系型数据库模型的基础上,提供元组、数组、集合等更丰富的数据类型,构成对象关系数据模型;
- 数据库的三级模式两级映像:
每个人看到的/使用的APP/网页界面都不一样,也就是外模式的不一样。同一程序的不同账号登陆(
多开
)则是进程的不同,这主要体现在概念模式的不一样; - 数据库系统采用三级模式结构,包括:
- 【外模式】:也称为用户模式、子模式,是用户与数据库系统的接口;
- 【概念模式】:也称为模式,全体数据的逻辑结构和特征的描述;
- 【内模式】:也叫存储模式,是数据物理结构和存储方式的描述;
- 数据库系统采用两级映像功能,包括:
- 外模式 ↔ 概念模式映射 外模式\leftrightarrow概念模式映射 外模式↔概念模式映射;
- 概念模式 ↔ 内模式映射 概念模式\leftrightarrow内模式映射 概念模式↔内模式映射;
两级映射保证了数据的独立性;
- 其特征有:
-
数据库的分析与设计过程
- 在需求分析阶段,需要对应用的对象进行抽象和概括,得到数据流图、数据字典和需求说明书;
- 在概念结构设计阶段,主要用到 E R 模型 ER模型 ER模型 来确立一个ER图(
大题的重点
); - 在逻辑结构设计阶段,主要用到关系模式;
-
数据模型
- 对现实世界数据特征的抽象,用于描述数据的一组概念和定义;
- 其三要件是:
- 数据结构;
- 数据操作;
- 数据的约束条件(
完整性规则
);
- ER模型
- 全称为 “实体-联系模型”,其所采用的主要概念是 实体、属性、联系;
- 在ER模型中,类比到
mermaid
的流程图,会有以下区分:- 属性采用椭圆框;
- 实体采用长方形(
一般是客观存在的
); - 联系采用菱形(
一般是抽象描述的
);
- 联系类型:一对多、多对一、一对一;
- 关系模型
- 是对关系数据库中表结构的描述;
- 包括表名、属性名、属性类型、主键、外键等信息;
- 关系模型(
数据库
)是由多个关系模式(字段集合
)组成的,一个关系模式常写作: 实体名 ( 属性 1 , 属性 2 , . . . . ) 实体名(属性1,属性2,....) 实体名(属性1,属性2,....),其中有下划线的属性是主键/主码属性;
- 一个实体型可以转化成一个关系模式;
- 一个联系可以如下转化:
- 当实体之间是一对一的关系,联系作为一个字段添加到两个中的任意一个都行;
- 当实体之间是一对多的关系,联系作为一个字段应该添加到“多”这一侧的实体中;
- 当实体之间是多对多的关系,联系应该单独列成一个关系模式,通过数个主键唯一确定一个记录;
- 以下为关于关系模式的几个概念:
- 【候选键】:能够唯一标识一个元组的属性集合;
- 【主键】:从候选键中任意选定一个,选定后它是唯一的;
- 【主属性】:候选键的所有成员;
- 【非主属性】:不在候选键中的所有属性;
- 【外码】:一个关系模式中的属性是另一个关系模式的主属性,它表示了两个关系(表)之间的相关联系;
- 【全码/全键】:关系模式中的所有属性都是候选键;
- 完整性约束
- 防止用户对数据库的修改影响数据的一致性,即防止对数据的意外破坏;
- 具体分为3类:
- 实体完整性:主键非空;
- 参照完整性:外键置空或者等于外表主键;
- 用户定义完整性:针对某一个具体的关系数据库而言;
- 关系代数的七种基本运算:
- 并
- S 1 ∪ S 2 S1\cup S2 S1∪S2
select * from S1 and S2
;
- 交
- S 1 ∩ S 2 S1\cap S2 S1∩S2
where...and...
;
- 差
- S 1 − S 2 = S 1 / S 2 = S 1 ∩ S 2 c S1-S2 = S1/S2 = S1 \cap S2^c S1−S2=S1/S2=S1∩S2c;
where...not in...
;
- 笛卡尔积
- S 1 × S 2 S1\times S2 S1×S2
- 可以看成是左右两个表之间的记录进行长度合并的排列组合;
例如左表4个记录,右表6个,左 × \times ×右 = 24;
- 选择
- 形如: σ x x = a a a ( S 1 ) \sigma_{xx = aaa} (S1) σxx=aaa(S1);
select * from S1 where xx = aaa
;
- 投影
- 形如: π x 1 , x 2 ( S 1 ) \pi_{x1,x2} (S1) πx1,x2(S1);
- 可以认为是在整个表中截取你想要的字段出来组成新的查询;
select x1,x2 from S1
;
- 连接
-
- θ 连接 \theta连接 θ连接:$ S1\underset{x \theta y}\bowtie S2$;
- 等值连接 等值连接 等值连接: S 1 ⋈ x = y S 2 S1\underset{x = y}\bowtie S2 S1x=y⋈S2;
- 自然连接 自然连接 自然连接:比较的分量必须是相同的属性组(对应的数据类型要完全一样),自然连接运算要去掉重复的属性列,所以自然连接不可能使用 σ \sigma σ表示;
- 前者的 θ \theta θ可以表示比较符号,如 = , ! = , < , < = , > , > = =,!=,<,<=,>,>= =,!=,<,<=,>,>=;
- 一个完整的写法应该是:
R ⋈ X θ Y S = { t ∣ t = ⟨ t n , t m ⟩ ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ X ] θ t m [ Y ] } R \underset{X \theta Y}\bowtie S = \{ t \mid t = \langle t_n, t_m \rangle \land t_n \in R \land t_m \in S \land t_n[X] \theta t_m[Y] \} RXθY⋈S={t∣t=⟨tn,tm⟩∧tn∈R∧tm∈S∧tn[X]θtm[Y]} - 一个很恰当的实例是:假设我们有两个关系模式(
Relational Schema
):- 学生(学号,姓名,年龄);
- 课程(学号,课程号,课程名,学分);
当我们希望找出选修了《数据库》课程的学生的学号和姓名时,可以使用:
学生 ⋈ 学生 . 学号 = 课程 . 学号 课程 = { t ∣ t = < 学号,姓名 > ∈ 学生 ∩ ( 课程 ∩ 课程名 = " 数据库 " ) } 学生 \underset{学生.学号 = 课程.学号}\bowtie 课程 = \{ t | t = <学号,姓名> \in 学生\cap(课程 \cap 课程名 = "数据库")\} 学生学生.学号=课程.学号⋈课程={t∣t=<学号,姓名>∈学生∩(课程∩课程名="数据库")}
-
- 并
- 关系代数表达式查询优化的原则:
- 有选择先执行选择;
- 将笛卡尔运算转出成连接运算;
- 投影与其后运算一起执行,和前后的二目运算结合起来,避免重复扫描;
- 尽量预处理和存储公共子表达式;
-
函数依赖
- 用来对关系数据库进行规范化;
其实可以结合表进行简单描述:关系=表,关系模式=表的字段集合,属性集=字段集合,元组=字段名不重复的字段集合,属性值=记录值/字段值;
- 简单来说就是:由于属性之间的特殊关系,一类/一组属性的值决定了另一个/另一组的值;
- 依赖关系通常用 x → y x\rightarrow y x→y表示;
- 关于函数依赖有几种描述:
- 非平凡的函数依赖:不包含的依赖
如果 x → y ,但 Y ⊄ X ,则称 X → Y 是不平凡的 如果x\rightarrow y,但Y\not\subset X,则称X\rightarrow Y是不平凡的 如果x→y,但Y⊂X,则称X→Y是不平凡的 - 平凡的函数依赖:可以包含的依赖;
- 完全函数依赖:前者的所有真子集都能决定后者或者说一个复合属性的所有属性都对另一个属性有贡献,记作 X → f Y X\overset{f}\rightarrow Y X→fY
- 部分函数依赖:后者的一个真子集能决定前者,记作 X → p Y X\overset{p}\rightarrow Y X→pY
- 传递依赖:简单解释就是
例如:AB → C \rightarrow C →C = A → C \rightarrow C →C and B → C \rightarrow C →C
- 非平凡的函数依赖:不包含的依赖
- 如何数形结合求候选键:
- 将函数依赖关系用“有向图”表示出来;
- 找到入度为零的属性,并以该属性为起点,尝试遍历有向图,若能成功遍历图中的所有节点,则该属性为候选键;
- 若不能遍历图中的所有节点,则尝试将附近的中间节点添加到入读为0的属性集中,直到能找到路线遍历所有节点,则求出的集合是候选键;
-
规范化理论
- 范式有: 1NF, 2NF, 3NF, BCNF(巴斯克斯范式),4NF, 5NF;
- 其中 1 N F 1NF 1NF 级别最低;
- 这几种范式之间有: 5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF\subset 4NF \subset BCNF \subset 3NF \subset 2NF \subset 1NF 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
- 通过分解,可以将低一级的范式转换成若干高一级范式,被称之为规范化;
- 规范化逐步解决的目标的是:
插入异常、删除异常、数据冗杂; -
- 1NF: 要求数据库表中的每个字段都是不可再分的;
- 2NF: 要求表中的每一行可以被唯一地区分,消除了非主属性对码的部分函数依赖;
- 3NF:要求非主键字段之间不能相互依赖,消除了非主属性对码的传递函数依赖;
产生冗余和异常的两个重要原因是:【部分依赖】 和 【传递依赖】;
- BCNF:对于任何非平凡的函数依赖 X → Y X→Y X→Y, X X X 必须是超键(
即候选键或候选键的子集
),以确保没有任何复杂的依赖关系; - 4NF:解决了多值依赖问题;
- 5NF:也称为投影-连接-正规化(
PJ/NF
),是数据库范式理论中的最高级别。他解决了连接依赖问题(当两个或多个表通过连接操作合并时,合并后的结果应该能够准确地反映原始表的信息,而不会引入任何额外的语义
);
- 深入浅出的解释一下:
想象一下,你有一个包含学生、课程和成绩的数据库。在1NF中,你确保每个学生的成绩都是单独记录的。在2NF中,你确保每个学生的所有信息(如姓名、地址)都与学生ID紧密相关。在3NF中,你确保成绩只与学生ID和课程ID相关,而不是与学生的其他个人信息相关。在BCNF中,你确保没有任何复杂的依赖关系,比如学生ID和课程ID共同决定成绩,而不是单独决定。在4NF中,你确保每个学生选修的每门课程都是单独记录的,而不是将所有课程放在一个字段中。最后,在5NF中,你确保当你将学生表和课程表连接起来时,你能够准确地重建出原始的数据库结构,而不会引入任何额外的信息或丢失任何信息。
- 快速确定规范程度的方式:
- 根据关系模式和函数依赖集画出属性的IR图;
- 找出IR图中入度为0的属性,组成属性集;
- 观察属性集的情况,根据是否能够遍历全部节点来构建/增加候选键;
- 根据候选键的情况,枚举出可能有的主键;
- 根据IR图,自上而下逐一排查可能出现的层级(
一个表最多看到BCNF
):- 是否存在传递依赖(
出现x->y,y->z,则x->z的情况
),存在则3NF不成立; - 是否存在部份依赖(
出现仅靠候选键中部分键组成的集合,就可以完整遍历所以结点的情况
),存在则2NF不成立;
- 是否存在传递依赖(
-
关系模式的分解
- 要求分解后的模式要与原来的模式等价;
- 要求:
- 分解具有无损连接性(
不打破原有的遍历关系
); - 分解要保持函数依赖;
- 分解具有无损连接性(
-
事务管理
- 是一个操作序列,不可分割;
- 其有四个特性:
- 原子性(
不可分割
); - 一致性(
不破坏数据
); - 隔离性;
- 持久性(
事务一旦提交,它对数据库的改变必须是完成的,即使系统故障也是这样
);
- 原子性(
- 为实现并发控制,需要引入锁:
- 写锁,又叫排他锁(
X锁
),当事务T对对象A加上X锁时,只能由A读写,其他事务无法加锁,直至A释放锁; - 读锁,又叫共享锁(
S锁
),当事务T对对象A加上S锁时,可以读,但无法写,其他事务只能加S锁,直至A释放锁;
- 写锁,又叫排他锁(
-
备份与回复
- 备份的类型:
-
静态存储 & 动态存储
前者是指:在存储过程中不允许对数据进行存取、修改操作;
后者是指:在存储期间允许对数据库进行存取、修改操作,存储和用户事务可以并发执行;
-
海量存储 & 增量存储
前者是指:每次转出全部的数据;
后者是指:每次只转储上次转储后更新的数据;
-
日志文件
在事务处理时,DBMS将事务的开始和结束以及数据库CRUD的每一次操作写入log文件。一旦发生故障,DBMS的恢复子系统可以利用日志文件撤销事务对数据库的改变,回退到事务执行前的情况;
实际情况是: DBMS利用Log文件进行【事务故障恢复】和【系统故障恢复】,并协助后备副本进行【介质故障恢复】;
-
- 数据恢复的过程:
- 反向扫描日志文件;
- 对查到的事务更新操作进行逆操作;
- 重复上述过程,直至回到事务的开始标志处;
- 备份的类型:
-
数据仓库和数据挖掘
-
大数据
- 要求集群平台支持,数据使用量在1PB以上;