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公理 )
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+ ## 软件测试方法
0 commit comments