软考中级软件设计师--下午题

下午题合集

参考

  • https://www.yuque.com/saodai/ss8tp9
  • B站视频

下午题1 – 数据流图

  • 外部实体:当前系统之外的人、物、外部系统等名词

  • 数据存储:存储数据提供数据的 xx表、xx文件

  • 加工:将输入数据处理后得到输出数据

    • 加工至少有一个输入数据流和一个输出数据流,没有输入的称为白洞,没有输出的称为黑洞,输入数据不足以产生输出的叫灰洞
  • 数据流:由一组固定成分的数据组成,表示数据的流向

    • 数据流起点终点至少有一端为加工
  • 问题一:找出外部实体

    • 技巧:
      • 子图中的加工一般会跟”说明“ 中的”主要功能“每一项来对应
      • 在子图中找实体所连接的数据流另外一端的加工,然后到”说明“中找对应加工的文案,从中找到相关数据流对应的实体名词
  • 问题二:找出数据存储

    • 技巧:
      • 找到根数据存储链接的加工,到"说明"中加工对应的”主要功能“文案中找数据流相关的 xxx文件、xxx表 之类的名词
      • 如果没有说明具体的xxx表,xxx文件, 可能会说将 xxx 进行存储,这时可以用 ”xxx(表)“ 表示 或者用 ”数据流名(表)“ 这种写法,例如:解答结果(表)
  • 问题三:补充数据流、起点、终点

    • 技巧:
      • 有的会说明确实数据流条数,有的不会说明,不说明的至少要找三条数据流
      • 方法一,父图子图平衡:父图中的数据流吗,子图中也要有,可以用来找到父图中有,而子图中缺失的数据流(但是有的时候父图中的一个数据流,可能对应子图中的多个数据流,需要特殊关注一下)
      • 方法二,加工既要有输入数据流,也要有输出数据流
      • 方法三,数据守恒,从”说明“中整理出需要的数据流,看看是否有缺失
  • 问题四:一些扩展题,不一定考什么,看运气

    • 结构化语言:
      • 伪代码,自然语言
IF XXXX
  THEN XXXX
ELSE 
  XXXX
ENDIF
  XXXX

WHILE XXXX
DO
  XXXX
  XXXX
ENDDO    
  • 父图子图是如何保持数据流平衡:
    1. 父图中加工的输入输出数据流必须与子图的输入输出数据流在数量上和名字上相同
    2. 父图中的一个输入输出数据流对应子图中几个输入输出数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一条数据流

下午题二 – 数据库

  • 大体上可以分为:说明、需求分析结果、概念模型设计(E-R图)、逻辑结构设计(关系模式)
  • 矩形 – 实体;椭圆 – 属性;菱形 – 联系
  • 弱实体:双边矩形表示,一个实体的存在必须依赖另一个实体为前提,例如家属依赖于员工,
  • 子实体:矩形左右增加两条竖线表示,继承了父类实体,与父类实体间通过 ————O———— 链接
  • 聚合实体:将联系当做实体,参与另外一个联系,称为聚合,因为联系间不能直接关联,所以需要用矩形将 当做实体的联系相关部门扩上
  • 简单属性与复合属性:简单属性是原子的不可再分的,复合属性可以进一步的再分为更小的部分
  • 属性文字中加了下划线,表示主键
  • 两个以上实体间的联系:先查看实体两两之间的联系,最后合成整体的联系
  • 问题一:补充缺失的联系
    • 没什么技巧,直接到需求分析结果中查找联系
    • 可以在试卷上用铅笔打草稿,再到答题卡上写
    • 联系名有的题会要求可以用 ”联系1“ ”联系2“ 代替,但是有的题没说,不能不写,能在”需求分析结果“中找到则用,找不到只能自己想一个合理的
  • 问题二:补充关系模式
    • 关系模式的格式为:关系名(属性名1,属性名2,…),如果属性名有下划线,则标识主键
    • 候选码:属性或者属性组合,其值能够唯一标识一条记录(或者一个元祖)
    • 主键:一个关系中可能有多个 候选码,选择一个座位主键
    • 外键:另外一个关系的主键,放在当前关系中
    • E-R 图转关系模式
      • 1:1 关系每个实体及其属性,为一个关系模式;因实体间联系,需要将其中一个关系的主键作为另外一个关系的外键,或者单独创建一个关系: 联系名(实体1主键, 实体2主键),其中任意一个属性都可以是主键
      • 1:n 关系每个实体及其属性,为一个关系模式;因实体间联系,需要将 ’1‘ 的关系的主键作为,‘n’ 的关系的外键,或者单独创建一个关系: 联系名(实体1主键, 实体n主键),其中实体n的主键为 这个关系的主键
      • n:m 关系每个实体及其属性,为一个关系模式;此外单独创建一个关系: 联系名(实体n主键, 实体m主键),其中这个关系的主键为实体n主键, 实体m主键构成的属性组(有的时候可能还要加上关系对应的属性,例如:医生和病人的看病关系,需要加上看病时间才能一起作为主键)
      • 实体和子实体关系转换:一般子实体可以不转换,但是如果转换,那么子实体的关系模式中,要将父实体的主键加入到子实体的属性中
    • 技巧:
      • 一个空可能缺失多个属性
      • 完整性约束关系,也是标示 主键和外键,主键用实线,外键用虚线
      • 注意补充实体的关系模式时,其属性有可能包含联系中对方实体的主键
      • 如果主键是几个属性的组合,那么写的时候加个括号
  • 问题三、问题四 – 扩展题
    • 多个家庭成员:
      • 存在非主属性对候选码的部分函数依赖,不满足第二范式,存在数据冗余、修改异常、插入异常、删除异常
      • 应将关系模式分解,分解后关系模式如下

