软考-总结笔记

   软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。包括:结构化的方法  、 Jackson方法 、  面向对象开发方法   结构化方法指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。  Jackson方法:是面向数据结构的开发方法,包括JSP( Jackson Structure programming)和JSD( Jackson System Development)

    风险识别—建立风险概念的尺度。试图系统化确定对项目计划(估算、进度、资源分配)的威胁。(一个方法是建立风险条目检查表。该风险表可以用于识别风险,并使得人们集中来识别下列常见的、已知的及可预测的风险)

     风险预测—描述风险引起的后果。确定风险发生的可能性或概率以及如果风险发 生了所产生的后果。

     风险评估—估计风险影响的大小。 

风险控制—确定风险估计的正确性。辅助项目组建立处理风险的策略。



耦合:系统内不同模块之间互连程度的度量。块间耦合强弱取决于模块间联系形式及接口的 复杂程度。

模块间接口的复杂性越高,说明耦合的程度也越高。 

数据耦合:如果两个模块彼此间通过数据交换信息,而且每一个参数仅仅为数据,那么这种 块间耦合称之为数据耦合。

  控制耦合:如果两个模块彼此间传递的信息中有控制信息,那么这种块间耦合称为控制耦合。

 公共耦合:如果两个模块彼此之间通过一个公共的数据区域传递信息时,则称之为公共耦合 或公共数据域耦合。  

内容耦合:如果一个模块需要涉及另一个模块的内部信息时,则这种联系称为内容耦合。



内聚:模块内部元素的联系方式,块内联系标志一个模块内部各个元素间彼此结合的紧密程 度,主要表现在模块内部各个元素为了执行某一功能而结合在 一起的程度。

偶然内聚:如果一个模块所要完成的动作之间没有任何关系,或者即使有某种关系,也是非 常松散的,就称之为偶然组合。

 逻辑内聚:如果一个模块内部的各个组成部分在逻辑上具有相似的处理动作,但功能上、用 途上却彼此无关,则称之为逻辑组合。

 时间内聚:如果一个模块内部的各个组成部分所包含的处理动作必须在同一时间内执行,则 称之为时间组合。 

过程内聚:如果一个模块内部的各个组成部分所要完成的动作彼此间没什么关系,但必须以 特定的次序(控制流)执行,则称之为过程组合。 

通信内聚:如果一个模块内部的各个组成部分所完成的动作都使用了同一个输入数据或产生 同一个输出数据,则称之为通信组合。  

顺序内聚:对于一个模块内部的各个组成部分,如果前一部分处理动作的输出是后一部分处 理动作的输入,则称之为顺序组合。  功能内聚:如果一个模块内部的各个组成部分全部为执行同一功能而合成为一个整体,则称 之为功能组合方式的模块。



系统测试的基本原则:   测试工作应避免由原开发软件的个人或小组来承担   设计测试用例不仅要包括合理、有效的输入数据,还要包括无效的或不合理的输入 数据。   设计测试案例时,不仅要确定输入数据,而且要根据系统功能确定预期输出的结果。  不仅要检验程序做了该做的事,还要检查程序是否同时做了不该做的事。  严格按照测试计划进行,避免测试的随意性   保留测试用例,将会给重新测试和追加测试带来方便。

系统测试的方法:

  1.静态测试:被测程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。 

2.动态测试:通过运行程序发现错误。有黑盒测试法和白盒测试法。

系统测试的步骤:  单元测试:程序中的一个模块或一个子程序,是程序设计的最小单元,是程序最小的独立编译单位。

 集成测试(组装测试):在每个模块完成了单元测试以后,需要按照设计时作出的层次模块图把它们连接起来,进行组装测试。   确认测试:经过组装测试,软件已装配完毕,接下来进行的确认测试和系统测试将是以整个软件做为测试对象,且采用黑盒测试方法。

 系统测试:将信息系统的所有组成部分包括软件、硬件、用户以及环境等综合在一起进行测试,以保证系统的各组成部分协调运行。

软件维护:根据需求变化或硬件环境的变化对应用程序进行部分或全部修改。

软件维护包括:

正确性维护:改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。占整个维护工作量的17%-20%。 

适应性维护:使应用软件适应信息技术变化和管理需求变化而进行的修改。占整个维护工作量的18%-25%。 

完善性维护:为扩充功能和改善性能而进行的修改,主要是对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。占整个维护工作量的50%-60%。

