一、软件工程基础知识
1. 开发方法与开发模型
1.1 软件生存周期
- 计划阶段:确定系统的总体目标和范围、系统的可行性和解决方案。对资源和进度合理的估算。
- 分析阶段:整理并分析收集到的用户需求,建立分析模型。确定软件的功能、性能、测试方法数据要求等目标。编写软件需求规格说明书。需求分析确定软件要完成的功能及非功能性要求。
- 设计阶段:依据软件需求规格说明书,在概要设计阶段,将需求转化为软件的模块划分,确定模块之间的调用关系。在详细设计阶段,将模块进行细化,得到详细的数据结构和算法。
- 实现阶段:根据详细设计结果,将每个模块编写成程序代码和相关的文档,得到可以运行的程序。
- 测试阶段:先进行单元测试,检查各个软件模块。再进行集成测试,测试整个产品的功能和性能是否满足软件需求说明书。
软件复杂性度量是软件度量的一个重要分支。软件复杂性度量的参数有很多,主要包括:
- 规模,即指令数或者源程序行数;
- 难度,通常由程序中出现的操作数所决定的量来表示;结构通常用与程序结构有关的度量来表示;
- 智能度,即算法的难易程度。
1.2 软件开发方法
- 结构化开发方法
- 面向数据流的开发方法
- 分为结构化分析(用数据流图建立系统功能模型)
- 结构化设计(设计软件体系结构从而得到系统物理模型(分为各种模块))
- 结构化程序设计(顺序,选择和重复3中基本控制结构构造)
- 指导思想:自顶向下,逐层分解。
- 基本原则:功能的分解与抽象,
- 适用环境:数据处理领域;不适合大规模、复杂的项目
- 原型方法
- 基本思想:在限定时间内,快速经济的开发一个可运行的系统模型,然后根据用户对此系统的评价,提出改进意见对原型进行修改,重复进行此过程最终完全满足用户需求为止
- 适用环境:用户需求不清楚,经常变化;系统规模不大。
- 面向对象方法
- 出发点:尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。
- 以对象作为基本元素和解决问题的核心。
- 面向对象分析(OOA):认定对象、组织对象、对象间的相互作用、基于对象的操作
- 面向对象设计(OOD):整理问题,对分析结果进行抽象,归类,整理。
- 面向对象程序设计(OOP):程序的实现
- Booch方法、Coad方法和OMT方法等都属于面向对象方法。
- 敏捷方法
- 总体目标:做到尽可能早的,持续的对有价值的软件交付,从而使客户满意
- 极限编程:4大价值观:沟通,简单性,反馈和勇气。5个原则和12个最佳实践。
- 水晶法:每一个不同的项目都需要一套不同的策略、约定和方法论。
- 并列争求法:多个自组织和自治的小组并行得递增实现产品,使用了选代的方法
- 自适应软件开发:特征;过程的等待;重做;变化;确定的交付时间,风险。
1.3 软件开发模型
| 模型名称 | 技术特点 |
|---|---|
| 瀑布模型 | 将软件开发项目划分为制订计划,需求分析,软件设计,程序编写,软件测试和运行维护6个阶段。并确定了自上而下,相互衔接的固定次序。优点是规范化过程,有利于评审。缺点是缺乏灵活性,容易产生需求偏差 |
| 快速原型模型 | 第一步是建造一个快速原型交付使用,客户对原型进行评价。开发人员通过逐步调整原型确定客户的真正需求;第二步是在第一步的基础上,开发客户满意的软件产品。优点是可以克服瀑布模型的缺点,减少开发风险。缺点是维护困难,不适合大型系统 |
| 演化模型 | 该模型首先开发软件的核心系统,然后根据用户在使用过程中提出的建议进行改进产生新的版本。重复这一过程,使用户最终获得满意的软件。演化模型适用于软件需求不明确的情况下使用 |
| 增量模型 | 整个软件产品被分解成若干个构件,开发人员逐个构件的交付产品。优点是适应变化,降低开发风险,适用于需要快速发布产品的市场环境 |
| 螺旋模型 | 综合了瀑布模型和演化模型的优点,增加了风险分析。适用于大型复杂的系统开发优点是支持用户需求的动态变化,降低风险,缺点是增加开发成本。 |
| 喷泉模型 | 主要用于描述面向对象的开发过程,核心特点是迭代。所有开发活动没有明显边界,允许各种开发活动交叉进行。 |
2. 数据流图与数据字典
基本概念:
- 外部实体
- 外部系统是当前系统之外的人、物、外部系统
- 数据存储
- 存储加工的数据或者提供数据给加工
- 加工
- 将输入数据处理后得到输出数据
- 一个加工至少有一个输入数据流和一个输出数据流
- 数据流
- 数据流的起点或者终点必须有一个是加工。两个都是加工也可以
解题方式:
问题1:求解外部实体
通过文字内容和0层数据流图做对比,注意不要看顶层数据流图,看0层数据流图能保证答案的准确性。
问题2:求解数据存储
与问题1的解题方式相同,记得后面加上表或者文件,例:(相关信息)表或文件,在名字后面添加表或文件。
问题3:求解数据流
一般来说,数据流条数等于该题的分值到分值的一半。
具体解题步骤(问题3):
-
父图子图平衡:
根据顶层数据流图看0层数据流图,看顶层图中有的数据流但0层图中没有的数据流,那就是缺失的数据流。 -
加工既有输入数据流也有输出数据流:
看0层图中的加工,每一个加工都应该有指向加工的箭头和从加工指出的箭头,如果没有,就代表有缺失的数据流。 -
数据守恒:
看文字内容和0层图,对应的数据流进行查找,然后将找出来的数据流与前两步缺失的数据流进行组合拼接。
找出来的数据流条数:分值的一半 <= 数据流条数 <= 分值。
如何保持数据流图平衡:
图 1-1(或父图)中某加工的输入输出数据流必须与图 1-2(或子图)的输入输出数据流在数量和名字上相同;
图 1-1(或父图)中的一个输入(或输出)数据流对应于图1-2(或子图)中几个输入(或输出)数据流,而图1-2(或子图)中组成这些数据流的数据项全体正好是父图中的这一条数据流。
3. 结构化设计
软件设计必须依据软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息,其关系为:
- 根据加工规格说明和控制规格说明进行过程设计;
- 根据数据字典和实体关系图进行数据设计;
- 根据数据流图进行接口设计;
- 根据数据流图进行体系结构设计。
软件设计时需要遵循抽象、模块化、信息隐蔽和模块独立原则。耦合性和内聚性是模块独立性的两个定性标准,在划分软件系统模块时,尽量做到高内聚、低耦合,提高模块的独立性。
3.1.耦合
耦合类型:从低到高依次为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
- 公共耦合 是指一组模块都访问同一公共数据环境;
- 控制耦合 传递的是控制变量;
- 标记耦合 传递的是数据结构;
- 数据耦合 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
- 外部耦合 模块间通过软件之外的环境联结(如IO将模块耦合到特定的设备、格式、通信协议上)时称为外部耦合。
- 内容耦合 当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部时,这种模块之间的耦合称为内容耦合。
耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。而模块的内聚类型则与模块内各部分功能之间的关系有关。
3.2.内聚
从高到低依次为功能、通信、顺序、过程、时间、逻辑和偶然内聚。
最低的内聚性,是最不好的一种内聚类型。具有该类内聚类型的模块具有不易修改、不易理解和不易维护等特点,同时会影响到模块间的耦合关系。
内聚是指模块内部各元素之间联系的紧密程度,内聚度越高,则模块的独立性越好。内聚性一般有以下几种:
- 偶然(巧合)内聚:指一个模块内的各个处理元素之间没有任何联系。
- 逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
- 时间内聚:把需要同时执行的动作组合在一起形成的模块。
- 通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
- 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入。
- 功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
在设计软件的模块结构时,有一些启发式原则可以改进设计。如完善模块功能、消除重复功能、模块的作用范围应在其控制范围之内、尽可能减少高扇出结构,随着深度增大扇入、避免或减少使用病态连接等等。模块规模大小应适中。模块单一的功能可以提高其内聚性,但同时考虑与其他模块的耦合程度,因此不是模块功能越单纯越好。
3.3 开发文档的作用
系统开发人员与项目管理人员在项目期内进行沟通的文档主要有
- 系统开发计划
- 工作任务分解表
- PERT 图
- 甘特图
- 预算分配表等
- 系统开发月报
- 系统开发总结报告等项目管理文件。
总体规划和开发合同用于与系统分析人员在系统规划和系统分析阶段的沟通。 测试计划用于系统测试人员与系统开发人员之间的沟通。
4. 测试方法与McCabe环路复杂度
4.1 测试方法
| 测试方法 | 描述 |
|---|---|
| 单元测试 | 也称为模块测试,用于发现编码和详细设计中产生的错误。一般用白盒测试法,要求在详细设计阶段完成。 |
| 集成测试 | 也称组装测试。用于对由各模块组装而成的程序进行测试,主要检查模块间的接口和通信。要求在概要设计阶段完成,通常采用黑盒测试。 |
| 确认测试 | 用于检查软件的功能,性能等特性是否与用户的需求一致。要求在需求分析阶段完成,通常采用黑盒测试。 |
| 系统测试 | 把软件纳入实际运行环境中,与其他系统成分组合在一起进行测试。主要包括恢复测试,安全测试,强度测试,性能测试,可靠性测试和安装测试等。 |
| 验收测试 | 是在完成系统测试之后,软件产品上线使用之前的最后一个测试活动,也被称为交付测试。验收测试是以用户为主,软件开发和质量保证人员都参加的测试。一般使用实际应用数据进行测试,除了测试软件功能和性能外,还对软件可移植性,兼容性,可维护性,错误的恢复功能等进行确认。 |
4.2 McCabe环路复杂度
McCabe复杂性度量又称为环路度量,它认为程序的复杂性很大程度上取决于控制的复杂性。单一的顺序程序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。
计算方法一:
V(G) = 流图中区域数(包括图外区域)
计算方法二:
V(G) = 判定节点数+1
计算方法三:
V(G) = E-N+2
E:边数
N:节点数
5. 软件维护
软件维护需要的工作量很大,平均来说,大型软件的维护成本高达开发成本的4倍左右。 维护的四项活动:
- 改正性维护(17%~21%)
- 在任何大型程序的使用期间,用户必然会发现程序错误,并且把他们遇到的问题报告给维护人员。把诊断和改正错误的过程称为改正性维护。
- 适应性维护(18%~25%)
- 也就是为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。
- 完善性维护(50%~66%)
- 在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议还可能提出一般性的改进意见。为了满足这类要求,需要进行完善性维护。这项维护活动通常占软件维护工作的大部分。
- 预防性维护(4%)
- 当为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时的维护活动,目前这项维护活动相对比较少
可维护性的因素:
- 可理解性
- 可测试性
- 可修改性
- 可移植性
- 可重用性
6. 质量特性
- 正确性(Correctness):系统满足规格说明和用户目标的程度,即在预定环境下能正确地完成预期功能的程度;
- 健壮性(Robustness):在硬件发生故障、输入的数据无效或操作错误等意外环境下,系统能做出适当响应的程度;
- 效率(Efficiency):为了完成预定的功能,系统需要的计算资源的多少;
- 完整性(Efficiency)或安全性(Security):对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度;
- 可用性(Usability):系统在完成预定应该完成的功能时令人满意的程度;
- 风险(Risk):按预定的成本和进度把系统开发出来,并且为用户所满意的概率;
- 可理解性(Comprehensibility):理解和使用该系统的容易程度;
- 可维修性(Maintainability):诊断和改正在运行现场发现的错误所需要的工作量的大小;
- 灵活性(Maintainability)或适应性(Adaptability):修改或改进正在运行的系统需要的工作量的多少;
- 可测试性(Adaptability):软件容易测试的程度;
- 可移植性(Portability):把程序从一种硬件配置和(或)软件系统环境转移到另一种配置和环境时,需要的工作量多少。有一种定量度量的方法是:用原来程序设计和调试的成本除移植时需用的费用;
- 可再用性(Reusability):在其他应用中该程序可以被再次使用的程度(或范围);
- 互运行性(Interoperability):把该系统和另一个系统结合起来需要的工作量的多少。
7. CMM
软件能力成熟度模型(CMM)将软件组织的过程能力分成5个成熟度级别:初始可重复级、已定义级、已管理级和优化级。按照成熟度级别由低到高,软件开级发生产精度越来越高,每单位工程的生产周期越来越短。
- 初始级:软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。
- 可重复级:建立了基本的项目管理过程来跟踪费用进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得的成功。
- 已定义级:已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。
- 已管理级:收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制。
- 优化级:过程的量化反馈和先进的新思想、新技术促使过程不断改进
8. Pert图
- 最早时刻:从开头开始计算,一般首结点的开始时间为0,最早时刻为前驱最早时刻+路径上的时间=该结点最早时刻,如果遇到多个箭头指向一个结点(例如:5结点和6结点同时指向8,入度为2),即入度为n,则他的最早时刻取最大的那个值。
- 最晚时刻:从末尾往前推,首先要把最早时刻的尾结点的最早时刻计算出来,然后另尾结点的最早时刻和最晚时刻相等。于是尾结点的最迟时刻就有了,然后就可以依次往前推,如果遇到多个结点对应一个结点(例如3节点和4结点同时指向2)取最小的那个
- 松弛时间:最晚时刻 - 最早时刻
- 关键路径:即松弛时间为0的那一条路径,也是最大值的那条路径,如图所示,关键路径为1–>2–>4–>6–>8–>10–>11
二、面向对象
1. 面向对象的基本概念
面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口、消息、组件、模式和复用等。
2. 面向对象分析与设计
3. UML
4. 设计模式
| 创建型 | 结构型 | 行为型 | |
|---|---|---|---|
| 类 | 工厂方法模式 | 适配器模式 | 解释器模型、模板方法模式 |
| 对象 | 抽象工厂模式、生成器模式、原型模式、单例模式 | 适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式 | 责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式 |
抽象工厂(Abstract Factory)
- 意图 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
- 适用性
- 一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。- 当要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当提供一个产品类库,只想显示它们的接口而不是实现时。
生成器(Builder)
- 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 适用性
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许
被构造的对象有不同的表示时。
工厂方法(Factory Method)
- 意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。
- 适用性
- 当一个类不知道它所必须创建的对象的类的时候。
- 当一个类希望由它的
子类来指定它所创建的对象的时候。 - 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
原型(Prototype)
- 意图 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
- 适用性
- 当一个系统应该独立于它的产品创建、构成和表示时。
- 当要
实例化的类是在运行时刻指定时,例如,通过动态装载。 - 为了避免创建一个与产品类层次平行的工厂类层次时。
- 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。
单例(Singleton)
- 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 适用性
- 当类
只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 - 当这个唯一实例应该是通过子类化可扩展的,并且客户无须更改代码就能使用一个扩展的实例时。
- 当类
适配器(Adapter)
- 意图 将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
- 适用性
想使用一个已经存在的类,而它的接口不符合要求。- 想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
- (仅适用于对象 Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
桥接(Bridge)
- 意图 将抽象部分与其实现部分分离,使它们都可以独立地变化。
- 适用性
- 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
- 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这是 Bridge 模式使得开发者可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。- (C++)想对客户完全隐藏抽象的实现部分。
- 有许多类要生成的类层次结构。
- 想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
装饰(Decorator)
- 意图 动态地给一个对象添加一些额外的职责。就增加功能而言,Decorator 模式比生成子类更加灵活。
- 适用性
- 在不影响其他对象的情况下,以
动态、透明的方式给单个对象添加职责。 - 处理那些可以撤销的职责。
- 当不能采用生成子类的方式进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是,由于类定义被隐藏,或类定义不能用于生成子类。
- 在不影响其他对象的情况下,以
外观(Facade)
- 意图 将为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
- 适用性
- 要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类,这使得子系统更具有可重用性,也更容易对子系统进行定制,但也给那些不需要定制子系统的用户带来一些使用上的困难。Facade 可以提供一个简单的默认视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过 Facade 层。
- 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade 将这个子系统与客户以及其他的子系统分离,可以
提高子系统的独立性和可移植性。 - 当需要构建一个层次结构的子系统时,使用 Facade 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,则可以让它们仅通过Facade 进行通信,从而简化了它们之间的依赖关系。
观察者(Observer)
- 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
- 适用性
- 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用。
- 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。
- 当一个对象
必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。
三、数据结构与算法
1. 数组
2. 顺序表与链表
3. 队列与栈
4. 字符串
5. 二叉树的存储与特性
6. 二叉树遍历
- 前序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
7. 排序二叉树
8. 最优二叉树
9. 图的概念与存储
10. 图的遍历
11. 图的拓扑排序
12. 二分查找
13. 哈希查找
14. 常见的排序算法
15. 常见算法策略
四、程序设计语言
1. 各种语言的特点比较
2. 编译与解释
程序的翻译通常有两种基本方式:一种是编译方式,另一种是解释方式。
在编译方式下,首先将源程序翻译为等价的目标程序,源程序的翻译和目标程序的运行是完全独立的两个阶段;而解释方式下,对源程序的翻译和运行是结合在一起进行的,并不生成目标代码。
编译过程基本上可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,其中,中间代码生成和代码优化不是必须的。
在词法、语法、语义分析方面,编译方式和解释方式没有区别。
3. 编译器处理过程
- 符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。
- “中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。最常用的一种中间代码是与汇编语言的指令非常相似的三地址码,其实现方式常采用四元式,另外还有后缀式、树等形式的中间代码。
4. 错误管理
5. 传值与传址
6. 有限自动机
7. 正规式
8. 后缀表达式
五、计算机硬件基础
1. 数据的表示
海明码
海明码的构成方法是:在数据为之间插入 个校验码,通过扩大码距来实现检错和纠错。
设数据位是n位,校验位是k位,则n和k必须满足以下关系: ${2^k}-1 \geqslant n+k$
2. CPU组成
-
程序计数器(PC)用于存放指令的地址
-
指令寄存器(IR)用于存放正在执行的指令
-
状态寄存器(PSW)用于保存指令执行完成后产生的条件码
-
立即寻址。操作数就包含在指令中。
-
直接寻址。操作数存放在内存单元中,指令中直接给出操作数所在存储单元的地址。
-
寄存器寻址。操作数存放在某一寄存器中,指令中给出存放操作数的寄存器名。
-
寄存器间接寻址。操作数存放在内存单元中,操作数所在存储单元的地址在某个寄存器中。
-
间接寻址。指令中给出操作数地址的地址。
-
相对寻址。指令地址码给出的是一个偏移量(可正可负),操作数地址等于本条指令的地址加上该偏移量。
-
变址寻址。操作数地址等于变址寄存器的内容加偏移量。
3. CISC与RISC
| CISC (Complex) | RISC (Reduced) | |
|---|---|---|
| 指令系统 | 复杂,庞大 | 简单,精简 |
| 指令数目 | 一般大于200条 | 一般小于100条 |
| 指令字长 | 不固定 | 定长 |
| 可访存指令 | 不加限制 | 只有Load/Store指令 |
| 各种指令执行时间 | 相差较大 | 绝大多数一个周期内 |
| 各种指令使用频度 | 相差较大 | 都比较常用 |
| 通用寄存器数量 | 较少 | 多 |
| 控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
| 指令流水线 | 可以通过一定方式实现 | 必须实现 |
| 设计思想 | 软件功能的硬件化 | 硬布线控制逻辑优化编译程序 |
4. 流水线技术
例:若指令流水线把一条指令分为取指、 分析和执行三部分,且三部分的时间分别是取指2ns分析2ns ,执行1ns。
那么,流水线周期是多少? 100条指令全部执行完毕需要的时间是多少?
答:(2+2+1)+(100-1)*2
解析:流水线周期为执行时间最长的一段 流水线计算公式为: 1条指令执行时间 +(指令条数-1)*流水线周期
流水线的吞吐率(Though Put rate, TP):是指在单位时间内流水线所完成的任务数量或输出的结果数量。
计算流水线吞吐率的最基本的公式如下:
$ TP = \frac {指令条数}{流水线执行时间} $
流水线开始工作后,须经过一定时间才能达到最大吞吐率,这就是建立时间。
若m个子过程所用时间一样,均为to,则建立时间To=m x to。
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
计算流水线加速比的基本公式如下: $ S = \frac {不使用流水线执行时间}{使用流水线执行时间} $
5. 层次化存储
全相联映射:主存物理地址 = 标记 + 块内地址
组相联映射:主存物理地址 = 标记 + 组号 + 块内地址
直接映射:主存物理地址 = 标记 + cache行号 + 块内地址
6. I/O数据传输控制方式
- PCI总线,采用并行传输方式。
- SCSI总线,是一条并行外总线。
7. 可靠性分析
- 并联 可靠性${R = 1-(1-R_1)(1-R_2)…(1-R_n)}$
- 串联 可靠性${R = R_1R_2…R_N}$
8. 校验方法
9. 计算机性能指标
六、操作系统
1. 信号量与PV操作
2. 死锁问题
3. 进程资源图
4. 线程解析
在同一进程中的各个线程都可以共享该进程所拥有的资源,如访问进程地址空间中的每一个虚地址;访问进程拥有已打开文件、定时器、信号量机构等,但是不能共享进程中某线程的栈指针。
5.局部性原理解析
程序的局部性原理:最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该先淘汰未修改过的页面。因为未修改过的页面内存与辅存一致,故淘汰时无须写回辅存,使系统页面置换代价小。
5. 段页式存储
6. 磁盘调度
7. 文件管理
七、数据库系统
1. E-R模型
2. 关系代数和SQL查询语句
4. 规范化理论(键、范式、模式分解)
5. 并发控制
6. 分布式数据库特点
八、计算机网络 5分
1. OSI模型
2. TCP/IP协议族
3. 子网划分
1、确定划分子网数
子网数 = ${2^n}$,n代表子网掩码往右移动的位数
例如:
要划分2个子网,子网掩码需要往右移动1位,${2^1=2}$
要划分4个子网,子网掩码需要往右移动2位,${2^2=4}$
要划分8个子网,子网掩码需要往右移动3位,${2^3=8}$
子网数只能为2倍的关系划分。
2、确定子网划分后的地址
每个子网地址块大小(IP_block)= ${2^{(8-n)}}$
每个子网可用地址个数(IP_num)= ${2^{(8-n)}-2}$
①、子网的网络地址 = 从0到255,取每段地址块的首个值
②、子网的广播地址 = 下一个子网的网络地址-1
③、子网的可用地址 = 子网的网络地址到子网的广播地址区间
例如:
要划分为4个网段(${2^2}$),子网掩码右移2位
每个子网地址块大小(IP_block)= ${2^{(8-4)}}$ = 64
每个子网可用地址个数(IP_num)= ${2^{(8-4)}-2}$ = 62
每段取值分别为:0,64,128,192
第一个子网
①、网络地址 = 0
②、广播地址 = 63
③、可用地址 = 1到62
第二个子网
①、网络地址 = 64
②、广播地址 = 127
③、可用地址 = 65到126
第三个子网
①、网络地址 = 128
②、广播地址 = 191
③、可用地址 = 129到190
第四个子网
①、网络地址 = 192
②、广播地址 = 255
③、可用地址 = 193到254
3、确定子网掩码 划分后的子网掩码CIDR = 原网络的子网掩码CIDR+n,如要写成十进制:${256-2^{(8-n)}}$ 例如: 原来子网掩码:255.255.255.0(/24),往右移动3位,则划分为8个子网 子网掩码就变为为 /27,${256-2^{(8-3)} = 256-{2^5} = 256-32 = 224}$ 最后子网掩码结果:255.255.255.224(/27)
4. 常用的网络命令
5. URL
| 组织模式 | 含义 | 地理模式 | 含义 |
|---|---|---|---|
| com | 商业组织 | cn | 中国 |
| edu | 教育机构 | hk | 中国香港 |
| gov | 政府机构 | mo | 中国澳门 |
| mil | 军事部门 | tw | 中国台湾 |
| net | 主要网络支持中心 | us | 美国 |
| org | 上述以外组织 | uk | 英国 |
| int | 国际组织 | jp | 日本 |
6.其他知识点
- FTP 服务器的
控制端口为21,数据端口为 20 - SMTP(简单邮件传送协议)用于发送邮件,使用25号端口;POP3(邮局协议)用于接收邮件,使用110号端口
- TCP 和 UDP协议均提供了
端口寻址功能,连接管理、差错校验和重传以及流量控制为 TCP 的功能 - DNS 域名查询的次序是:本地的 hosts 文件→本地 DNS 缓存→本地 DNS 服务器→根域名服务器;端口号53,支持TCP和UDP,主要使用UDP,服务器之间备份使用TCP。
- 中继器、路由器是网络层设备,网桥、交换机是数据链路层设备、集线器是物理层设备
九、信息安全知识 5分
1. 加密/解密计算
- ECC、DSA 和 RSA 都属于公开密钥加密算法
- DES 是私钥加密算法
2. 数字签名与信息摘要
3. 数字证书
- 数字证书用 CA 私钥做数字签名,从用户的数字证书中可以获得用户的公钥。
4. 网络安全协议
5. 常见的网络威胁
- 时间戳是防止重放攻击的主要技术
- 主动攻击包括拒绝服务攻击(DoS)、分布式拒绝服务(DDoS)、信息篡改、资源使用、欺骗、伪装、重放等攻击方法
- 被动攻击包括嗅探、信息收集等攻击方法
6. 常见的网络安全控制方式
7. 网络安全防范体系
- 机房安全属于物理安全
- 入侵检测属于网络安全
- 漏洞补丁管理属于系统安全
- 数据库安全是应用安全