下午应用技术科目共 5 道大题,每题 15 分,合计 75 分。前 4 题必答(数据流图、数据库设计、UML 建模、C 语言算法),第 5/6 题二选一(Java 或 C++ 设计模式)。整体难度分层很明显:数据流图、数据库、UML 是“套路题”,背熟规则就能拿 12 分以上;算法是“稳分题”,目标 7—10 分;设计模式是“送分题”,模板背熟可以冲满分。下面按题型逐一展开,每条都落在可背诵、可套用的规则上。
一、数据流图(DFD)—— 15 分必拿题
数据流图考的是“把业务文字翻译成图,再把图里的错误找出来”。四个元素必须条件反射地识别:
- 外部实体:系统边界之外的“人/组织/外部系统”。题干中的“用户、客户、管理员、银行、供应商”都是实体词。注意:如果系统本身是中间件,后台数据库反而应识别为外部实体。
- 数据存储:名字带“文件、表、库、清单、档案”的,基本就是存储。找到存储后,看哪个加工需要读写它,补连线。
- 加工:命名必须是“动词 + 名词”(如“生成报告”“验证借书证”),不能只有一个动词。
- 数据流:命名必须是名词短语(如“工资数据”“付款通知”),不能写成“计算工资” ——用加工名命名数据流是最高频的扣分点之一。
答题顺序:先读题干圈出所有实体词和存储词 → 对比顶层图与 0 层图的输入输出是否一致 → 逐句读题干,看哪个加工“提到要读某存储但图上没有入线/出线” → 补全缺失的数据流。
三大铁律(违反必扣分) :数据存储之间不能直连;外部实体之间不能直连;每个加工必须有入有出,不能是“数据黑洞”或“数据奇迹”。
采分要点:补充数据流时用题干原词,不要自己发明口语化名称;答案写成“在加工 Y 与存储 Z 之间添加数据流‘XX 信息’”,方向要明确。
二、数据库设计 —— 15 分必拿题
先找实体,不要先想表。实体通常是业务中需要长期管理的对象(客户、订单、商品、学生、课程)。
E-R 转关系模式三规则(直接背) :
- 1 : 1:任一方主键放入另一方作外键(或两表合并)。
- 1 : N:1 端的主键放入 N 端作外键。例如客户和订单,订单表里保存客户编号。
- M : N:必须单独建一张联系表,字段 = 双方主键 + 联系自身的属性(如选课成绩、选课时间)。不能把课程编号直接塞进学生表。
主键与外键判定:题干出现“唯一标识”“编号”“身份证号”的,基本是主键候选。A 表里出现了 B 表的主键,它就是外键。M:N 联系表中,双方主键的组合是主键,同时各自也是外键。
范式判断(只看依赖关系) :
- 1NF:属性不可再分。
- 2NF:消除部分依赖(非主属性不能只依赖联合主键的一部分)。
- 3NF:消除传递依赖(非主属性不能经由另一个非主属性间接依赖主键)。题给 A→B、B→C 且 B 不是候选键,就是传递依赖。
SQL 题:多表查询必须写 JOIN 和连接条件,漏掉连接条件会变成笛卡尔积。WHERE 过滤行,HAVING 过滤分组后的组。
三、UML 建模 —— 15 分必拿题
高频图种:用例图、类图、顺序图(时序图)。
类图六种关系(由弱到强,必须背熟) :依赖 → 关联 → 聚合 → 组合 → 泛化 → 实现。
- 依赖:一个类的变化“波及”另一个(方法参数/局部变量中使用)。
- 关联:成员变量,“拥有”关系。
- 聚合:空心菱形,“has-a”,整体消失部分还在(如部门与员工)。
- 组合:实心菱形,“contains-a”,同生共死(如订单与订单项)。
- 泛化:继承,空心三角实线。
- 实现:类实现接口,虚线三角。
多重度:1 恰好一个;0..* 或 * 零个或多个;1..* 至少一个。注意“0”的含义(新系统刚上线可以没有订单)。
用例关系:include 是“一定会做”(如借书一定验证借书证),extend 是“有条件才做”(如超期才触发罚款)。常见错误是把系统内部模块标成参与者,或把实现步骤拆成过细的用例。
类图扣分点:业务分析层面的类图不应该出现 getter/setter 等纯技术方法,应列出与业务规则相关的核心操作。
四、C 语言算法设计 —— 15 分稳分题
这道题不需要从零写算法,而是在已搭好框架的代码里补全关键几行。题型结构固定:代码填空(6—9 分)+ 策略识别(约 3 分)+ 复杂度分析(约 3 分)+ 实例推演(约 3 分)。
四种策略的“长相”必须条件反射:
- 分治:递归框架 + 合并步骤(归并排序、二分查找、最大子数组)。填空常考递归终止条件和合并操作。
- 动态规划:有递推式/状态转移方程,通常填表自底向上。常考状态转移方程和填表顺序(0-1 背包、最长公共子序列)。
- 贪心:每步选当前最优、不回溯(活动选择、哈夫曼、Dijkstra)。常考贪心选择条件。
- 回溯:递归尝试 + 剪枝 + 恢复现场。填空三件套:递归出口、递归调用(参数推进)、回溯还原(把标记恢复为初始值) 。没有还原语句,回溯法就不成立。
“背了就有分”的部分:策略识别题从“分治/动态规划/贪心/回溯”中选;快排/归并的时间复杂度是 (O(n\log n)),暴力递归是 (O(2^n)),这些直接写。
考场策略:目标 7—10 分,不要在一道题上超过 25 分钟。就算代码没完全读懂,根据题干描述和代码结构,策略题蒙一个也有概率对。
五、设计模式选答(Java / C++)—— 15 分送分题
第 5/6 题二选一,选自己最擅长的语言。题型是“业务场景 + UML 类图 + 挖 5—6 个空的代码”,填空内容基本是类名、方法名、继承/实现关键字、返回类型、new 具体类这些有规律的东西。
高频模式(背 6 个足够) :单例、简单工厂/工厂方法、策略、装饰器、观察者、适配器。
固定做题顺序:① 先认模式(看类名和场景关键词)→ ② 给类分角色(谁是接口、谁是具体实现、谁是客户端)→ ③ 扫完整段代码再填 → ④ 判断每个空属于哪一类:关键字 / 类型 / 方法签名 / 返回值 / new 对象 / 方法调用 → ⑤ 利用后文反推前文。
各模式填空重点:
- 单例:私有静态实例、私有构造器、
getInstance()。 - 工厂方法:抽象工厂方法返回接口类型,具体工厂里
return new 具体产品()。 - 策略/装饰器/观察者:重点在接口方法的实现和上下文/主题中持有抽象类型的成员变量。
避免 Java 细节丢分:方法签名要完整(返回类型 + 方法名 + 参数);字段声明不能漏类型;非 static 方法调用写成 obj.method();父类字段的 private/protected 看后文谁在访问来决定;题目已有的名字直接照抄,注意大小写。
目标:这题模板背熟,拿 10—12 分是正常水平,冲满分完全可能。
六、下午题整体考场策略
时间分配建议:数据流图、数据库、UML 三题控制在 25—30 分钟内完成,确保 12 分以上;算法题留 20—25 分钟,目标 7—10 分;设计模式题 15—20 分钟,目标 10 分以上。先做有把握的题型,把“必拿分”锁死,再攻算法。
最容易丢分的细节汇总:数据流用动词命名;M:N 忘记单独建表;聚合/组合菱形实心空心搞反;回溯填空漏掉“还原”;设计模式填空方法签名不完整或返回类型写错。
把以上规则练到条件反射,下午卷的底线分(45 分)会非常稳,往上冲 55—60 分也有清晰路径。