预防性维护:为改进应用软件的可靠性和可维护性,为了使用硬件环境的变化,主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。占整个维护工作量的4%左右。

数据库系统中存放三级结构定义的数据库称为数据字典。对数据库的操作都要通过访问DD才能实现。DD中还存放数据库运行的统计信息,例如记录个数、访问次数等。

三级结构:外模式、概念模式、内模式   

两级映象:外模式/模式映象、模式/内模式映象 

三级结构:

   外模式:单个用户使用到的那部分数据的描述。   

概念模式:是用户定义的数据库中全部数据逻辑结构的描述。 

  内模式:是数据库在物理存储方面的描述,接近于物理存储设备,涉及到实际数据存储的结构。



两级映象 

  模式/内模式映象:存在于概念级和内部级之间,用于定义概念模式和内模式之间的对应性。

    外模式/模式映象:存在于外部级和概念级之间,用于定义外模式和概念模式之间的对应性。

  两级数据独立性  数据独立性   是指应用程序和数据库的数据结构之间相互独立,不受影响。

分成物理数据独立性和逻辑数据独立性两个级别。

 物理数据独立性:数据的内模式修改,模式/内模式也要进行相应的修改,但概念模式尽可 能保持不变。

  逻辑数据独立性:数据的概念模式修改,外模式/模式也要进行相应的修改,但外模式尽可 能保持不变。



死锁

  死锁的概念:    

  指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。                                    

死锁产生的原因

      (1)竞争资源        当系统*多个进程所共享的资源,不足以同时满足它们的需要时,引起它们对资源的竞争而产生死锁。

     (2) 进程推进顺序不当        进程在运行过程中,请求和释放资源的顺序不当,导致了进程的死锁。

死锁产生的必要条件 

     (1)互斥使用资源   (2)占有并等待资源   (3)不可剥夺资源   (4)循环等待资源

处理死锁的基本方法  预防死锁  避免死锁 —— 银行家算法 检测死锁解除死锁 

避免死锁 —— 银行家算法 【基本思想】 
     银行家算法是通过动态地检测系统中资源分配情况和进程对资源的需求情况来决定如何分配资源的,在能确保系统处于安全状态时才能把资源分配给申请者,从而避免系统发生死锁。

 

用例图(Use case diagram) 从用户角度描述系统功能,并指出各功能的操作者。

静态图(Static diagram),表示系统的静态结构。包括类图、对象图、包图。 

行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。包括状态图、活动图。   
交互图(Interactive diagram), 描述对象间的交互关系。包括顺序图、合作图。   
实现图( Implementation diagram ) 用于描述系统的物理实现。包括构件图、部件图。 


UML的9种图 

  图名称 图定义  图性质

1 类图 一组类、接口、协作及它们的关系静态图

2 对象图 一组对象及它们的关系  静态图

3 用例图 一组用例、参与者及它们的关系 静态图

4 顺序图 一个交互,强调消息的时间顺序  动态图

5 协作图 一个交互,强调消息发送和接受的对象的结构组织 动态图

6 状态图 一个状态机,强调对象按事件排序的行为动态图

7 活动图 一个状态机,强调从活动到活动的流动 动态图

8 构件图 一组构件及关系 静态图

 9 配置图  (实施图)  一组接点及它们的关系  静态图

模型元素与模型元素之间的连接关系也是模型元素,常见的关系有关联(association)、泛化(generalization)、依赖(dependency)和聚合(aggregation),其中聚合是关联的一种特殊形式。

Flynn分类:根据不同指令流—数据流组织方式把计算机系统分成4类。

(重点理解) 指令流:机器指令的执行序列; 

数据流:由指令流调用的数据序列,包括输入数据和中间结果; 

多倍性:在系统性能的瓶颈部件上同时处于同样执行阶段的指令和数据的最大可能个数;

I.     单指令流单数据流SISD——如单处理机 II.   

单指令流多数据流SIMD——如相联处理机 III.  

多指令流单数据流MISD——如流水线计算机

IV.    多指令流多数据流MIMD——如多处理机 


控制寄存器:内部存储器是可以被处理器直接存取的存储器,又称为主存储器,外部存储器需要通过I/O模块与处理器交换数据,又称为辅助存储器,弥补CPU处理器速度之间的差异还设置了CACHE,容量小但速度极快,位于CPU和主存之间,用于存放CPU正在执行的程序段和所需数据。 


