2018软考复习笔记

2019-04-01  本文已影响0人  jianshuqwerty

软考复习笔记

<h2 id='1'>
计组基础、数据表示、校验码
</h2>

存储

流水线技术

主存 Cache 映射方式

校验码

输入输出技术

位示图

<h2 id='2'>
计算机网络
</h2>
与HTTP相比,HTTPS(超文本传输安全协议)协议对传输的内容进行加密,更加安全。HTTPS基于(SSL)安全协议,其默认端口是(443)。
HTTP基于(TCP/IP)协议,默认端口(80)

IP地址,子网掩码,默认网关,DNS服务器


练习一


计算机网络练习1.png

解:题中 ServerA 的IP 参数中的“/27”表示此 ServerA 所处网络的子网掩码为 27 位,即 IP 地址 131.1.123.24 中前 3 个 8 位组和第 4 个 8 位组中的前 3 位为网络标志位(8+8+8+3=27),第 4 个 8 位组中的后 5 位为主机位。将 IP 地址 131.1.123.24 展开点分二进制为: 10000011.00000001.01111011.000 11000(前 27 位为网络标志位, 后 5 位为主机位) 。 网络标志位不变,而网络主机位从全 0 变化到全 1 得 ServerA 所处网络的 IP 地址范围: 10000011.00000001.01111011.000 00000~10000011.00000001.01111011.000 11111, 即 131.1.123.0~131.1.123.31。给一个网络设备配置的网关地址应该与当前设备的 IP 地址在同一个网络中,此设备才能正常连网,而 ServerA 的网关地址为 131.1.123.33,不在 ServerA 所属的网络中, 所以 ServerA 通往外部网络的数据包压根就传送不出当前网络, ServerB 也即不能与 ServerA 通信。


URL(统一资源定位器(URL, Uniform Resource Locator))

网关

分类:

网络的拓扑结构:

ISO/OSI网络体系结构

网络协议.png

被动攻击:被动攻击主要是收集信息而不是进行访问
9.下列攻击行为中,属于典型被动攻击的是(B)。A.拒绝服务攻击 B.会话拦截 C.系统干涉 D.修改数据命令 10.(D)不属于入侵检测技术。A.专家系统 B.模型检测 C.简单匹配 D.漏洞扫描 11.以下关于防火墙功能特性的叙述中,不正确的是(D)。A.控制进出网络的数据包和数据流向B.提供流量信息的日志和审计C.隐藏内部IP以及网络结构细节D.提供漏洞扫描功能 12.某软件公司项目组的程序员在程序编写完成后均按公司规定撰写文档,并上交公司存档。此情形下,该软件文档著作权应由(C)享有。A.程序员 B.公司与项目组共同 C.公司 D.项目组全体人员

UDP

127.0.0.0

网络安全

网络安全协议

加密

加密.png
数字签名

DNS

<h2 id='3'>数据库</h2>

数据流图(DataFlowDiagram/DFD)

DFD0.png
某公司拟开发一个共享单车系统,采用北斗定位系统进行单车定位,提供针对用户的APP以及微信小程序,基于Web的管理与监控系统。该共享单车系统的主要功能如下。
1)用户注册登录。用户在APP段端输入手机号并获取验证码后进行注册,将用户信息进行存储。用户登录后显示用户所在位置周围的单车。
2)使用单车。
①扫码/手动开锁。通过扫描二维码或手动输入编码获取开锁密码,系统发送开锁指令进行开锁,系统修改单车状态,新建单车行程。
②骑行单车。单车定时上传位置,更新行程。
③锁车结账。用户停止使用或手动锁车并结束行程后,系统根据已设置好的计费规则及使用时间自动结算,更新本次骑行的费用并显示给用户,用户确认支付后,记录行程的支付状态,系统还将重置单车的开锁密码和单车状态。
3)辅助管理。
①查询。用户可以查看行程列表和行程详细信息。
②保修。用户上报所在位置或单车位置以及单车故障信息并进行记录。
4)管理与监控
①单车管理及计费规则设置。商家对单车基础信息,状态等进行管理,对计费规则进行设置并存储。
②单车监控。对单车,故障,行程等进行查询统计。
③用户管理。管理用户信用与状态信息,对用户进行查询统计

