软考学习

计算机组成与体系结构(6分)

数据的表示****

进制

进制转换1

二进制转十进制

从右往左   0b111 = 1 * 20+ 1 * 21 + 1 * 2= 1+2+4

八进制转十进制

从右往左   0111 = 1 * 80 + 1 * 81+ 1 * 82= 1+8+64

十六进制转十进制

从右往左   0x111 = 1 * 160 + 1 * 161+ 1 * 162= 1+16+256

进制转换2

十进制转二进制

规则:将该数不断除以2,直到商为0为止,然后将每部得到的余数倒过来

十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每部得到的余数倒过来

十进制转十六进制

规则:将该数不断除以16,直到商为0为止,然后将每部得到的余数倒过来

进制转换3

二进制转八进制

规则:从右往左,将二进制每3位一组,转成对应的八进制

0b11(3)010(2)101(5)   => 0325

二进制十六进制

规则:从右往左,将二进制每4位一组,转成对应的十六进制

0b1101(D)0101(5)   => 0xD5

进制转换4

八进制转二进制

规则:从右往左,将八进制每1位,转成对应的3位二进制

02(010)3(011)7(111)   => 0b0010011111

十六进制二进制

规则:从右往左,将十六进制每1位,转成对应的4位二进制

 02(0010)3(0011)B(1011)  => 0b001000111011

原码,反码,补码:为什么这么设计--为了解决正数负数

移码:在补码的基础上,符号位取反

浮点数的范围和精度

 

浮点数加(减)法操作流程:

1 零操作数检查 

2 对阶操作 

3 尾数加(减)运算 

4 规格化及舍入处理。

计算机结构

Flynn分类法

CISC与RISC

以前电脑少,需要定制,所以指令都很复杂

现在电脑多了,需要通用,所以精简

流水线技术(考计算)

概念:流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技 术。

各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的 不同部分进行工作,以提高各部件的利用率和指令的平均执行速度

 流水线计算 (先用理论公式,没有选项再用实际公式)

 

 以上例子  k:分几段  n:指令数   流水线周期是2

流水线吞吐率

流水线的吞吐率(Though Put rate,TP)是指在单位时间内流水线所完成的 任务数量或输出的结果数量。

计算流水线吞吐率的最基本的公式如下:

100/203

流水线最大吞吐率

1/2   2是周期时间

流水线的加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时 间之比称为流水线的加速比。计算流水线加速比的基本公式如下:

500/203   不使用流水线时间(2+2+1)*100=500

流水线的效率

流水线的效率是指流水线的设备利用率。在时空图上,流水线的效率定义为n个任务 占用的时空区与k个流水段总的时空区之比

 

存储系统

层次化存储结构

虚拟内存:主存+辅存

Cache-概念

  1. Cache的功能:提高CPU数据输入输出的速率,突破冯·诺依曼瓶颈,即CPU与存储 系统间数据传送带宽限制。
  2. 在计算机的存储系统体系中,Cache是访问速度最快的层次。
  3. 使用Cache改善系统性能的依据是程序的局部性原理

局部性原理

  1. 时间局部性
  2. 空间局部性
  3. 工作集理论:工作集是进程运行时被频繁访问的页面集合

主存-分类

主存-编址

 磁盘结构与参数 

 试题

总线系统

根据总线所处的位置不同,总线通常被分成三种类型,分别是:

内部总线:芯片与处理器之间

系统总线:CPU、主存、I/O设备各大部件之间的信息传输线

控制总线:传输数据   地址总线:内存超过4G用64位的系统     数据总线

外部总线:微机和外部设备之间

通讯总线:用于计算机系统之间或与其他系统之间的通信。

 

系统可靠性分析

串联系统:走通,只有一种情况也就是每个部件都有效

并联系统:走通情况有很多种,走不通的情况只有一种,即每个部件都无效

 模冗余系统与混合系统

差错控制-CRC与海明校验码

码距

一个编码系统的码距是整个编码系统中任意(所有)两个码字的最小距离。例:

  • 若用1位长度的二进制编码。若A=1,B=0。这样A,B之间的最小码距为1。
  • 若用2位长度的二进制编码,若以A=11,B=00为例,A、B之间的最小码距为2。
  • 若用3位长度的二进制编码,可选用111,000作为合法编码。A,B之间的最小码距为3。

码距与检错、纠错有何关系?