常用的寻址方式有立即寻址、直接寻址、间接寻址、寄存器寻址、基址寻址、变址寻址、相对寻址。

指令的执行过程

  1.计算下一条要执行的指令的地址; 2.从该地址读取指令;  3.对指令译码以确定其所要实现的功能; 4.计算操作数的地址; 5.从该地址读取操作数; 6.执行操作; 7.保存结果;

汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。
例如:
MOV AX,2000H;将16位数据2000H传送到AX寄存器
MOV AL,20H;将8位数据20H传送到AL寄存器
MOV AX,BX;将BX寄存器的16位数据传送到AX寄存器
MOV AL,[2000H];将2000H单元的内容传送到AL寄存器

1. 立即寻址方式* —— 操作数在指令中给出
MOV AL, 5
MOV AX, 3064H

2. 寄存器寻址方式* —— 操作数在指定的寄存器中
MOV AX, BX
MOV AL, BH


3. 直接寻址方式* —— 有效地址EA由指令直接给出
有效地址EA:操作数的偏移地址
物理地址PA = 16d ? (DS) + EA
例:MOV AX, [2000H]
EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H


用算法设计方法      算法设计是一件非常困难的工作,经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。

一、迭代法    迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。

二、穷举搜索法 

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那 些符合要求的候选解作为问题的解。

三、递推法    递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。

四、递归     采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模 较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。

五、回溯法  回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。

六、贪婪法    贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。

七、分治法  1、分治法的基本思想  任何一个可以用计算机求解的问题所需的计算时间都与其规模N有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。    分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

