2017年下半年软件设计师选择题

'''

2019.5.10

'''

(1)

八进制表示方法由数字0开头,十六进制由数字0加小写字母x开头


(2)

存储

只读存储器(ROM)存储的内容是固定不变的,只能读出而不能写入的半导体存储器

读写存储器(RAM)既能读出又能写入的半导体存储器

RAM又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)

SRAM其实是一种非常重要的存储器,它的用途广泛。SRAM的速度非常快,在快速读取和刷新时能够保持数据完整性。SRAM内部采用的是双稳态电路的形式来存储数据。所以SRAM的电路结构非常复杂。制造相同容量的SRAM比DRAM的成本高的多。正因为如此,才使其发展受到了限制。因此目前SRAM基本上只用于CPU内部的一级缓存以及内置的二级缓存。仅有少量的网络服务器以及路由器上能够使用SRAM

DRAM
Dynamic RAM,动态随机存取存储器,每隔一段时间就要刷新一次数据,才能保存数据。而且是行列地址复用的,许多都有页模式。SDRAM是其中的一种。

PROM
可编程只读存储器,只能写一次,写错了就得报废

EPROM  
EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。

闪存(Flash)        
闪存(FLASH)是一种非易失性存储器,即断电数据也不会丢失。因为闪存不像RAM(随机存取存储器)一样以字节为单位改写数据,因此不能取代RAM。闪存卡(Flash Card)是利用闪存(Flash Memory)技术达到存储电子信息的存储器,闪存卡大概有U盘、SmartMedia(SM卡)、Compact Flash(CF卡)、MultiMediaCard(MMC卡)、Secure Digital(SD卡)、Memory Stick(记忆棒)


(3)

CPU与I/O设备之间的数据传送方式及特点:

1,查询控制方式

cpu通过程序主动读取状态寄存器以了解接口的情况,并完成相应的数据操作。查询操作需要在时间周期较少的间隔内重复进行,因此cpu效率低

2,中断控制方式:

当程序常规运行中,若外部有优先级更高的事件出现,则通过中断请求通知cpu,cpu在读取状态寄存器确定事件的种类,以便执行不同的分支处理,cpu效率高实时性好

3:DMA(Direct Memory Access)控制方式

直接内存存取即数据传送的具体过程直接由硬件(DMA控制器)在内存和IO之间完成,CPU只在开始时将控制权暂时交予DMA,直到数据传输结束。这种方式传送速度比通过CPU快,尤其是在批量传送时效率很高。

4,通道控制方式

基本方法同上述的DMA控制方式,只是DMA通过DMA控制器完成,通道控制方式有专门通讯传输的通道总线完成。效率比DMA更高。


(4)

网络主动攻击:主动攻击包含攻击者访问他所需信息的故意行为,攻击者是在主动地做一些不利于你或你的公司系统的事情。正因为如此,如果要寻找他们是很容易发现的。主动攻击包括拒绝服务攻击、信息篡改、资源使用、欺骗等攻击方法。、

被动攻击: 被动攻击主要是收集信息而不是进行访问,数据的合法用户对这种活动一点也不会觉察到。被动攻击包括嗅探、信息收集等攻击方法。


(5)
 

编译程序,解释程序和汇编程序的区别

汇编程序(为低级服务)是将汇编语言书写的源程序翻译成由机器指令和其他信息组成的目标程序

解释程序(为高级服务)直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如BASIC解释程序。编译程序(为高级服务)是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。

编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;此外,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用


(6)


(7)

极限编程(xp)

极限编程的主要目标在于降低因需求变更而带来的成本

极限编程中有四个核心价值是我们在开发中必须注意的:

沟通(Communication)、简单(Simplicity)、反馈(Feedback)、勇气(Courage)、此外还扩展了第五个价值观:尊重(Respect)。

基于敏捷的核心思想和价值目标,XP要求项目团队遵循13个核心实践

团队协作(Whole Team)

规划策略(The Planning Game);

结对编程(Pair programming)

测试驱动开发(Testing-Driven Development)

重构(Refactoring)

简单设计(Simple Design)

代码集体所有权(Collective Code Ownership)

持续集成(Continuous Integration)

客户测试(Customer Tests)

小型发布(Small Release)

每周40小时工作制(40-hour Week)

编码规范(Code Standards)

系统隐喻(System Metaphor)


(8)

类图中各种符号的表示

1,依赖:用带箭头的虚线表示,表示一个类依赖于另一个类,其中一个类的变化将影响另一个类的变化。一类是单向的

2,关联

用实线表示,可以是单向也可以是双向,可以理解成一个类持有另一个类的对象

3,聚合

