目录
前言
法律法规与标准化
专利权
著作权
软件许可
其他
信息安全
CA签名
VPN
报文摘要
防火墙
系统安全
其他
dpi
CVS
LOC
矢量图
媒体分类
图像深度
软件工程
设计模式
原型化软件开发方法
需求分析
软件项目风险
软件风险的特性
软件设计
软件维护
软件测试
软件测试的集成顺序
软件质量模型
开发流程阶段计划
开发模式
软件成熟度模型(CMM)
软件质量保障
内聚模型
划分模块原则
数据流图
McCabe度量法
RUP
MNC
面向对象
基本概念
面向对象分析
面向对象开发方法
面向对象设计的基本原则
面向对象设计中的设计模式
类的实例化
UML图
UML图关系
编程语言
程序语言翻译
正则表达式
基础知识
数据结构
堆栈
二叉树遍历
折半查找
哈夫曼树
计算机组成原理
CPU
浮点数
带宽计算
检验码
计算机操作系统
线程进程
进程管理
进程死锁
空闲区
中断
文件管理可靠性
计算机网络
网络层
数字证书
海明码
对称加密和非对称加密
网络攻击
HTTP协议
VLAN
MIME
SSH协议
ARP协议
其他协议
ping命令
tracert命令
nslookup命令
总结十几年的软考上午真题所涉及的高频高点
考前多看多总结 临时抱佛脚只需看这篇文章即可
有什么交流讨论可评论或者私信博主
敬请关注软考下午真题总结
根据我国专利法第九条规定"两个以上的申请人分别就同样的发明创造申请专利的,专利权授予最先申请的人。",
针对两名以上的申谙人分别就同样的发明创造申请专利,专利权应授予最先申请的人。而不是最先发明的人
与商标权的确定规则区分开来,商标法是同日申请,先使用者获得,无法举证时,抽签决定,专利法,则不看是否先使用,直接协商。
著作权因作品的完成而自动产生,不必履行任何形式的登记或注册手续,也不论其是否已经发表
软件许可使用一般有独占许可使用、独家许可使用和普通许可使用三种形式。独占许可使用,许可的是专有使用权,实施独占许可使用后,软件著作权人不得将软件使用权授予第三方,软件著作权人自己不能使用该软件;独家许可使用,许可的是专有使用权,实施独家许可使用后,软件著作权人不得将软件使用权授予第三方,软件著作权人自己可以使用该软件;普通许可使用,许可的是非专有使用权,实施普通许可使用后,软件著作权人可以将软件使用权授予第三方,软件著作权人自己可以使用该软件。
著作权、邻接权、专利权、商标权、商业秘密权和集成电路布图设计权属于知识产权的范围。物权不属于知识产权的范围。
数字证书能够验证一个实体身份,而这是在保证数字证书本身有效性这一前提下才能够实现的。
验证数字证书的有效性是通过验证颁发证书的CA的签名实现的。
实现VPN的关键技术主要有隧道技、加解密技术、密钥管理技术和身份认证技术。
L2TP、PPTP是两种链路层的VPN协,TLS是传输层VPN协议,IPsec是网络层VPN协议。
报文摘要是用来保证数据完整性的。传输的数据一旦被修改,摘要就不同了。只要对比两次摘要就可确定数据是否被修改过。
DMZ是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的缓冲区,这个缓冲区位于内部网络和外部网络之间的小网络区域内。
包过滤防火墙对数据包的过滤依据包括源IP地址、源端口号、目标IP地址和目标端口号。没有mac地址
机房安全属于物理安全,入侵检测属于网络安全,漏洞补丁管理属于系统安全,而数据库安全则是应用安全。
安全防范体系的层次划分:
(1)物理环境的安全性。包括通信线路、物理设备和机房的安全等。物理层的安全主要体现在通信线路的可靠性(线路备份、网管软件和传输介质)、软硬件设备的安全性(替换设备、拆卸设备、增加设备)、设备的备份、防灾害能力、防干扰能力、设备的运行环境(温度、湿度、烟尘)和不间断电源保障等。
(2)操作系统的安全性。主要表现在三个方面,一是操作系统本身的缺陷带来的不安全因素,主要包括身份认证、访问控制和系统漏洞等;二是对操作系统的安全配置问题;三是病毒对操作系统的威胁。
(3)网络的安全性。网络层的安全问题主要体现在计算机网络方面的安全性,包括网络层身份认证、网络资源的访问控制、数据传输的保密与完整性、远程接入的安全、域名系统的安全、路由系统的安全、入侵检测的手段和网络设施防病毒等。
(4)应用的安全性。由提供服务所采用的应用软件和数据的安全性产生,包括Web服务、电子邮件系统和DNS等。此外,还包括病毒对系统的威胁。
(5)管理的安全性。包括安全技术和设备的管理、安全管理制度、部门与人员的组织规则等。管理的制度化极大程度地影响着整个计算机网络的安全,严格的安全管理制度、明确的部门安全职责划分与合理的人员角色配置,都可以在很大程度上降低其他层次的安全漏洞。
1.拒绝服务是指通过向服务器发送大量连接请求,导致服务器系统资源都被消耗,从而无法向正常用户提供服务的现象。
2.多媒体ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,它通过伪造网关ARP报文与你通信,而使得你的数据包无法发送到真正的网关,从而造成网络无法跨网段通信。
3.公钥体系即非对称加密体系,其密钥分为公钥与私钥。一般公钥用于加密,而私钥用于解密。公钥一般是公开的,大家都可以知道,适合用于认证;而私钥只有密钥拥有者自己知道,可用于签名。
Dots Per Inch的缩写,也就是每英寸的像素。
全称是Concurrent Version System,它是一个免费的协同版本控制工具,主要用于软件源码的维护。此外CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS基于客户端朋及务器模式,多个用户可通过网络(或本地)方式同时访问,从而使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。
LOC是Lines of Codes的缩写,指构成软件的源代码行数。LOC主要用于估算软件成本和规模。软件估算的另外一个传统参数是功能数目。
矢量化图形保存最少的信息,文件大小比位图要小,并且文件大小与物体的大小无关。
可以无限地放大这个圆,它仍然保持平滑,所表达物体的运动、缩放、旋转和填充等都不会降低绘制的精度。所以矢量化图形是最适合电子地图的基木信息格式。
感觉媒体:指人们接触信息的感觉形式。如:视觉、听觉、触觉、嗅觉和味觉等。
表示媒体:指信息的表示形式。如:文字、图形、图像、动画、音频和视频等。
显示媒体(表现媒体)∶表现和获取信息的物理设备。如:输入显示媒体键盘、鼠标和麦克风等;
输出显示媒体显示器、打印机和音箱等。
存储媒体:存储数据的物理设备,如磁盘、光盘和内存等。
传输媒体:传输数据的物理载体,如电缆、光缆和交换设备等。
图像深度是指存储每个像素所用的位数,也是用来度量图像分辨率的。像素深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。如一幅图像的图像深度为b位,则该图像的最多颜色数或灰度级为2种。显然,表示一个像素颜色的位数越多,它能表达的颜色数或灰度级就越多。例如,只有1个分量的单色图像,若每个像素有8位,则最大灰度数目为28=256;一幅彩色图像的每个像素用R、G、B三个分量表示,若3个分量的像素位数分别为4、4、2,则最大颜色数目为24+4+2=210=1024,就是说像素的深度为10位,每个像素可以是21种颜色中的一种。表示一个像素的位数越多,它能表达的颜色数目就越多,它的深度就越深。
设计模式最根本的目的在于复用相似问题的相同解决方案,从而提高软件在设计层次的复用度和设计的水平与质量。
基本思想是软件开发人员对用户提出的需求和问题进行总结,就系统的主要需求取得一致意见后,构造一个软件原型(原型是软件的一个早期版本,通常反映最终软件的部分重要特性,原型应该是可以运行和修改的),使用户在试用原型过程中得到感受和启发,并做出反应和评价。然后开发者根据用户的意见对原型进行改进,使之逐步完善,直到用户对系统完全满意为止。这种开发方法的优点是需求表示清楚,用户满意度较高、可降低开始风险和开发成本。所以原型化方法特别适应于原始需求不明确的软件,因为通过用户的不断使用和体验并提出的评价,使得不断修改的原型逐步达到用户要求。通常,软件开发过程中会得到多个软件原型,只有得到用户认可的才是最终的产品。
软件需求中对软件产品的相应时间,吞吐量,价格等属性的要求都属于非功能性需求。
指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。
软件风险分析包括风险识别、风险预测、风险评估和风险控制共4个不同活动。
其中风险控制是利用某些技术和方法设法避开或转移风险,在此活动中,通常需要考虑风险避免、风险监控和风险管理及意外事件计划3方面问题。
风险识别的任务是通过建立风险条目检查表,试图系统化地确定对项目计划的威胁。
该检查表可以用于识别风险,并使得人们集中来识别一些常见的、已知的及可预测的风险。
风险预测,又称风险估算,它从两个方面评估一个风险:风险发生的可能性或概率;以及如果风险发生了所产生的后果。
风险评估的任务是定义风险参考水平值,预测影响参考水平值的风险组合。
风险控制的任务是风险避免、风险监控和风险管理及意外事件计划。
风险暴露又称风险曝光度,测量的是资产的整个安全性风险,它将表示实际损失的可能性与表示大量可能损失的资讯结合到单一数字评估中。在形式最简单的定量性风险分析中,风险曝光度可透过将风险可能性及影响相乘算出。风险曝光度(Risk Exposure)=错误出现率(风险出现率)×错误造成损失(风险损失)。
软件风险一般包括不确定性和损失两个特性,其中不确定性是指风险可能发生,也可能不发生,损失是当风险确实发生时,会引起的不希望的后果和损失。
救火和危机管理是对不适合但经常采用的软件风险管理策略。
已知风险和未知风险是对软件风险进行分类的一种方式。
员工和预算是在识别项目风险时需要识别的因素。
软件设计的任务是基于需求分析的结果建立各种设计模型,给出问题的解决方案。
从工程管理的角度,可以将软件设计分为两个阶段∶概要设计阶段和详细设计阶段。
结构化设计方法中,概要设计阶段进行软件体系结构的设计、数据设计和接口设计;详细设计阶段进行数据结构和算法的设计。
面对对象设计方法中,概要设计阶段进行体系结构设计、初步的类设计/数据设计、结构设计;详细设计阶段进行构件设计。
结构化设计和面向对象设计是两种不通过的设计方法,结构化设计根据系统的数据流图进行设计,模块体现为函数、过程及子程序;面向对象设计基于面向对象的基本概念进行,模块体现为类、对象和构件等。
软件维护的内容一般包括准确性维护、适应性维护、完善性维护和预防性维护。
正确性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。
适应性维护是指使应用软件适应信息技术变化和管理需求变化而进行的修改。
完善性维护主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。
预防性维护是指为了适应未来的软硬件环境的变化,主动增加预防性的新功能,以使应用系统适应各类变化而不被淘汰。
软件测试方法分为静态测试和动态测试。静态测试是被测试程序不在机器上运行而采用人工检测和计算机辅助静态分析手段对程序进行检测。动态测试是通过运行程序发现错误,对软件产品进行动态测试时可以采用黑盒测试和白盒测试法。黑盒测试法在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。对于无法获得源代码的第三方组件,可采用黑盒对组件进行测试。基本路径覆盖、分支覆盖和环路覆盖需要根据程序的内部结构和逻辑进行测试。
软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。软件测试是软件质量保证的主要手段之一,软件测试应该尽可能早地计划和设计测试用例,而不是从编码阶段开始。
一个好的测试用例是极有可能发现至今为止尚未发现的错误的测试用例。一次成功的测试是发现了至今为止尚未发现的错误的测试。一个高效的测试是指用少量的测试用例,发现被测软件尽可能多的错误。软件测试不能说明软件中不存在错误。
经验表明,测试中存在集群规律,即未发现的错误数量与已发现的错误数量成正比,已发现的错误数量越多,则该模块未被发现的错误也就越多。
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
在单元测试开始时,应该对通过所有被测模块的数据流进行测试。
1输入参数是否与形式参数是否一致。
2.调用模块的实参与被调用模块形参是否一致。
3全局变量在各模块中的定义和用法是否一致
4.外部输入、输出等等。
没有这个选项 输入参数是否使用了尚未赋值或者尚未初始化的变量
1、自顶向下集成
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产品的主要控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
2、自底向上集成
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
ISO/IEC 9126软件质量模型中可靠性质量特性是指在规定的一段时间内和规定的条件下,软件维护其性能水平有关的能力。
包括的子特性有成熟性、容错性和易恢复性。
系统开发计划用于系统开发人员与项目管理人员在项目期内进行沟通的文档主要有系统开发计划,包括工作任务分解表、PERT图、甘特图和预算分配表等。
总体规划和开发合同用于与系统分析人员在系统规划和系统分析阶段的沟通。
测试计划用于系统测试人员与系统开发人员之间的沟通。
项目的初始活动是初启阶段的活动;
需求分析和架构演进是精化阶段的活动,精化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。
系统的构建,产生实现模型是构建阶段的活动;
软件提交方面的工作,产生软件增量是交付阶段的活动。
建立基本的项目管理和实践来跟踪项目费用
进度和功能特性为可重复级的核心
使用标准开发过程(或方法论)构建((或集成)系统为已定义级的核心
管理层寻求更主动地应对系统的开发问题为已管理级的核心
连续地监督和改进标准化的系统开发过程为优先级的核心。
正式技术评审是一种由软件工程师和其他人进行的软件质量保障活动。其目标包括:
(1)发现功能、逻辑或实现的错误;
(2)证实经过评审的软件的确满足需求;
(3)保证软件的表示符合预定义的标准;
(4)得到一种一致的方式开发的软件;
(5)使项目更易管理。
软件设计阶段,划分模块的原则是:一个模块的作用范围应该在其控制范围内。
模块的作用范围是指受该模块内部一个判定影响的所有模块集合,只有某一模块内含有依赖于该判定的操作,那么该模块就在该判定的作用范围内。
模块的控制范围包括该模块本身以及该模块的所有下属模块。控制范围完全取决于系统的结构,与模板本身的功能并没有多大关系。
在系统设计中,对于模块的作用范围和控制范围有两条规则:
(1)对于任何一个判断,其作用范围应该是这个判断所在模块的控制范围的一个子集。换言之,所有受判断影响的模块应该从属于做出判断的那个模块。
(2)受模块M判定影响的模块,最好局限于模块M本身或其直接下属模块。因此,一个模块的作用范围应该在其控制范围之内。
数据流图摆脱系统的物理内容,在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
数据流图的设计原则:
1.数据守恒原则
2.守恒加工原则
3.对于每个加工,必须既有输入数据流,又有输出数据流
4.外部实体与外部实体之间不存在数据流
5.外部实体与外部存储之间不存在数据流
6.数据存储与数据存储之间不存在数据流
7.父图与子图的平衡原则
8.数据流与加工有关,且必须经过加工
DF2违背④,DF6违背⑤,DF7违背⑥,P1和P3缺少数据流违背③,P4违背②,因此共有六个错误。
McCabe度量法是通过定义环路复杂度,建立程序复杂性的度量,它基于一个程序模块的程序图中环路的个数。计算有向图G的环路复杂性的公式为V(G)=m-n+2,其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。要采用McCabe度量法度量程序复杂度,需要先画出程序图,识别有向图中节点数n和有向弧数m。然后利用环路复杂性计算公式V(G)=m-n+2进行计算
代码行数度量法以程序的总代码行数作为程序复杂性的度量值。
对软件开发过程的描述。RUP应用了角色、活动、制品和工作流4种重要的模型元素
其中角色表述“谁做"”,制品表述“做什么”,活动表述“怎么做",工作流表述“什么时候做”。
初启阶段结束时产生一个构想文档、一个有关用例模型的调查、一个初始的业务用例、一个早期的风险评估和一个可以显示阶段和迭代的项目计划等制品
精化阶段结束时产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等制品
构建阶段结束时的成果是一个准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述
移交阶段结束时产生移交给用户产品发布版本。
MNC是分层架构风格的一种,采用关注点分离的方针,将可视化界面呈现(View)、U处理逻辑(Controller)和业务逻辑(Model)三者分离出来,并且利用合理的交互方针将它们之间的依赖降至最低。解耦之后,有利于代码重用、提高系统的可维护性,也可提高系统的开发效率,但是由于分层之后,调用也需要分层调用,所以不能提高系统的运行效率。
一般将多态分为通用多态和特殊多态。通用多态包括参数多态和包含多态。
参数多态采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。
包含多态同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。)包含多态一般需要进行运行时的类型检查。如Pascal中的子界。
特殊多态包括强制多态和过载多态。
强制多态编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,编译程序一般都会进行强制多态
过载多态是一种特定的多态,指同一个名((操作符、函数名)在不同上下文中可代表不同的含义。
面向对象分析主要回答软件系统需要解决什么问题,在面向对象分析阶段,并不考虑系统实现以及系统的测试问题,强调建立独立于系统实现的系统分析模型,其关注点仍然侧重于问题域。
面向对象开发方法有Booch方法、Coad方法和OMT方法。Jackson方法是一种面向数据结构的开发方法。
面向对象设计中存在很多原则,其中高层模块不应该依赖于底层模块就是其中一条。传统的结构化设计中,一般的高层模块需要调用或使用底层模块,导致高层模块必须依赖于底层模块,但借助面向对象中的抽象类、接口等一系列机制,可以使得高层模块仅仅和接口耦合,而和实际的底层模块没有直接关联。
单例设计模式的目的就是保证一个类仅能够生成一个对象;
组合设计模式则用于表示"部分-整体"的层次结构,并且对部分和整体的使用具有一致性;
装饰设计模式则动态地给一个对象增加一些额外的职责,无须改变类的设计和实现。
不希望在抽象和它的实现部分之间有一个固定判定关系.(桥接模型)
想表示对象的部分-整体层次结构(组合模型)
想使用一个已经存在的类,而它的接口不符合要求(适配模型)
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责(装饰模型)
代理模式(Proxy) :为其他对象提供一种代理以控制这个对象的访问。
生成器模式(Builder):将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。
组合模式(Composite):将对象组合成树型结构以表示"整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
按照设计模式的目的可以分为创建型、结构型和行为型三大类。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。每种设计模式都有其适应性,描述适用于解决的问题场合。
常见的创建型模式主要有工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例(Singleton)、构建器(Builder) 、原型(Prototype)模式;
结构型模式有适配器(Adapter)、组合(Composite)、装饰(Decorator)、代理(Proxy)、享元(Flyweight) .外观(Facade) 、桥接(Bridge)模式;
行为型模式有策略((Strategy)、模板方法(Template Method)、迭代器(lterator)、责任链(Chain ofResponsibility)、命令(Command)、备忘录(Memento)、状态(State)、访问者(Visitor)、解释器( (Interpreter) 、中介者(Mediator) 、观察者(Observer)模式。
类是用户定义的类型。与语言定义的基本类型一样,有了类型后,就可以定义(创建)该类型的变量,其含义是系统为变量分配存储空间。对于程序中定义的类,并不要求一定要创建其实例,对实例的数目也没有限制。创建类的实例时,系统需要为该实例分配存储空间。
.类图(class diagasn):展现了一组对象、接口、协作和它们之间的关系.在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图。
.对象图(object diagram):展现了一组对象以及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图相同,这些图给出系统的睁态设计视图或爵态进程视图,但它们是从真实的或原型案例的角度建立的。
.用例图(use case diagram):展现了一组用例、参与者(actor)以及它们之间的关系.用例图给出系统的静态用例视图。这些图对系统的行为进行组织和建模是非常重要的。对新开发系统的需求进行建模,规划开发什么功能或测试用例
.序列图(sequence diagram):是场景(scenario)的图形化表示.描述了以时间顺序组织的对象之间的交互活动.
.协作图(collaboration或communication diagram):强调收发消息的对象的结构组织。
序列图和协作图都是交互图(interaction diagram )。交互图展现了一种交互,它由一组对象和它们之间的关系组成,包括它们之间可能发送的消息。交互图关注系统的动态视图。序列图和协作图是同构的,它们之间可以相互转换。
.状态图(statechart diagram):展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,它对于接口、类和协作的行为建模尤为重要,它强调对象行为的事件顺序。
.活动图(activity diagram ) :是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。活动图专注于系统的动态视图。它对于系统的功能建模特别重要,并强调对象间的控制流程。
.构件图(component diagram) :展现了一组构件之间的组织和依赖.构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。
.部署图(deployment diagram):展现了运行处理节点以及其中的构件的配置。部署图给出了体系结构的静态实施视图。它与构件图相关,通常一个节点包含一个或多个构件。
部署图展现了运行处理节点以及其中的构件的配置。部署图给出了体系结构的静态实施视图。它与构件视图相关,通常一个结点包含一个或多个构件。部署图一般描述的是代码或系统在实施中的物理节点分布,组件之间的依赖关系类似于包依赖。
状态图展现一个状态机,它由状态、转换、事件和活动组成。可以用状态图对系统的动态方面建模。这些动态方面可以包括现在系统体系结构的任何视图中的任何一种对象的按事件排序的行为,这些对象包括类(主动类)、接口、构件和结点。所以状态不会表示多个对象之间的交互。
类图是描述类的构成以其多个类之间存在的静态关系的一种工具。对于一个系统中的两个类而言,它们要么不存在任何关系,要么存在is-like-a的关系,或has-a的关系.其中is-like-a表示两个类之间的继承关系,has-a表示两个类之间存在的整体与部分形式的组成关系,即其中一个类的数据成员的类型是另外一个类,而这种关系在UML中采用聚合关系表示。
UML用关系把事物结合在一起,主要有下列四种关系:
(1))依赖(dependency)。依赖是两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
(2)关联(association)。关联描述一组对象之间连接的结构关系。
(3)泛化(generalization)。泛化是一般化和特殊化的关系,描述特殊元素的对象可替换一般元素的对象。
(4)实现(realization)。实现是类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词"符号。语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式"、“语句"和“程序"等。语义分析阶段主要检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。语法错误是指语言结构上的使用错误,是指编译时所发现的程序错误,如单词拼写错误、标点符号错、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
a的个数可能没有,也可能是多个,与之对应的是a*
至少有一个b,那么与之对应的就是bb*
一、“中间代码"是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。这是错的:中间代码与机器语言代码在指令结构上必须一致
二、链表中的结点空间需要程序员根据需要申请和释放,因此,数据空间应采用堆存储分配策略。
三、面向对象中,类是对象的模板,描述了一组对象共有的成员属性和方法。类是一组对象的抽象描述,通过类可以产生一个或多个对象,这些对象具有相同的属性和方法。
四、编译程序:将源程序编译成可以直接运行的目标语言程序。解释程序:直接解释执行的源程序或者将源程序翻译成某种中间代码后再加以执行,解释程序需要参与运行。
五、全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。
六、所谓递归下降法(recursive descent method),是指对文法的每一非终结符号,都根据相应产生式各候选式的结构,为其编写一个子程序(或函数),用来识别该非终结符号所表示的语法范畴。自上而下的语法分析。
七、程序员编写的源程序中往往会有一些错误,这些错误大致被分为静态错误和动态错误两类。
所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,比如算法逻辑上的错误。动态错误也被称为动态语义错误,如变量取值为0是被用作除数,引用数组元素时下标出界等。
静态错误又可以分为语法错误和静态语义错误。词法和语法错误是指有关语言结构上的错误,如单词拼写错误就是一种词法错误,表达式中缺少操作数、括号不匹配是不符合语法规则要求的语法错误等。静态的语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的两个操作数中一个是实型变量名,而另一个是数组名等。
八、非确定有限状态自动机与确定有限状态自动机的最大区别是它们的转移函数不同。确定有限状态自动机对每一个可能的输入只有一个状态的转移。非确定有限状态自动机对每一个可能的输入可以有多个状态转移,接受到输入时从这多个状态转移中非确定地选择一个。
在本题中给出的图M1中,我们可以看到当在状态A输入0时,它可以转移到它自己,也可以转移到状态B,所以M1是非确定的。而M2中不存在这样的情况,因此是确定的有限自动机。
栈是局部变量以及每次函数调用时所需保存的信息的存储区域,其空间的分配和释放由操作系统进行管理。每次函数调用时,其返回地址以及调用者的环境信息(例如某些寄存器)都存放在栈中。然后,在栈中为新被调用的函数的自动和临时变量分配存储空间。栈空间向低地址方向增长。堆是一块动态存储区域,由程序员在程序中进行分配和释放,若程序语句没有释放,则程序结束时由操作系统回收。堆空间地址的增长方向是从低地址向高地址。在C程序中,通过调用标准库函数mallacallocrealloc等向系统动态地申请堆存储空间来存储相应规模的数据,之后用free函数释放所申请到的存储空间。
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出(largest-in,first-out)的行为特征。优先队列一般采用二叉堆数据结构实现,由于是二叉堆,所以插入和删除一个元素的时间复杂度均为O(lgn)。
从先序遍历序列和后序遍历序列中无法将左子树和右子树上的结点区分开,因此,由某棵二叉树的先序遍历序列和后序遍历序列不能构造出该二叉树的中序遍历序列。
进行折半查找时,首先与表中间位置上的元素进行比较,若待查找的元素大于中间元素,则接下来在后半区(是比中间元素更大者组成的有序子表)进行折半查找,否则在前半区(是比中间元素更小者组成的有序子表)进行折半查找。二分查找过程可用二分查找判定树来描述,即大于中间元素时走右分支,小于中间元素时走左分支,等于时查找成功结束。
哈夫曼树是一种特殊的二叉树,但它不是完全二叉树,也不是平衡二叉树,给出n个权值(w,W2.... w.]构造一棵具有n个叶子结点的哈夫曼树的方法如下:
第一步,构造n个只有根结点的二叉树集合F={ T1,T2,...Tn},其中每棵二叉树T的根结点带权为WN;(1SkSn);第二步,在集合F中选取两棵根结点的权值最小的二叉树作为左右子树,构造一棵新的二叉树,令新二叉树根结点的权值为其左、右子树上根结点的权值之和;
第三步,在F中删除这两棵二叉树,同时将新得到的二叉树加入到F中;
第四步,重复第二步和第三步,直到F只含有一棵二叉树为止,这棵二叉树便是哈夫曼树。综上所述,我们可以知道哈夫曼树中权值最小的两个结点互为兄弟结点。
计算机的控制中心,主要由运算器、控制器、寄存器组和内部总线等部件组成,控制器由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的"决策机构”,即完成协调和指挥整个计算机系统的操作。它的主要功能有:从内存中取出一条指令,并指出下一条指令在内存中的位置;对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作;指挥并控制CPU、内存和输入输出设备之间数据的流动。
程序计数器(PC)是专用寄存器,具有寄存信息和计数两种功能,又称为指令计数器,在程序开始执行前,将程序的起始地址送入PC,该地址在程序加载到内存时确定,因此PC的初始内容即是程序第一条指令的地址。执行指令时,CPU将自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序执行的,因此修改的过程通常只是简单地对PC加1。当遇到转移指令时,后继指令的地址根据当前指令的地址加上一个向前或向后转移的位移量得到,或者根据转移指令给出的直接转移的地址得到。
阶码的长度决定浮点表示的范围,尾数的长度决定浮点表示的精度
需要注意的是,当M=-1/2时,对于原码来说是规格化数,而对于补码来说不是规格化数。
两个浮点数进行相加运算时,首先需要对阶(使它们的阶码一致),然后再进行尾数的相加处理。
总线的带宽指单位时间内传输的数据总量。
带宽=数据总量/总时间(注意单位的转换)
ps:在计算机当中,时钟频率是其时钟周期的倒数,表示时间的度量,本题时钟周期为1/200MHz。
总线宽度是指总线的线数,即数据信号并行传输的能力,本题传送大小与总线宽度一致,不需要处理。传送32bit的字,即数据总量为32bit;5个时钟周期,即(1/200MHz)×5,为总时间。
即总带宽=32bit/ (5/20OMHz) =1280Mbit/s=160MB/s。
一个编码系统中任意两个合法编码(码字)之间不同的二进数位数称为这两个码字的码距,而整个编码系统中任意两个码字的最小距离就是该编码系统的码距。为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是3。
海明码是一种可以纠正一位差错的编码,是利用奇偶性来检错和纠错的校验方法。海明码的基本意思是给传输的数据增加r个校验位,从而增加两个合法消息(合法码字)的不同位的个数((海明距离)。假设要传输的信息有m位,则经海明编码的码字就有n=m+r位。
循环冗余校验码(CRC)编码方法是在k位信息码后再拼接r位的校验码,形成长度为n位的编码,其特点是检错能力极强且开销小,易于用编码器及检测电路实现。它只能检测出错误,而不能纠正错误。
线程共享的环境包括:进程代码段、进程的公有数据、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
图中原因1是由于调度程序的调度引起:原因2是由于时间片用完引起;
原因3是由于IO请求引起,例如进程执行了P操作,由于申谙的资源得不到满足进入阻塞队列;
原因4是由于IO完成引起的,例如某进程执行了V操作将信号量值减1,若信号量的值小于0,意味着有等待该资源的进程,将该进程从阻塞队列中唤醒使其进入就绪队列;
例如:5个并发进程,且都需要3个资源,那么最坏的情况就是,每个进程都获得了比需要少一个的资源,即5个进程都分配了2个资源,如果这个时候,系统还有多的一个资源,那么无论分给那个进程,都不会死锁,这个时候是11个资源。因此系统只要有11个资源,那么无论怎么分配资源都不会死锁。
其释放的空间上下方都有空闲区,故将两个空闲区与自身要释放的空闲区合并,从而形成一个空闲区,导致系统的空闲区数量上减1
而造成这种现象的主要原因就是要释放空闲区相邻的上下方空闲区。
中断系统是计算机实现中断功能的软硬件总称。一般在CPU中设置中断机构,在外设接口中设置中断控制器,在软件上设置相应的中断服务程序。中断源在需要得到CPU服务时,请求CPU暂停现行工作转向为中断源服务,服务完成后,再让CPU回到原工作状态继续完成被打断的工作。中断的发生起始于中断源发出中断请求,中断处理过程中,中断系统需要解决一系列问题,包括中断响应的条件和时机,断点信息的保护与恢复,中断服务程序入口、中断处理等。中断响应时间,是指从发出中断请求到开始进入中断服务程序所需的时间。
一、在计算机中,实现计算机与外部设备之间数据交换经常使用的方式有无条件传送、程序查询、中断和直接存储器存取(即DMA)。其中前三种都是通过CPU执行某一段程序,实现计算机内存与外设间的数据交换。只有在DMA方式下,CPU不需要过多参与工作,而只在开始和结束时作少量处理,其它时候都是将计算机系统总线的控制权交予DMA控制器,然后在DMA控制器的控制下,实现内存与外设间数据的直接传送。
由于DMA方式是在DMA控制器硬件的控制下实现数据的传送,不需要CPU执行程序,故这种方式传送数据的速度最快。DMA控制外设和主存之间的数据传送,无须CPU的干预。因此DMA工作方式下,在主存和外设之间建立了直接的数据通路。
二、断点可以保存在堆栈中,由于堆栈先进后出的特点,依次将程序的断点压入堆栈中。出栈时,按相反顺序便可准确返回到程序间断处。
三、发生中断时,计算机可以将中断向量暂时的存储在一个地方,而当执行完别的程序时,可以从暂存的地方将中断向量取出放入原来的位置,从而可以执行原来中断的程序,即中断向量可描述中断服务程序的入口地址。
影响文件系统可靠性因素之一是文件系统的一致性问题。很多文件系统是先读取磁盘块到主存,在主存进行修改,修改完毕再写回磁盘。例如读取某磁盘块,修改后再将信息写回磁盘前系统崩溃,则文件系统就可能会出现不一致性状态。如果这些未被写回的磁盘块是索引节点块、目录块或空闲块,特别是系统目录文件,那么对系统的影响相对较大,且后果也是不堪设想的。通常解决方案是采用文件系统的一致性检查,一致性检查包括块的一致性检查和文件的一致性检查。
在TCP/IP网络中,建立连接进行可靠通信描述的是TCP协议,属于传输层协议。
在OSI/RM七层模型中,传输层以上还有会话层、表示层、应用层,传输层以下是网络层。
应用层主要实现具体的应用功能。
表示层主要处理数据的格式与表达、加密、压缩。
会话层会为表示层提供建立、维护和结束会话连接的功能,并提供会话管理服务,也就是说会话层可以建立连接,第二空选择会话层。网络层为传输层的数据传输提供建立、维护和终止网络连接的手段,这里针对的是网络连接,与可靠性连接无关,与本题不符.
数字证书是由权威机构―—CA证书授权(Certificate Authority)中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在因特网交往中用它来证明自己的身份和识别对方的身份。
数字证书包含版本、序列号、签名算法标识符、签发人姓名、有效期、主体名和主体公钥信息等并附有CA的签名,用户获取网站的数字证书后通过验证CA的签名来确认数字证书的有效性,从而验证网站的真伪。
在用户与网站进行安全通信时,用户发送数据时使用网站的公钥(从数字证书中获得)加密,收到数据时使用网站的公钥验证网站的数字签名,网站利用自身的私钥对发送的消息签名和对收到的消息解密。
只要是海明码按合法的方式编码,就能纠错。所以,本题实际上就是求海明码中校验位的长度。海明码中所需要的校验码位数,有这样的规定的:假设用N表示添加了校验码位后整个信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位,它们之间的关系应满足:2r>=K+r+1=N。
假设信息位K=16,则要求2'>=16+r+1,根据计算可以得知r的最小值为5。
对大量明文进行加密,考虑效率问题,一般采用对称加密。
RSA是非对称加密算法
SHA-1与MD5属于信息摘要算法
RC-5属于对称加密算法
这些算法中SHA-1与MD5是不能用来加密数据的,而RSA由于效率问题,一般不直接用于大量的明文加密,适合明文加密的,也就只有RC-5了。
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
Kerberos系统采用的是时间戳方案来防止重放攻击,这种方案中,发送的数据包是带时间戳的,服务器可以根据时间戳来判断是否为重放包,以此防止重放攻击。
在HTTP协议中,GET可以用于获取一个指定页面内容;而HEAD用户获取头部信息;POST可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。READ为干扰项,没有该命令。
VLAN即虚拟局域网,其优点是:限制网络上的广播,将网络划分为多个VLAN可减少参与广播风暴的设备数量。LAN分段可以防止广播风暴波及整个网络。VLAN可以提供建立防火墙的机制,防止交换网络的过量广播。使用VLAN,可以将某个交换端口或用户赋于某一个特定的VLAN组,该VLAN组可以在一个交换网中或跨接多个交换机,在一个VLAN中的广播不会送到VLAN之外。同样,相邻的端口不会收到其他VLAN产生的广播。这样可以减少广播流量,释放带宽给用户应用,减少广播的产生。
它是一个互联网标准,扩展了电子邮件标准,使其能够支持多媒体数据。
SSH为 Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
ARP协议的作用是由目标的IP地址发现对应的MAC地址。
如果源站要和一个新的目标通信,首先由源站发出ARP请求广播包,其中包含目标的IP地址,然后目标返回ARP应答包,其中包含了自己的MAC地址。
这时,源站一方面把目标的MAC地址装入要发送的数据帧中,一方面把得到的MIAC地址添加到自己的ARP表中。
当一个站与多个目标进行了通信后,在其ARP表中就积累了多个表项,每一项都是IP地址与MAC地址的映射关系。
ARP表通常用于由IP地址查找对应的MAC地址。
POP是邮局协议,用于接收邮件;SNMP是简单网络管理协议,用于网络管理;HTTP是超文本传输协议,众多Web服务器都使用HTTP,但是该协议不是安全的协议;HTTPS是安全的超文本传输协议。
Ping是Windows系列自带的一个可执行命令,用于验证与远程计算机的连接.该命令只有在安装了TCPIP协议后才可以使用。
Ping命令的主要作用是通过发送数据包并接收应答信息来检测两台计算机之间的网络是否连通。当网络出现故障的时候,可以用这个命令来预测故障和确定故障地点。
Ping命令成功只是说明当前主机与目的主机之间存在一条连通的路径。
如果不成功,则考虑网线是否连通、网卡设置是否正确、IP地址是否可用等。
利用它可以检查网络是否能够连通。Ping命令应用格式: ping lP地址。该命令还可以加参数使用,输入Ping后按回车键即可看到详细说明。
tracert命令主要用来显示数据包到达目的主机所经过的路径。
该命令的使用格式是在DOS命令提示符下或者直接在运行对话框中输入如下命令: tracert主机JIP地址或主机名。
执行结果返回数据包到达目的主机前所经历的中继站清单,并显示到达每个中继站的时间。
该功能同ping命令类似,但它所看到的信息要比Ping命令详细得多,它把用户送出的到某一站点的请求包,所走的全部路由都告诉用户,并且告诉用户通过该路由的IP是多少,通过该1P的时延是多少。
具体的tracert命令后还可跟参数,输入tracert后按回车键,其中会有很详细的说明。
nslookup命令的功能是查询一台机器的IP地址和其对应的域名。
它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。该命令的一般格式为:nslookup [IP地址/域名]。