Skip to content

Commit 371fe0a

Browse files
committed
新增输入输出章节,优化设计模式和软件测试方法内容;添加相关图片以增强可读性
1 parent bd1fd86 commit 371fe0a

File tree

2 files changed

+130
-0
lines changed

2 files changed

+130
-0
lines changed

source/_posts/软考/软件设计师/软件设计师.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ tags:
1818
- [CPU的组成](#cpu的组成)
1919
- [存储系统](#存储系统)
2020
- [校验码](#校验码)
21+
- [输入输出](#输入输出)
2122
- [程序设计语言基础知识](#程序设计语言基础知识)
2223
- [后缀式](#后缀式)
2324
- [数据结构与数据运算](#数据结构与数据运算)
@@ -28,10 +29,15 @@ tags:
2829
- [软件的四个维护方面](#软件的四个维护方面)
2930
- [结构化开发方法](#结构化开发方法)
3031
- [结构化分析方法](#结构化分析方法)
32+
- [结构化设计方法](#结构化设计方法)
3133
- [面向对象技术](#面向对象技术)
3234
- [面向对象测试](#面向对象测试)
3335
- [UML的关系](#uml的关系)
3436
- [设计原则](#设计原则)
37+
- [设计模式](#设计模式)
38+
- [创建型设计模式](#创建型设计模式)
39+
- [结构型设计模式](#结构型设计模式)
40+
- [行为设计模式](#行为设计模式)
3541
- [数据库技术基础](#数据库技术基础)
3642
- [关系数据库的规范化](#关系数据库的规范化)
3743
- [Armstrong公理](#armstrong公理)
@@ -47,6 +53,7 @@ tags:
4753
- [常见算法](#常见算法)
4854
- [可靠度](#可靠度)
4955
- [数据库安全相关术语](#数据库安全相关术语)
56+
- [软件测试方法](#软件测试方法)
5057

5158
# 计算机系统知识
5259

@@ -109,6 +116,12 @@ CPU主要由运算器、控制器、寄存器组和内部总线等部件组成
109116
- **循环冗余校验码**
110117
循环冗余校验码(Cyclic Redundancy Check,CRC)由两部分组成,左边为信息码(数据),右边为校验码。
111118

119+
## 输入输出
120+
121+
- 程序控制(查询)方式:分为无条件传送和程序查询方式。方法简单,硬件开销小,但IO能力不 高,严重影响CPU的利用率。
122+
- 程序中断方式:与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度。
123+
- DMA方式:DMA方式是为了在主存与外设之间实现高速、批量数据交换而设置的。DMA方式比程序控制方式与中断方式都高效。
124+
112125
# 程序设计语言基础知识
113126

114127
## 后缀式
@@ -184,6 +197,21 @@ CPU主要由运算器、控制器、寄存器组和内部总线等部件组成
184197
结构化分析(SA)概述
185198
抽象(自底向上)、分解(自顶向下)
186199

200+
数据流图(DFD)的基本要素:外部实体、加工、数据存储、数据流
201+
202+
数据流图的常见错误
203+
204+
![alt text](软件设计师/image-3.png)
205+
206+
数据流图的审查
207+
1. 一致性:父图与子图平衡、数据守恒、具备数据存储、输出不能与输入同名。
208+
2. 完整性:奇迹(无入有出)、黑洞(有入无出)、灰洞(无法出)。
209+
210+
## 结构化设计方法
211+
212+
1. **模块结构图**是结构化设计的工具,由**模块****调用****数据****控制****转接**五种基本符号组成。
213+
2. 结构化设计主要包括:**体系结构设计****数据设计****接口设计****过程设计**
214+
187215
# 面向对象技术
188216

189217
## 面向对象测试
@@ -212,6 +240,106 @@ UML中有四种关系:**依赖**、**关联**、**泛化**和**实现**
212240
- **依赖倒置原则**:此原则强调的是程序应该依赖于抽象接口,而不是具体的实现,从而降低客户与实现模块间的耦合。
213241
- **无环依赖**:这个原则明确指出,在组件的依赖关系在图中不允许存在环。
214242

243+
## 设计模式
244+
245+
### 创建型设计模式
246+
247+
- **抽象工厂(Abstract Factory)**
248+
提供一个接口,用于创建相关或依赖对象的家族,而无需明确指定具体类。
249+
**应用场景**:需要创建一组相关或相互依赖的对象时,例如跨平台 UI 工具包。
250+
251+
- **生成器(Builder)**
252+
将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
253+
**应用场景**:需要创建复杂对象,并且需要灵活地控制其构建过程时,例如构建器模式用于生成复杂的文档或报表。
254+
255+
- **工厂方法(Factory Method)**
256+
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
257+
**应用场景**:当一个类无法预知它需要创建的对象时,例如日志记录器可以根据配置选择不同的日志记录方式。
258+
259+
- **原型(Prototype)**
260+
通过复制现有对象来创建新对象,而不是通过实例化类。
261+
**应用场景**:需要大量相似对象时,例如克隆复杂对象以提高性能。
262+
263+
- **单例(Singleton)**
264+
确保一个类只有一个实例,并提供一个全局访问点。
265+
**应用场景**:需要全局唯一的对象时,例如配置管理器、线程池或数据库连接池。
266+
267+
### 结构型设计模式
268+
269+
- **适配器(Adapter)**
270+
将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。
271+
**应用场景**:系统需要使用现有的类,但其接口不符合需求时,例如将旧系统的接口适配到新系统。
272+
273+
- **桥接(Bridge)**
274+
将抽象部分与实现部分分离,使它们可以独立变化。
275+
**应用场景**:需要在抽象和实现之间增加更多的灵活性时,例如跨平台图形界面工具。
276+
277+
- **组合(Composite)**
278+
将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端可以统一地处理单个对象和组合对象。
279+
**应用场景**:需要表示对象的部分-整体层次结构时,例如文件系统中的文件和文件夹。
280+
281+
- **装饰(Decorator)**
282+
动态地给对象添加一些额外的职责,而不影响其他对象的功能。
283+
**应用场景**:需要动态地扩展对象的功能时,例如为图形界面组件添加滚动条或边框。
284+
285+
- **外观(Facade)**
286+
为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。
287+
**应用场景**:需要为复杂的子系统提供一个简单的接口时,例如为多模块系统提供统一的入口。
288+
289+
- **享元(Flyweight)**
290+
运用共享技术有效地支持大量细粒度对象的复用,减少内存消耗。
291+
**应用场景**:需要大量相似对象时,例如字符处理系统中的字符对象。
292+
293+
- **代理(Proxy)**
294+
为其他对象提供一种代理以控制对这个对象的访问。
295+
**应用场景**:需要控制对对象的访问时,例如远程代理、虚拟代理或保护代理。
296+
297+
### 行为设计模式
298+
299+
- **责任链(Chain of Responsibility)**
300+
允许多个对象有机会处理请求,将这些对象连成一条链,沿着链传递请求,直到某个对象处理它为止。
301+
**应用场景**:日志处理、权限校验等。
302+
303+
- **命令(Command)**
304+
将请求封装为对象,使得可以用不同的请求、队列或日志来参数化对象。支持撤销和重做操作。
305+
**应用场景**:事务操作、按钮点击事件处理。
306+
307+
- **解释器(Interpreter)**
308+
定义一种语言的文法表示,并提供一个解释器来解释语言中的句子。
309+
**应用场景**:编译器、正则表达式解析器。
310+
311+
- **迭代器(Iterator)**
312+
提供一种方法顺序访问集合对象中的元素,而不暴露其内部表示。
313+
**应用场景**:遍历集合(如数组、链表)。
314+
315+
- **中介者(Mediator)**
316+
用一个中介对象封装一组对象之间的交互,使对象之间不需要直接引用,降低耦合性。
317+
**应用场景**:聊天室、MVC 中的控制器。
318+
319+
- **备忘录(Memento)**
320+
在不破坏封装的前提下,捕获对象的内部状态,并在以后恢复它。
321+
**应用场景**:撤销功能、游戏存档。
322+
323+
- **观察者(Observer)**
324+
定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。
325+
**应用场景**:事件监听、发布-订阅模式。
326+
327+
- **状态(State)**
328+
允许对象在内部状态改变时改变其行为,看起来像是改变了其类。
329+
**应用场景**:状态机、订单状态管理。
330+
331+
- **策略(Strategy)**
332+
定义一系列算法,将每个算法封装起来,并使它们可以互换。
333+
**应用场景**:支付方式选择、排序算法。
334+
335+
- **模板方法(Template Method)**
336+
定义一个操作的骨架,将一些步骤延迟到子类中。子类可以不改变骨架的情况下重新定义某些步骤。
337+
**应用场景**:算法框架、代码生成器。
338+
339+
- **访问者(Visitor)**
340+
提供一种操作一组对象的方法,使得可以在不改变这些对象的类的前提下定义新的操作。
341+
**应用场景**:编译器语法树操作、对象结构遍历。
342+
215343
# 数据库技术基础
216344

217345
## 关系数据库的规范化
@@ -354,3 +482,5 @@ $n_0=38$
354482
- **撞库**: 使用大量从一个网站获取的账号密码,尝试登录另一个网站。基于用户密码复用率较高的问题,利用泄露的密码尝试其他网站。
355483
- **洗库**: 黑客入侵网站后获取大量用户数据,通过技术手段和黑色产业链将有价值的数据变现。
356484
- **社工库**: 黑客将获取的各种数据库关联起来,对用户进行全方位画像。
485+
486+
## 软件测试方法
63.9 KB
Loading

0 commit comments

Comments
 (0)