聚合关系表示为空心的菱形箭头线。聚合关系是关联关系的一种,聚合关系是两个类不予不同的层次,强调整体/局部的关系,例如一辆汽车有一个引擎,4个轮胎

4,组合

组合关系表示为实心菱形箭头线。组合也叫合成,组合成关系强调了比聚合关系更加强的整体/部分的关联

但整体不存在是部分也不存在,例如人和四肢

5,泛化

泛化也就是通常所谓的继承关系,在uml中表示为一个带空心三角的实线

6,实现

实现就是对接口的定义实现,很简单。表现为带箭头的虚线


(9)

软件设计模式

创建型模式和结构型模式以及行为型模式的区别:

首先是创建型:社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。结构型模式

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高。行为型模式

【1】创建型模式主要用于创建对象,共5中,工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式

【2】结构型模式主要用于处理类和对象的组合共7种:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,相元模式

【3】行为型模式主要用于描述类或对象怎么样交互和怎么样分配职责,共11种:策略模式,模板方法模式,观察者模式,迭代模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式

 

 

 

创建型模式

1,工厂模式Factory Pattern,定义一个创建对象的接口,让子类自己决定实例话那个工厂类

使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

2,抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式是提供一个抽象工厂接口,里面定义多种工厂,每个工厂可以生产多种对象

 

3,单例模式(Singleton Pattern)

涉及一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,保证一个类仅有一个实例,并提供一个访问它的全局访问点

4,建造者模式(Builder Pattern)

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。

5原型模式:(Prototype Pattern)

用于创建重复的对象,同时又能保证性能。这种模式是实现一个原型接口,该接口用于创建当前对象的克隆。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用应用

实例: 1、细胞分裂。 2、JAVA 中的 Object clone() 方法。

==========

结构型模式

1,适配器模式(Adapter Pattern)

适配器模式是使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,衔接两个不兼容、独立的接口的功能,使得它们能够一起工作,适配器起到中介的作用。

实例美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了 Enumeratio

2,桥接模式(Bridge)将抽象的部分与实现部分分离,使它们都可以独立的变化就好比现在常说的mvc模式,view和model之间通过control来控制,达到高内聚低耦合来解耦的目的。

3,过滤器模式(Filter Pattern)也称为标准模式,允许开发人员使用不同的标准来过滤一组对象

过滤器模式真的就是人如其名,就是过滤,我就把它理解成筛子

 

4,组合模式(Composite Pattern)

组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。

又叫部分整体模式,是用一组相似的对象当做一个单一的对象,组合模式依据树形结构组合对象,用于表示部分及整体层次。

5,装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

使用场景: 1、扩展一个类的功能。 2、动态增加功能,动态撤销

6,外观模式(Facade Pattern)

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

7, 享元模式(Flyweight Pattern)

享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,重用现有的同类对象,若未找到匹配的对象,则创建新对象,这样可以减少对象的创建,降低系统内存,提高效率

使用场景: 1、系统有大量相似对象。 2、需要缓冲池的场景。

8,代理模式(Proxy Pattern)

代理模式是为其他对象提供一种代理以控制对这个对象的访问,也就是创建类的代理类,间接访问被代理类的过程中,对其功能加以控制。它和装饰器模式的区别在于,装饰器模式为了增强功能,而代理模式是为了加以控制。代理模式就是多一个代理类出来,替原对象进行一些操作,例如买火车票不一定在火车站买,也可以去代售点。再比如打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作。

======

行为型模式

1,观察者模式(Observer Pattern),定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。也就是当被观察者状态变化时,通知所有观察者,这种依赖方式具有双向性,在QQ邮箱中的邮件订阅和RSS订阅,当我们浏览一些博客时,经常会看到RSS图标,意思就是,当你订阅了该文章,如果后续有更新,会及时通知你。这种现象即是典型的观察者模式

2,状态模式State Pattern

状态模式是允许对象在内部状态发生改变时改变它的行为。对象具有多种状态,且每种状态具有特定的行为。在网站的积分系统中,用户具有不同的积分,也就对应了不同的状态;还有QQ的用户状态有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态。

3,访问者模式(Visitor Pattern)

使用场景: 1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类

访问者模式主要是将数据结构与数据操作分离。在被访问的类里面加一个对外提供接待访问者的接口,访问者封装了对被访问者结构的一些杂乱操作,解耦结构与算法,同时具有优秀的扩展性。通俗来讲就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。

4,迭代器模式(Iterator Pattern)

迭代器模式是提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。在Java当中,将聚合类中遍历各个元素的行为分离出来,封装成迭代器,让迭代器来处理遍历的任务

实例JAVA 中的 iterator

使用场景: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。

