软件设计师 知识点拾遗 2021年上半年
软件设计师 知识点拾遗 2021年上半年
瓶颈期,依旧是20个
上午题

DMA方式传送数据时,数据直接在I/O设备与内存之间传输,无需CPU干预。每传送一个数据,DMA控制器需要占用一个存储周期来完成对内存的读写操作。其他选项与CPU执行指令或总线控制相关,而DMA的核心是绕过CPU直接访问内存,因此存储周期是最准确的描述。

SQL注入攻击的核心是通过构造恶意的SQL输入,绕过应用程序的安全检查,直接操纵数据库,其首要目标是获取数据库的操作权限(如执行查询、删除数据等)。

IPSec(Internet Protocol Security)是专门为IP数据报文提供加密、认证等安全服务的协议组,工作在网络层,可直接保护IP数据包的完整性和机密性。而HTTPS是加密HTTP流量的协议、TLS是加密TCP/UDP的协议。

阶段 | 目标 | 关键活动/输出物 | 相关工具/技术示例 |
---|---|---|---|
1. 需求分析 | 明确用户需求和系统功能 | - 用户需求收集(访谈/问卷) - 定义功能/非功能需求 - 输出《需求规格说明书》 |
JIRA, Confluence, 用户故事地图 |
2. 系统设计 | 规划系统架构和实现方案 | 概要设计: - 模块划分 - 技术栈选型 详细设计: - 数据结构/算法 - 数据库设计(ER图) |
UML工具(Lucidchart), Visio, ERMaster |
3. 编码实现 | 将设计转化为可执行代码 | - 编写代码 - 版本控制 - 单元测试 |
Git, VS Code, IntelliJ, JUnit/pytest |
4. 测试 | 验证系统功能和质量 | - 功能测试(黑盒) - 性能测试 - 安全测试 - 用户验收测试(UAT) |
Selenium, JMeter, OWASP ZAP, Postman |
5. 部署上线 | 发布系统到生产环境 | - 环境配置 - 自动化部署 - 数据迁移 |
Docker, Kubernetes, Jenkins, Ansible |
6. 运维与维护 | 保障系统稳定运行并持续优化 | - 性能监控 - Bug修复 - 功能迭代 |
Prometheus, ELK, Grafana, Sentry |
其中,模块之间的接口设计属于概要设计的主要内容。

先前的笔记中关于这一项的内容应该写错了,但是我没找到具体是在哪篇笔记里,在此特别订正一下。正确的面向对象分析的五大活动顺序应该为:
- 认定对象
- 组织对象
- 描述对象间的相互作用
- 确定对象的操作
- 定义对象的内部信息

- 单一责任原则:就一个类而言,应该仅有一个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
- 开放-封闭原则:软件实体应该是可以扩展的,即开放的;但是是不可修改的,即封闭的。
- 里氏替换原则:子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。
- 依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。
- 接口分离原则:不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次。即,依赖于抽象,不依赖于具体,同时在抽象级别不应该有对细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。

- 41题:UML状态图用于对反应型对象的动态行为建模。
- 43题:这里混淆了状态和状态转换的概念,前者是指一个对象的稳定条件,是对象在某一时刻的静态属性。而状态转换才是由事件触发的,并导致对象从当前状态切换到新状态。

- 44题:
- 命令模式:命令模式将请求封装为独立的对象(命令),允许用户参数化客户端(调用者)与接收者(执行者),从而支持请求的排队、撤销、日志记录等操作。
- 中介者模式:中介者模式的核心思想是“使用一个中介者来封装一系列对象之间的交互,使各个对象不需要显式地相互引用”,即通过引入中介对象来集中管理多个对象之间的交互,从而减少对象间的直接耦合,使系统更易于维护和扩展。
- 45题:在UML类图当中,一个圆圈即为接口的意思,在上图中只在Operation中出现了。