软件设计师 (中级) + 系统架构设计师 (高级) — 计算机组成、操作系统、数据库、数据结构、UML、设计模式、架构风格
| 科目 | 时间 | 题型 | 满分 | 通过线 |
|---|---|---|---|---|
| 上午: 综合知识 | 150 分钟 | 75 道单选题 | 75 分 | 45 分 |
| 下午: 应用技术 | 150 分钟 | 5 道大题 (每题 15 分,前1题必答,后4题选2题) | 75 分 | 45 分 |
| 知识模块 | 题量 | 重要程度 | 说明 |
|---|---|---|---|
| 数据结构与算法 | 5-8 题 | 必考重点 | 排序、查找、树、图、算法设计 |
| 软件工程 | 4-6 题 | 必考重点 | 开发模型、测试、UML、度量 |
| 数据库系统 | 4-6 题 | 必考重点 | SQL、范式、ER图、事务并发 |
| 操作系统 | 3-5 题 | 必考 | 进程管理、存储管理、页面置换 |
| 计算机组成原理 | 3-5 题 | 必考 | 流水线、Cache、浮点数 |
| 网络与安全 | 2-4 题 | 高频 | 协议、子网划分、加密技术 |
| 设计模式 | 2-4 题 | 高频 | 23 种设计模式识别与应用 |
| 面向对象 | 3-5 题 | 高频 | 封装/继承/多态、面向对象分析 |
| 程序设计语言 | 2-3 题 | 中频 | 编译原理、语法分析 |
| 数学与知识产权 | 3-5 题 | 中频 | 排列组合、著作权法 |
| 题号 | 题型 | 是否必答 | 分值 | 核心考点 |
|---|---|---|---|---|
| 题1 | 数据流图 | 必答 | 15 分 | 补充数据流图、数据字典 |
| 题2 | 数据库设计 | 选答 | 15 分 | ER图转关系模式、SQL编写、范式判断 |
| 题3 | UML建模 | 选答 | 15 分 | 类图/序列图/状态图补充填空 |
| 题4 | 算法填空 | 选答 | 15 分 | C语言算法代码填空 (排序/查找/DP等) |
| 题5 | 面向对象设计 | 选答 | 15 分 | C++/Java 设计模式代码填空 |
| 科目 | 时间 | 题型 | 满分 | 通过线 |
|---|---|---|---|---|
| 上午: 综合知识 | 150 分钟 | 75 道单选题 | 75 分 | 45 分 |
| 下午一: 案例分析 | 90 分钟 | 3 道必答主观题 | 75 分 | 45 分 |
| 下午二: 论文 | 120 分钟 | 1 篇论文 (2选1) | 75 分 | 45 分 |
| 知识模块 | 上午题量 | 下午是否涉及 | 重要程度 |
|---|---|---|---|
| 系统架构设计 | 5-8 题 | 下午核心 | 最高 |
| 软件工程 | 4-6 题 | 下午一可能考 | 高 |
| 数据库系统 | 4-6 题 | 下午一可能考 | 高 |
| 数据结构与算法 | 3-5 题 | 较少 | 中高 |
| 操作系统 | 3-5 题 | 较少 | 中高 |
| 计算机组成原理 | 3-5 题 | 较少 | 中 |
| 网络与安全 | 3-5 题 | 下午一可能考 | 中高 |
| 系统可靠性 | 2-3 题 | 下午一可能考 | 中 |
| 数学与知识产权 | 2-3 题 | 否 | 中 |
| 转换方向 | 方法 | 示例 |
|---|---|---|
| 十进制 → 二进制 | 除2取余,逆序排列 (整数部分);乘2取整,顺序排列 (小数部分) | 25.625D = 11001.101B |
| 二进制 → 八进制 | 三位一组,不足补零,每组转为一个八进制数字 | 11001.101B = 011 001 . 101 = 31.5O |
| 二进制 → 十六进制 | 四位一组,不足补零,每组转为一个十六进制数字 | 11001.101B = 0001 1001 . 1010 = 19.AH |
| 八进制 → 二进制 | 每个八进制数字展开为三位二进制 | 31.5O = 011 001 . 101 = 11001.101B |
| 十六进制 → 二进制 | 每个十六进制数字展开为四位二进制 | 19.AH = 0001 1001 . 1010 = 11001.101B |
浮点数 = 符号位(S) + 阶码(E) + 尾数(M)
数值 = (-1)S × 1.M × 2E-偏移量
| 类型 | 总位数 | 符号位 | 阶码 | 尾数 | 偏移量 | 范围 |
|---|---|---|---|---|---|---|
| 单精度 (float) | 32 位 | 1 位 | 8 位 | 23 位 | 127 | 约 ±3.4×1038 |
| 双精度 (double) | 64 位 | 1 位 | 11 位 | 52 位 | 1023 | 约 ±1.7×10308 |
| 部件 | 组成 | 功能 |
|---|---|---|
| 运算器 | ALU (算术逻辑单元) | 执行算术运算和逻辑运算 | ACC (累加器) | 存放运算结果或源操作数 |
| MQ (乘商寄存器) | 乘除运算时辅助存放操作数 | |
| PSW (程序状态字) | 存放状态标志 (溢出OF/进位CF/零ZF/符号SF) | |
| 控制器 | PC (程序计数器) | 存放下一条指令的地址,自动+1 |
| IR (指令寄存器) | 存放当前正在执行的指令 | |
| MAR (地址寄存器) | 存放要访问的主存单元地址 | |
| MDR (数据寄存器) | 存放从主存读出/写入的数据 | |
| CU (控制单元) | 分析指令并产生控制信号 |
| 特征 | CISC (复杂指令集) | RISC (精简指令集) |
|---|---|---|
| 指令数量 | 多 (>200条) | 少 (<100条) |
| 指令长度 | 变长 | 定长 |
| 寻址方式 | 多种 | 少 (Load/Store结构) |
| 时钟频率 | 较低 | 高 |
| 流水线 | 难以实现 | 非常适合 |
| 代表 | x86 (Intel/AMD) | ARM, MIPS, RISC-V |
| 层次 | 速度 | 容量 | 说明 |
|---|---|---|---|
| 寄存器 | 最快 | 最小 | CPU内部,与CPU同速 |
| Cache (高速缓存) | 很快 | KB~MB级 | SRAM,解决CPU-主存速度差异 |
| 主存 (内存) | 中等 | GB级 | DRAM,存放正在运行的程序 |
| 辅存 (硬盘/SSD) | 较慢 | TB级 | 永久存储,虚拟存储器的后援 |
| 映射方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 直接映射 | 主存块只能映射到固定的Cache块 Cache块号 = 主存块号 mod Cache块数 |
地址变换简单、速度快 | 冲突率高、空间利用率低 |
| 全相联映射 | 主存块可以映射到任意Cache块 | 冲突率低、利用率高 | 查找慢、硬件复杂 |
| 组相联映射 | 先按组直接映射,组内全相联 Cache组号 = 主存块号 mod Cache组数 |
折中方案 | 兼顾速度和利用率 |
| 状态 | 说明 | 转换条件 |
|---|---|---|
| 就绪 (Ready) | 已获得除CPU外的所有资源 | 等待被调度程序选中 |
| 运行 (Running) | 正在CPU上执行 | 获得CPU → 运行 |
| 阻塞 (Blocked/Waiting) | 等待某事件完成 (I/O等) | 等待资源/事件 |
| 死锁四个必要条件 | 说明 | 破坏方法 |
|---|---|---|
| 互斥 | 资源一次只能被一个进程使用 | 通常无法破坏 |
| 占有并等待 | 持有资源同时等待其他资源 | 一次性申请所有资源 |
| 不可抢占 | 已分配的资源不能被强行回收 | 允许抢占资源 |
| 循环等待 | 进程间形成环形等待链 | 对资源编号,按序申请 |
| 管理方式 | 特点 | 优点 | 缺点 |
|---|---|---|---|
| 分页 | 将内存分为固定大小的页,逻辑地址 = 页号 + 页内偏移 | 无外部碎片 | 有内部碎片 |
| 分段 | 按逻辑段划分 (代码段/数据段/栈段),逻辑地址 = 段号 + 段内偏移 | 反映逻辑结构 | 有外部碎片 |
| 段页式 | 先分段再分页,逻辑地址 = 段号 + 页号 + 页内偏移 | 兼具两者优点 | 地址变换复杂 |
| 算法 | 原理 | 特点 |
|---|---|---|
| OPT (最佳置换) | 淘汰以后最长时间不再使用的页面 | 理论最优,无法实现,用于比较标准 |
| FIFO (先进先出) | 淘汰最早进入内存的页面 | 简单,但可能产生 Belady异常 (帧数增加缺页反而增多) |
| LRU (最近最少使用) | 淘汰最近最长时间没被访问的页面 | 最常考,性能接近OPT,实现开销大 |
| CLOCK (时钟算法) | 循环扫描,使用位为0则淘汰,为1则置0继续扫描 | LRU的近似,开销较小 |
SPOOLing (Simultaneous Peripheral Operations On-Line) 的核心思想: 用软件方式模拟脱机I/O。
将独占设备改造为共享设备 — 作业的I/O数据先写入磁盘的"输入井/输出井",再由守护进程统一调度实际的I/O操作。
应用场景: 打印机共享 (多个用户提交打印任务,按队列依次打印)。
| 算法 | 原理 | 特点 | 适用场景 |
|---|---|---|---|
| FCFS (先来先服务) | 按到达顺序调度 | 公平,但短作业等待时间长 | 简单场景 |
| SJF (短作业优先) | 优先选择执行时间最短的作业 | 平均等待时间最少,但长作业可能饥饿 | 批处理 |
| RR (时间片轮转) | 就绪队列中的进程轮流执行一个时间片 | 公平响应,时间片大小影响性能 | 分时系统 |
| 优先级调度 | 按优先级高低调度 | 灵活,低优先级可能饥饿 | 实时系统 |
| HRRN (高响应比优先) | 响应比 = (等待时间+要求服务时间)/要求服务时间 | 兼顾长短作业 | 通用 |
| 运算 | 符号 | 含义 | SQL对应 |
|---|---|---|---|
| 选择 | σ条件(R) | 行过滤 — 选取满足条件的元组 | WHERE |
| 投影 | π属性(R) | 列过滤 — 选取指定的属性列 | SELECT |
| 自然连接 | R ⋈ S | 在公共属性上等值连接并去重复列 | INNER JOIN ... ON |
| 笛卡尔积 | R × S | 每行与每行的组合 | CROSS JOIN |
| 除 | R ÷ S | 选取R中包含S所有属性的元组 | 子查询 + GROUP BY + HAVING |
| 类型 | 关键字 | 用途 |
|---|---|---|
| DDL (数据定义) | CREATE, ALTER, DROP | 定义/修改/删除表结构 |
| DML (数据操纵) | SELECT, INSERT, UPDATE, DELETE | 查询和修改数据 |
| DCL (数据控制) | GRANT, REVOKE | 权限授予和回收 |
| 类型 | 特点 | 关键字 |
|---|---|---|
| 标量子查询 | 返回单个值 | 可用于 WHERE/SELECT 中 |
| 列子查询 | 返回一列多行 | IN, NOT IN, ANY, ALL |
| 行子查询 | 返回一行多列 | =, <> 等比较运算符 |
| 表子查询 | 返回多行多列 | 用在 FROM 子句 (派生表) |
| EXISTS 子查询 | 判断子查询是否返回行 | EXISTS / NOT EXISTS |
| 范式 | 定义 | 消除的依赖 | 分解方法 |
|---|---|---|---|
| 1NF | 每个属性都是不可分的原子值 | 消除重复组和数组 | 将非原子属性拆分 |
| 2NF | 在1NF基础上,消除非主属性对候选键的部分函数依赖 | 部分函数依赖 | 分解为多个关系模式,使非主属性完全依赖于候选键 |
| 3NF | 在2NF基础上,消除非主属性对候选键的传递函数依赖 | 传递函数依赖 | 将传递依赖的属性分解出去 |
| BCNF | 在3NF基础上,每个决定因素都是候选键 | 主属性对候选键的部分/传递依赖 | 分解到所有函数依赖的左部都是候选键 |
| 元素 | 图形 | 说明 |
|---|---|---|
| 实体 | 矩形 | 现实世界中的对象 (学生、课程) |
| 属性 | 椭圆 | 实体的特征 (学号、姓名) 主键属性加下划线 |
| 联系 | 菱形 | 实体间的关系 (选课) 标注联系类型: 1:1, 1:N, M:N |
| ACID 特性 | 含义 | 实现机制 |
|---|---|---|
| 原子性 (Atomicity) | 事务是不可分割的最小单位,要么全部执行要么全部不执行 | 日志 (undo log) |
| 一致性 (Consistency) | 事务执行后数据库从一个一致状态转到另一个一致状态 | 约束和规则 |
| 隔离性 (Isolation) | 并发事务之间互不干扰 | 封锁机制 |
| 持久性 (Durability) | 事务提交后结果永久保存 | 日志 (redo log) |
| 并发问题 | 描述 |
|---|---|
| 脏读 | 读到其他事务未提交的数据 |
| 不可重复读 | 同一事务中两次读取同一数据结果不同 (其他事务修改了) |
| 幻读 | 同一查询返回不同的行集 (其他事务插入/删除了行) |
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| Read Uncommitted | 可能 | 可能 | 可能 |
| Read Committed | 避免 | 可能 | 可能 |
| Repeatable Read | 避免 | 避免 | 可能 |
| Serializable | 避免 | 避免 | 避免 |
| 锁类型 | 说明 |
|---|---|
| S锁 (共享锁/读锁) | 允许多个事务同时读,阻止写。加S锁后其他事务可加S锁但不能加X锁 |
| X锁 (排他锁/写锁) | 独占资源,阻止其他事务读写。加X锁后其他事务不能加任何锁 |
| 两阶段锁 (2PL) | 扩展阶段(只加锁不释放) → 收缩阶段(只释放不加锁),保证可串行化 |
| 操作 | 顺序表 | 链表 |
|---|---|---|
| 按值查找 | O(n) (无序) / O(log n) (有序可二分) | O(n) |
| 按下标访问 | O(1) | O(n) |
| 插入 (已知位置) | O(n) (需移动元素) | O(1) |
| 删除 (已知位置) | O(n) (需移动元素) | O(1) |
| 适用场景 | 频繁查找、元素个数已知 | 频繁插入删除、元素个数变化大 |
| 数据结构 | 特性 | 应用 |
|---|---|---|
| 栈 (Stack) | LIFO (后进先出) | 括号匹配、表达式求值、递归调用、函数调用栈、浏览器前进后退 |
| 队列 (Queue) | FIFO (先进先出) | BFS、打印任务队列、进程调度 |
| 遍历方式 | 访问顺序 | 记忆口诀 |
|---|---|---|
| 前序 (Pre-order) | 根 → 左 → 右 | 根左右 |
| 中序 (In-order) | 左 → 根 → 右 | 左根右 |
| 后序 (Post-order) | 左 → 右 → 根 | 左右根 |
| 层序 (Level-order) | 逐层从左到右 | 用队列实现 |
| 类型 | 特点 | 考试重点 |
|---|---|---|
| 哈夫曼树 | 带权路径长度WPL最小的二叉树 |
构造: 每次选权值最小的两个节点合并 哈夫曼编码: 左0右1 (或左1右0),是前缀编码 n个叶子节点的哈夫曼树有 2n-1 个节点 (无度为1的节点) |
| AVL树 (平衡二叉树) | 任意节点的左右子树高度差 ≤ 1 |
平衡因子 = 左子树高度 - 右子树高度 ∈ {-1, 0, 1} 失衡时四种旋转: LL/RR/LR/RL 查找: O(log n) |
| B树 | 多路平衡查找树,节点可有多个关键字和子节点 |
m阶B树: 每个节点最多m个子节点 根节点至少2个子节点,其他节点至少 ⌈m/2⌉ 个子节点 所有叶子节点在同一层 |
| B+树 | B树的变体 |
所有数据都在叶子节点,非叶节点仅存索引 叶子节点用链表连接 → 支持范围查询 数据库索引常用B+树 |
| 算法 | 类型 | 时间复杂度 | 适用场景 | 核心思想 |
|---|---|---|---|---|
| DFS (深度优先) | 遍历 | O(V+E) | 拓扑排序、连通性判断 | 用栈 (递归),一条路走到底再回溯 |
| BFS (广度优先) | 遍历 | O(V+E) | 最短路径(无权图)、层序遍历 | 用队列,逐层扩展 |
| Prim | 最小生成树 | O(V2) | 稠密图 | 从一点出发,每次选最近的未加入点 |
| Kruskal | 最小生成树 | O(E log E) | 稀疏图 | 按边权排序,从小到大选不形成环的边 |
| Dijkstra | 单源最短路径 | O(V2) | 无负权边的图 | 贪心,每次选距离最小的未确定点 |
| Floyd | 所有点对最短路径 | O(V3) | 任意图 (可处理负权边) | 动态规划,枚举中间节点 |
| 拓扑排序 | 有向无环图 | O(V+E) | 判断有无环、任务调度 | 入度为0的入队,删除后更新入度 |
| 关键路径 | AOE网 | O(V+E) | 项目工期计算 | 最长路径 = 最短完成时间 |
| 算法 | 平均时间 | 最坏时间 | 最好时间 | 空间 | 稳定性 | 原理简述 |
|---|---|---|---|---|---|---|
| 直接插入 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 将元素插入已排序序列的正确位置 |
| 希尔排序 | O(n1.3) | O(n2) | O(n) | O(1) | 不稳定 | 分组插入排序,增量递减 |
| 冒泡排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 相邻元素比较交换,大元素下沉 |
| 快速排序 | O(n log n) | O(n2) | O(n log n) | O(log n) | 不稳定 | 选基准元素分区,递归排序子区 |
| 简单选择 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 | 每次选最小元素放到前面 |
| 堆排序 | O(n log n) | O(n log n) | O(n log n) | O(1) | 不稳定 | 建大/小顶堆,反复取堆顶 |
| 归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | 稳定 | 分治,递归拆分再合并有序序列 |
| 基数排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 稳定 | 按位分配收集 (LSD/MSD) |
| 查找方法 | 时间复杂度 | 适用条件 | 说明 |
|---|---|---|---|
| 顺序查找 | O(n) | 无序表 | 逐个比较 |
| 二分查找 | O(log n) | 有序顺序表 | 每次比较中间元素,缩小一半范围 ASL成功 = (n+1)/n × log2(n+1) - 1 |
| 二叉排序树 (BST) | 平均 O(log n) 最坏 O(n) |
动态查找 | 左子树 < 根 < 右子树 中序遍历得到有序序列 |
| 平衡二叉树 (AVL) | O(log n) | 动态查找 | BST + 平衡因子 |BF| ≤ 1 |
| 哈希表 | 平均 O(1) | 快速查找 | 哈希函数 + 冲突处理 |
| 方法 | 原理 | 特点 |
|---|---|---|
| 开放定址法 (线性探测) | d, d+1, d+2, ... 逐个探测空位 | 容易产生堆积 (聚集) |
| 开放定址法 (二次探测) | d, d+12, d-12, d+22, ... | 减少堆积 |
| 链地址法 (拉链法) | 每个桶维护一个链表 | 不会堆积,删除方便,常用方法 |
| 再哈希法 | 冲突时用另一个哈希函数 | 冲突少但计算量大 |
| 方法 | 核心思想 | 适用条件 | 经典问题 |
|---|---|---|---|
| 分治法 | 将大问题分解为相同结构的子问题,分别求解后合并 | 子问题独立,结构相同 | 归并排序、快排、二分查找、大整数乘法 |
| 动态规划 | 最优子结构 + 重叠子问题,自底向上求解,存储中间结果 | 最优子结构,重叠子问题 | 背包问题、最长公共子序列(LCS)、最短路径(Floyd)、矩阵连乘 |
| 贪心法 | 每步选当前最优,不回溯 | 贪心选择性质 + 最优子结构 | Prim/Kruskal、Dijkstra、Huffman编码、活动选择 |
| 回溯法 | 深度优先搜索解空间,不满足约束则回溯 | 解空间可枚举 | N皇后、0-1背包、图的着色 |
| 模型 | 特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 瀑布模型 | 线性顺序: 需求→设计→编码→测试→维护 | 文档驱动,管理简单 | 需求必须明确,后期变更代价大 | 需求明确、稳定的项目 |
| 增量模型 | 分批交付,每次交付一个可用的增量 | 尽早交付部分功能 | 需要良好的架构设计 | 大型项目分阶段交付 |
| 螺旋模型 | 风险驱动,每圈包含: 确定目标→风险评估→开发→计划 | 风险控制好 | 成本高,需要风险评估经验 | 大型复杂、高风险项目 |
| 喷泉模型 | 面向对象,迭代无间隙,各阶段可重叠 | 支持迭代和复用 | 管理困难 | 面向对象开发 |
| V模型 | 开发与测试对应: 需求↔验收测试, 概要设计↔系统测试, 详细设计↔集成测试, 编码↔单元测试 | 强调测试贯穿开发 | 仍是线性模型 | 对质量要求高的项目 |
| 敏捷 (Scrum) | 迭代增量,2-4周Sprint,每日站会,产品Backlog | 快速响应变化 | 文档可能不足 | 需求变化频繁的项目 |
| 敏捷 (XP) | 结对编程、测试驱动开发(TDD)、持续集成、小版本发布 | 代码质量高 | 对团队要求高 | 小团队快速开发 |
| 等级 | 类型 | 说明 |
|---|---|---|
| 1 (最好) | 功能内聚 | 模块内所有元素共同完成一个功能 |
| 2 | 顺序内聚 | 前一个功能的输出是后一个功能的输入 |
| 3 | 通信内聚 | 模块内元素操作同一数据集 |
| 4 | 过程内聚 | 模块内元素按特定过程顺序执行 |
| 5 | 时间内聚 | 模块内元素在同一时间段执行 (如初始化) |
| 6 | 逻辑内聚 | 模块内元素逻辑上相关 (如所有输入操作) |
| 7 (最差) | 偶然内聚 | 模块内元素无任何关系 |
| 等级 | 类型 | 说明 |
|---|---|---|
| 1 (最好) | 非直接耦合 | 模块间无直接关系,通过主模块调用 |
| 2 | 数据耦合 | 模块间只传递简单数据值 |
| 3 | 标记耦合 | 传递数据结构 (记录/对象) |
| 4 | 控制耦合 | 传递控制信息 (开关/标志) |
| 5 | 外部耦合 | 共享外部数据格式或设备 |
| 6 | 公共耦合 | 共享全局数据结构 |
| 7 (最差) | 内容耦合 | 一个模块直接访问另一个模块的内部数据 |
| 分类 | 方法 | 说明 |
|---|---|---|
| 黑盒测试 (不看代码) |
等价类划分 | 将输入分为有效等价类和无效等价类,每类取代表值测试 |
| 边界值分析 | 重点测试边界值 (如 0, 1, -1, 最大值, 最小值) | |
| 因果图 | 分析输入条件的因果关系,转化为判定表 | |
| 错误推测 | 凭经验推测可能出错的地方 | |
| 白盒测试 (看代码) |
语句覆盖 | 每条语句至少执行一次 (最弱覆盖) |
| 判定覆盖 (分支覆盖) | 每个判定的真/假分支至少执行一次 | |
| 条件覆盖 | 每个条件的真/假至少取一次 | |
| 路径覆盖 | 覆盖所有可能路径 (最强覆盖) |
| 阶段 | 对象 | 方法 | 参与者 |
|---|---|---|---|
| 单元测试 | 模块/函数 | 白盒为主 | 开发人员 |
| 集成测试 | 模块间接口 | 灰盒 | 开发+测试 |
| 系统测试 | 整个系统 | 黑盒为主 | 测试团队 |
| 验收测试 | 系统功能 | 黑盒 | 用户/客户 |
| UML图 | 类型 | 用途 | 关键元素 |
|---|---|---|---|
| 类图 (Class Diagram) | 结构图 | 描述类的结构和类间关系 | 类名、属性、方法;关系: 继承、组合、聚合、依赖、关联 |
| 用例图 (Use Case Diagram) | 行为图 | 描述系统功能和参与者 | 参与者(小人)、用例(椭圆)、系统边界、include/extend关系 |
| 序列图 (Sequence Diagram) | 行为图 | 描述对象间交互的时间顺序 | 生命线、消息箭头、激活条、注意时间从上到下 |
| 活动图 (Activity Diagram) | 行为图 | 描述工作流程和并发行为 | 动作、分支(菱形)、分叉/汇合(粗线)、泳道 |
| 状态图 (State Diagram) | 行为图 | 描述对象生命周期中的状态变化 | 状态(圆角矩形)、转换箭头、事件/动作、初始/终止状态 |
| 组件图 (Component Diagram) | 结构图 | 描述系统的物理组件及依赖 | 组件、接口、依赖关系 |
| 部署图 (Deployment Diagram) | 结构图 | 描述硬件拓扑和软件部署 | 节点、通信路径、制品 |
| 模式 | 核心思想 | 适用场景 | 与其他模式区别 |
|---|---|---|---|
| 单例 (Singleton) | 确保一个类只有一个实例,提供全局访问点 | 数据库连接池、日志管理器、配置管理器 | 最简单的创建型模式 |
| 工厂方法 (Factory Method) | 定义创建对象的接口,让子类决定实例化哪个类 | 需要根据条件创建不同对象时 | vs 抽象工厂: 只创建一种产品 |
| 抽象工厂 (Abstract Factory) | 创建一组相关/相互依赖的对象族,无需指定具体类 | 跨平台UI组件族、数据库适配器 | vs 工厂方法: 创建一族产品 |
| 建造者 (Builder) | 将复杂对象的构建与表示分离,逐步构建 | 构建复杂对象 (如StringBuilder、SQL查询构建器) | vs 抽象工厂: 关注构建过程而非产品族 |
| 原型 (Prototype) | 通过克隆已有对象来创建新对象 | 创建成本大的对象、需要保留历史版本 | 通过clone()而非new创建 |
| 模式 | 核心思想 | 适用场景 | 与其他模式区别 |
|---|---|---|---|
| 适配器 (Adapter) | 接口转换,使不兼容的接口能协同工作 | 集成已有类,接口不匹配时 | 事后补救,类适配器(继承)/对象适配器(组合) |
| 桥接 (Bridge) | 将抽象与实现分离,使两者可独立变化 | 多维度变化的系统 (如形状×颜色) | vs 适配器: 事先设计而非事后补救 |
| 组合 (Composite) | 将对象组合成树形结构,统一对待单个和组合对象 | 文件系统、组织架构、菜单树 | 树枝和叶子实现同一接口 |
| 装饰器 (Decorator) | 动态添加功能,比继承更灵活 | IO流 (Java的BufferedInputStream)、功能扩展 | vs 代理: 装饰器增强功能,代理控制访问 |
| 外观 (Facade) | 为子系统提供统一的高层接口 | 简化复杂子系统的使用 | 不封装子系统,只提供简化入口 |
| 享元 (Flyweight) | 共享对象减少内存消耗 | 大量相似对象 (如字符串池、线程池) | 区分内部状态(共享)和外部状态(不共享) |
| 代理 (Proxy) | 控制对对象的访问,不直接访问目标对象 | 远程代理、虚拟代理(延迟加载)、保护代理 | vs 装饰器: 代理控制访问,装饰器增强功能 |
| 模式 | 核心思想 | 适用场景 |
|---|---|---|
| 责任链 (Chain of Responsibility) | 请求沿链传递,直到有对象处理 | 审批流程、异常处理、日志处理 |
| 命令 (Command) | 将请求封装为对象,支持撤销/重做/排队 | 菜单操作、宏命令、事务操作 |
| 解释器 (Interpreter) | 定义语言的文法表示和解释器 | SQL解析、正则表达式、表达式计算 |
| 迭代器 (Iterator) | 顺序访问集合元素,不暴露内部结构 | 遍历容器、STL迭代器 |
| 中介者 (Mediator) | 用一个中介对象封装对象间的交互 | 聊天室、GUI组件通信、机场调度 |
| 备忘录 (Memento) | 保存和恢复对象状态 | 撤销操作、游戏存档 |
| 观察者 (Observer) | 一对多依赖,状态变化自动通知 | 事件系统、MVC模型、消息订阅 |
| 状态 (State) | 对象行为随状态改变而变化 | 订单状态机、TCP连接状态、自动售货机 |
| 策略 (Strategy) | 封装算法族,可互换 | 支付方式选择、排序算法选择、折扣策略 |
| 模板方法 (Template Method) | 定义算法骨架,子类实现具体步骤 | 框架设计、JUnit测试、Servlet的doGet/doPost |
| 访问者 (Visitor) | 在不改变类的前提下增加操作 | 编译器AST遍历、报表生成 |
| 架构风格 | 子类型 | 核心特点 | 典型应用 |
|---|---|---|---|
| 数据流风格 | 管道-过滤器 批处理 |
数据在组件间流动,每个组件对数据进行变换 | Unix管道 | 编译器 (词法→语法→语义→代码生成) |
| 调用/返回风格 | 主程序-子程序 面向对象 层次结构 |
显式调用,请求-响应模式 | 传统过程式程序 | OOP系统 | TCP/IP协议栈、OSI七层 |
| 独立构件风格 | 进程通信 事件驱动 |
构件间不直接调用,通过事件/消息间接通信 | GUI事件处理 | 观察者模式 | 消息队列 |
| 虚拟机风格 | 解释器 规则系统 |
通过自定义的解释引擎执行自定义语言/规则 | JVM解释器 | 正则引擎 | 专家系统 |
| 仓库风格 | 数据库系统 黑板系统 |
中心数据存储,构件通过共享数据交互 | 数据库应用 | 语音识别黑板系统 |
| 质量属性 | 含义 | 关键战术 |
|---|---|---|
| 性能 | 系统响应速度 | 增加计算资源、减少计算开销 (缓存、并发)、控制资源调度 |
| 可用性 | 系统正常运行时间 | 冗余 (热备/冷备/温备)、心跳检测、选举、状态同步 |
| 安全性 | 抵抗攻击的能力 | 认证、授权、加密、审计、入侵检测 |
| 可修改性 | 修改的难易程度 | 信息隐藏、维持语义一致性、延迟绑定、抽象 |
| 易用性 | 用户使用系统的难易 | 支持用户主动操作 (撤销/回滚)、系统主动支持 (提示/向导) |
| 可测试性 | 验证系统的难易 | 记录/回放、将接口与实现分离、内置监控 |
| OSI 七层 | TCP/IP 四层 | 协议 | 设备 | 数据单位 |
|---|---|---|---|---|
| 应用层 | 应用层 | HTTP, FTP, SMTP, DNS, Telnet, POP3 | 网关 | 报文 |
| 表示层 | 加密/压缩/格式转换 | 网关 | — | |
| 会话层 | 建立/管理/终止会话 | 网关 | — | |
| 传输层 | 传输层 | TCP (可靠), UDP (快速) | 端口号 | 段(Segment) |
| 网络层 | 网际层 | IP, ICMP, ARP, OSPF | 路由器 | 包(Packet) |
| 数据链路层 | 网络接口层 | Ethernet, PPP, MAC | 交换机/网桥 | 帧(Frame) |
| 物理层 | 比特流传输 | 集线器/中继器 | 比特(Bit) |
| 类别 | 首字节范围 | 默认子网掩码 | 网络数 | 每网络主机数 |
|---|---|---|---|---|
| A类 | 1-126 | 255.0.0.0 (/8) | 126 | 224-2 ≈ 1600万 |
| B类 | 128-191 | 255.255.0.0 (/16) | 214 | 216-2 = 65534 |
| C类 | 192-223 | 255.255.255.0 (/24) | 221 | 28-2 = 254 |
| D类 (组播) | 224-239 | — | — | — |
| E类 (保留) | 240-255 | — | — | — |
| 加密类型 | 代表算法 | 特点 | 密钥管理 |
|---|---|---|---|
| 对称加密 | DES (56位), 3DES, AES | 加密解密用同一密钥,速度快 | 密钥分发困难 |
| 非对称加密 | RSA, ECC, DSA | 公钥加密、私钥解密 (或反之) | 公钥公开,私钥保密 |
| 混合加密 | SSL/TLS | 非对称加密传密钥 + 对称加密传数据 | 兼顾安全性和效率 |
| 考点 | 核心公式/概念 | 典型题型 |
|---|---|---|
| 排列组合 |
排列 P(n,r) = n! / (n-r)! 组合 C(n,r) = n! / (r!(n-r)!) 排列"有序",组合"无序" |
从10人中选3人排队 vs 从10人中选3人组队 |
| 概率 |
P(A∪B) = P(A) + P(B) - P(A∩B) 条件概率: P(A|B) = P(A∩B) / P(B) 贝叶斯公式: P(A|B) = P(B|A)×P(A) / P(B) |
条件概率计算、全概率公式 |
| 矩阵 | 矩阵乘法、逆矩阵、行列式 | 线性方程组求解、状态转移矩阵 |
| 图论 | 最短路径、最小生成树、欧拉回路、哈密顿回路 | 与数据结构图算法结合考 |
| 权利类型 | 核心要点 | 保护期限 | 取得方式 |
|---|---|---|---|
| 著作权 (版权) |
自动取得 (创作完成即享有,无需注册) 人身权: 发表权、署名权、修改权、保护作品完整权 财产权: 复制权、发行权、出租权、信息网络传播权等 |
个人: 作者终身+死后50年 单位: 发表后50年 署名权/修改权/保护完整权: 永久 |
自动取得 |
| 专利权 |
先申请原则 (不是先发明) 三种: 发明 (20年)、实用新型 (10年)、外观设计 (15年) |
发明: 20年 实用新型: 10年 外观设计: 15年 |
申请+审查 |
| 商标权 |
注册原则 (注册后享有专用权) 注册有效期10年,可续展 |
10年 (可续展) | 注册取得 |
| 商业秘密 | 不为公众知悉、有商业价值、采取保密措施 | 无期限 (只要保密) | 自动取得 |
| 题型 | 做题方法 | 得分技巧 |
|---|---|---|
| 数据流图补充 |
1. 先读题目说明,理解系统功能 2. 看顶层DFD,理解外部实体和系统边界 3. 按"数据平衡原则"补充: 父图与子图的输入输出必须一致 4. 找缺失的数据流: 检查每个加工的输入输出是否完整 |
- 外部实体通常是"人"或"系统" - 数据存储通常是"XX表""XX文件""XX库" - 数据流必须有箭头方向 |
| 数据库设计 |
1. 先看ER图,识别实体和联系 2. 按规则转关系模式 (1:1/1:N/M:N) 3. 判断主键和外键 4. 分析是否满足范式要求 |
- M:N联系必须独立成表 - 外键通常在N端 - 注意: 主键不能为空,外键必须参照主键 |
| UML建模 |
1. 识别图的类型 (类图/序列图/状态图) 2. 理解场景描述中的对象和交互 3. 按描述补充缺失的类/方法/消息/状态 |
- 类图: 注意多态和继承关系 - 序列图: 时间从上到下 - 状态图: 注意转换条件和动作 |
| 算法填空 |
1. 先读算法说明,理解算法目标 2. 通读代码结构,理解变量含义 3. 手动模拟执行过程,找出缺失语句 4. 注意边界条件 (i=0, i=n-1) |
- 循环不变式是关键线索 - 注意变量初始化 - 时间复杂度分析要会写 |
| 面向对象设计 |
1. 识别设计模式 (从类名和结构猜) 2. 理解类之间的关系 3. 填空: 补充方法实现或类定义 |
- 常考: 策略、工厂、观察者、适配器 - 熟悉C++/Java语法 - 抽象类/接口的子类实现 |
| 题型 | 做题方法 | 得分技巧 |
|---|---|---|
| 架构设计 |
1. 分析系统需求和约束 2. 选择合适的架构风格并说明理由 3. 画出架构图并标注组件 4. 分析质量属性如何满足 |
- 架构风格选择要紧扣场景 - 质量属性战术要具体 - 对比方案时列出优缺点 |
| 数据库设计 |
1. 分析业务场景的数据需求 2. 设计ER模型和关系模式 3. 考虑分布式/高并发场景 4. 分析性能优化策略 |
- 分库分表策略 - 读写分离 - 缓存策略 (Redis) |
| 系统分析 |
1. 需求分析与用例建模 2. 系统可行性分析 3. 方案对比与选型 |
- 给出多个方案时逐项对比 - 用表格形式呈现更清晰 |