5,中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护

应用实例: 1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。 2、机场调度系统。 3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

使用场景: 1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。 2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

6,策略模式(Strategy Pattern)

策略模式是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,且算法的变化不会影响到使用算法的客户。

应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。

7,模板方法模式(Template Pattern)

模板方法模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。该模式就是在一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,将一些固定步骤、固定逻辑的方法封装成模板方法。调用模板方法即可完成那些特定的步骤。

实例:spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

8,命令模式(Command Pattern)

意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

命令模式是将一个请求封装成一个对象,从而使发出者可以用不同的请求对客户进行参数化。模式当中存在调用者、接收者、命令三个对象,实现请求和执行分开;调用者选择命令发布,命令指定接收者。举个例子,司令员下令让士兵去干件事情,司令员的作用是发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。司令士兵命令三者相互解耦,任何一方都不用去依赖其他人。其实struts框架也涉及到命令模式的思想。

使用场景:认为是命令的地方都可以使用命令模式,比如: 1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。

9,备忘录模式(Memento Pattern)

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式

实例:2、打游戏时的存档。 3、Windows 里的 ctri + z

10,解释器模式(Interpreter Pattern)

应用实例:编译器、运算表达式计算。

意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

解释器模式是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子,基本也就用在这个范围内,适用面较窄,例如:正则表达式的解释等。

11,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦

意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

使用场景: 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3、可动态指定一组对象处理请求。

注意事项:在 JAVA WEB 中遇到很多应用。


(10)

内聚

过程性内聚度是指,模块内成分彼此相关,并且必须按特定的次序执行

通信性内聚度是指,模块中各成分都将对数据结构的同一区域进行操作,以达到通信的目的

如果一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行,则称为顺序内聚


(11)

数据库的三种模式

外模式对应于视图和部分基本表,模式对应于基本表,而内模式对应于存储文件。


(12)

数据库的关系范式

第一范式:属性不可拆分或无重复的列

第二范式:完全函数依赖,在一个关系中,若某个非主属性数据依赖于全部关键字称为完全函数依赖,例如:成绩表(学号,课程号,成绩)关系中,(学号,课程号)->成绩 ,只有学号或课程号无法推出成绩,因此是完全依赖

第三范式:消除传递依赖,不依赖于其他非主属性,满足第三范式必须先满足第二范式。也就是说,数据库中的属性仅能依赖与主属性,不存在与其他非主属性的关联,例如,图书,图书室的关系,图书包括编号和出版社等信息,图书室包括图书室编号所存图书,其中图书室不应该存储任何图书的具体信息(例如出版商),而只能通过图书编号来获取对应图书


(13)常用算法

1,分治法:思想讲一个难以直接解决的大问题,分割成一些规模小的相同的问题,以便各个击破,分而治之。

分治法适用的情况

    分治法所能解决的问题一般具有以下几个特征:

    1) 该问题的规模缩小到一定的程度就可以容易地解决

    2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。

    3) 利用该问题分解出的子问题的解可以合并为该问题的解;

    4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;、

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法

第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好

分治法的应用:1.递归与HANOI塔问题; 2.二分法求方程近似解    3. 用C++实现合并排序   4.求最大值和最小值的分治算法

2,动态规划法(得到全局最优)

也是将待解决的问题分解为若干个子问题,按顺序求解子阶段,前子问题的解,为后一子问题的求解提供有用的信息,在求解任一子问题时,列出各种可能的局部解,通过决策保留那些可能到达最优的局部解,丢弃其他局部解。依次解决各种子问题,最后一个子问题就是初始问题的解

动态规划法的应用:1.动态规划求0/1背包问题      2.最长公共子串问题的实现 3. 用动态规划实现导弹拦截      4.最大化投资回报问题的实现

3,贪心算法(得到局部最优解)

所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
贪心算法的基本思路如下:
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
贪心算法应用:1.最小生成树之Prim算法  2. 最小生成树之kruskal算法3. 贪心算法在背包中的应用 4.汽车加油问题之贪心算法

4,回溯法

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
用回溯法解题的一般步骤:
(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
回溯法应用:1.回溯法之数的划分2.回溯法求解 运动员最佳配对问题 3.回溯法解决汽车加油次数最少问题 4. 用回溯法找出n个自然数中取r个数的全排列

5,分支界限法

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树

在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

分支限界法应用:1.分支限界法之装载问题       2. 分支限界法之布线问题 3. 分支限界法之0 1背包问题 4. 分支限界法之旅行售货员问题

不同点:

分支限界法与回溯法的不同:
(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。 
(2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树

https://blog.csdn.net/m0_37872090/article/details/80819788

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值