下午题三 – UML 图

  • 需要熟悉 UML 图,可以看上午题笔记
  • 技巧:以下仅仅是自己的理解
    • 用例图的包含关系:A ————《include》————> B, A 包含了 B, 需要满足:A 用例执行 B 用例一定执行,通常用于用例之间存在同样行为时,将共同行为提取出单独用例的情景
    • 用例图的泛化关系:A ——————————————|> B, A 是 B 的特殊情形,需要满足:A 与 B 都做了同样的事,有同样的目的,只是可能途径不同,子用例包含父用例的所有行为
    • 用例图的扩展关系:A ————《extend》————> B, A 扩展了 B,即:在 B 执行的时候可能有A的特殊情况发生,需要满足:没有 A 用例,B 用例一样有可能完成,A用例 只是 B用例执行时的某些特殊情景或者可选情景
    • 类图中找类名
      • 主要是取说明中查找,一般”说明“ 中有英文的都是一个类名
    • 区分实体类、控制类、接口类
      • 实体类:有持久化数据存储的
      • 接口类:给用户看的,负责与用户间的交互的
      • 控制类:有动词修饰的,负责业务逻辑处理的
    • 这种题有的时候很不好理解,只能依靠多刷题,找感觉了

下午题六 – Java 编程 + 设计模式

  • 主要是代码填空,学过Java的比较容易,没有学过 Java 的(比如我)只能临时补充一些基本语法知识
  • 基础 Java 学习 https://www.liaoxuefeng.com/wiki/1252599548343744/1255943629175808
    • 条件判断、循环语句,与JS 差不多
    • final 声明常量 final double PI = 3.14;
    • == 可以用来判断引用是否相等,是否指向同一个对象,想要比较两个对象的内容是否相等要用 s1.equals(s2)
    • 强制类型转换 (Boolean) xxx.get();, 做题时要关注类型的变化
    • 数组
      • String[] arr = new String[10]; // 创建可持有10个String的数组 arr[0] = ’xxx‘; // 通过下标取值或者赋值
      • 数组初始化后大小不可改变,只能按照索引顺序存取
    • 其他集合,一般通过 import java.utils.*; 来引入
    • List:
      • 一种有序列表,行为和数组几乎完全相同,通过索引确定位置,与数组相比,封装了添加删除操作
      • 创建 List list1 = new ArrayList();
      • 快速创建 List list2 = List.of('aaa', 'bbb')
      • 末尾添加 list1.add('aaa');
      • 指定索引添加 list1.add(3, 'ccc');
      • 删除指定索引的元素 list1.remove(3);
      • 删除指定元素 list1.remove('ccc');
      • 获取指定索引的元素 list1.get(2);
      • 获取链表大小 list1.size();
      • 获取某个元素的下标 list1.indexOf('ccc'); -1 表示未找到
      • 判断是否包含某个元素 list1.contains('ccc')
      • 遍历 for (String l : list2) { System.out.println }
    • Map:
      • 一种 键值映射表的数据结构,高效通过 key 快速查找 value
      • 创建 Map stuMap = new HashMap();
      • 添加 stuMap.put('a', new Student());
      • 获取 stuMap.get('a');
      • 判断key是否存在 stuMap.containsKey('a');
      • 遍历:for (String key : stuMap.keySet()) { Student stu = stuMap.get(key); }

下午题四 – C 语言算法题

  • 没学过C语言,对算法也不熟,所以这题基本放弃了
  • 技巧:
    • 一般会出三个问题
    • 问题一:算法代码填空
    • 问题二:文代码采用的算法策略:按出现次数分为:回溯法、动态规划法、分治法、贪心法
    • 问题三:数据代入,输出计算结果

你可能感兴趣的:(软考准备,软考,软件设计师,下午题)