1.在一个码组内为了检测e个误码,要求最小码距d应该满足:d=e+1

2.在一个码组内为了纠正t个误码,要求最小码距d应该满足:d>=2t+1

校验码

CRC

海明校验码

 

操作系统基本原理

概述  核心-进程管理

进程管理-进程的状态

等待 需要有io或者外设的输入 , 就绪则是等待cpu的调度

进程管理-前趋图

用来表示任务并行或串行执行关系,任务之间顺序关系

进程管理-同步和互斥

同步和互斥是操作系统中用于管理多个任务对共享资源的访问的概念。

互斥是指在同一时间内,只有一个任务可以访问临界资源。这意味着在一个任务访问临界资源时,其他任务必须等待,直到访问完成才能继续执行。互斥通常通过加锁(lock)和解锁(unlock)机制实现。

同步是指多个任务可以并发执行,但在某些情况下需要进行协调和等待。通过信号量(semaphore)、条件变量(condition variable)等机制来实现。

临界资源是指多个任务需要以互斥方式访问的共享资源

临界区则是指程序中对临界资源进行操作的那段代码。

信号量:是一种特殊的变量

因此,同步和互斥是为了确保对临界资源的正确访问而采取的不同策略。同步主要解决任务之间的协调和通信问题,而互斥则解决多个任务对共享资源访问的争用问题。

进程管理-pv操作(重要)

P操作(Passeren通过–荷兰语):申请资源,S=S-1,若s>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列。

V操作(Vrijgeven释放–荷兰语):释放资源,S=S+1,若s>0,则执行V操作的进程继续执行;若s<=0,则从阻塞状态唤醒一个进程,并将其插入就绪队列(此时因为缺少资源被P操作阻塞的进程可以继续执行),然后执行V操作的进程继续。

 

 

进程管理-死锁(考察不多)

当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中有多个进程处于死锁状态,就会造成系统死锁。

死锁四个必要条件: 资源互斥,每个进程占有资源并等待其他资源,系统不能剥夺现场资源,进程资源图是一个环路

死锁避免: 打破4个条件:有序资源分配法,一般采用银行家算法来避免

银行家算法,就是提前计算出一条不会死锁的资源分配方法,才分配资源,否则不分配资源,相当于借贷,考虑对方还得起才借钱,提前考虑好以后,就可以避免死锁。

死锁计算问题: 系统内有n个进程,每个进程都需要R个资源,那么其发生死锁的最大资源数为n*(R-1)。其不发生死锁的最小资源数为n(R-1)+1

进程和线程

进程是拥有资源的最小单位

线程是独立调度的最小单位

线程可以共享进程的公共数据、全局变量、代码、文件等资源;但不能共享线程独有的资源,如线程的栈指针等表示数据

存储管理-分页式存储管理

逻辑地址转为物理地址--计算公式:物理地址= 块号*页面大小+页内偏移量

 

 

操作系统

文件管理-空闲存储空间的管理

空闲区表法(空闲文件目录) 空闲链表法 位示图法 成组链接法

位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况。

设备管理-数据传输控制方式

内存和外设之间的传输控制问题

DMA: 专门的控制器来监管,效率较高,主存+外设

设备管理一虚设备与SPOOLING技术

微内核操作系统

数据库系统

一个可用的数据库系统必须能够高效地检索数据。这 种高效性的需求促使数据库设计者使用复杂的数据结构来表示数据。由于大多数数据库系统用户并未受过计算机的专业训练,因此系统开发人员需要通过视图层、逻辑层和物理层三个层次上的抽象来对用户屏蔽 系统的复杂性,简化用户与系统的交互。

视图层(view level)最高层次的抽象,描述整个数据库的某个部分。因为数据库系统的很多用户并不关心数据库中的所有信息,而只关心所需要的那部分数据。某些问题可以通过构建视图层实现,这样做除了使用户与系统交互简化,而且还可以保证数据的保密性和安全性

逻辑层(logical level)是比物理层更高一层的抽象, 描述数据库中存储什么数据以及这些数据间存在什么关系。逻辑层通过相对简单的结构描述了整个数据 库。尽管逻辑层的简单结构的实现涉及了复杂的物理层结构,但逻辑层的用户不必知道这些复杂性。因为,逻辑层抽象是数据库管理员的职责,由管理员确定数据库应保存哪些信息。

