软件设计笔记

害,之前准备自己考前温习的软件中级设计师笔记,准备了个月差两分没考过,找到工作懒得考了,分享一下自己的一些高频题笔记

上午题

耦合:

白盒测试覆盖方法的错误发现能力排序:

语句覆盖< 判定覆盖< 条件判断覆盖<条件覆盖<条件组合覆盖<路径覆盖 

六大设计原则 :

1. 开闭原则
核心思想:一个对象对外扩展开发,对修改关闭

意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码。
也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去,这就需要借助抽象和多态,即 把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现则是可以改变和扩展的。
 

2. 里氏代换原则
核心思想:在任何 父类 出现的地方都可以用它的 子类 来替代

通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。
 

3. 依赖倒转原则
核心思想:高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节(抽象类或者接口不用实现具体的操作方法),细节应该依赖抽象(实现类应该要依据抽象方法具体实现操作)

面向接口编程,使用接口或抽象类制定好规范,把涉及具体的操作任务交给他们的实现类去完成
简单来说,即要求对抽象进行编程,不要对实现进行编程,降低模块间的耦合
 

4. 接口隔离原则
核心思想:客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上

简单来讲,若一个类继承另一个类或实现一个接口,则父类的方法必定全部被继承或该接口所有方法需要全部实现,那么就会出现对于子类来说多余的不使用的方法;
对于接口的功能设计应该是可以进行隔离的,即按照需要实现相应接口的功能
 

5. 最少知道原则
核心思想:一个对象应该对其他对象保持最少的了解,降低耦合

又叫迪米特法则。
即一个类对自己依赖的类知道的越少越好(耦合性越低)。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息
迪米特法则还有个更简单的定义:只与直接的朋友通信
直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现在成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。
 

6、合成复用原则(Composite Reuse Principle)

  合成复用原则又称为组合/聚合复用原则(Composition/Aggregate  Reuse       Principle,         CARP),其定 义如下:合成复用原则(Composite     Reuse       Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些 已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能 的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。
 

中断和dma:

内聚:

MTTF,MTTR: 可靠

多态:

参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型

 包含多态:在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另外一个类型的子类型。

过载多态:同一个名字在不同的上下文中所代表的含义不同。典型的例子是运算符重载和函数重载,属于静态多态。

强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。

排序算法:

sarm(静态)和darm(动态) 

  1. 工作原理:
  2. SRAM:SRAM是一种基于触发器的存储器,使用稳定的存储电路来存储和保持数据。每个存储单元由一个存储器单元和控制电路组成,其中存储器单元由多个触发器构成,能够存储比特数据。由于采用了触发器结构,SRAM在不断刷新的过程中保持数据的稳定性。
  3. DRAM:DRAM是一种基于电容的存储器,使用电容来存储和表示数据。每个存储单元由一个电容和一个访问晶体管组成。电容在存储器中充电或放电来表示数据的0和1。由于电容会逐渐漏电,DRAM需要定期刷新以保持数据的正确性。
  4. 存储密度:(SRAM低,DRAM高)
  5. SRAM:由于SRAM采用了稳定的存储电路,每个存储单元需要更多的晶体管来实现,因此SRAM的存储密度相对较低。每个存储单元通常需要6个晶体管。
  6. DRAM:由于DRAM采用了电容存储结构,每个存储单元只需要一个电容和一个访问晶体管,因此DRAM的存储密度较高。每个存储单元通常只需要1个晶体管和1个电容。
  7. 刷新需求:(SRAM不用刷新   DRAM需要刷新)
  8. SRAM:由于SRAM的存储单元采用稳定的触发器结构,不需要进行定期刷新操作。数据可以一直保持稳定,无需周期性刷新。
  9. DRAM:由于DRAM的电容逐渐漏电,数据需要定期刷新以保持其正确性。DRAM需要通过刷新操作周期性地重新写入数据,否则数据会丢失。
  10. 访问速度:(SRAM快  DRAM慢)
  11. SRAM:SRAM的访问速度非常快,因为数据存储在触发器中,可以立即读取和写入。SRAM具有较低的访问延迟和高速的读写性能。
  12. DRAM:DRAM的访问速度相对较慢,因为数据存储在电容中,需要经过访问晶体管的操作。DRAM具有较高的访问延迟和相对较慢的读写性能。

什么是类和对象

类:(抽象)
是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。
类是一种用户定义的引用数据类型,也称类类型。(比如C语言中结构体就是一种用户自定义的数据类型)

对象:(具象)
对象是某一个类的实例

RISC

RISC和CISC 

元组,字典,列表,集合

密钥:

 

病毒:

后缀表达式 

后缀表达式看完这一篇文章就理解了!_Pear NoBug的博客-CSDN博客

网关协议: 

结构化分析:

控制器:

 数据流图,数据字典,加工逻辑,补充材料。

er图之间的冲突:

 设计模式:

创建型模式(Creational Pattern):对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。

(5种)工厂模式、抽象工厂模式、单例模式、建造者(生成器)模式、原型模式

记忆口诀:创工原单建抽(创公园,但见愁)

结构型模式(Structural Pattern):关注于对象的组成以及对象之间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。

(7种)适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式

记忆口诀:结适外组享代装桥(姐是外租,想代装桥)

行为型模式(Behavioral Pattern):关注于对象的行为问题,是对在不同的对象之间划分责任和算法的抽象化;不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用

(11种)策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

记忆口诀:行状责中模访解备观策命迭(形状折中模仿,戒备观测鸣笛)

分类:    

(19下,18上)桥接 (Bridge)就是将抽象部分与其实现部分分离。

适用于:不希望在抽象和它的实现部分之间有一个固定的绑定关系。

                类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。  

                对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。
                想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

装饰(Decorator)就是动态地给一个对象添加一些额外的职责。

适用于:    在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
                处理那些可以撤销的职责。
                当不能采用生成子类的方式进行扩充时。

外观(Facade)为子系统中的一组接口提供一个一致的界面。

适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。

                 客户程序与抽象类的实现部分之间存在着很大的依赖性。

(22下)责任链 (Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

 适用于以下条件:
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
想在不明确指定接收者的情况下向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。

(18下)访问者 (Visitor)表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。

一个对象结构包含很多类对象,它们有不同的接口,而用户想对这些对象实施一些依赖于其具体类的操作。
需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而又想要避免这些操作“污染”这些对象的类。
定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。

(17下)状态 (State)允许一个对象在其内部状态改变时改变它的行为。

适用于:
一个对象的行为决定于它的状态,并且它必须在运行时刻根据状态改变它的行为。

一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。

(21下)中介者(Mediator )用一个中介对象来封装一系列的对象交互。

组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
想定制一个分布在多个类中的行为,而又不想生成太多的子类。

(21上)命令(Command)将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化:

Command 模式适用于:
抽象出待执行的动作以参数化某对象。

在不同的时刻指定、排列和执行请求。

支持取消操作。

下午题的作答

常考算法

分治:分而治之,先解决子问题,再将子问题的解合并求出原问题。

常会左右开弓,注意分处理代码

贪心:一条路走到黑,选择当下局部最优的路线,没有后悔药。

回溯:一条路走到黑,手握后悔药,可以无数次重来。

多循环

动态规划:上帝视角,手握无数平行宇宙的历史存档,同时发展出无数个未来。

一般出现这种字眼

  dp[i] = dp[i-1] + dp[i-2];

我考的那场下午题和前几年好像一样:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值