📚 软考软件设计师 · 每日备考 2026-05-07
📅 距离考试还有16天(2026年5月23日)
🎯 今日主题:下午题五大题型专项突破 · 解题模板与实战技巧
一、下午题整体结构与得分策略
| 题号 | 题型 | 分值 | 难度 | 推荐做题顺序 |
|---|---|---|---|---|
| 第一题 | 数据流图(DFD) | 15分 | ⭐⭐ | ✅ 优先做 |
| 第二题 | 数据库设计 | 15分 | ⭐⭐⭐ | ✅ 第二做 |
| 第三题 | UML建模 | 15分 | ⭐⭐⭐ | ✅ 第三做 |
| 第四题 | 算法设计与实现 | 15分 | ⭐⭐⭐⭐ | ✅ 第四做 |
| 第五题 | 设计模式 | 15分(二选一) | ⭐⭐⭐ | 选熟悉的做 |
⚡ 考场策略:先易后难,每道题至少拿到基础分。数据流图和数据库设计是"必拿分"题型,务必保证正确率。
二、题型一:数据流图(DFD)—— 15分必拿题
📌 四大基本元素
| 元素 | 符号 | 说明 |
|---|---|---|
| 外部实体 | 长方形 | 系统外部的人/机构/系统(用户、管理员、银行系统等) |
| 加工(处理) | 圆圈/圆角矩形 | 数据处理逻辑 |
| 数据存储 | 双平行线/开口矩形 | 数据暂存地(XX表、XX文件、XX库) |
| 数据流 | 带箭头线段 | 数据的流向 |
🔑 解题核心原则:数据平衡原则
原则1:顶层图与0层图平衡
- 顶层图的输入/输出数据流 → 0层图必须有对应体现
- 顶层图有5条输入3条输出 → 0层图的输入输出也必须是5+3
原则2:父图与子图平衡
- 子图的输入输出 = 父图中对应加工的输入输出
- 子图多出来的数据流 → 说明父图缺少数据流
原则3:加工自身平衡
- ❌ 只有入没有出 = 数据黑洞
- ❌ 只有出没有入 = 数据奇迹(凭空产生)
- ✅ 有入有出,且输出可由输入推导
📝 四大常考题型与解法
题型1:补充外部实体
- 方法:圈出题干中"用户"“系统”“客户”"管理员"等角色词
- 人物角色、组织机构、外部系统均可为外部实体
- ⚠️ 当开发"中间件"时,后台数据库往往是外部实体
题型2:补充数据存储
- 方法:找题干中"XX文件"“XX表”“XX库”“XX清单”"XX档案"等词
- 找到后看哪个加工需要读写这些数据,补充连线
题型3:补充数据流(⭐最常考)
步骤1:对比顶层图和0层图数据流,圈出不匹配的地方 步骤2:按题目说明逐句匹配,标注实体和数据流 步骤3:检查加工与存储的交互(读→出线,写→入线)- 答题模板:
"在加工Y与存储Z之间添加数据流'XX信息'"
题型4:补充加工名
- 方法:找"动词 + 名词"结构
- 例:生成报告、发出通知、记录分数、用户管理
🚫 三大铁律(绝对不能违反)
| 铁律 | 说明 |
|---|---|
| 数据存储之间不直连 | 数据存储A → 数据存储B ❌(必须经过加工) |
| 外部实体间不直连 | 外部实体A → 外部实体B ❌(必须经过加工) |
| 加工必须有入有出 | 只有入或只有出都不行 ✅ |
🎯 真题模拟
题目:某图书馆管理系统,读者可以通过系统借阅图书。管理员维护图书信息和学生信息。学生借书需先出示借书证,系统验证后可借阅。还书时更新借阅记录。
问题:补充缺失的外部实体和数据流。
参考答案:
- 外部实体:读者(发起借书还书)、管理员(维护信息)
- 缺失数据流:借书证信息(读者→验证加工)、借阅结果(验证加工→读者)、图书信息(图书存储→借书加工)、借阅记录(还书加工→借阅记录存储)
三、题型二:数据库设计—— 15分必拿题
📌 五步解题流程
第一步:从题干中提取所有实体(名词→实体) 第二步:确定每个实体的属性(找描述中的定语和量词) 第三步:确定实体间联系(1:1 / 1:N / M:N) 第四步:画出ER图(矩形=实体、椭圆=属性、菱形=联系) 第五步:转换关系模式(实体→表、联系→外键或独立表)🔑 ER图→关系模式转换规则
| 联系类型 | 转换方式 | 示例 |
|---|---|---|
| 1:1 | 任一方加入对方主键作为外键,或将两个关系合并 | 员工(工号,姓名,部门号) + 部门(部门号,部门名) |
| 1:N | N方加入1方主键作为外键 | 学生(学号,姓名,班级号) + 班级(班级号,班级名) |
| M:N | 独立建关系表,包含两个实体的主键作为外键 | 选课(学号,课程号,成绩) |
📝 范式判断速查
| 范式 | 要求 | 消除问题 | 判断方法 |
|---|---|---|---|
| 1NF | 属性不可再分 | 消除重复组 | 每个字段都是原子的 |
| 2NF | 满足1NF,非主属性完全依赖于候选键 | 消除部分依赖 | 复合主键时,非主属性是否依赖整个键 |
| 3NF | 满足2NF,非主属性直接依赖于候选键 | 消除传递依赖 | A→B→C(A决定B,B决定C)则不满足3NF |
| BCNF | 所有决定因素都是候选键 | 消除主属性对候选键的部分/传递依赖 | 更严格的3NF |
🎯 真题模拟
题目:某医院系统有医生(工号,姓名,科室号,职称)、科室(科室号,科室名,科室电话)、患者(病历号,姓名,性别,联系电话)。一个医生属于一个科室,一个科室有多名医生。一个患者可以看多个医生,一个医生可以看多个患者。
问题1:画出ER图
问题2:转换为关系模式,标注主键和外键
参考答案:
医生(工号, 姓名, 科室号, 职称) PK=工号, FK=科室号 科室(科室号, 科室名, 科室电话) PK=科室号 患者(病历号, 姓名, 性别, 联系电话) PK=病历号 就诊(工号, 病历号, 诊断日期, 诊断结论) PK=(工号,病历号,诊断日期), FK=工号, FK=病历号- 医生与科室:1:N → 医生表中加入科室号外键
- 医生与患者:M:N → 独立建"就诊"表
四、题型三:UML建模—— 15分
📌 类图六大关系速记(从弱到强)
| 关系 | 符号 | 含义 | 软考频率 |
|---|---|---|---|
| 依赖 | 虚线+箭头--> | 临时使用 | ⭐⭐ |
| 关联 | 实线+箭头→ | 长期引用 | ⭐⭐⭐ |
| 聚合 | 实线+空心菱形◇— | 整体-部分(弱拥有) | ⭐⭐⭐ |
| 组合 | 实线+实心菱形◆— | 整体-部分(强拥有,同生共死) | ⭐⭐⭐⭐ |
| 泛化 | 实线+空心三角△ | 继承 | ⭐⭐⭐⭐ |
| 实现 | 虚线+空心三角△- - | 实现接口 | ⭐⭐⭐ |
🔑 补充类/属性/方法的解题技巧
补充属性:
- 从题干描述中找名词修饰语
- 例:“每个学生有学号、姓名和出生日期” →
+学号: String, +姓名: String, +出生日期: Date
补充方法:
- 从题干描述中找动词
- 例:“学生可以选课和退课” →
+选课(): void, +退课(): void
判断关系类型:
A是B的一种 → 泛化(继承) A使用B → 依赖 A有B → 关联 A包含B但可独立 → 聚合(空心菱形) A包含B且不可独立 → 组合(实心菱形) A实现B的接口 → 实现📝 用例图与序列图要点
用例图:
- 包含:
<<include>>虚线箭头(基用例→被包含用例),每次都执行 - 扩展:
<<extend>>虚线箭头(扩展用例→基用例),条件满足时执行 - ⚠️ 方向别搞反:include是基→子,extend是子→基
序列图(时序图):
- 从上到下表示时间顺序
- 生命线:对象下方的虚线
- 激活条:对象上的窄矩形(表示正在执行)
- 消息类型:同步消息(实线箭头)、返回消息(虚线箭头)、异步消息(实线开放箭头)
🎯 真题模拟
题目:在线购物系统中,商品(Product)有商品编号、名称、价格。订单(Order)包含多个订单项(OrderItem)。订单项关联一个商品和购买数量。当订单取消时,订单项也被删除。用户可以查看商品列表和下订单。
问题:补充类的关系和缺失的方法。
参考答案:
Order ◆—— OrderItem (组合关系,订单取消订单项也删除) OrderItem —— Product (关联关系)- Order 缺失方法:
+取消订单(): void, +生成订单(): void - OrderItem 属性:
+数量: int - Product 属性:
+商品编号: String, +名称: String, +价格: double
五、题型四:算法设计与实现—— 15分
📌 四大常考算法策略
| 策略 | 核心思想 | 常考题型 | 代码特征 |
|---|---|---|---|
| 分治法 | 分解→求解→合并 | 归并排序、快速排序、二分查找 | 递归+基准条件 |
| 动态规划 | 最优子结构+重叠子问题 | 0-1背包、最长公共子序列(LCS)、矩阵连乘 | dp数组+多重循环 |
| 回溯法 | DFS+剪枝 | N皇后、全排列、图着色、迷宫 | 递归+撤销选择 |
| 贪心法 | 局部最优→全局满意 | 哈夫曼编码、活动安排、最小生成树 | 先排序再选取 |
🔑 算法题答题三步法
第一步:读题→确定算法策略 - "最优解""最大/最小" → 动态规划 - "所有方案""组合" → 回溯法 - "排序""选取" → 贪心法 - "分半""递归" → 分治法 第二步:看代码→找填空规律 - 循环边界条件(i从0还是1?<还是<=?) - 递归参数传递(传什么?返回什么?) - 数组下标(从0开始!C语言!) 第三步:验证→代入简单数据 - 用n=3或n=4的小数据手动跑一遍 - 检查边界条件是否正确📝 动态规划高频填空模板
// 0-1背包问题for(i=1;i<=n;i++){for(j=W;j>=weight[i];j--){dp[j]=max(dp[j],dp[j-weight[i]]+value[i]);// 填空1:j的起始条件(从大到小,避免重复选)// 填空2:状态转移方程(选或不选取最大)}}// 最长公共子序列(LCS)for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(A[i-1]==B[j-1]){dp[i][j]=dp[i-1][j-1]+1;}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}}📝 回溯法填空模板
voidbacktrack(intt){if(t>n){// 到达叶子节点输出当前解;return;}for(inti=0;i<候选数;i++){x[t]=i;if(约束条件(x,t)){// 剪枝:满足条件才继续backtrack(t+1);// 递归下一层}x[t]=0;// ⚠️ 回退!填空常考!}}🚫 算法题常见扣分陷阱
| 陷阱 | 说明 | 正确做法 |
|---|---|---|
| 数组下标 | C语言从0开始 | 循环for(i=0; i<n; i++) |
| 边界条件 | <vs<= | 注意题目是"不超过"还是"小于" |
| 递归终止 | 没有基准条件 | 必须有if(low >= high) return; |
| 变量初始化 | 未初始化就使用 | dp数组初始化为0或-∞ |
| 回退操作 | 递归后忘记还原 | x[t] = 0;这是必填空 |
六、题型五:设计模式—— 15分(二选一)
📌 高频设计模式速查表
| 类别 | 模式 | 核心意图 | 识别关键词 |
|---|---|---|---|
| 创建型 | 单例模式 | 保证只有一个实例 | “唯一”“全局”“只有一个” |
| 创建型 | 工厂方法 | 子类决定创建哪个对象 | “创建”“生产”“不同类型” |
| 创建型 | 抽象工厂 | 创建一族相关对象 | “多套风格”“产品族” |
| 结构型 | 适配器模式 | 接口转换 | “兼容”“适配”“旧接口” |
| 结构型 | 装饰器模式 | 动态添加功能 | “装饰”“增强”“额外功能” |
| 结构型 | 桥接模式 | 抽象与实现分离 | “多维变化”“平台+实现” |
| 结构型 | 代理模式 | 控制访问 | “代理”“远程”“延迟加载” |
| 结构型 | 组合模式 | 树形结构 | “部分-整体”“树形”“文件夹” |
| 行为型 | 观察者模式 | 一对多通知 | “通知”“订阅”“发布” |
| 行为型 | 策略模式 | 算法封装可替换 | “算法切换”“不同策略”“规则” |
| 行为型 | 状态模式 | 状态改变行为 | “状态切换”“不同状态不同行为” |
| 行为型 | 模板方法 | 固定骨架延迟步骤 | “骨架”“钩子”“流程固定” |
| 行为型 | 命令模式 | 请求封装为对象 | “命令”“撤销”“重做”“队列” |
| 行为型 | 迭代器模式 | 顺序访问集合 | “遍历”“迭代”“集合” |
| 行为型 | 职责链模式 | 沿链传递请求 | “审批”“处理链”“逐级” |
🔑 设计模式识别技巧
题干出现以下关键词 → 对应模式: "创建多种对象但不想指定具体类" → 工厂方法/抽象工厂 "不修改已有代码增加新功能" → 装饰器模式 "一个对象状态改变通知其他对象" → 观察者模式 "将请求发送者和接收者解耦" → 命令模式 "系统在不同状态下行为不同" → 状态模式 "需要在运行时切换算法" → 策略模式 "需要控制对对象的访问" → 代理模式 "处理树形结构(部分-整体)" → 组合模式 "将复杂对象的构建与其表示分离" → 建造者模式📝 设计模式答题模板
模式名称:XXX模式 模式类型:创建型/结构型/行为型 核心意图:[一句话描述] 参与者: - XXX(类名):[职责] - YYY(类名):[职责] 工作原理: 1. [步骤1] 2. [步骤2] 3. [步骤3]七、10道选择题精练(下午题相关知识点)
第1题 · 数据流图
在数据流图中,外部实体是指( )。
A. 系统内部的数据库
B. 系统外部的数据来源或去向
C. 系统内部的加工过程
D. 系统内部的数据存储
答案:B。外部实体是系统外部的数据来源或去向,用长方形表示。
第2题 · 数据流图原则
在DFD中,以下哪种情况违反了数据平衡原则?( )
A. 父图的某个加工有3条输入,子图中对应加工也有3条输入
B. 0层图比顶层图多了一条数据流
C. 某加工有2条输入1条输出
D. 数据存储之间通过加工相连
答案:B。父图与子图必须平衡,0层图的输入输出必须与顶层图一致。
第3题 · 数据库设计
在ER图中,一个学生可以选修多门课程,一门课程可以被多个学生选修,这种联系属于( )。
A. 1:1联系
B. 1:N联系
C. M:N联系
D. 递归联系
答案:C。多对多关系需要建立独立的关系表。
第4题 · 范式
关系模式R(A, B, C),函数依赖集F={A→B, B→C},则R最高满足( )。
A. 1NF
B. 2NF
C. 3NF
D. BCNF
答案:A。候选键为A,B→C存在传递依赖(A→B→C),不满足3NF;同时只有A一个属性作为候选键,不存在部分依赖,满足2NF。注意:候选键为A(不是AB),因为A能决定所有属性。B不是候选键(B→C但B不能决定A),所以不存在部分依赖,满足2NF。但存在传递依赖A→B→C,不满足3NF。因此最高为2NF。
第5题 · UML关系
在UML类图中,聚合(Aggregation)和组合(Composition)的区别是( )。
A. 聚合用实心菱形,组合用空心菱形
B. 聚合表示弱拥有关系,部分可独立于整体存在
C. 组合表示弱拥有关系,聚合表示强拥有关系
D. 两者没有区别
答案:B。聚合=空心菱形=弱拥有=部分可独立;组合=实心菱形=强拥有=同生共死。
第6题 · UML用例
在UML用例图中,<<include>>关系表示( )。
A. 基用例在特定条件下执行被包含用例
B. 基用例每次执行时都执行被包含用例
C. 被包含用例扩展基用例
D. 两个用例互斥
答案:B。include=每次必执行,extend=条件满足才执行。
第7题 · 算法策略
以下算法中,属于贪心算法的是( )。
A. 归并排序
B. 0-1背包问题
C. 哈夫曼编码
D. N皇后问题
答案:C。哈夫曼编码是贪心算法(每次选权值最小的两个节点合并)。归并排序=分治,0-1背包=动态规划,N皇后=回溯。
第8题 · 动态规划
使用动态规划求解0-1背包问题时,核心思想是( )。
A. 每次选择当前最优物品
B. 将问题分解为重叠子问题,避免重复计算
C. 深度优先搜索所有可能方案
D. 用递归求解后合并结果
答案:B。动态规划的核心是重叠子问题+最优子结构+记忆化/递推。
第9题 · 设计模式
当需要在不修改已有对象结构的情况下,动态地给对象添加额外的职责时,应使用( )。
A. 适配器模式
B. 装饰器模式
C. 代理模式
D. 桥接模式
答案:B。装饰器模式=动态添加功能,不修改原有代码。
第10题 · 设计模式
在审批流程中,请求沿处理者链传递,直到某个处理者处理为止。这是( )模式。
A. 观察者模式
B. 策略模式
C. 职责链模式
D. 命令模式
答案:C。职责链(Chain of Responsibility)=请求沿链传递,逐级审批。
八、考前16天复习建议
📋 本周重点任务(5/7-5/13)
| 日期 | 复习重点 | 任务 |
|---|---|---|
| 5/7 | 下午题模板 | 熟记五大题型解题模板(今天的内容) |
| 5/8 | 下午题实战 | 做2-3套真题下午题,计时练习 |
| 5/9 | 上午题查漏 | 复习错题本,整理易混淆概念 |
| 5/10 | 全真模拟 | 做1套完整真题(上午+下午),严格计时 |
| 5/11-13 | 弱项强化 | 针对模拟中暴露的弱项专题突破 |
⏰ 考试时间分配建议(下午题150分钟)
| 题型 | 建议用时 | 目标得分 |
|---|---|---|
| 数据流图 | 25分钟 | 12/15 |
| 数据库设计 | 30分钟 | 11/15 |
| UML建模 | 30分钟 | 10/15 |
| 算法题 | 35分钟 | 8/15 |
| 设计模式 | 30分钟 | 10/15 |
| 检查 | 10分钟 | — |
💡 考场终极提醒
- 先做会的:不要纠结难题,先把能拿的分拿到
- 画图要规范:DFD的箭头方向、UML的菱形实心空心别画错
- 写全步骤:计算题即使结果不对,步骤分也能拿
- C语言注意:数组下标从0开始、递归要有终止条件
- 时间管理:下午题150分钟,平均每题30分钟,超时立即跳下一题
📌 昨日回顾与今日速记口诀
考前16天今日口诀
数据流图三铁律:存储不直连、外部不直连、加工有出入 ER转换三规则:1:1放任方、1:N放多方、M:N独立表 UML关系弱到强:依赖关联聚组泛实 算法四策略:分治递归合、动规重叠子、回溯DFS剪、贪心先排再选 设计模式看关键词:唯一→单例、通知→观察、切换→策略、状态→状态📝 今日内容整理自软考软件设计师官方大纲、历年真题解析及权威备考资料
📅 下次推送:2026-05-08 · 预计主题:下午题实战模拟与真题精练