物理层(physical level)最低层次的抽象,描述数据在存储器是如何存储的。物理层详细地描述复杂的底层结构。

数据库模式

三级模式-两级映射

内模式:定义了数据存放的格式和方式

概念模式:按数据不同内容,分类不同的表

数据库设计过程 

ER模型

关系代数与元组演算

规范化理论-函数依赖

 

规范化理论-求候选键

规范化理论-范式

规范化理论-模式分解

 

 

并发控制

数据库完整性约束

数据库安全

数据备份

数据库故障与恢复

数据仓库与数据挖掘

数据挖掘方法分类

 反规范化

大数据

OSI/RM七层模型

UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除 带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体,聊天软件等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

局域网只工作在下面2层:物理层和数据链路层,跨越网络层就不是同一个局域网

 

常见端口号

 

基于TCP:

 

FTP:(数据连接20,用于数据上传,下载)、(控制连接21,用于传输FTP命令和执行信息)

 

SSH:22

 

telnet:23(用于远程登录,可以远程烤制管理目标计算机)

 

SMTP:25(SMTP服务器开放的端口,用于发送邮件)

 

HTTP:80(超文本传输协议)

 

BGP:179

 

RIP:基于UDP,端口号为520

 

基于UDP:(UDP端口号为520)

 

DNS:53(域名解析)

 

DHCP:服务端端口UDP67,客户端端口68

 

TFTP:69(简单文件传输协议)

 

网络技术标准与协议

DNS协议

 计算机网络的分类-拓扑结构

网络规划与设计

IP地址划分

无分类编址(无类域间路由)

特殊含义的IP地址

 无线网

网络接入技术

 

公钥加密算法

  • RSA:这是一种基于大质数分解困难的算法,可以用于加密和数字签名
  • Rabin:这是RSA算法的一个特例,主要用于某些特定的安全协议中。
  • ECC (Elliptic Curve Cryptography):这是一种椭圆曲线密码学,用于公钥加密和数字签名
  • ElGamal:它是一种非对称加密算法,用于加密和数字签名
  • DES:对称加密算法
  • 背包算:这是一个特殊的公钥加密算法。
  • DSA:这是一种数字签名算法,它只能用于签名操作,而不是加密。
  • 数字签名标准 (DSS):类似于DSA,也是一种数字签名算法,但它支持加解密功能

法律法规(2-3分)

从所涉及的法律法规角度:《中华人民共和国著作权法   《计算机软件保护条例》   《商标法》   《专利法》

从试题考点分布的角度: 保护期限  知识产权人确定  侵权判断

知识产权: 著作权及邻接权; 专利权; 工业品外观设计权; 商标权; 地理标志权  集成电路布图设计权

法律法规-保护期限

法律法规一知识产权人确定

 

法律法规-侵权判定

标准化基础知识-标准的分类

标准化基础知识-标准的编号

多媒体基础(1-3分)

多媒体技术基本概念-音频相关概念

多媒体技术基本概念-媒体种类

感觉媒体:指人们接触信息的感觉形式。如:视觉、听觉、触觉、嗅觉和味觉等。

表示媒体:指信息的表示形式。如:文字、图形、图像、动画、音频和视频等。

显示媒体(表现媒体):表现和获取信息的物理设备。如:输入显示媒体键盘、 鼠标和麦克风等;输出显示媒体显示器、打印机和音箱等。

存储媒体:存储数据的物理设备,如磁盘、光盘和内存等。

传输媒体:传输数据的物理载体,如电缆、光缆和交换设备等。

多媒体技术基本概念-多媒体相关计算问题

常见多媒体标准

MP3在mpeg-1里面的第三层定义的

数据压缩技术(考一点点)

有冗余才能压缩

软件工程基础知识

软件开发模型

是软考上午题中必考的一个知识点。给出一定的条件,让我们判断属于哪一种开发模型。

典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型、基于构件的开发模型和形式化方法模型

【瀑布模型】

1.定义:将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。

2.适用于:以文档作为驱动、适合于软件需求很明确的软件项目。

3.优点:容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。

4.不足:以前很流行,现在被淘汰(有大缺陷):客户必须能够完整、正确、清晰地表达出他们的需要;需求或设计的错误往往是在项目后期才被发现,对于项目风险控制能力较弱,经常延期

【增量模型】

1.定义:将需求分段为一系列增量产品,每一增量可以分别开发。根据第一个增量,可以快速开发出核心产品