2、分治法的适用条件    分治法所能解决的问题一般具有以下几个特征:    (1)该问题的规模缩小到一定的程度就可以容易地解决;    (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;   (3)利用该问题分解出的子问题的解可以合并为该问题的解;   (4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

3、分治法的基本步骤   分治法在每一层递归上都有三个步骤:    (1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;   (2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;   (3)合并:将各个子问题的解合并为原问题的解。

八、动态规划法    为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。


  java的23种设计模式  创建型模式         

1.工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

  2.建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。


3.工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。 

4. 原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

  5. 单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。  结构型模式  

6.适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。  
7.桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。  

8.合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

 9.装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。  

10.门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。  

11.享元模式:以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态和内蕴状态是相互独立的。

12、代理模式:给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。  行为模式  
13、责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。  
14、命令模式:命令模式把一个请求或者操作封装到一个对象中。把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。  
15、解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。  
16、迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。  
17、调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。  
18、备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。  
19、观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。  
20、状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。  
21、策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。  
 22、模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个*逻辑框架,而将逻辑的细节留给具体的子类去实现。  

23、访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对*的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

某进程有5个页面,页号为0~4,页面变换表如下所示。表中状态位等于0和1分别表示页面不在内存或在内存。若系统给该进程分配了3个存储块,当访问的页面3不在内存时,应该淘汰表中页号为 (9) 的页面。假定页而大小为4K,逻辑地址为十六进制2C25H,该地址经过变换后,其物理地址应为十六进制(10) 
软考-总结笔记(10)处填()。

A.2C25H
B.4096H
C.4C25H

D.8C25H

[要点解析] 页面变换表中状态位等于0和1分别表示页面不在内存或在内存,所以0、2和4号页面在内存。当访问的页面3不在内存时,系统应该首先淘汰未被访问的页面,因为根据程序的局部性原理,最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该先淘汰未修改过的页面,因为未修改过的页面内存与辅存一致,故淘汰时无需写回辅存,使系统页而置换代价小。经上述分析,0、2和4号页面都是最近被访问过的,但2和4号页面都被修改过而0号页面未修改过,故应该淘汰0号页面。

根据题意,页面大小为4KB,逻辑地址为十六进制2C25H,其页号为2,页内地址为C25H,查页表后可知页帧号(物理块号)为4,该地址经过变换后,其物理地址应为页帧号4拼上页内地址C25H,即十六进制4C25H。



直接地址所以:顾名思义就是在计算机中采用最最直接的方式来存储数据块;

  间接地址索引:它有几个分类,一级间接地址索引、二级间接地址索引、三级间接地址索引……,它的变现形式就是根据具体有几次间接索引来命名的。

2010年下半年真题:

27-28;某文件系统采用多级索引结构,若磁盘块的大小为512字节,每个块号需占3字节,那么根索引采用一级索引时的文件最大长度为——KB;采用二级索引时的文件最大长度为——KB。

  根据题意:我们能够知道一个磁盘块可以存放  512 / 3 = 170 个块号。

采用一级索引效果如下:

由指令流调用的数据序列软考-总结笔记

采用二级索引效果如下:

软考-总结笔记

所以采用二级索引的话能够表示的文件最大长度为:

170 * 170 * 512 / 1024 = 14450 KB。



设文件索引节点中有7个地址项,其中4个地址项为直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接地址索引,每个地址项大小为4字节,若磁盘索引块和磁盘数据块大小均为256字节,则可表示的单个文件的最大长度是( )
  • 33kb
  • 519kb
  • 1057kb
  • 16513kb

由指令流调用的数据序列软考-总结笔记



计算机音乐主要有调频FM和波形表WaveTable两种方式。

波形表合成技术的乐音更真实。

表现媒体指实现信息输入和输出的媒体,如键盘,鼠标,扫描仪,话筒等为输入媒体;显示器打印机喇叭,表示输出媒体。

硬盘属于存储媒体,光纤属于存储媒体,图像属于感觉媒体。

表示媒体指传输感觉媒体,即用于数据交换的编码如文本编码,声音编码和图像编码等。

矢量图使用数学的方式(算法和特征)来描述一幅图形图像,在处理图形图像时根据图元对应的数学表达式,进行编辑和处理。



用户A获取用户B的数字证书后通过验证CA的签名来确认数字证书的有效性。验证CA签名时使用的是CA的公钥。

宏病毒感染

数字证书用CA私钥可以获得用户的公钥。

PKI为保障数字证书不被篡改,而且要发送到证书主人手中,需要用CA的私钥对数字证书签名,防伪造,不可抵赖。

数字签名不能验证接收者的合法性。接受者可以验证消息来源的真实性,发送者无法否认发送过该消息,

接收者无法伪造和篡改消息。

桥接(Bridge)模式将抽象部分与其实现部分分离,使他们都可以独立的变化。

适配器(adapter)模式将类的接口转换成客户希望的另一个接口。即是类结构模式,又是对象结构模式。

代码(proxy)模式通过提供与对象相同的接口来控制对这个对象的访问,使得在确实需要这个对象,才对他进行创建和初始化。

组合(Composite)模式描述了如何构造一个类层次结果。将对象组合成树型结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

装饰器(Decorator)模式动态的给一个对象添加职责。

抽象工厂(abstractFactory)模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

适用于一个系统要独立于他的产品创建、组合和表示时,一个系统要由多个产品系列中的一个来配置时,当要强调一系列相关产品对象的设计以便联合使用时:当提供一个产品类库,而只是想要显示他们的接口而不是实现时。

生成器模式(builder)将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式适合于创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时,当构造过程必须允许被构造的对象有不同的表示时。

工厂方法(Factory)定义一个用于创建对象的接口,让子类决定将那一个类实例化,是一个类的实例化延迟到子类。工厂方法模式适用于当一个类不知道他所必须创建的对象的类的时候:当一个类希望由他的子类来制定他所创建对象的时候。

原型模式(Prototype)适用于用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

适用于:当一个系统应该独立于他的层产品创建、构成和表示时,当要实例化的类要在运行时指定时。

Visitor模式,一个visitor对象是一个多态的accept操作的参数,这个操作作用于该visitor对象

访问的对象。

面向对象设计系统主要步骤有面向对象分析、面向对象设计、面向对象程序设计和面向对象测试。

面向对象分析主要有认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。

面向对象设计是设计分析模型和实现相应源代码。

面向对象程序设计是选择合适的面向对象程序设计语言,将程序组织和相互对象的集合。每个对象表示每个类的实例,类通过

继承关系组织。

关系包括四种:依赖、关联、泛化和实现。

依赖(Dependency)是两个事物间语义关系,其中一个事物(独立事物)发生变化影响另一个事物(依赖事物)的语义。

关联(Association)是一种结构关系,描述了一组链,链是对象之间的链接。

泛化(Generalization)是一种一般/特殊关系,

  软考-总结笔记

一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
B-树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn)
其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。


优先队列通常使用堆实现,对应大顶堆和小顶堆,存在最大优先队列和最小优先队列。

快速排序输入数据有序反而使其效率最低。

若数据基本有序则插入排序是最佳选择。

折半查找法无论元素是否在数组中,最多与表中4个元素相比较。如果不在数组中,最多与表中的4个元素比较。