软件设计师科目二《应用技术》是主观题考试,采用机考、闭卷、文本输入作答。试卷共6道大题,采用“4道必答 + 2道选答(二选一)”模式,考生实际作答5道,每道大题15分,满分75分,全国统一合格线为45分。
考试与科目一《基础知识》连考,总时长240分钟。《基础知识》最短作答90分钟、最长作答120分钟,剩余时间会自动转入《应用技术》科目,因此下午卷的时间分配非常关键。
《应用技术》主要考查考生把软件工程、数据库、UML、算法和面向对象程序设计落到实际场景中的能力。它不像上午选择题那样偏记忆辨析,而更强调:读场景、补图表、写SQL、补代码、说明设计理由。
二、题型结构与分值分布
| 题号 | 题型 | 核心考查点 |
|---|---|---|
| 第1题 | 数据流图DFD | 补充外部实体、数据存储、数据流,验证数据守恒与父图子图平衡 |
| 第2题 | 数据库设计 | E-R图、关系模式转换、主键/外键、范式判断、SQL编写 |
| 第3题 | UML建模 | 用例图、类图、序列图/状态图补全,辨析类间关系和用例关系 |
| 第4题 | C语言算法 | 分治、动态规划、贪心、回溯等算法代码填空与复杂度分析 |
| 第5/6题 | 选答题 | Java或C++程序设计,侧重面向对象语法与设计模式代码补全 |
前4题为必答题,第5题和第6题为Java/C++二选一。若两题都作答,一般只按第一道计分,因此建议只选择自己更熟悉的一门语言作答。
三、数据流图:抓住“数据从哪来、到哪去”
数据流图通常作为第1题出现,属于下午卷中比较稳定的得分题。它主要围绕结构化分析展开,要求考生根据业务描述补全缺失的外部实体、数据存储、加工和数据流,并判断图是否满足数据守恒。
作答时要先读题干,把业务中的“人、系统、部门”识别为外部实体;把“表、文件、数据库、订单记录”识别为数据存储;把“处理、计算、校验、生成、统计”识别为加工。数据流必须连接加工与外部实体、加工与数据存储,或加工与加工之间,不能出现没有输入或没有输出的“黑洞”“灰洞”。
DFD中只画数据流,不画控制流。例如“用户登录后系统跳转页面”属于控制逻辑,不应直接写成控制流,而应转化为“登录请求”“登录结果”等数据流。父图与子图必须平衡,子图中某个加工的所有输入输出数据流,应与父图中对应加工的输入输出一致。
命名时尽量使用题干原词,不要随意添加“表”“模块”“系统”等后缀。例如题干写“订单信息”,就不要擅自改成“订单数据表”。
四、数据库设计:从E-R图到关系模式
数据库设计题通常要求根据业务场景补全E-R图,确定实体、属性和联系,再将E-R图转换为关系模式,并判断主键、外键和范式等级。
E-R图转换有几个固定规则:
- 1:1联系:可以合并到任意一端,或在其中一端增加外键;
- 1:N联系:通常在N端增加外键;
- M:N联系:必须生成独立的关系模式,即中间表。
例如“学生”和“课程”之间是多对多关系,不能只在学生表中加课程号,也不能只在课程表中加学号,而应建立“选课(学号,课程号,成绩)”这样的中间关系模式。
范式判断是高频考点:
- 1NF:属性必须原子,不可再分;
- 2NF:消除非主属性对主键的部分依赖;
- 3NF:消除非主属性对主键的传递依赖。
如果题目中出现“课程名称依赖于课程号,而课程号又属于某个主键的一部分”,往往提示存在传递依赖或部分依赖,需要拆表。SQL部分常考查询、插入、更新、删除,尤其是多表连接查询和子查询。作答时要写清表名、字段名、连接条件和聚合条件,避免漏写WHERE、GROUP BY、HAVING等子句。
五、UML建模:关系辨析是得分关键
UML建模题通常给出一段需求描述和一张不完整的图,要求补全类名、属性、方法、消息、关系或多重度。常见图包括用例图、类图、序列图、状态图和活动图。
类图关系需要重点区分:
- 泛化/继承:表示“is-a”,如“学生是人”;
- 关联:表示对象之间存在稳定联系;
- 聚合:弱整体-部分关系,部分可以独立存在;
- 组合:强整体-部分关系,部分随整体生命周期结束;
- 依赖:一个类临时使用另一个类;
- 实现:类实现接口。
用例图中要注意“包含”“扩展”“泛化”关系。包含关系表示某个用例必须执行另一个用例;扩展关系表示在特定条件下才会执行;泛化关系表示用例之间存在一般与特殊关系。
序列图重点看对象之间的消息顺序,尤其是同步消息、返回消息和对象生命周期。状态图则关注对象在不同事件触发下的状态迁移。作答时要先判断题目要求补的是哪一类图,再根据题干名词提取类或属性,根据动词提取方法或消息。
六、C语言算法:先判断策略,再补代码
第4题通常为C语言算法实现,常见策略包括分治、动态规划、贪心和回溯。它不要求从零写完整程序,而是给出不完整代码,要求填空并分析时间复杂度。
建议按以下顺序作答:
先判断算法策略
题干出现“分而治之”“分成两部分”多为分治;出现“局部最优”“每次选择当前最好”多为贪心;出现“最优子结构”“多阶段决策”“状态转移”多为动态规划;出现“搜索”“回溯”“尝试后撤销”多为回溯。再做特殊值计算
用较小输入手动推演,例如 n=0、n=1、n=2,验证算法逻辑是否正确。再分析时间复杂度
主要看循环嵌套层数、递归深度和每次问题规模缩小的方式。若出现二分操作,复杂度常与O(n log n)或O(log n)相关。最后补代码空
代码填空要结合注释、变量名、循环边界和递归终止条件。例如递归题常考终止条件;动态规划题常考状态转移方程;贪心题常考排序或选择条件;回溯题常考递归调用和状态恢复。
代码补全时要注意边界条件,如数组下标是否越界、循环是否少一次、递归是否缺少返回、变量是否初始化。即使不能完全确定答案,也要根据上下文写出最合理的表达式,避免留空。
七、选答题:Java/C++都围绕设计模式
第5题和第6题通常分别考查C++和Java程序设计,核心都是面向对象语法与设计模式代码补全。
常见设计模式包括:
- 单例模式:私有构造方法、静态实例、全局访问点;
- 工厂方法模式:定义创建对象接口,由子类决定实例化哪个类;
- 观察者模式:一对多依赖,主题变化时通知观察者;
- 策略模式:封装一组算法,运行时切换;
- 适配器模式:将不兼容接口转换成目标接口;
- 装饰器模式:动态增强对象功能;
- 模板方法模式:定义算法骨架,子类实现具体步骤。
Java作答时要熟悉类、接口、抽象类、继承、重写、多态、访问控制修饰符、构造方法、静态成员等语法。C++作答时要关注虚函数、纯虚函数、抽象类、指针与引用、构造函数与析构函数、头文件包含等细节。
选择语言时不要两题都答。若Java更熟,就选Java;若C++更熟,就选C++。设计模式题通常会给出一段不完整类结构,要求补全类名、方法签名、继承关系或关键语句。作答时要先判断模式类型,再根据模式结构补全代码。
八、机考作答规范
机考环境下,文字表达要清晰,图表补全要规范。建议采用分点作答,例如:
- “补充数据流D1:从外部实体‘用户’到加工‘登录验证’。”
- “关系模式:订单(订单号,用户ID,金额),主键为订单号。”
- “类A与类B为组合关系,因为B的生命周期依赖于A。”
- “该算法采用动态规划,时间复杂度为O(n²)。”
DFD和UML作图题要使用规范符号,不要自创画法。SQL语句要写完整关键字,代码填空要注意括号、分号、变量类型和返回值类型。
九、时间分配建议
下午卷150分钟左右,建议每道大题控制在25到30分钟。推荐顺序如下:
- 先快速浏览6道题,确认选答Java还是C++;
- 优先做数据流图、数据库设计、UML建模这三类题型,因为它们套路较稳定;
- 再做算法题,先拿策略判断、复杂度分析和特殊值计算的分;
- 最后完成选答的程序设计题;
- 预留10到15分钟检查是否有漏答、符号错误或命名不一致。
十、备考策略
备考时应以近5年真题为主,尤其是下午卷真题。数据流图、数据库设计和UML建模属于“保底题型”,必须练到熟练。算法题不要只背模板,而要训练读代码、补逻辑和分析复杂度的能力。设计模式题要熟悉常见模式的类图结构和代码形态。
整体备考可以按三阶段推进:
- 基础阶段:通读教程或高频考点,建立软件工程、数据库、UML、算法和面向对象知识框架;
- 强化阶段:按题型专项训练,总结DFD补全、E-R图转换、类图关系、算法填空和设计模式补全的答题模板;
- 冲刺阶段:限时做整套真题,建立错题本,复盘审题失误、概念混淆和代码边界错误。
下午卷通过的关键不是把所有难题都做对,而是把稳定题型拿满、算法题拿到关键步骤分、选答题不丢基础语法分。只要前4题能稳定拿到10分左右,选答题再拿到8到10分,通过45分合格线就有较大概率。