2.适用于:软件体系结构开放,加入新构件过程简单。

3.优点:第一个可交付版本所需要的时间和成本很少;所承担的风险不大;减少用户需求的变更。

4.不足:如果没有对变更要求进行规划,那么会导致后来增量的不稳定;如果需 求不稳定完整,那么会导致重新开发;管理发生的成本、进度和配置的复杂性会超出组织的能力。

【原型模型】

1.定义:快速建立起来的可以在计算机上运行的程序,或仅仅是一个演示界面。

2.适用于:需求不够明确的项目。

3.优点:能快速、低成本地构建原型。

4.不足:必须要求具有技能高水平的原型化人员。

【螺旋模型】

1.定义:瀑布与演化模型的结合,加入风险分析。四象限工作步骤:制定计划、 风险分析、实施工程、用户评估。

2.适用于:庞大、复杂并且具有高风险的系统。支持需求的动态变化。

3.优点:提高软件的适应能力;降低了软件开发的风险。

4.不足:过多的迭代次数增加了开发成本,延迟了提交时间。

【喷泉模型】

1.定义:以用户需求为动力,以对象作为驱动的模型。具有迭代性和无间隙性

2.适用于:面向对象的开发方法

3.优点:各阶段没有明显的界线,可以同步开发,提高了软件开发效率,节省了 时间。

4.不足:各开发阶段是重叠的,不利于项目的管理;严格要求文档,使得审核的难度加大。

【构件组装模型】

1.定义:利用预先包装的构件来构造应用系统。具有许多螺旋模型的特点,本质上是演化模型,需要以迭代方式构建软件。

 

2.适用于:需要一定的构件模型支持的软件项目。

3.优点:构件组装模型导致软件的复用,提高了开发效率;允许多个项目同时开发,降低了费用,提高了可维护性

4.不足:构件的引入具有较大的风险;过分依赖于构件,构件的质量影响产品的 质量;需要精干的、有经验的分析人员和开发人员,客户的满意度低。

 

【V模型】

测试贯穿整个过程

 

 

【形式化方法模型】

1.定义:建立在严格数学基础上的一种开发方法。

2.适用于:需要生成计算机软件形式化的数学规格说明。

3.优点:易于发现需求的歧义性、不完整性和不一致性;易于对分析模型、设计 模型和程序进行验证。

4.不足:需要通过严密的数学演算。

 

软件开发模型-统一过程 up  rup

敏捷过程的开发方法--一般是小型项目

【极限编程XP】

1.四大价值观:沟通、简单、反馈、勇气

2.十二个最佳实践:

【特征驱动开发FDD】

1.FDD角色定义

软件开发中最重要的是。FDD定义了6种关键的项目角色:项目经理,首席架构设计师,开发经理,主程序员,程序员,领域专家

领域专家作为关键的项目角色正是敏捷宣言中“业务人员同开发人员紧密合作”的体现。

2.核心过程

3.最佳实践:领域对象建模、根据特征进行开发、类的个体所有、组成特征小组、审查、定期构造、配置管理、结果的可见性。

【并列争球法Scrum】

使用了迭代的方法,其中,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和 自治的小组并行地递增实现产品。

Scrum是一个用于开发和维持复杂产品的框架,是一个增量的、迭代的开发过程。

1.Scrum的五个活动:产品待办事项列表梳理、Sprint 计划会议、每日Scrum会议、Sprint评审会议、Sprint 回顾会议

2.Scrum的5大价值观

【水晶方法Crystal】

适合于一个小团队来进行敏捷开发,人数在6人以下为宜。

七大体系特征: (1)经常交付(2)反思改进(3)渗透式交流  (4)个人安全 (5)焦点  (6)与专家用户建立方便的联系 (7)配有自动测试、配置管理和经常集成功能的技术环境

【开放式源码】

【自适应软件开发Adaptive Software Development ASD方法】核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。

 

信息系统开发方法

结构化法:比较固化-逐渐被淘汰

主流:面向对象

需求开发一需求分类与需求获取

 

类封装了信息和行为,是面向对象的重要组成部分。类可以分为三种类型:实体类、 边界类和控制类。

实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息。实体类是对用户来说最有意义的类,通常采用业务领域术语命名,一般来说是一个名词,在用例模型向领域模型转化中,一个参与者一般对应于实体类。

