本篇文章为22年上半年软件设计师备考笔记
个人总结笔记,如有错误望包涵指正
2 k > = n + k + 1 2^{k}>=n+k+1 2k>=n+k+1
对于奇偶校验,是由若干位有效信息,再加上一个二进制位(校验位)组成校验码,其中
奇校验"1"的个数为奇数,而偶校验"1"的个数为偶数,
只有奇数个数据位发生错误,才能发现错误。同时,奇偶校验只能查错不能纠错
采用模二出发运算的只有循环冗余检验CRC
指令周期:取指令,分析指令,执行指令
CPU控制单元部件
指令寄存器 IR:用来保存当前正在执行的指令 输出是指令译码器的输入 对用户完全透明
程序计数器 PC:存储的总是将要执行的下一条指令的地址 程序员可以访问
指令译码器 ID:对操作码进行测试,以便识别所要求的的操作(对现行指令进行分析,确定指令类型和指令所要完成的操作以及寻址方式,并将相应的控制命令发往相关部件)
状态字寄存器 PSW用于保存指令执行完成后产生的条件码,例如运算是否有溢出,结果为正还是为负,是否有进位等,此外,PSSW还保存中端和系统工作状态等信息。
地址寄存器 AR:用来保存当前CPU所访问的内存单元的地址
数据寄存器 MDR:主要用来保存操作数和运算结果,目的为了节省读取操作数所需占用的总总线和访问储存器的时间
地址寄存器 MAR:用来保存当前CPU所访问的内存单元地址,以便对内存的读写操作
累加器 AC:专门存放算术或逻辑运算的一个操作数和运算结果的寄存器
加法器:cpu中算术逻辑运算部件
ALU:CPU的执行单元,主要负责运算工作
控制器:控制整个计算机的各个部件有条不紊的工作,基本功能就是从内存去指令和执行指令
CPU依据指令周期的不同阶段来区分在内存中以二进制编码形式存放的指令和数据
寻址方式是指寻找操作数或操作数地址的方式。
指令系统中采用不同寻址方式的目的是为了在效率和方便性上找一个平衡。
立即寻址和寄存器寻址在效率上是最快的。
但是寄存器数目少,不可能将操作数都存入其中等待使用,立即寻址的使用场合也非常有限,这样就需要将数据保存在内存中,然后使用直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址基变址寻址等寻址方式将内存中的数据移入寄存器中
常用的寻址方式
在微机系统中,BISO(基本输入输出系统)保存在主板上的ROM上
当系统中有多个中断请求时,中断系统按优先级进行排队。若在处理低级中断过程又有高级中断申请中断,则高级中断可以打断低级中断处理,专区处理高级中断,等处理完高级中断后再返回去处理原来的低级中断,称为中断嵌套。实现中断嵌套用后进先出的栈来保护断点和现场最有效。
表现在时间局部性和空间局部性
负数的补码是反码加1
补码运算:可以将符号位和其他位统一处理,减法也可以按加法来处理,从而简化运算部件的设计
移码指令中算术左移相当于对操作数进行乘2操作
移码表示法是在数X上怎宫颈癌一个偏移量来定义的,常用于表示浮点数中的阶码。机器字长为n时,在偏移量为2n-1的情况下,只要将补码的符号位取反便可获得相应的移码表示
总线宽度是指总线的线数,即数据信号的并行传输能力;总线的带宽是指总线的最大数据传输率,即每秒传输的数据总量。总线宽度与时钟频率共同决定了总线的带宽 Hz/时钟周期*B=B/s
软件的可靠性指的是一个系统对于给定的时间间隔内、在给定条件下无效运作的概率
软件产品的可靠性与软件产品的开发方式无关
可靠性用**MTTF/(1+MTTF)**来度量,MTTF为平均无效故障时间
可用性用**MTBF/(1+MTBT)**来度量,其中MTBF为平均失效间隔时间
反编译不能把可执行文件还原成高级语言语言代码,只能转换成功能上等价的汇编语言
编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址
中间代码是源程序的一种内部结构表示,或称中间语言。不依赖于具体的机器,中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,使用中间代码可提高编译程序的可移植性,常见的有逆波兰记号、四元式、三元式和树
语义分析阶段主要检查源程序是否包含语义错误
磁盘容量分为格式化容量和非格式化容量两种
磁盘调度管理中,先进行移臂调度寻找磁道,再进行旋转调度寻找扇区
段页式存储
m1 n1 m2 n2 m3 n3
段号 页号 页内地址
页面变换:系统应该首先淘汰未被访问的页面,因为根据程序的局部性原理,最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该淘汰未修改过得页面。因为未修改过得页面的内存和辅存一致,故淘汰时无需写回辅存,使系统页面置换代价小
逻辑地址转物理地址:逻辑地址=页号+页内地址;物理地址=块号+页内地址参考资料1参考资料2
参考资料
SCAN是选请求队列中沿磁头臂前进方向最接近于磁头所在柱面的访问请求作为下一个服务对象。
根据访问请求的先后次序选择先提出访问请求的为之服务。
以磁头移动距离的大小作为优先的因素,从当前磁头位置出发,选择离磁头最近的磁道为其服务。
软件工程的基本要素:质量、过程、方法和工具
基于构件的软件开发,主要强调在构件软件系统时复用已有的软件“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验,适应性修改,然后集成到新系统中
需求分析确定软件要完成的功能及非功能性要求
需求不清晰且规模不大时采用原型化方法最合适,二数据处理领域的不太负载的软件,适用于结构化方法进行开发
I/O软件隐藏了I/O操作实现的细节,向用户提供的是逻辑接口,I/O软件将硬件与较高层次的软件隔离开来,而最高层软件向应用提供一个友好的、清晰且统一的接口,方便用户使用
瀑布模型将开发阶段描述为从一个阶段瀑布般地转换到另一个阶段的过程。 原型模型中,开发人员快速地构造整个系统或者系统的一部分以理解或澄清问题。螺旋模型将开发活动和风险管理结合起来,以减小风险。 喷泉模型开发过程模型以用户需求为动力,以对象为驱动,适合于面向对象的开发方法。 在这几种开发过程模型中,
喷泉模型是典型的面向对象生命周期模型,是一种以用户需求为动力,以对象作为驱动的模型。该模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。“喷泉” 一词本身体现了迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统;无间隙是指在开发活动之间不存在明显的边界
增量模型是一种非整体开发的模型,该模型具有较大的灵活性,适合于软件需求不明确的一种模型。使用该模型开发产品,一般是尽快构造出可运行的产品,然后在该产品的基础上再增加需要的新的构建,使产品更趋于完善,缺点不利于模块划分
统一过程(UP)定义了初启阶段、精化阶段、构建阶段、移交阶段和产生阶段,每阶段达到某个里程碑时结束。其中初启阶段的里程碑是生命周期目标,精化阶段的里程碑是生命周期架构,构建阶段的里程碑是初始运作功能,移交阶段的里程碑是产品发布。
功能性 | 可靠性 | 易使用性 | 效率 | 可维护性 | 可移植性 |
---|---|---|---|---|---|
适合性 | 成熟性 | 易理解性 | 时间特性 | 易分析性 | 适应性 |
准确性 | 容错性 | 易学性 | 资源特性 | 易改变性 | 易安装性 |
互用性 | 易恢复性 | 易操作性 | 稳定性 | 一致性 | |
依从性 | 易测试性 | 易替换性 | |||
安全性 |
名称 | 功能 | 数据类型 | 常见 |
---|---|---|---|
应用层 | 访问网络服务的接口 | 报文 | Telnet、FTP、HTTP、SNMP、DNS |
传输层 | 提供应用进程之间的逻辑通信 | 数据段 | TCP、UDP、SPX、进程、端口 |
网络层 | 为数据在结点之间传输创建逻辑链路,并分组转发数据 | IP数据包 | 路由器,多层交换机、防火墙、IP、IPX、RIP、OSPF、ARP、ICMP |
数据链路层 | 在通信的实体间建立数据链路连接 | 帧 | 网卡、网桥、二层交换机 |
物理层 | 为数据端设备提供原始比特流的传输的通路 | 比特流 | 中继器、集线器、网线、HUB、RJ-45标准 |
PPP 认证是可选的。PPP 扩展认证协议(Extensible Authentication Protocol,EAP) 可支持多种认证机制,并且允许使用后端服务器来实现复杂的认证过程。
例如通过Radius 服务器进行Web认证时,远程访问服务器(RAS)只是作为认证服务器的代理传递请求和应答报文,并且当识别出认证成功/失败标志后结束认证过程。通常PPP支持的两个认证协议是:
DNS域名查询的次序是:本地的hosts文件一>本地DNS缓存一>本地DNS服务器一>根域名服务器
参考资料
i ( i + 1 ) 2 + j + 1 \frac{i(i+1)}{2}+j+1 2i(i+1)+j+1
比 较 次 数 = ( n − m + 1 ) ∗ m n : 主 串 m : 模 式 串 比较次数=(n-m+1)*m \\ n:主串 \\ m:模式串 比较次数=(n−m+1)∗mn:主串m:模式串
面向对象分析的目的是为了获得对应用问题的理解,确定系统的功能、性能要求。
面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作和定义对象的内部信息。
而分析阶段最重要的是理解问题域的概念,其结果将影响整个工作。经验表明,从应用定义域概念标识对象是非常合理的。因此,面向对象分析的第一步就是确定问题域
开-闭原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design,OOD)的基石。开-闭原则是指一个软件实体应当对扩展开放,对修改关闭,即在设计 一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。满足开-闭原则的系统可以通过扩展己有的软件系统,提供新的能力和行为,以满足对软件的新需求,使软件系统有一定的适应性和灵活性;因为已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性;满足开-闭原则的系统具备更好的可复用性与可维护性。 在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,从而满足“对修改关闭”的要求;而从抽象类导出的具体类可以改变系统的行为, 从而满足对扩展开放。
里氏代换原则(Liskov Substitution Principle,LSP)是指一个软件实体如果使用的是—个基类的话,那么一定适用于其子类,而且软件系统觉察不出基类对象和子类对象的区别,也就是说,在软件系统中把基类都替换成它的子类,程序的行为没有变化。但需要注意的是,里氏代换原则中仅仅指出了用子类的对象去代替基类的对象,而反过来的代换则是不成立的。例如,如果一个软件模块中使用的是一个子类对象,那么使用父类 对象去代换子类对象则可能产生错误。用一句简单的话概括:任何基类对象可以出现的地方,子类对象一定可以代替基类对象。
依赖倒转原则(Dependence Inversion Principle,DIP)就是要依赖于抽象,而不依赖于实现,或者说要针对接口编程,不要针对实现编程。系统中进行设计和实现的时候应 当使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型说明,以及数据 类型的转换等,而不要用具体类进行上述操作。要保证做到这一点,一个具体类应当只 实现接口和抽象类中声明过的方法,而不要给出多余的方法。 传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块,抽象层次依赖于具体层次。依赖倒转原则就是把这个不良的依赖关系倒转过来。面向对象设计 的重要原则是创建抽象层次,并且从该抽象层次导出具体层次,具体层次给出不同的实现。继承关系就是一种从抽象化到具体化的导出。抽象层包含的应该是应用系统的业务 逻辑和宏观的、对整个系统来说重要的战略性决定,而具体层次含有的是一些次要的与 实现有关的算法和逻辑,以及战术性的决定,带有一定的偶然性选择。从复用的角度来说,高层抽象的模块是应当复用的,而且是复用的重点,因为它含有一个应用系统最重 要的宏观业务逻辑,是较为稳定的部分。而在传统的过程性设计中,复用则侧重于具体层次模块的复用。 使用依赖倒转原则时建议不依赖于具体类,即程序中所有的依赖关系都应该终止于抽象类或者接口。尽量做到:任何变量都不应该持有一个指向具体类的指针或者引用; 任何类都不应该从具体类派生;任何方法都不应该覆写它的任何基类中的己经实现的方法。
实体类主要负责数据和业务逻辑;边界类负责和用户进行交互,即用户界面;控制类则负责实体类和界面类的交互。
桥接模式是一种结构型设计模式。
组合(Composite)模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。适用于:想表示对象的部分-整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
外观(Facade)模式为子系统中的一组接口提供一个一致的界面,Fapde模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Fapde模式定义子系统中每层的入口点。
享元(Flyweight)模式运用共享技术有效地支持大量细粒度的对象。适用于:一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象:应用程序不依赖于对象标识。
装饰器(Decorator)模式描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。
==工厂方法(Factory Method)==定义一个用于创建对象的接口,让子类决定将哪-个类实例化,使一个类的实例化延迟到其子类。适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。
观察者(Observer)模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。适用于:当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。
中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于:一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。欲使一个后端数据模型能够被多个前端用户界面连接,采用中介者模式最合适。
生成器(Builder)模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式适用于以下几种情况:
工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。工厂方法适用于以下几种情况:
原型(Prototype)模式用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。原型模式适用于以下几种情况:
单例(Singleton)设计模式是一种创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问这个唯一实例的全局访问点。单例模式适用于以下情况: