软设
(就我自己的经验,这里内容并没有全覆盖书本的内容以及试卷的内容,不过也有个百分之七八十)
备考模式:b站+真题
https://www.bilibili.com/video/BV1rW411j7e7
文章目录
一、上午卷
2021/5/17 - 2021/5/23
1、软件工程基础知识p135-p151
1. 软件生存周期
- 可行性分析与项目开发计划
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 维护
2. 开发模型
一般在29/30题
-
瀑布模型(SDLC)
总结:
- 瀑布模型是结构化方法模型的典型代表,一般应用于结构化开发
- 瀑布模型只适用于需求明确的项目
- 瀑布模型适合需求明确或二次开发(即大部分需求是稳定的)
- 瀑布模型对需求的变化无法灵活应对(造成其逐渐退出的原因)
注意:
- 项目规模大,开发小组对项目需求了解并了解相关领域,可以采用瀑布模型
- 系统功能有较清晰定义,且交付时间有严格要求,最适宜用瀑布模型
- 基于原有系统开发的(二次开发),要求采用新技术,说明需求是明确的,宜采用瀑布模型
真题:
-
快速原型模型
定位于需求不明确的情况
在项目开发的初期,会构造一个简易系统(可以是一套界面,初步的一个系统)
以相对低的成本获取用户相对全面的需求
原型法往往应用于开发当中的需求分析阶段
原型模式不适宜大规模软件开发
原型的用途是获知用户的真正需求
真题:
-
演化模型
把最初的原型通过很多步的演化,调整,最终变成了给用户使用的软件产品
演化模型从最初的简易模型 ,经过很多人演化成了最终的产品
注意:
如果希望系统能尽快投入使用,并系统功能可以在使用过程中不断改善,则最适宜采用的软件过程模型为演化模型
真题:
- 螺旋模型
螺旋模型也是从原型模型演化而来,除此,它还有瀑布模型的特征和演化模型的特征
特征:
- 由多个模型组成(原型模型、瀑布模型、演化模型)
- 引入了风险分析,这是之前一系列模型都没有的特征,所以风险分析就成为了螺旋模型最为显著的一种特征之一
注意:
如果考试题目问需求不明确应该选哪个开发模型,而选项中有原型和螺旋模型,只能选原型模型。即如果答案选项有多个可选,则找与题目最贴合的
真题:
-
增量模型
由原型模型加上瀑布模型的思想就得到了增量模型
优点:
- 能在较短时间内向用户提交可完成一些有用的工作产品
- 逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品
- 项目失败的风险较低
- 优先级高的服务首先交付,使得最重要的系统服务将接收最多的测试
做一部分改一部分
真题:
- V模型
以形状得名,和瀑布模型很接近,但相对更强调测试,强调及早的测试以及测试要贯穿开发的始终
特征:
- 在这个模型里,测试更重要了,光测试就分了很多阶段
- 这个v形状是有意义的,比如需求分析和验收测试有着对应关系,在需求分析阶段,就会去写验收测试和系统测试的测试计划,为的是提早发现问题。概要设计阶段就会去做集成测试的测试计划,详细设计阶段会去写单元测试的测试计划
- 喷泉模型
特点:
- 是一个面向对象模型,前面几个模型都是结构化方法下的模型
- 以用户需求为动力
- 以对象为驱动
- 支持软件重用
- 具有迭代性
- 开发活动之间无间隙
- 构建组装模型(CBSD)
基于构建的开发模型
基本思路:把软件开发当中的各个模块都可以考虑做成标准的构建,做成标准构建后,把构建进行组装,就得到了最终需要的软件
极大提高了软件开发的复用性,一旦提高了复用性,就可以使得软件开发的总时长极大地减小,可以使软件的成本降低,同时还可以使软件的可靠性增加(构件库)。
基于构件的软件开发,主要强调在构建软件系统时复用已有的软件 “构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验、适应性修改,然后集成到新系统中。
- 快速开发模型(RAD)
由瀑布模型和CBSD(构建化开发模型 )组合形成的一个模型
特点:
- 快速构建应用系统
- 统一过程模型(UP)
一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持
统一过程的典型代表是RUP,RUP是UP的商业扩展,完全兼容UP,但比UP更完整、更详细。
RUP应用了角色、活动、制品和工作流4种重要的模型元素,其中角色表述“谁做”,制品表述“做什么”,活动表述“怎么做”,工作流表述“什么时候做”。
统一过程定义了4个技术阶段及其制品:
- 起始阶段(初启阶段):结束时产生一个构想文档、一个有关用例模型的调查、一个初始的业务用例、一个早期的风险评估和一个可以显示阶段和迭代的项目计划等制品
- 精化阶段:结束时产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等制品
- 构建阶段:结束时产生一个准备交到最终用户手里的产品,包含具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述
- 移交阶段:结束时产生移交给用户产品发布版本
3. 敏捷开发方法
-
极限编程XP
激发开发人员创造性、使得管理负担最小的一组技术
是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成
极限编程倡导小型版本发布,每一轮迭代大约2周
极限编程的12个实践操作的结对编程,实际上存在一个非正式的代码审查过程,可以获得更高的代码质量,据统计,编码速度和传统的单人编码相当
-
水晶法Crystal
每一个不同的项目都需要一套不同的策略、约定和方法论
-
并列征求法Scrum
使用迭代的方法,其中把每30天一次的迭代称为个冲刺,并按需求的优先级来实现产品多个自组织和自治小组并行地递增实现产品,协调是通过简短的日常情况会议进行
-
自适应软件开发ASD
有六个基本的原则:
- 在自适应软件开发中,有一个使命作为指导,它设立了项目的目标,但不描述如何达到这个目标
- 特征被视为客户键值的关键,因此,项目是围绕着构造的构件来组织并实现特征
- 过程中的迭代是很重要的,因此重做与做同样重要,变化也包含其中
- 变化不视为是一种更正,而是对软件开发实际情况的调整
- 确定的交付时间迫使开发人员认真考虑每一个生成版本的关键需求
- 风险也包含其中,它使开发人员首先跟踪最艰难的问题
真题:
4. 信息系统开发方法
采用面向对象的软件开发,通常有面向对象分析、面向对象设计、面向对象实现。
面向对象分析是为了获得对应用问题的理解,其主要任务是抽取和整理用户需求并建立问题域精确模型
面向对象设计是定义软件对象和这些软件对象如何协作来满足需求,延续了面向对象分析
面向对象实现主要强调采用面向对象程序设计语言实现系统
面向对象测试是根据规范说明来验证系统设计的正确性
5. 需求的分类
需求设计
6. 结构化设计
软件设计的主要目的就是为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统的详细设计方案
系统设计主要内容包含新系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计、数据存储设计(数据结构)、用户界面设计和安全控制设计等
-
基本原则
-
内聚与耦合
- 系统结构/模块结构
7. 软件测试
- 测试原则与类型
- 测试用例设计
黑盒测试:不知道内部结构,只有输入输出
白盒测试:知道内部结构
- 语句覆盖:程序中所有语句都要被执行一遍
- 判定覆盖:所有的这些判定的真假分支都要覆盖一遍
- 条件覆盖:把判定拆分开(例判定为A>0 && B<0)条件A>0和条件B<0,这两个条件的真假分支都要覆盖
- 条件判定覆盖:就是把判定覆盖和条件判定覆盖组合起来
- 路劲覆盖:所有可能被执行到的路径至少执行一次
- 测试阶段
Alpha和Beta测试是针对产品的
如果在使用环境或开发环境去测它,就是Alpha测试
如果是由用户在它本地的计算机,由用户自己用它,就是Beta测试
验收测试就是用户参与进来,看看这个是否符合它的要求
负载测试强调不同的负载之下,它的性能表现
强度测试强调在系统发生异常的情况下,资源不是正常配置的情况下能否正常应对
压力测试强调的是在极限值的情况,系统会不会崩溃掉
- McCabe复杂度
m:边
n:点
注意:如3和4节点那的交叉点,可以抽象为节点(如右图),也可以不抽象为节点,无影响
8. 系统允许与维护
易分析性:源代码分析起来理解起来应该是比较容易的
易改变性:修改这段代码的容易程度
易测试性:做了一些相关的调整后,要做回归测试
改正性维护:也称为正确性维护,软件开发出来它里面总会有瑕疵,虽然会做很多的测试,总会有一些bug会到用户用的时候才发现。当用户发现bug,就要去修正bug,这样的工作称为改正性维护
适应性维护:使应用软件适应信息技术的变化和管理需· 求变化而进行的修改,去维护更换环境后出现的一些小问题
完善性维护:主要指在系统运行过程中,发现很多东西已经改变了,则要去扩充功能或改善现有的性能
预防性维护:现在不维护,将来可能导致问题。预防性维护就是做预防性的工作
软件维护是软件生命周期最长的一段,相对于软件开发任务而言,软件维护工作要更加复杂。
9. 能力成熟度模型集成CMMI
CMMI是由CMM发展而来的
CMM就是能力成熟度模型,是软件开发的成熟度,主要用来衡量软件开发的承包商改善软件质量的能力
CMM局限性太大,所以进行了扩充,CMMI是属于能力成熟度模型的一个集成
CMMI的阶段式(成熟度等级):
- 初使的(混乱级):过程不可预测且缺乏控制,所有机构在没有通过CMMI的相应级别的时候都属于混乱级
- 已管理级:过程为项目服务,个人在项目上的经验。管理层寻求更主动地应对系统的开发问题为已管理级的核心
- 已定义级:过程为组织服务,组织在经验上的积累,有了文档化标准化。使用标准开发过程(或方法论)构建(或集成)系统为已定义级的核心
- 定量管理级:过程已度量和控制,量化
- 优先级:集中于过程改进,持续的优化。连续地监督和改进标准化的系统开发过程为优化级的核心
提升过程能力来讲,连续式比较占优势
连续式:
- CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标
- CL1(已执行的):其共形目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特点目标
- CL2(已管理的):
- CL3(已定义级的):
- CL4(定量管理的):
- CL5(优化的):
10. 项目成本估算模型
构造性成本模型(COCOMO,Constructive Cost Model)是一种软件成本估算方法
COCOMO模型分为应用组合模型、早期设计模型、后体系结构模型三个子模型,分别采用不同的规模估算方法、成本因子及应用于不同的估算阶段:
应用组合模型:它是基于对象点来进行软件项目工作量的估算,针对采用集成化计算机辅助软件工程环境进组件组装式快速应用开发的项目,主要用于项目规划阶段。
早期设计模型:它是基于功能点或可用代码行以及 5 个规模指数因子、7个工作量乘数因子来进行软件项目工作量的估算,针对在项目开始后的一个阶段或者螺旋周期探索体系结构的可供选择方案或增量开发测量,主要用于信息还不足以支持详细的细粒度估算阶段。
后体系结构模型:它是基于源代码行和/或功能点以及 5 个规模指数因子、17 个工作量乘数因子来进行软件项目工作量的估算,发生在确定好软件体系结构之后,主要用于完成顶层设计和获取详细项目信息阶段 [1] 。
COCOMO 模型具有估算精确、易于使用的特点。在该模型中使用的基本量有以下几个: (1)DSI( 源指令条数 ) ,定义为代码行数,包括除注释行以外的全部代码。若一行有两个语句,则算做一条指令。(2)MM( 度量单位为人月 ) 表示开发工作量。(3)TDEV( 度量单位为月 ) 表示开发进度,由工作量决定。(4)COCOMO 模型重点考虑 15 种影响软件工作量的因素,并通过定义乘法因子,从而准确、合理地估算软件的工作量。
COCOMO II模型也需要使用规模估算信息
体系结构阶段,在模型层次结构中有3种不同规模估算选择,即:对象点、功能点和代码行。
应用组装模型使用的是对象点;早期设计阶段模型使用的是功能点,功能点可以转换为代码行。
体系结构模型把工作量表示为代码行数。
真题:
11. 项目管理
Gantt图:
- 整个图简洁明了,可以直观的看到整个计划是怎样的,哪项工作在哪一段时间开展,实际情况和进度的情况如何
- 不能清晰地表达任务之间的逻辑关系
PERT图:
计算:
- 关键路径:在整个图当中,从开始节点到结束节点最长的那一条路径,对应的是整个项目的最短工期。因为在一个项目当中,有很多任务可以并行地开展,如果说最耗时的一条路径上的所有任务都完成了,那么按理说其他的活动正常开展也应该都完成了。所以最长的路径就对应了整个项目的最短工期
- 最早开始时间正着算
- 最晚开始时间倒着推下·
12. 软件风险
一般认为软件风险包含两个特性:不确定性和损失
不确定性:指风险可能发生也可能不发生
评估风险的影响,如果风险真的发生,有3个因素可能会影响风险所产生的后果,即风险的本质、范围和时间。
如果风险可以预测,可以避免其发生,有些风险可以预测但无法避免。
风险控制的目的是辅助项目组建立处理风险的策略。
真题:
13. 软件质量
属性:
- 吞吐量:指在给定的时间内,系统所能处理的任务的数量
- 响应时间:指系统对请求作出响应的时间
- 容量:存储器做能存储的全部信息量称为该存储器的容量
ISO/IEC软件质量模型:
真题:
14. 软件复审
在系统分析阶段的复审过程中,应该指出软件的可移植性问题以及可能影响软件维护的系统界面
在系统设计阶段的复审期间,应该从容易修改、模块化和功能独立的目的出发,评价软件的结构和过程
在系统实施阶段的复审期间,代码复审应该强调编码风格和内部说明文档这两个影响可维护性的因素
15. 软件配置管理
变更控制
2、面向对象:p152-p159
1. 面向对象分析与设计
面向对象开发方法有Booch方法、Coad方法和OMT方法
Jackson方法是一种面向数据结构的开发方法
面向对象分析的第一步是确定问题域
面向对象分析主要强调理解问题是什么,强调建立独立与系统实现的系统分析模型,其关注的仍然侧重于问题域,不考虑问题的解决方案,不考虑系统实现以及系统的测试问题
面向对象设计侧重问题的解决方案,并且需要考虑实现细节问题
面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息
面向对象分析与面向对象设计是面向对象软件开发过程中的两个重要阶段,面向对象分析产生分析模型,该分析模型可以使用UML表达,面向对象设计以分析模型为基础,继续对分析模型进行精化,得到设计模型,其表达仍然可以采用UML建模语言
在面向对象分析x和设计中,
实体类是应用领域中的核心类,一般用于保存系统中的信息以及提供针对这些信息的相关处理行为
边界类(界面类)是系统内对象和系统外参与者的联系媒介
控制类主要是协调实体类和边界类对象之间的交互
类间关系可分为 依赖、关联、聚合、组合和继承5种
依赖是几种关系中最弱的一种关系,通常,使用类库就是其中的一种关系。聚合与组合都表示了整体和部分的关系。组合的程度比聚合高,当整体对象消息时,部分对象也随之消失,则属于组合关系,当整体对象消失而部分对象依然可以存在并继续被使用时,则属于聚合关系
组合和聚合都是关联的特殊种类。一般而言,组合是值的合成,而聚合是引用的合成
泛化是一个类于它的一个或多个细化类之间的关系,即一般与特殊的关系
面向对象中,类是对象的模板,描述了一组对象共有的成员属性和方法。类是一组对象的抽象描述,通过类可以产生一个或多个对象,这些对象具有相同的属性和方法。
静态成员的含义是所修饰的成员是属于类的,而不是属于某对象。静态数据成员对该类只有一份,该类的所有对象共享静态数据成员,可被该类的所有方法访问,其值可以修改,但是不论是通过对象还是类对静态数据成员值的修改,都会反应到整个类。类的静态方法只能访问该类的静态数据成员
对象是系统运行时基本实体,它既包含数据(属性),也包含作用于数据的操作(行为)。一个对象通常可由对象名、属性和操作三部分组成。一个对象把属性和行为封装为一个整体,于其他对象之间有清晰的边界,有良好的定义的行为和可扩展性。
封装是一种信息隐藏技术,其目的是使对象的使用者和生产者分离,使对象的定义和实现分开。封装的作用是把属性和服务结合成一个独立的系统单元,并隐藏对象的内部细节
继承则使得子类可以自动拥有父类的全部属性和服务
继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已存在的类所定义的内容作为自己的内容,并加入若干新的内容。可以存在多重继承的概念,但不同的程序设计语言可以有自己的规范
消息则是对象发出的服务请求
多态是指面向对象中由重载或过载机制实现的结果
多态有参数多态、包含多态、过载多态和强制多态四类。参数多态是应用比较广泛的多态,被称为最纯的多态,包含多态在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。过载多态是同一个名字在不同的上下文中所表示的含义不同
在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定。这样,同一消息就可以调用不同的方法。
绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫做静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
在采用面向对象方法进行业务建模时,业务用例者和参与者一起描述组织或企业所支持的业务过程。业务对象模型从业务角色内部的观点定义了业务用例。该模型确定了业务人员及其处理和使用的对象之间应该具有的静态和动态关系,注重业务中承担的角色及其当前职责,即描述业务结构,又描述这些结构元素如果完成业务实例
2. 设计原则
高层模块不应该依赖于底层模块
里氏代换原则是指任何基类对象可以出现的地方,子类对象一定可以出现
依赖倒转原则就是要依赖于抽象,而不依赖于实现
3. UML
类图可以展现类之间的关联关系,还可以在类图中图示关联中的数量关系,即多重度。表示数量关系时,用多重度说明数量或数量范围,表示有多少个实例(对象)能被连接起来,即一个类的实例能够与另一个类的多少个实例相关联。类图展示一组对象、接口、协作和它们之间的关系,在开发软件系统时,类图用于对系统的静态设计视图建模
组件图展现了一组组件之间的组织和依赖,专注于系统的静态实现视图,于类图相关,通常把组件映射为一个或多个类、接口或协作。
只有部署图描述系统的物理视图。部署图通常在实施阶段使用,以说明哪些组件或子系统部署于哪些结点。部署图给出了体系结构的静态实施视图,展现了运行处理节点以及其中构件的配置。如果要表示待开发软件系统中软件组件和硬件之间的物理关系,通常采用部署图。部署图依赖关系类似于包图
序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。其中消息定义了交互中生命线之间的特定交互,有同步消息、异步消息和返回消息三类。同步消息指进行阻塞调用,调用者中止执行,等待控制权返回,需要等待返回消息;而异步消息的调用者发出消息后继续执行,不引起调用者阻塞,也不等待返回消息。消息由名称进行标识,还描述出消息的发出者和接收者。异步消息由空心箭头表示,同步消息用实心三角箭头表示
uml会用构造型(stereotype)名称为<>来表示接口这一概念,声明对象类所需要的服务,而服务具体如何执行,有实现它的具体类完成
状态图主要用于描述对象、子系统、系统的生命周期。通过状态图可以了解到一个对象所能到达的所有状态以及对象收到的事件对对象状态的影响等。针对具有可标记的状态和复杂的行为的对象构建状态图。状态图可能有嵌套的子状态,且子状态可以是一个状态图
4. 设计模式概念
采用设计模式的主要目的就是复用成功的设计
5. 设计模式分类
6. 创建型模式
抽象工厂模式,关键字AbstractFactory,使用抽象工厂设计模式的常见情形是:
- 一个系统要独立于其产品的创建、组合和表示时
- 一个系统要由多个产品系列中的一个来配置时
- 当需要强调一系列相关的产品对象的设计以便进行联合使用时
- 当提供一个产品类库,而只想显示它们的接口而不是实现时
7. 结构型模式
桥接模式,关键字implementor,implementor用于定义实现部分的接口,其具体的子类则用不同的方式加以实现
组合模式,关键字composite,composite定义有子部件的那些部件的行为,组合部件的对象由client通过component提供的接口操作
适配器模式,既是类结构模式,又是对象结构模式
8. 行为型模式
观察者模式,关键字Observer,又名发布-订阅模式。一个Subject类可以有多个ConcreteSubject子类,一个Observer类可以有多个ConcreteObserver子类,一个Subject对象可以对应多个Observer对象。在该模式中,Subject和Observer分别表示抽象的被观察者和观察者。通常,一个观察者观察一个被观察者,而一个被观察者可以被对个观察者关注。当Subject的状态发送变化时,Subject将通知所有的Observer,告知状态已发送变化,而Observer收到通知后,将查询Subject的状态
3、数据结构和算法:p79-113
1、数组
一维数组:
- len:每一个数组元素所占用的字节数
二维数组:
- 因为不管按行存还是按位存,第一个元素都是a[0][0],所以就按第二个元素存
- 按行是a[0][1],按列是a[1][0]
- 公式无非就是,首位元素的存储地址(这里都是第二个元素)+当前这个元素的偏移量(比如求的这个元素是第14位,那么偏移量就是13)*字节
2、稀疏矩阵
代入法:
3、数据结构
4、顺序表与链表
链表的基本操作
- 单链表删除结点:就是让前一个结点的next等于被删除的结点的next
- 单链表插入结点:插入的结点的next指针指向后一个结点,就是让这个结点的next等于前一个结点的next指针,然后把前一个结点的next指向插入的结点,即前一个结点的next就等于插入的结点的地址
单链表分有头结点和没有头结点
头结点不存不存任何信息,头结点下一个元素才存信息
引入头结点的好处就是,可以令所有的结点操作方式变成一致的
如果头结点里放了别的元素,存储了具体内容,那么头结点的处理往往要采取不同的处理方式
5、顺序存储与链式存储
6、队列与栈
循环队列:为了区别队空和队满,就不把队列存满,规定就空一个,则尾指针的下一个元素就是头指针则就是队满。这就得到了队满条件的公式(tail+1)/size=head
如果告诉了队头以及这个循环队列存了几个数据,求队尾。例队头在4这个位置,总共是存了(假设就五个位置)三个数据, 则(队头位置+存的数据个数)和总位置取余
7、广义表
8、树与二叉树
如右图
- 结点:1-8都是结点
- 结点的度:一个结点的孩子结点数,如结点1有两个孩子结点,所以结点1的度为2
- 树的度:一个树当中,所有结点的度中,最高的哪个结点的度,如本图树的度就是2
- 叶子结点:没有孩子结点的结点,或者结点的度为0的结点,比如结点7
- 分支结点:有分支的结点,即有孩子结点的结点,或者结点的度不为0的结点
- 内部结点:有父结点又有子结点的,或者说既不叶子结点也不是根结点,如结点2
- 根结点:一个树最上面的哪个结点,如结点1
- 父结点、子结点:相对概念,如对于结点2、4而言,2对于4是父结点,4对于2是子结点
- 兄弟结点:同一父亲低下的结点,如结点4和5
- 层次:树的层次,如图
1. 二叉树分类
- 满二叉树:整棵树没有缺失的结点,要么子结点都是完整的,要么没有子结点,从树的形态看,没有缺失的部分
- 完全二叉树:除了最底下一层,上面的树都是满的,而且底下那一层的结点是从左到右排列
2. 二叉树重要特性
求第几层最多几个结点:因为第一层是1个结点,且一个结点最多只能分两个支,所以第i层最多有2^(i-1)个结点
求有k层的树最多几个结点:深度就是层次,深度为k的树最多有2^k-1个结点
求叶子结点:度为2的结点数+14
3. 二叉树遍历
-
前序遍历:根——左——右
-
中序遍历:左——根——右
-
后序遍历:左——右——根
-
12457836
-
42875136
-
48752631
4. 反向构造二叉树
5. 树转二叉树
6. 查找二叉树
7. 最优二叉树(哈夫曼树)
- 树的路径长度:树的路径一段一段累加起来,如图1 就是6
- 权:某个叶子结点有一个数值,这个数值代表了某一种字符出现的频度,这就是权
- 带权路径长度:这个权值结点所在路径的长度*权值,如图1,2号结点,它的带权路径长度就是 (1+1)*2 = 4
- 树的带权路径长度:把所有的带权路径长度累加起来,就是树的带权路径长度,如图1,即4+12+24+1=41
构造哈夫曼树:
- 在一组权值中,选出两个权值最小的构成一棵小的子树
- 然后从这组权值中删去已构造的权值,继续第一步的操作,以此类推
- 剩最后一个就是根结点
上题:
- 第一次,最小的权值是3和5,从原权值组里删去3和5,加上二者之和8,即这组权值为:29,7,8,14,23,11,8
- 第二次,最小的权值是7和8,从原权值组里删去7和8,加上二者之和15,即这组权值为:29,14,23,11,8,15
- 第三次,最小的权值是8和11,从原权值组里删去8和11,加上二者之和19,即这组权值为:29,14,23,15,19
- 第四次,最小的权值是14和15,从原权值组里删去14和15,加上二者之和29,即这组权值为:29,23,19,29
- 第五次,最小的权值是19和23,从原权值组里删去19和23,加上二者之和42,即这组权值为:29,29,42
- 第六次,最小的权值是29和29,从原权值组里删去29和29,加上二者之和58,即这组权值为:42,58
- 第七次,最小的权值是42和58,从原权值组里删去42和58,加上二者之和100,即这组权值为:100
8. 线索二叉树
左边指向前序遍历的前驱结点
右边指向前序遍历的前驱结点
如图1,树的前序遍历是ABDEHCFGI
叶子结点D空了两个指针,它的前驱结点是B,后继结点是E,所以D有1条绿色的线索指向B,1条红色线索指向E,依此类推
9. 平衡二叉树
9、图
1. 图的分类
2. 图的存储
-
邻接矩阵
矩阵的大小取决于结点的数量
列和行都是各个结点
对于无向图,邻接矩阵按对角线对称,所以如果要节省存储空间,可以只存上三角或下三角
-
邻接表
例 V1邻接V2、V4、V6,在链表中就存储了,到V2距离是6,到V4距离是1,到V6距离是50,依此类推
3. 图的遍历
深度遍历类似前序遍历,广度遍历类似于层次遍历
4. 拓扑排序
用一个序列来表达一个图当中,哪些事件先执行,哪些事件后执行
5. 图的最小生成树
把图当中很多的线和边去掉,只留下若干条边把所有结点连贯起来,留下了的边都是一些权值比较小的,从而使得整个留下来的部分,权值加起来是最小的状态,留下来的这部分被称为生成树
有几个顶点,就选出顶点数-1条边,这些边加起来的长度是属于最短的情况,那就是最小生成树了
求最小生成树有两种常见算法:
-
普里姆算法
从任一结点出发,这个结点是红点集,其他结点是蓝点集,找红点集能到蓝点集的最小距离结点,并将其纳入红点集,最后的结果不能形成环
-
克鲁斯卡尔算法
选最短的边,然后从最短的边开始数
10、算法
算法的复杂度
时间复杂度:
- 1、执行一条语句,例 i=0,这一条语句它的时间复杂度就是 O(1),O(1)是常数级的时间复杂度,所有复杂度是常数的都可以用O(1)来代表。比如有三条确切的语句,如i=0;j=0;k=0; ,这三条语句它的时间复杂度就是 O(3),常数级,可以用O(1)表示
- 2、假设程序里有一个循环,for i=1 to n,循环体要执行n次,一般记为时间复杂度为O(n)
- 3、如果把1、2语句综合起来,整个时间复杂度取最高值,也就是O(n)
- 4、假设程序是2层循环,for i=1 to n里还有一个for j=1 to n,则时间复杂度为O(n2),三层循环就是O(n3)
- 5、二分查找的时间复杂度是O(log2^n)
- 6、多个二分查找,就是O(nlog2^n)
11、查找
1. 顺序查找
时间复杂度是O(n)
2. 二分查找法
前提是有序序列
3. 散列表
12、排序
1. 排序的概念和分类
2. 直接插入排序
3. 希尔排序
- d1=5 意思就是,每隔5个元素(包括自己)是一组,比如57和28,68和96。然后组内进行直接插入排序,如第一组57和28,进行直接插入就得到57>28,就把57和28交换。得出28、68、33、24、19、57、96、59、52、72
- 第一次后,把增量进一步调整,调整到d2=3,如28、24、96、72是一组,然后重复上面操作。得出24、19、33、28、59、52、72、68、57、96
4. 直接选择排序
5. 堆排序
- 小顶堆:所有的孩子结点都大于根结点
- 大顶堆:所有的孩子结点都小于根结点
初建堆:
- 按完全二叉树的方式构建(以下举例大顶堆构建步骤)
- 1、按顺序每层排列,得到一个完全二叉树
- 2、首先从最后一个非叶子结点开始,即结点5。看结点5是否大于它的子结点,如果都大于则不做改变,如果有小于的,则子结点中最大值与结点交换,这里8大于5,所以结点5和结点8交换。然后依此类推,把每个非叶子结点都进行调整
堆排序:
- 以大顶堆为例
- 第一步,取走根结点(最大值),然后将最后一个结点作为顶,即取走80,将20作为顶
- 第二步,此时就不符合堆的规则,则进行调整,将60和20交换,50和20交换,40和20交换
- 而后以此类推,依次取顶
6. 冒泡排序
7. 快速排序
8. 归并排序
- 先两两分组,组内排序
- 再两组归并为一组,继续组内排序,依此类推
9. 基数排序
10. 排序算法的时间复杂度和空间复杂度
4、程序设计语言:p114-p121
1. 编译过程
动态语言是指程序在运行时可以改变其结构
脚本语言都是动态语言
编译过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成阶段,以及符号表管理和出错处理模块。中间代码生成和代码优化不是必要的
解释过程在词法、语法、语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的内部形式
二者处理程序的根本区别:
- 在编译方法下, 机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程
- 在解释方式下,解释程序和源程序要参与到程序的运行过程中,运行程序的控制权在解释程序
- 解释器翻译源程序时不产生独立的目标程序
- 编译器则需将源程序翻译成独立的目标程序
解释程序也称为解释器,它可以直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行
编译程序即编译器则首先将源程序翻译成目标语言程序,然后在计算机上运行目标程序
汇编程序是将汇编语言所编写的源程序翻译成机器指令程序
链接程序将各目标程序连接形成为可执行程序
编译过程中为变量分配存储单元所用的地址是逻辑地址,程序运行时再映射为物理地址
根据产生语法树的方法,语法分析可分为自底向上和自顶向下
递归下降分析法和预测分析法是常用的自顶向下分析法
算符优先分析法和LR分析法,移进-归约分析法 属于自底向上的语法分析方法
2. 文法
- 文法定义
-
文法类型
大部分程序设计语言的语法规则用上下文无关文法描述即可
-
语法推导树
3. 有限自动机
有限自动机分为:确定的有限自动机(DFA)和不确定的有限自动机(NFA)
是进行词法分析的适当工具
4. 正规式
(ab*a)*:偶数个a构成的串
a*:若干个a构成的串
正规集4可用正规式描述,用有限自动机识别
5. 表达式
逆波兰式(后缀表达式)可以利用栈进行求值
6. 函数调用-传值和传址
传值是单向的,传址是双向的
传值的实参可以是表达式,常量,变量,数组元素
传址的实参必须是变量(数组名或数组元素),不能是表达式或常量
7. 各种程序语言的特点
程序中的数据都必须具有类型,便于编译程序在基础机器中完成对值的布局,同时还可用于检查表达式中运算的应用是否正确
“中间代码”是一种简单且含义明确的记号系统,与具体机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性
常用的中间代码有后缀式、三元式、四元式和树等形式
链表中的结点空间需要程序员根据申请和释放,因此,数据空间应采用堆存储分配策略
程序运行时的用户内存空间一般划分为代码区、静态数据区、栈区、堆区,其中栈区和堆区也称为动态数据区
全局变量的存储空间在静态数据区分配
HTML、XML、WML是标记语言
PHP是脚本语言,适合用来进行动态网页处理
5、计算机硬件基础:p2-p22
1、数据的表示
R进制转十进制:按权展开法
十进制转R进制:短除法
二进制转八进制和十六进制:
(从左到右,不足补零)
每三个二进制位对应一个八进制位
每四个二进制位对应一个十六进制位
十六进制中,从10开始用字母代表,10对应A,依次往后推
例十六进制转八进制,可以先把十六进制转二进制,再转成八进制
编码形式:
带符号的情况下,最高为符号位,0为正数,1为负数
移码一般用来做浮点运算中的阶码
正数:
- 反码:在原码基础上,无改变
- 补码:在原码基础上,无改变
- 移码:在补码基础上,符号位取反
负数:
- 反码:在原码基础上,符号位不动,其余位取反
- 补码:在反码基础上,加1
- 移码:在补码基础上,符号位取反
表示范围:
n(位数)
原码和反码表示范围一样
原码反码+0和-0表示不一样,而补码+0和-0一样,补码就少占用了一个编码,所以补码取值范围就比原码反码多一个
例:1个字节的8个位来表示的原码,它的取值范围是多少?反码补码又是什么情况?
由公式得:
原码:-(2^(8-1) - 1)~(2^(8-1) - 1),即 -127~127
反码:-(2^(8-1) - 1)~(2^(8-1) - 1),即 -127~127
补码:- 2^(8-1) ~ 2^(8-1) -1,即 -128~127
浮点数运算:
例:1000
1000 = 1.0 * 10^3,其中,1.0为尾数,10为基数,3为指数
例:计算1000+119
1000 = 1.0 * 10^3
119 = 1.19 * 10^2
对阶,小的往大的看齐
119 = 0.119 * 10^3
尾数计算
1.0 + 0.119 = 1.119
结果格式化,确保小数点左边的数字大于0且小于10
(假如结果为0.119*103,则结果规格化为1.19*102)
(假如结果为11.9*103,则结果规格化为1.19*104)
1000+119 = 1.119 * 10^3
2、CPU结构
3、Flynn分类法
4、CISC和RISC指令系统类型
5、流水线
概念
流水线计算
执行时间最长的一段就是,一条指令分三部分,这三部分执行时间最长的哪个就是流水线周期。在上题就是2ns
理论公式:第一条指令执行时间+(n-1)*指令周期,即(2+2+1)+(100-1)*2 = 203
实践公式:(k+n-1)*指令周期,即(3+100-1)*2=204
K:一条指令分为几部分,k就是几
注意:首先用理论公式计算,如果不对,就用实际公式计算
流水线吞吐率计算
流水线的加速比
不使用流水线的时间,就是一条指令走完再走下一条指令,即(一条指令所需要的时间)*指令条数
流水线的效率
n个任务占用的时空区:任务执行完的时间片*任务数,即(1+1+1+3)*4
图上的1、2、3、4就是4个任务
k个流水线的总时空区:时空图的x轴最大那个时间片数*任务数,即15*4
效率:任务执行完的时间片/时空图的x轴最大那个时间片数 = 6/15
6、计算机层次化存储结构
速度越快,容量越小
CPU可以不需要Cache直接和内存交互数据,但是速度极慢
Cache里所有的内容均来自主存
7、Cache
8、时间局部性和空间局部性
在这里插入图片描述
9、随机存储器和只读存储器
主存的分类
常见的内存,就是随机存储器,特点就是内存一旦断电,内存中的所有数据都清空
而只读存储器,在掉电之后,仍然能够存储相应信息
主存的编址:就是把芯片组成相应的存储器
10、磁盘工作原理
在这里插入图片描述
盘片用来保存数据
读取数据需要用磁头
磁道:圆环上,一圈一圈的同心圆就是磁道,存信息的时候是存在磁道上
扇区:磁道上划的一小块,存储数据就是存在扇区上
读取次磁盘信息:
- 把磁头挪到相应磁道上,需要消耗一定时间,这个时间就是寻道时间
- 一个磁道又会分很多个扇区,磁头又要去挪到相应扇区上,需要消耗一定时间,这个时间就是等待时间,也称为旋转延迟时间
1、磁盘旋转周期是33ms,而磁道上有11个扇区,那么平均读取的时间就是33/11=3ms,即从R0开始,消耗3ms就读到了R1
单缓存区就是,只有一个缓存区,读取了一个记录后就要放到缓存区,然后就要对这个记录进行处理
而磁盘是匀速转圈,当读取R0记录并处理记录后,此时消耗3+3ms,磁头已经转到了R2,而需要的是读取R1的记录,所以磁盘继续转动,一直转到R1重复R0一样的操作后,继续转圈
所以把R0读取并处理完,再转到下一个需要读取的记录,一共花费了磁盘旋转周期加上处理一个记录的时间,即33+3=36ms
以此类推,前n-1个扇区都是这么处理的,所以总消耗时间为(磁盘旋转周期+处理一个记录的时间)*(n-1)+最后一个记录的读取和处理时间,即36*10+6=366ms
2、优化,就是当R0读取并处理完时,转到的R2的位置给换成需要读取的R1,然后以此类推就有了右边图,这样所有时间都用上了,总时间就是,(读取时间+处理时间)*扇区数,即(3+3)*11=66ms
11、计算机总线
范围:
- 内部总线往往指的微机内部各个外围的芯片与处理器之间的总线,它是芯片这个级别
- 系统总线是微机中各个插件板和系统板之间的总线,它是插件板级别的
- 外部总线是微机和外部设备的总线
系统总线:
- 数据总线:是用来传输数据的,比如计算机是32位的,代表一个计算机的字就是32个bit位,这说明总线的宽度就是32个bit位。那么一次或者一个周期能够传输的数据量就是32个bit位
- 地址总线:假设地址总线是32位,说明它代表的地址空间是2的32次方,也就是4G这样一个宽度。所以能发现,如果操作系统是32位的,那它能管理的内存就是4G
- 控制总线:就是发送相应的控制信号的总线
12、系统可靠性计算分析
串联系统与并联系统
模冗余系统与混合系统
13、校验码
概念
循环校验码CRC:
- 可以检错,不可纠错
- 进行信息编码时,在它的尾部加入一些校验信息,然后让编码后的数据能够与循环校验码的生成多项式相除余数为0。就是给它补上若干个校验位,如果接收方校验的时候发现除生成多项式余数不为0,则说明传输过程中出现了错误。这个过程中所用到的除法就是模2除法
将多项式转成二进制形式,如题中多项式代表的意思是,2的四次方位置有个1,2的三次方位置有个1,2的平方位置有个0,2的一次方位置有个1,常数1位置上有个1。所以x的多少次方就是指示对应的二进制位是0还是1的问题
在报文后面补校验码的数量就是,往原始报文后面补上(生成多项式的长度-1)个0,如题即5-1=4个0
海明校验码
- 可检错,可纠错
2的n次方位为校验位,比如,n为0,2^0就是1位上放校验码,其余就是信息位
如果有一个信息位,那么最终编码长度会是3位,因为要放1个信息位,而2的0次方位和2的1次方位,即第1、2位为校验位,要放效验码,第3位才能放信息,所以是长度为3
2^r >= 4+r+1:4就是信息的位的个数,信息1011为4位,r就是校验位的个数
求某信息的海明码:
- 根据信息位个数得出效验码位数
- 画出校验位和信息位
- 列出信息位所在位数的二进制,并转为对应的校验码位
- 再得出校验位和信息位的相关公式,进行异或计算,得出校验码
- 按位数依次写下,就是某信息的海明码
海明码纠错:
假设其他位置信息都对,2^0位出错,如上题,出错则得到的校验码为000,而不是001
接收到信息后,会按原来产生校验位的形式再次产生校验位,并且把收到的校验位和产生的校验位做异或操作
重新产生一次校验位,那就是001
然后做异或操作,得到001(十进制为1),就说明错误的位置在一号位置
如果是110(十进制为6),就说明是第6个位置出错了,以此类推
然后把出错这个位取反就是纠正了
6、操作系统:p23-41
1. 进程状态转换图
2. 前趋图
3. 进程的同步与互斥
4. PV操作
例题
5. PV操作与前趋图
例题
6. 死锁问题
给每个线程都分配所需资源-1个资源,然后再给任意一个线程一个资源,这个线程就能完成然后释放资源给下一个线程,就不会造成死锁
所以至少有:线程数*(所需资源数-1)+1个资源,则不可能发送死锁
银行家算法
例题
7. 分区存储组织
8. 页式存储、段式存储、段页式存储
页式存储:
例题
1、从页面大小4K得出,4*1024=212,即4K的二进制为212,说明一个页的页内地址是12位,那么高于12位的部分就是页号
而一个十六进制位对应四个二进制位,所以12位二进制就是逻辑地址5A29的后面三位,即A29,所以页内地址是A29
页号就从表中查,页号是5,查表得页号为5的页帧号为6,所以物理地址为6A29H
2、淘汰页号就是从状态位为1(1表示存在)的页里进行淘汰,即0、1、2、5
淘汰哪个就要看访问位(访问位一样就看修改位,修改位为0(表示没修改)则淘汰),只有访问位为0的才能淘汰(1表示刚刚访问过),所以淘汰1号页
段式存储:
段页式存储:
快表:
9.页面淘汰(置换)算法
抖动:
FIFO和LRU的区别:
例题
1、没有快表说明,每读一次程序的块,需要先在内存来查一下表,查表后才能读取相应的内存块,所以每一个块需要进行两次内存的访问,总共6个块,所以产生12次对内存的访问
2、这里指令虽然占了两个页,但指令会一次性融入,只产生一次缺页中断。而数据类型会产生2次缺页中断,所以总缺页次数是5次
10. 索引文件结构
例题
一个物理盘块为1K,一个地址4bit,所以一个盘块可以寸1024/4=256个地址
而物理块号58的逻辑块号是5,58136间有256个逻辑地址,5+256=261,所以为58136块后面的哪个块,即物理块号127
11. 树型目录结构
12. 空闲存储空间管理
位示图法:1表达区域已被占用,0表达区域还是空闲的
例题
13. 数据传输控制方式
程序控制方式又称程序查询方式,这种方式是最为低级的,也是CPU介入最多的一种机制。这种方式中,外设处于非常被动方式,它不会主动去反馈信息。
程序中断方式相对上一个方式,主动性强一些,如果外设完成了相应程序的数据传输发布等,这时它会发一个中断,系统就会做下一步处理,效率较上一个方式高一些。
DMA方式又称直接存取控制方式,会有专门的DMA控制器,只要是外设和内存之间的数据交换,过程中就由这个控制器去管控,CPU只要在开头的时候做一些介入,DMA控制器完成后,再由CPU接手过来做后续工作,效率就会高很多。
14. 虚设备与Spooling技术
15. 微内核操作系统
16. Windows XP操作系统
Windows XP操作系统支持FAT、FAT32、或NTFS文件系统
17.磁盘调度算法
7、数据库系统:p42-p59
1. 三级模式-两级映射
2. 数据库设计过程
3. ER模型
4. 关系代数
笛卡尔积的结果集的属性个数是参与操作的两个表的属性数之和,而记录数是两个记录数之积
5. 规范化理论
函数依赖
键
求候选键
范式
- 第一范式
- 第二范式
- 第三范式
- BC范式
例题
模式分解
例题
表的第一行是原关系中拥有的这一系列的属性
表的第一列是要拆分的这几个关系模式
6. 并发控制
- 基本概念
- 存在的问题实例
- 封锁协议
7. 数据库完整性约束
实体完整性约束:给数据库表定义主键
参照完整性约束:给数据库表添加外键
用户自定义完整性约束:给数据库表自定义一些约束
以上三种只能应对简单的情况
触发器:可以写脚本来约束数据库数据的一些要求,更加复杂的一些约束要求往往使用触发器来完成
这些完整性是为了提高数据库可靠性
8. 数据库安全
9. 数据备份
10. 数据库故障与恢复
11. 数据仓库与数据挖掘
数据挖掘方法分类
12. 反规范化
13. 大数据
8、计算机网络:p60-p69
1. OSI/RM七层模型
例题
局域网不能透过三层去传递网络信息,这里集线器是一层,网桥和交换机是二层,而路由器是三层,所以P和S不能通过
2. 网络技术标准与协议
windows:169.254.x.x
linux:0.0.0.0
是假ip地址,不能和外界通信,有可能是DHCP服务器故障或没有和DHCP联系上
例题
3. 网络类型与拓扑结构
4. 网络规划与设计
5. IP地址与子网划分
A类:第一段是网络号,即前面8个bit位,后面24个bit位都是主机号
B类:前两段是网络号,后两段是主机号
C类:前三段是网络号,后一段是主机号
例题
子网掩码:用来区分一个ip地址哪些部分的网络号,哪些部分是主机号。子网掩码当中,为1的部分对应的是网络号,为0的部分对应的是主机号
第一步,把ip地址换为二进制
由于为B类ip地址,所以默认前面16个bit位是网络号,后面16个bit位是主机号
子网就是拿若干个主机位充当子网号,2^k = N,即取k个bit位,会得到N个子网
由于25=32,24=16,所以取5个bit位就可以
根据子网掩码的概念,所以转换后的二进制,前16位网络号必然都是1,子网号的位置也是1(即在这里的主机号的前5个bit位),后面的主机号为0,即1111 1111 1111 1111 1111 1000 0000 0000,转成十进制为255.255.248.0
例题
反推,通过2^k-2>=700,得出主机号位数,则剩余的就是子网位数。
这里得出k为10,则原ip地址的后16位主机号里,后10位为主机号,前6位为子网号
然后根据网络号和子网号为1,主机号为0得出,1111 1111 1111 1111 1111 1100 0000 0000,换成十进制为255.255.252.0
如两个网络或者两个ip地址属不属于同一个子网内?
解:把这两个IP地址化成十进制,然后再分析它们的网络号和子网号分别是多少位,看前面的这么多位是否相同,如果相同则说明在同一个子网内
128.14.32.0/20,即20指出网络前缀有20个bit位,说明地址块有212个地址,由于全0和全2一般不使用,所以实际的地址应该给是212-2个
例题
c类即前24位为网络号,后8位为主机号,而分配的地址块是前面20位为网络号,那么还可以从主机号里拿出4个位来做子网号,通过2^k=N,即4个位的子网号可以得到16个子网
6. 特殊含义的IP地址
7.HTML
8. 无线网
9. 网络接入技术
10. IPv6
9、信息安全知识:p70-p78
1. 信息系统安全属性
2. 对称加密与非对称加密
公开密钥加密算法:ECC、DSA、RSA
私钥加密体制:DES
3. 信息摘要
报文摘要的目的是防止发送的报文被篡改
4. 数字签名
RSA通常用于对消息摘要进行签名,可用于数字签名
IDEA和RC4适宜于进行数据传输加密
MD5为摘要算法
5. 数字信封与PGP
用户获取网站的数字证书后通过验证CA的签名来确定数字证书的有效性,从而验证网站的真伪
6. 设计邮件加密系统案例
7. 各个网络安全层次的安全保障
网络安全体系设计是逻辑设计工作的重要内容之一,数据库容灾属于系统安全和应用安全考虑范畴
8. 网络威胁与攻击
典型网络病毒主要有宏病毒、特洛伊木马、蠕虫病毒、脚本语言病毒等
宏病毒的传播方式通常如下:字处理程序Word在打开一个带宏病毒的文档或模板时,激活了病毒宏,病毒宏将自身复制至Word的通用模板中,以后在打开或关闭文件时病毒宏就会把病毒复制到该文件中
特洛伊木马:是一种通过网络传播的病毒,分为客户端和服务器端两部分,服务器端位于被感染的计算机。特洛伊木马服务器端运行后会试图建立网络连接,所以计算机感染特洛伊木马后的典型现象是有未知程序试图建立网络连接
蠕虫病毒的传播过程一般表现为:蠕虫程序驻于一台或多台机器中,它会扫描其它机器是否有感染同种计算机蠕虫,如果没有,就会通过其内建的传播手段进行感染,以达到使计算机瘫痪的目的
欢乐时光、熊猫烧香、红色代码、爱虫病毒是蠕虫病毒
CIH是系统病毒
X卧底是通过木马传播、目标为智能手机的病毒
ARP攻击,通过伪造IP和MAC地址,能够在网络中产生大量的ARP通信量使网络阻塞,造成网络无法跨网段通信。处理ARP攻击的方法为首先断开ARP攻击主机的网络连接,然后用“arp-d”命令清除受攻击影响的ARP缓存
防范网络监听最有效的方法是数据加密
SYN Flooding是一种DoS攻击(拒绝服务攻击)
木马程序:Back Office、Netbus、Netspy、YAI、SubSeven、冰河、广外女生、X卧底
Sniffer是一种基本被动侦听原理的网络分析软件,可以监视网络的状态、数据流动情况以及网络上传输的信息,不输于木马程序
主动攻击:例如重放攻击、IP地址欺骗、拒绝服务攻击
被动攻击:流量分析
9. 防火墙技术
网络级的防火墙工作层次比较低,但是效率比较高
应用级的防火墙工作层次比较高,而效率比较低
包过滤防火墙对数据包的过滤依据包括 源IP地址、源端口号、目标IP地址和目标端口号
按照受保护程度,防火墙三个区域从上到下分为:内网、DMZ、外网
包过滤防火墙采用包过滤技术对应用和用户是透明的
防火墙不具备检查病毒的功能
10. 漏洞扫描系统
漏洞扫描系统是一种自动检测目标主机安全弱点的程序,漏洞扫描系统的原理是根据系统漏洞库对系统可能存在的漏洞进行一一验证。黑客利用漏洞扫描系统可以发现目标主机的安全漏洞从而有针对性的对系统发起攻击;系统管理员利用漏洞扫描系统可以查找系统中存在的漏洞并进行修补从而提高系统的可靠性。漏洞扫描系统不能用于发现网络入侵者,用于检测网络入侵者的系统称为入侵检测系统。
漏洞扫描系统可以获取某FTP服务器中是否存在可写目录的信息
11.Outlook Express邮件代理软件
优点:
- 可以脱机处理邮件,有效利用联机时间,降低了上网费用
- 可以管理多个邮件账号,在同一个窗口中使用多个邮件账号
- 可以使用通讯簿存储和检索电子邮件地址
- 在邮件中添加个人签名或信纸
- 发送和接收安全邮件
12. 计算机病毒
计算机病毒按照最通用的分区方式,即根据其感染的途径以及采用的技术区分,可分为:
- 文件型计算机病毒感染可执行文件(包括EXE和COM文件)
- 引导型计算机病毒影响软盘或硬盘的引导扇区
- 目录型计算机病毒能够修改硬盘上存储的所有文件的地址
- 宏病毒感染的对象是使用某些程序创建的文本文档、数据库、电子表格等文件,如Macro.Melissa
13. IE浏览器不同区域安全等级
默认情况下,从低到高为:
可信站点
本地Intranet
Intranet
受限站点
14. Windows系统用户组默认权限
从高到低为:administrator、power users、users、everyone
15. IIS的身份验证安全机制
- 集成Windows身份验证:以Kerberos票证的形式通过网络向用户发送身份验证信息,并提供较高的安全级别。
- 摘要式身份验证:将用户凭据作为MD5哈希或消息摘要在网络中进行传播,这样就无法根据哈希或原始用户名和密码进行解码
- .NET Passport身份验证:对IIS的请求必须在查询字符串或Cookie中包含有效的.NET Passport凭据,提供了单一登录安全性,为用户提供对Internet上各种服务的访问权限
- 基于身份验证:用户凭据以明文形式在网络中发送。这种形式提供的安全级别很低,因为几乎所有协议分析程序都能读取密码
10、多媒体基础:p127-p134
1. 音频相关概念
低于20Hz:次声波
高于20kHz:超声波
MIC(话筒)输出的是音频模拟信号
音调:主要由声音的频率决定
音色:声音的感觉特性
音高:各种不同高低的声音
改变数字载波频率可以改变乐音的音调
改变信号幅度可以改变乐音的音高
2. 图像相关概念
多媒体计算机图像文件格式分为静态图像文件格式和动态图像文件格式
JPEG:静态
MPEG:动态
矢量图形是用一系列计算机指令来描述和记录一幅图的内容,相对占用空间较小,处理侧重于绘制和创建,显示速度较慢。图元是描述矢量图的基本组成单位
位图图像是指用像素点来描述的图,相对占用空间较大,处理侧重于获取和复制,显示速度块
CIF是常用的标准化图像格式,在H.323协议簇中,规定了视频采集设备的标准采集分辨率,CIF=352*288像素
GIF可以在单个文件中实现多个图片轮流显示或者构成简单的动画效果
计算机终端用户因等待时间过长而放弃下载或显示图片/影像的问题,可以通过流媒体技术、JPEG累进编码的方式、GIF图像文件格式来解决,不能通过采用AD/DA变换方式来解决
dpi:描述图像分辨率的单位,表示每英寸多少像素点
3. 媒体的种类
感觉媒体:例如引起听觉反应的声音,引起视觉反应的图像等
表示媒体:例如图像编码、文本编码和声音编码等
4. 多媒体的计算问题
求图像数据量:图像数据量=图像的总像素*图像深度
求图像的颜色数有多少种?
- 例如,只有1个分量的单色图像,若每个像素有位,则最大灰度数目为2^8
- 例如,一幅彩色图像的每个像素用RGB三个分量表示,若3个分量的像素位数分别为8、8、8,则最大颜色数目为2(8+8+8)=224
例题
k:1000 采样过程
K:1024 存储过程
b:bit
B:Byte
5. 常见多媒体标准
H.261:视频通信编码标准是电话/会议电视的建议协议
H.263:低位速率通信的电视图像编码
目前广泛使用的编码及压缩标准有JPEG、MPEG、H.261
6. 数据压缩技术基础
7. 有损压缩和无损压缩
8. 模拟视频信息
与音频数字化一样,视频数字化的目的就算将模拟信号经A/D转换和彩色空间变化等过程,转成计算机可以显示和处理的数字信号
一般,对模拟视频信息进行数字化采取如下方式:
- 先从复合彩色电视图像中分离出彩色分量,然后数字化
- 先对全彩色电视信号数字化,然后在数字域中进行分离,用这种方法对电视图像数字化时,只需要一个高速A/D转换器
11、知识产权与标准化:p122-p126
1. 保护期限
2. 知识产权人确定
3. 侵权判定
4. 标准化基础知识
12、结构化分析与设计
根据加工规格说明和控制规格说明进行过程设计
根据数据字典和实体关系图进行数据设计
根据数据流图进行接口设计
根据数据流图进行体系结构设计
在绘制数据流图中,每条数据流的起点或终点必须是加工
在分层数据流图中,必须要保持父图与子图平衡
每个加工必须既有输入数据流又有输出数据流
必须保持数据守恒
一般情况下,数据流类型包含变换流型和事务流型
不同类型的数据流有不同的映射方法
决策树和决策表适于用来表示加工中涉及多个逻辑条件的情况
二、下午卷
2021/5/23 - 2021/5/28
1、数据流图:p160-p167
1. 基本概念
2. 数据流图的分层DFD
3. 数据字典
4. 数据流图的平衡原则
-
父图与子图之间的平衡
-
子图内平衡
对于数据流图的任一加工,应该都有输入输出
只有输入没有输出称为黑洞,只有输出没有输入称为奇迹,这两种情况是不正常的
5. 答题技巧
6. 案例分析
题4:
容易出现问题有:
- 加工有输入无输出
- 加工有输出无输入
- 加工的输入流和输出流名字一样
2、数据库设计:p168-p173
1. 数据库设计过程
2. ER模型——实体间联系模型
E-R图向关系模型的转换:
- 一对一:可合成到任一方实体
- 一对多:只能一合成到多的那方实体
- 多对多:它们之间的联系单独转为一个新的关系模式
3. 案例分析
题4:
- 优点:少了一次连接查询
- 缺点:会导致权限信息重复被存储,造成了信息的大量冗余
3、UML建模:p174-p181
1. 用例图
2. 类图与对象图
1个书籍列表对应了0到多个书籍
书籍列表和书籍是聚合关系
多重度:
关系:
3. 顺序图
4. 活动图
5. 状态图
6. 通信图
顺序图的另一种表达方式
7. 案例分析
4、数据结构及算法应用:p182-p190
1. 分治法
- 递归技术
- 二分查找
2. 回溯法
3. 贪心法
4. 动态规划法
5. 案例分析
求时间复杂度:取最大时间复杂度,所以都是O(n^2)