控制类是用于控制用例工作的类,一般是由动宾结构的短语(“"动词+名词”或”名词+动词”)转化来的名词。 控制类用于对一个或几个用例所特有的控制行为进行建模,控制对象通常控制其他对象,因此它们的行为 具有协调性。

边界类用于封装在用例内、外流动的信息或数据流。边界类是一种用于对系统外部环境与其内部运作 之间的交互进行建模的类。边界对象将系统与其外部环境的变更隔离开,便这些变更不会对系统其他部分造成影响。

结构化设计-基本原则

结构化设计-系统结构/模块结构 (了解)

软件测试-测试原则与类型

软件测试-测试用例设计

 

面向对象软件的测试

可分为下列的4个层次进行。

(1)算法层:测试类中定义的每个方法。

(2)类层:测试封装在同一个类中的所有方法与属性之间的相互作用。

(3)模板层:测试一组协同工作的类之间的相互作用。

(4)系统层:把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。

McCabe度量法

是一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量,其计算公式为: V(g)=m-n+2, 其中 m:margin  n:node

 

系统运行与维护-软件维护

软件过程改进-CMMI

CMM:能力成熟度模型,是指软件开发的成熟度。 CMMI是由CMM发展而来

 

 

项目管理

  

项目管理工具

用来辅助软件的项目管理活动。通常项目管理活动包括项目的计划、调度、通信、成本估 算、资源分配及质量控制等。

一个项目管理工具通常 把重点放在某一个或某几个特定的管理环节上,而不提供对管理活动包罗万象的支持

项目管理工具具有以下特征:

(1)覆盖整个软件生存周期;

(2)为项目调度提供多种有效手段;

(3)利用估算模型对软件费用和工作量进行估算;

(4)支持多个项目和子项目的管理;

(5)确定关键路径,松弛时间,超前时间和滞后时 间;

(6)对项目组成员和项目任务之间的通信给予辅助;

(7)自动进行资源平衡;

(8)跟踪资源的使用;

(9)生成固定格式的报表和剪裁项目报告。 成本估算工具就是一种典型的项目管理工具。

面向对象

基本概念

对象 类(实体类、边界类、控制类) 抽象 封装 继承与泛化  多态 接口 消息 组件 模式和复用

面向对象分析的目的是为了获得对应问题的理解,确定系统的功能、性能要求。

面向对象分析包含5个活动,即认定对象、组织对象、描述对象间的相互作用、定义对象的操作和定义对象的内部信息

面向对象的测试层次

1、算法层:测试类中定义的每个方法,相当于传统软件测试中的单元测试。

2、类层:测试封装在同一个类中的所有方法与属性之间的相互作用。可以认为是面向对象测试中所特 有的模块(单元)测试。

3、模板层:也称为主题层,测 试协同工作的类或对象之间的相互作用。相当于传统软件测试中的子系统测试。

4、系统层:把各个子系统 组装成完整的面向对象软件系统,在组装过程同时进行测试。

面向对象的开发方法

方法重载:是通过静态绑定机制实现多态。在编译时,根据方法调用时传递的参数类型和数量来确定具体是调用哪个重载方法。方法重载是一种静态多态,也称为编译时多态

方法覆盖:覆盖通过动态绑定机制实现多态。属于运行时多态,子类重新定义父类中已定义的方法

设计原则(选择题)

里氏替换原则表明,在软件中将一个基类对象替换成它的子类对象时程序将不会产生任何错误和异常。反过来则不成立

即:如果一个软件实体使用的是一个子类对象,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是,我 喜欢狗不能据此断定我喜欢所有的动物。

里氏替换原则是实现开闭原则的重要方式之一,由于在使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来 对对象进行定义,而在运行时再确定其子类类型用子类对象来替换父类对象。

运用:里氏替换原则时应该将父类设计为抽象类或者接口,让子类继承父类或实现父接口并实现在父类中声明的方法;在运行时子类实例 替换父类实例可以很方便地扩展系统的功能而无需修改原有子类的代码。与此同时,假若需要增加新的功能则可以通过增加一个新的子类 来实现。

 UML

关系:依赖 关联 泛化 实现

静态比较,固定;

设计模式-概念

从上到下3个层级

设计模式-分类

创建型

结构型

行为型

 

数据流图

数据流图基本概念(Data Flow Diagram,DFD)

 数据流图(分层数据流图)

 数据字典

 案例分析-大题

 解题技巧:数据流平衡原则

数据库基础

事务(transaction)指一组SQL语句;

回退(rollback)指撤销指定SQL语句的过程;

提交(commit)指将未存储的SQL语句结果写入数据库表;(执行成功写入数据库)

保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个 事务处理不同)。

数据库设计(15分)

数据库设计过程

 

数据库概念结构设计阶段

工作步骤:1抽象数据 2设计局部视图 3合并取消冲突 4修改重构消除冗余

ER模型

案例分析-大题

类与类之间的关系

依赖:以虚线箭头表示,箭头指向被依赖的类
例子:Mouse作为Computer中move方法的形参,建立起依赖关系

 

关联:一个类中包含有另一个类,以实线箭头表示,箭头指向被关联的类
  • 单向关联:类A中包含有类B。
  • 双向关联:类A中包含有类B,类B中包含有类A。

 

关联-聚合:一个类中包含有另一个类,强调的是“整体-个体”之间的相互关系,以带空心菱形的实线表示,菱形指向整体
例如计算机与硬盘之间的关系,计算机作为一个整体,包含有硬盘,但是硬盘可以脱离计算机这个整体而单独存在。


关联-组合:一个类中包含有另一个类,强调的是“整体-部分”之间的共存亡关系,以带实心菱形的实线表示,菱形指向整体
整体与部分具有相同的生命周期,部分不能与脱离整体而单独存在,有种唇亡齿寒的感觉哈。


继承:类与类(接口与接口)之间的父子关系,以带三角箭头的实线表示,箭头指向父类
表示子类在具有父类特性的同时,还具有自己独特的特性。在Java中,用extends关键字表示继承关系。


实现:类与接口之间的关系,以带三角箭头的虚线表示,箭头指向接口
接口中定义了抽象的特性,类则是该接口特性的具体实现。

UML建模

用例图

考用例与用例之间的关系

类图与对象图

泛化==继承

顺序图

活动图

状态图

状态图:也是动态图:描述的是状态的变迁,以状态为节点;箭线:代表的是事件

通信图

 

 

 

软件设计需要遵循的原则

软件设计是把许多事物和问题进行抽象,并且需要不同层次和角度的抽象,所以软件设计的基本原则之一是抽象;

软件设计应当模块化,也就是说,软件应在逻辑上分割 为实现特定的功能和子功能的部分;

软件设计还应该遵循信息隐蔽(Information Hiding),即包含在模块内部且其他模块不可访问的内容对其他模块来说是透明的。

信息隐蔽意味着有效的模块性能能够通过定义一套独立的模块来实现,这些模块相互之 间的通信仅仅包括实现软件功能所必需的信息。

封装是手段,它的目的是要达到信息隐蔽。

  

数据结构与算法

根据考试大纲,本章要求考生掌握以下几个方面的知识点。

(1)数据结构设计:线性表、查找表、树、图顺序存储结构链表存储结构的设计和实现。

(2)算法设计:迭代、穷举搜索、递推、递归、回溯、贪心、动态规划、分治等算法设计。

从历年的考试情况来看,本章的考点主要集中以下方面。

在数据结构设计中,主要考查基本数据结构如栈,二叉树的常见操作代码实现。

在算法设计中,主要考查动态规划法、分治法、回溯法、递归法、贪心法。

C语言内存五大区

 

数据结构

数组:计算存储地址

二维数组,第一个称为行下标,第二个称为列下标

稀疏矩阵:选择题:可把选项代入,验证答案是否正确

在计算机中存储一个矩阵时,可使用二维数组。如果一个矩阵的元素绝大部分为零,则称为稀疏矩阵

若直接用一个二维数组表示稀疏矩阵,则会因存储太多的零元素而浪费大量的内存空间。

在稀疏矩阵中,有一种情况非常常见,即稀疏矩阵内部存在对称性。这样,我们可以采用一维数组来表示它们,这也常称为压缩存储

 

树的遍历是针对根节点的

前序遍历顺序:根节点--左子树一右子树,根左右

中序遍历顺序:左子树-根节点-右子树,左根右

后序遍历顺序:左子树--右子树-根节点,左右根

算法

分治法

顾名思义就是分而治之的意思。就是把一个复杂的问题拆分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

例子:二分查找法

回溯法