E1:用户;E2:商家;E3:单车
D1:用户信息文件;D2:单车信息文件;D3:行程信息文件;
D4:计费规则信息文件:D5:单车故障信息文件
【问题3】(5分)
根据说明和图中术语及符号,补充图1-2中缺失的数据流及其起点和终点。
P3-E1 开锁密码
P3-E3 开锁指令
P3-D2 单车状态
D3-P3 使用时间
D4-P3 计费规则
P3-E1 费用
P3-D3 费用???
D3-P7 

E-R图

聚簇索引

把在某个或某些属性上具有相同值的元组集存放在连续的物理块中成为聚簇,如信息系的500个学生的信息存在一个物理块上

<h3>关系数据库的规范化</h3>

函数依赖

规范化

<h2 id='4'>软件工程</h2>

基本要素

软件工程的基本要素包括方法、工具和过程

风险管理

软件开发模型

  1. 瀑布模型。瀑布模型严格遵循软件生命周期各阶段的固定顺序:计划、分析、设计、编程、测试和维护,上一阶段完成后才能进入到下一阶段,整个模型就像一个飞流直下的瀑布。优点:以文档作为驱动,强迫开发人员采用规范的方法,严格规定了各阶段必须提交的文档;要求每一阶段结束后,都要进行严格的评审。与它最相适应的开发方法是结构化方法。缺点:不适应软件开发工作中用户需求的改动。
  2. 原型模型。原型模型通过向用户提供原型获取用户的反馈,使开发出的软件能够真正反映用户的需求。同时,原型模型采用逐步求精的方法完善原型,使得原型能够“快速”开发,避免了像瀑布模型一样在冗长的开发过程中难以对用户的反馈作出快速的响应。相对瀑布模型而言,原型模型更符合人们开发软件的习惯,是目前较流行的一种实用软件生存期模型。原型模型适应于软件开发过程中用户需求还会变更的场合。原型模型又细分为快速原型、演化原型和增量模型三种。
  3. 快速原型。获知用户的真正需求,一旦需求确定了,原型即被抛弃。主要用于需求分析阶段。不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法,所以不能定义完善的文档。
  4. 演化原型。应用于整个软件开发过程,是从初始模型逐步演化为最终软件产品的渐进过程。也就是说,快速原型模型是一种“抛弃式”的原型化方法,而演化模型则是一种“渐进式”的原型化方法。
  5. 增量模型。主要用于设计阶段,把软件产品划分为一系列的增量构件,分别进行设计、编程、集成和测试。新的增量构件不得破坏已经开发出来的产品。增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
  6. 螺旋模型。综合了瀑布模型和原型模型中的演化模型的优点,还增加了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。
  7. V 模型。 V 模型一种典型的测试模型,该模型强调开发过程中测试贯穿始终。 V 模型在瀑布模型的基础上,强调测试过程与开发过程的对应性和并行性,同样要求需求明确,而且很少有需求变更的情况发生。
  8. 喷泉模型。一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目丌发效率,节省开发时间,适应于面向对象的软件开发过程。在以上模型中, 只有螺旋模型考虑风险因素。

软件开发方法

  1. 结构化开发方法
    面向数据流的开发方法,总的指导思想是:自顶向下,逐层分解。其基本原则是功能的分解与抽象。特别适合于数据处理领域的问题,但是不适合解决大规模的,特别复杂的项目,且难以适应需求的变化。
  2. Jackson
    面向数据结构的开发方法,
    JSP以数据结构为驱动,适合于小规模的项目。但输入数据结构与输出数据结构没有对应关系时,这种方法难以胜任。
    JSD以事实为驱动,是一种基于进程的开发方法,所以适应于时序特点较强的系统,包括数据处理系统和一些实时控制系统。
  3. 原型方法
    比较适合于用户需求不清,需求经常变化的情况。当系统规模不是很大也不是很复杂时,采用此方法比较合适。
  4. 面向对象方法
    基本出发点事尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。以对象作为基本元素,这也是分析问题,解决问题的核心。

敏捷开发方法