可以系统的搜索一个问题的所有解或任一解。 回溯法通常涉及到对问题状态的深度优先搜索,在搜索过程中,算法尝试一步步地构建解决方案,每次决策都会将问题状态转移到下一步,并检查当前状态是否满足问题的要求。如果当前状 态满足问题要求,则继续向下搜索;如果不满足要求,则回溯到上一个状态,并尝试其他的决策。

贪心法

总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解

贪心法是一种求解问题的策略,其核心思想是在每一步选择中都采取当前状态下最优的选择,从而希望最终达到全局最优解。

贪心法通常适用于满足「最优子结构]和「贪心选择性质]的问 题。

贪心法体现:Djikstra(迪杰斯特拉)算法,构造最小生成树的Prim(普里姆)算法Kruskal (克鲁斯卡尔)算法

1.Prim算法(最小生成树)

此算法可以称为“加点法”,每次迭代选择代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点。

2.Kruskal算法(最小生成树)

此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。

算法目的:将一个大的任务拆分成若干个小的任务逐个解决来完成拆分之前总任务的效果。

算法过程 1.把求解的问题分成若干个子问题 2.对每个子问题求解,得到子问题的局部最优解 3.把子问题的解局部最优解合成原来问题的一个解 

该算法存在的问题 1.不能保证求得的最后解是最佳的 2.只能求满足某些约束条件的可行解的范围

动态规划

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

通常适用于具有「最优子结构]和「重叠子问题]性质的问题。

例子:0/1背包问题

 

常见题目

分数背包

即部分背包问题,物品可选择部分或全部放进背包,直至装满背包,通过贪心算法求解可将放入单位价值最大的物品优先放入背包,以实现背包物品价值的最大化;

0-1背包

指物品整体放入或不放入背 包,因此不一定能完全装满背包,采用贪心算法可以 取得局部最优解,但不一定是全局最优解;

旅行商问题

是指旅行商要到若干个城市旅行,每访问一个城市 后都会回到最初开始的城市,用贪心法不一定能求得 最优解;

最长公共子序列

用贪心法也不一定能求得最优解

二分查找法的平均查找长度:每个元素的查找次数相加 / 除以元素总数。

查找的次数=每一层的层数×每一层的结点个数,上图即是1x1+2x2+3x4+4x5=37,则查找成功的平均查找长度为37/12

注意:当计算查找失败的平均长度时,层数需要依次减1,即原先第四层变为第三层,然后进行查找失败的次数的计算,即是3x3+4x10=49(以上算式中“x”前面的为层数,后面为该层的结点数), 则对应的查找失败的平均查找长度为49/13

 

排序

冒泡排序(稳定):基本有序,且数据量较小时。

插入排序(稳定):基本有序,且数据量较小时。

希尔排序(不稳定):当数据量中等时适用,数据越有序,越高效,希尔是对插入排序的一种优化。

选择排序(不稳定):跟数据是否有序无关,数据量较小时适用。

堆排序(不稳定):当数据量较大时适用,最少,最坏与平均时间一致,无需辅助空间。

归并排序(稳定):当数据量较大时适用,最少,最坏与平均时间一致,但需要较多辅助空间。

快速排序(不稳定):分治法---当数据量较大,数据是随机分布时适用,需要一点辅助空间。快速排序的平均时间最短,但可能出现最坏时间。

关键字序列构造二叉排序树的基本过程是, 若需插入的关键字大于树根,则插入到右子树上,若 小于树根,则插入到左子树上,若为空树,则作为树根结点。

 

动态规划算法总体思想:如果能够保存已解决的子问 题的答案,而在需要时再找出已求得的答案,就可以 避免大量重复计算,从而得到多项式时间算法 从根开始计算,到找到位于某个节点的解,

回溯法 (深度优先搜索)作为最基本的搜索算法,其采用了 一种“一只向下走,走不通就掉头“的思想(体会”回溯” 二字),相当于采用了先根遍历的方法来构造搜索树。

 

 

零碎知识

事务型数据库容易形成信息孤岛,而主题数据库不容易形成”信息孤岛”

 

一般争议处理的流程:先找主管行政管理部门进行仲裁,仲裁不成功再进行诉讼

  • 相联地址映射:主存的任意一块可以映象到cache中的任 意一块。
  • 直接相联映射:主存中一块只能映象到Cache的一个特 定的块中。
  • 组相联的映射:各区中的某一块只能存入缓存的同组号的 空间内,但组内各块地址之间则可以任意存放。即从主存的组 到Cache的组之间采用直接映象方式,在两个对应的组内部 采用全相联映象方式。

 

  1. 程序查询方式:当主机进行I/0操作时,首先发出询问信号,读取设备的状态并根据设备状态决定下一步操作究竟是进行数据传输还是等待。这种控制下,CPU一旦启动I O,必须停止现行程序的运行,并在现行程序中插入一段程序。程序查询方式的主要特点是CPU有踏步等待现象,CPU与 IO串行工作
  2. 程序中断:是指计算机执行现行程序的过程中,出现某些急需处理的异常情况和特殊请求,cpu暂时终止现行程序,而转去对随机发生的更紧迫的事件进行处理,在处理完毕后,cpu 将自动返回原来的程序继续执行。在中断方式中CPU与外设可并行工作
  3. 直接内存存取DMA:是指在内存与I/O设备间传送数据块的过 程中,不需要CPU的任何干涉,只需要CPU在过程考试启动与过程结束时的处理,实际操作由DMA硬件直接执行完成,CPU在此传送过程中可做别的事情。在DMA方式中CPU与外设可并行工作

 

  • 主存主要采用动态随机存储器DRAM
  • Cache采用静态随机存储器SRAM
  • EEPROM是电擦除可编程的只读存储器

系统初始化过程可以分为3个主要环节,按照自底向上、 从硬件到软件的次序依次为:片级初始化、板级初始化和系统 级初始化

系统初始化:该初始化过程以软件初始化为主,主要进行 操作系统的初始化

 

逆波兰表达式--适合栈

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。

逆波兰表达式主要有以下两个优点:去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。

适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

 

语法分析

编译程序中语法分析器接受以单词为单位的输入,并产生有关信息供以后各阶段使用。

语法分析技术:算符优先法LR分析法递归下降法

LR分析法主要有SLR(1)、LR(0)、LR(1)和LALR(1)等4种,

其中LR(1)的分析能力最强,LR(0)的分析能力最弱。

沟通路径

软件开发小组的沟通路径受到小组组织形式和规模的影响。若任意小组成员之间均可能有沟通路径,则可用完全连通图来对开发小组的沟通路径建模,最多的沟通路径为完全连通图的边数,即n个成员的开发小组的沟通路径是n(n-1)/2,因此8个成员的开发小组的沟通路径有28条

 

Web应用防护墙(Web Application Firewall,简称 WAF)

是通过执行一系列针对HTTP/HTTPS的安全策 略来专门为Web应用提供保护的一款产品,主要用于 防御针对网络应用层的攻击,像SQL注入、跨站脚本 攻击、参数篡改、应用平台漏洞攻击、拒绝服务攻击 等。流氓软件已经处于系统内部了,无法有效防止。

 

 

 

哈夫曼树

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。

哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树又称最优树

特点:哈夫曼树只有度为0和2的结点,包含n棵树的森林要经过n-1次合并才能形成哈夫曼树,共产生n-1个结点,所以包含n个叶子结点的哈夫曼树中共有n+n-1=2n-1个结点

 

 

结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积

树的带权路径长度规定为:所有叶子结点的带权路径长度之和

 

CPU强调通用性,需要处理各种数据类型,又要进行 逻辑判断进行大量的分支跳转和中断的处理。因此CPU内部结构异常复杂。

CPU利用较高的主频和高速缓存来提升执行指令的速度

GPU面对的是类型高度统一、相互无依赖的大规模数据和不需要被打断的纯净计算环境。

GPU是一种单指令多数据流(Single Instruction Multiple Data,SIMD) 架构,特点是比CPU包含更多的计算单元和更简单的控制单元

 

 

无向完全图:结点为n的边数为:nx(n-1)/2

有向完全图:结点为n的边数为:nx(n-1)

 

有向完全图与无向完全图的区别是,有向完全图的两个结点可以连接两条边。

 

 

信息摘要

简要的描述了一份较长的信息或文件,它可以被看作一份长文件的“数字指纹”。用于创建数字签名,对于特定的文件而言,信息摘要是唯一的。不同的文件产生的信息摘要也是不一样的。

常见的算法有MD5和SHA,可以用来保证数据的完整性, 防止发送的报文被篡改

posted @ 2023-11-05 12:51  litiyi  阅读(100)  评论(0编辑  收藏  举报