软件测试

  1. 非渐增式集成测试
    首先将每个模块分别进行单元测试,再把所有的模块组装成一个完整的系统进行测试。目前在进行集成测试时已普遍采用渐增式集成。
  2. 渐增式集成测试
    又可以分为自顶向下集成和自底向上集成。软件的集成测试最好由不属于该软件开发组的软件设计人员承担,以提高集成测试的效果。
  3. 三明治测试
    从系统的三个角往中间包围测试的方法。
    自底向上的集成测试不需要编写桩模块, 但需要编写驱动模块,而自顶向下的集成测试需要编写桩模块,不需要编写驱动模块。

软件技术评审

⑴发现功能、逻辑或实现的错误;
⑵证实经过评审的软件的确满足需求;
⑶保证软件的表示符合预定义的标准;
⑷得到一种一致的方式开发的软件;
⑸使项目更易管理。

<h3 id='41'>配置管理</h3>

<h3 id='42'>软件需求</h3>

  1. 某企业财务系统的需求中,属于功能需求的是(A)。 A. 每个月特定的时间发放员工工资 B. 系统的响应时间不超过3秒 C. 系统的计算精度符合财务规则的要求 D. 系统可以允许100个用户同事查询自己的工资
    解析:功能需求:系统要做什么,在何时做,在何时以及如何修改升级。

<h3 id='44'>管道/过滤器体系结构</h3>

(1)使得软件构件具有良好的隐蔽性和高内聚、低耦合的特点;
(2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;
(3)支持软件重用。提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;
(4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;
(5)允许对一些属性如吞吐量、死锁等的分析;
(6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其他任务并行执行。
(7)不能提高性能。

<h3 id='45'>耦合与内聚</h3>

耦合

以下耦合度由高变低:

内聚 高内聚低耦合

内聚是一个模块内部各成分之间相关联程度的度量。

内聚按强度从低到高有以下几种类型:

(1)偶然内聚

如果一个模块的各成分之间毫无关系,则称为偶然内聚,也就是说模块完成一组任务,这些任务之间的关系松散,实际上没有什么联系。

(2)逻辑内聚

几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。

(3)时间内聚

如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。

(4)通信内聚

如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
某模块中有两个处理 A 和 B,分别对数据结构 X 写数据和读数据,则该模块的内聚类型为通信内聚

(5)顺序内聚

如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分
的输入,则称为顺序内聚。

(6)过程内聚

过程内聚是指构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。

(7)信息内聚

模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该模块执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。

(8)功能内聚

模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。

UML类图

UML0.png

UML建模语言

  1. 用例图:用例图以图形化的方式描述系统与外部系统及用户的交互,其以图形化的方式描述了谁将使用系统,以及用户期望以什么方式与系统交互,主要用在面向对象需求分析阶段。
  2. 类图:类图是显示一组类、接口、协作以及它们之间关系的图。类图用于对系统的静态设计视图建模。当对系统的静态视图建模时,通常以下述三种方式之一使用类图:
    • 对系统的词汇建模
    • 对简单协作建模
    • 对逻辑数据库模式建模。
    • (注意:物理数据库模式建模采用构件图实现)
    • 总之,类图描述系统的对象类结构,他们显示构成系统的对象类以及这些对象类之间的关系。

<h3 id='47'>设计模式</h3>

设计模式.jpg
设计模式1.png
查询引用了某篇出版物的所有出版物。
在学术出版物中引用他人或早期的文献作为相关工作或背景资料是很常见的现象。
用户也可以在系统中为某篇出版物注册引用通知,若有新的出版物引用该出版物,系统将发送电子邮件通知该用户。
问:上图3.1中使用了哪种设计模式?实现了系统的哪个功能?
解:
使用了观察者设计模式(又称“发布-订阅”模式),定义了一种一对多的依赖关系,
在题中,某出版物是观察者,当被观察者(引用某出版物的其他出版物)出现时,
则出版物会收到其被引用的通知,从而系统发送邮件给相应的作者。
  1. 抽象工厂(Abstract Factory)。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  2. 工厂方法(Factory Method)。定义一个用于创建对象的接口,让子类决定将哪一个类实例化,工厂方法使一个类的实例化延迟到其子类。
  3. 适配器(Adapter)。将一个类的接口转换成客户希望的另外一个接口。 adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  4. 桥接(Bridge)。将抽象部分与它的实现部分分离,使它们都可以独立地变化。对实现部分的修改不会影响到使用它们的程序。
  5. 建造者(Builder)。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  6. 责任链(Chain of Responsibility)。为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
  7. 命令(Command)。将一个请求封装为一个对象,从而使我们可用不同的请求对象进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作;命令模式将调用操作的请求对象与知道如何实现该操作的接收对象解耦
  8. 组合(Composite)。将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
  9. 装饰(Decorator)。动态地给一个对象添加一些额外的职责。就扩展功能而言,它比生成子类方式更为灵活。
  10. 外观模式(Facade)。为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
  11. 享元(Flyweight)。运用共享技术有效地支持大量细粒度的对象。
  12. 解释器(Interpreter)。给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
  13. 迭代(Iterator)。提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
  14. 中介者(Mediator)。用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  15. 备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
  16. 观察者(Observer)。定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
  17. 原型(Prototype)。用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
  18. 代理(Proxy)。为其他对象提供一个代理以控制对这个对象的访问。
  19. 单例(Singleton)。保证一个类仅有一个实例,并提供一个访问它的全局访问点。
  20. 状态(State)。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
  21. 策略(Strategy)。定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
  22. 模板方法(Template Method)。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  23. 访问者(Visitor)。表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

软件质量特性

系统的维护

结构化开发方法

敏捷开发方法

开发成本估算方法

程序设计

脚本语言

错误

内存分配

  1. 栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  2. 堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。注意它与数据结构中的堆是两回事,链表的数据空间必须采用堆存储分配策略。
  3. 全局区(静态区)(static):全局变量和静态变量的存储是放在这一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。
  4. 文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。
  5. 程序代码区:存放函数体的二进制代码。

优先队列通常采用 (堆) 数据结构实现,向优先队列中插入一个元素的时间复杂度为 (O(logn))

编译原理

工作阶段

C++

纯虚函数&&抽象类

class Implement{
Public:
  virtual void doPaint(Matrix m);//显示像素矩阵m
};

继承

class WinImp:public Implementor{
    public:
        void doPaint(Matrix m){/*调用Windows系统的绘制函数绘制像素矩阵*/}
};
class LinuxImp: public Implementor{
    public:
        void doPaint(Matrix m){/*调用Linux系统的绘制函数绘制像素矩阵*/}
};
class Imag{
    public:
        void setImp(Implementor *imp){this.imp=imp;}
        virtual void parseFile(String fileName)=0;
    protected: 
        Implenentor *imp;
};
class BMPImage:public Image{
//此处代码省略
};
class GIFImage:public Image{
    public:
        void parseFile(String fileName){
        //此处解析GIF文件并获取一个像素矩阵对象m
        imp->doPaint(m);//显示像素矩阵m
}
};
class JPEGImage:public Image{
//此处代码省略
};
int main(){
    public static void main(String[] args){
        //在Linux操作系统上查看demo.gif图像文件
        Imag imag = new Imag();
        Implementor imageImp = new LinuxImp();
        image.setImp(imageImp);
        image.parseFile(“demo.gif”);
    } 
}

Java

抽象类

public abstract class Animal {
    public abstract void cry();
}

多媒体技术

媒体分类

  1. 感觉媒体: 感觉媒体指的是能直接作用于人们的感觉器官,从而能使人产生直接感觉的媒体。如文字、数据、声音、图形、图像等。在多媒体计算机技术中,我们所说的媒体一般指的是感觉媒体。
  2. 表示媒体: 表示媒体指的是为了传输感觉媒体而人为研究出来的媒体,借助于此种媒体,能有效地存储感觉媒体或将感觉媒体从一个地方传送到另一个地方。如语言编码、电报码、条形码等。
  3. 表现媒体: 表现媒体指的是用于通信中使电信号和感觉媒体之间产生转换用的媒体。如输入、输出设备,包括键盘、鼠标器、显示器、打印机、 音响、 喇叭等。
  4. 存储媒体: 存储媒体指的是用于存放表示媒体的媒体。如纸张、磁盘、光盘等。
  5. 传输媒体: 传输媒体指的用于传输某种媒体的物理媒体。如双绞线、电缆、光纤等。

Some Points

上一篇 下一篇

猜你喜欢

热点阅读