中级软件师笔记

中级软件师笔记

·2021年下半年中级软件设计师成绩已出,我上午52下午69

中级软件师笔记_第1张图片

中级软件师笔记_第2张图片

计组

时钟周期是主频的倒数

数据的表示

n进制转十进制:小数点后是-1次方开始

十进制转二进制:余数逆序排序

中级软件师笔记_第3张图片

原码:转二进制(不能直接运算)

反码:正数的反码=原码,负数的反码=原码符号位不变,其余取反

补码:正数的补码=原码,负数的补码=反码+1(可以运算)

移码:补码的符号位取反(做浮点运算的阶码)

中级软件师笔记_第4张图片

8位补码可以表示:-128~127

使用补码表示数据时,可以将符号位和其他位统一处理,减法也可按加法来处理,从而简化运算部件的设计

浮点数

中级软件师笔记_第5张图片

为了提高运算的精度,需要充分地利用尾数的有效数位,通常采取浮点数规格化形式,即规定尾数的最高数位必须是一个有效值,即1/2<|F|<1。

两个浮点数进行相加运算时,首先需要对阶(使它们的阶码一致,小的阶码变大,10的平方变三次方

),然后再进行尾数的相加处理。

计算机结构

中级软件师笔记_第6张图片

程序计数器PC除了存放指令地址,也可以临时存储算术/逻辑运算结果,是错的==(不能存这个,只能计数)==

当CPU执行一条指令时,先把它从内存储器取到缓冲寄存器DR中,再送入IR暂存,指令译码器根据IR的内容产生各种微操作指令,控制其他的组成部件工作,完成所需的功能。(操作码和地址码都传入IR)

指令寄存器(IR)用于暂存从内存取出的、正在运行的指令,这是由系统使用的寄存器,程序员不能访问。(对用户完全透明)

存储器数据寄存器(MDR)和存储器地址寄存器(MAR)用于对内存单元访问时的数据和地址暂存,也是由系统使用的,程序员不能访问。

程序计数器(PC)用于存储指令的地址,CPU根据该寄存器的内容从内存读取待执行的指令,程序员可以访问该寄存器。

Flynn分类法

计算机体系结构的分类方法

两个指标:指令流和数据流

中级软件师笔记_第7张图片

CISC与RISC

中级软件师笔记_第8张图片

记住特点和区别

CISC==(Complex Instruction Set Computer)==复杂指令系统计算机:复杂,多种寻址

RISC==(Reduced Instruction Set Computing)==精简指令系统计算机:精简,少种寻址,硬布线,流水线

流水线技术

中级软件师笔记_第9张图片

流水线的计算

1、流水线的执行时长

①关于流水线的周期,我们需要知道的是,流水线周期(△t)为指令执行阶段中执行时间最长的一段。

②流水线的计算公式为:

完成一条指令所需的时间+(指令条数-1)*流水线周期,在这个公式中,又存在理论公式和实践公式。

理论公式img

实践公式:(k+n-1)*△t k为一条指令所包含的部分的多少

例题:若指令流水线一条指令分为取指、分析、执行三个阶段,并且这三个阶段的时间分别为取指1ns,分析2ns,执行1ns,则流水线的周期为多少?100条指令全部执行完毕需要执行的时间是多少?

分析:上面已经说过,流水线的周期为花费时间最长的阶段所花费的时间,所以流水线的周期就是2ns。

根据理论公式,T=(1+2+1)+(100-1)2=4+992=202ns

根据实践公式,T=(3+100-1)*2=204ns

在这里,需要注意的是,因为流水线的理论公式和实践公式的结果不一样,但是在考试过程中可能都会考到,所以,在应用时,先考虑理论公式,后考虑实践公式。

流水线吞吐率的计算

指令条数/流水线执行时间

流水线的最大吞吐率为: img

流水线的加速比

流水线的加速比指的是在完成同一批任务时,不使用流水线所用的时间与使用流水线所用的时间之比称之为流水下的加速比。加速比是越大越好的,它呈现了使用流水线的效果的好坏程度。

基本公式为:S=不使用流水线执行时间 */* 使用流水线的执行时间

如1中的例题:其加速比为S=(1+2+1)*100/(1+2+1)+(100-1)*2

流水线的效率

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

假设有一个需要完成的任务由四部分组成,如图一所示:

中级软件师笔记_第10张图片

在实际流水线执行中,有以下时空图表示,如下图所示:

中级软件师笔记_第11张图片

由图一可知,流水线的周期长为3△t

由时空图可知,在流水线应用过程中,并不是所有的时间都完美应用到,仍有时间存在空置,所以,在效率计算时,可以从两个方面进行理解。

①从公式计算:E=n个任务占用的时空区 */* k个流水线的总的时空区

如上图结果为:E=(△t+△t+△t+3△t)4 / 15△t4

②从图中的面积理解:流水线的效率等于阴影所占方块与图中所有方块的比值

当每个步骤的时间相等时,效率最高

存储系统

层次化存储结构

中级软件师笔记_第12张图片

IO接口常见编址方法:

  1. 与内存单元统一编址(和内存在一个空间里,所以访存就可以访问IO接口)
  2. 单独编址==(使用专门的IO指令访问)==

Cache

中级软件师笔记_第13张图片

时间局部性和空间局部性

工作集理论:进程运行时被频繁访问的页面集合

随机存储器和只读存储器

RAM(断电消失)和ROM

中级软件师笔记_第14张图片

计算有多少个地址单元:大的地址-小的地址+1

磁盘工作原理

中级软件师笔记_第15张图片

中级软件师笔记_第16张图片

中级软件师笔记_第17张图片

格式化容量:就是已经分好了成扇区的部分,所以用扇区数和字节密度算

非格式化容量:用长度算

总线系统

内部总线(片内总线):微机内部的外围芯片与处理器之间的总线(芯片内部)

系统总线:(计算机中各部件信息传输)数据总线==(字长)、地址总线(内存容量)==、控制总线

外部总线(通信总线):微机和外部设备之间的总线

可靠性

可用性是在某个考察时间点系统能够正常运行的概率或时间占有率期望值。考察时间为指定瞬间,则称瞬时可用性;考察时间为指定时段,则称时段可用性;考察时间为连续使用期间的任一时刻,则称固有可用性。

而可靠性通常是指元件、产品、系统在一定时间内、在一定条件下无故障地执行指定功能的能力或可能性

具体
  1. 可靠性:可靠性是指系统可以无故障地持续运行(看运行时会不会崩溃)不希望经常发生错误
  2. 可用性:系统随时都可以使用,不希望长时间发生错误
例子

如果系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有96%。

串联:一个失效就失效

并联:全部失效才失效

中级软件师笔记_第18张图片

中级软件师笔记_第19张图片

校验码

码距:变化多少个位得到另一个码

所谓码距,是指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。

例如我们现在有一套编码为:00,01,10,11,在这套编码中至少有一个数字不相同,我们称这套编码的码距为1。

1位无法检错,2位可以检错,无法纠错(无法判断正确应该是什么),3位可以检错,可以纠错

而整个编码系统中任意两个码字的最小距离就是该编码系统的码距。为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是3。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4LimNY9-1640050736359)(https://gitee.com/spinach17/images/raw/master/images/image-20210913174321026.png)]

CRC循环校验码

CRC可以检错不能纠错

模2除法:做异或

循环冗余校验码(CRC)编码方法是在k位信息码后再拼接r位的校验码,形成长度为n位的编码,其特点是检错能力极强且开销小,易于用编码器及检测电路实现。

在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16 位生成多项式有CRC-16=x16 + x15 + x2 +1 和 CRC-CCITT= x16 + x12 + x5 +1。一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错。用于纠错目的的循环码的译码算法比较复杂。

海明校验码

海明码是一种可以纠正一位差错的编码,是利用奇偶性来检错和纠错的校验方法。

https://yonggie.blog.csdn.net/article/details/83186280?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

https://blog.csdn.net/weixin_42426249/article/details/89428080

海明码的公式:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYA3Hsmo-1640185556323)(https://private.codecogs.com/gif.latex?2^{k}-1\geqslant n+k)] 这个式子的意思是,可以用来校验错误的数字个数(2^{k}-1)要大于或者等于原数据位数(n)和校验位数(k)的和。根据有效数据位的长度,决定要使用多少个校验位

题目会给出信息,比如信息1011,那么数据位数n=4

通过海明码的公式计算得到k=3,所以校验码为3位

3位分别放在2的0,1,2次方位上

这样海明码一共就有7位,将数据位填上

计算校验位

将每个数据位的位数写成二进制,哪一位是1,代表这个数据位要参与哪一位校验位的求值

计算校验位:将全部参与的数据位的信息进行异或得到

中级软件师笔记_第20张图片

纠错:

中级软件师笔记_第21张图片

根据传送过来的数据位,重新计算校验位

将收到的校验位和重新计算的校验位进行异或

得到的二进制数是几,代表第几位出错了,那一位取反则得到正确的数据码

输入输出方式

在程序控制方式下,由CPU执行程序控制数据的输入输出过程。

在中断方式下,外设准备好输入数据或接收数据时向CPU发出中断请求信号,若CPU决定响应该请求,则暂停正在执行的任务,转而执行中断服务程序进行数据的输入输出处理,之后再回去执行原来被中断的任务。

在DMA方式下,CPU只需向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU的负担,可以大大节省系统资源。(无需CPU干预)

操作系统

概述

中级软件师笔记_第22张图片

分时操作系统中,n个用户,时间片为q,每个用户的响应时间是nq

系统软件:汇编程序、java解释器、编译程序

进程状态转换图

中级软件师笔记_第23张图片

同一进程里的线程可以共享该进程的所有资源,但是不能共享这里面某个线程的栈指针

前驱图

进程的同步和互斥

PV操作

P是减1,V是加1

在前操作的后面执行一个V操作,在后操作的前面执行一个P操作

p申请资源,v释放资源

信号量S的号码是从p1开始,和序号最近事件的连线,按顺序编号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYhEAPTk-1640050736370)(https://gitee.com/spinach17/images/raw/master/images/image-20210913200128390.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpKYlett-1640050736371)(https://gitee.com/spinach17/images/raw/master/images/image-20210913203909940.png)]

例题

实现最多n个购书者进入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tW2aJEEa-1640050736373)(https://gitee.com/spinach17/images/raw/master/images/image-20210914194847540.png)]

实现只有买书之后(V),才能§收银

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X19wa4P6-1640050736374)(https://gitee.com/spinach17/images/raw/master/images/image-20210914200231101.png)]

实现收费完(V),才能§离开书店

中级软件师笔记_第24张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGdNITeo-1640050736376)(https://gitee.com/spinach17/images/raw/master/images/image-20210914201205384.png)]

前驱图例题

一个箭头对应一个信号量,箭头起点是V终点是P

中级软件师笔记_第25张图片

信号量初始值(也是最大值)=资源数量,信号量最小值=进程总数-同时可以有几个访问(初始值)

死锁

最少需要多少个资源就不会发生死锁:每个进程所需资源数都-1然后加起来,加一个1(分配给任一进程都可以完成任务然后释放资源)

死锁发生的四大条件

中级软件师笔记_第26张图片

银行家算法

计算现有资源,分配给可以完成任务的,让完成任务的释放资源

中级软件师笔记_第27张图片

中级软件师笔记_第28张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTOXaWxV-1640050736381)(https://gitee.com/spinach17/images/raw/master/images/image-20210915144109100.png)]

反例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzIgpaaG-1640050736383)(https://gitee.com/spinach17/images/raw/master/images/image-20210915144338363.png)]

进程申请资源

从资源出来的箭头表示已经被分配的资源(如果有3个出的箭头出自有3个资源的,这个资源就被分完了)

从进程出来的资源表示进程需要申请的资源(根据资源是否被分完了,决定该进程能不能成功申请到资源)

中级软件师笔记_第29张图片中级软件师笔记_第30张图片

分区存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7UZUG49-1640050736384)(https://gitee.com/spinach17/images/raw/master/images/image-20210915144411551.png)]

首次:直接顺序找

最佳:找最小空间

最差:找最大空间

循环首次:首尾相连,下次从下一个空间开始考虑

页式存储、段式存储、段页式存储

页式存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rna5iAIY-1640050736385)(https://gitee.com/spinach17/images/raw/master/images/image-20210915144936987.png)]

例题

中级软件师笔记_第31张图片

  1. 通过页面大小和逻辑地址求出页面号(逻辑地址的前面部分是页号,后面部分是页内地址):4K所以后面12位是页内地址,所以页号是5
  2. 根据页号,查表得页帧号=6,所以物理地址是6A29

段式存储

相比页是按物理结构划分页,段式根据程序的逻辑结构划分段

中级软件师笔记_第32张图片

段页式存储

先分段再分页

中级软件师笔记_第33张图片

快表

中级软件师笔记_第34张图片

页面淘汰算法

中级软件师笔记_第35张图片

重点后两种

中级软件师笔记_第36张图片

上图例如A属于页面2和3,通过页面的状态码是不是1可以知道该页面在不在内存中

不在的话,就需要先产生缺页中断,然后置换进内存

访问内存次数:

页式存储管理中,访问指令或数据时,首先要访问内存中的页表,查找到指令或数据所在页面对应的页表项,然后再根据页表项查找访问指令或数据所在的内存页面。需要访问内存两次。
段式存储管理同理,需要访问内存两次。
段页式存储管理,首先要访问内存中的段表,然后再访问内存中的页表,最后访问指令或数据所在的内存页面。需要访问内存三次。
对于比较复杂的情况,如多级页表,若页表划分为N级,则需要访问内存N+1次。若系统中有快表,则在快表命中时,只需要一次访问内存即可。

索引文件结构

一般是13个索引结点

中级软件师笔记_第37张图片

磁盘索引块大小/地址项大小=一个索引块存放多少个物理块地址

下面一个索引块就能存1k/4=256个物理地址

中级软件师笔记_第38张图片

例题

中级软件师笔记_第39张图片

双击文件时,根据文件关联决定用什么程序打开文件

unix索引结构

中级软件师笔记_第40张图片

树型目录结构

中级软件师笔记_第41张图片

位示图法

位视图位号(行)从0开始,字号(列)有时从1开始

1表示被占用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DydHK8ye-1640050736396)(https://gitee.com/spinach17/images/raw/master/images/image-20210915172651876.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubQZZY0h-1640050736397)(https://gitee.com/spinach17/images/raw/master/images/image-20210915180051953.png)]

数据传输控制方式

程序控制方式:全CPU控制

程序中断方式:到关键点发中断指令

DMA方式:专门的DMA控制器在CPU和外设之间

通道:

输入输出处理机:

虚拟设备和SPOOLing技术

核心:缓冲

单缓冲区:每个数据块独立传入缓冲区和送至用户区,再额外加上一次用户处理数据的时间

双缓冲区:每个数据独立传入数据,可以在传入数据的同时送至用户区,再额外加上一次送至用户区和处理数据的时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhKuisrI-1640050736400)(https://gitee.com/spinach17/images/raw/master/images/image-20210915180826090.png)]

微内核操作系统

可靠、稳定、安全

中级软件师笔记_第42张图片

因为Windows XP操作系统支持FAT、FAT32或NTFS文件系统,所以利用“磁盘管理”程序可以对磁盘进行初始化、创建卷,并可以选择使 用FAT、FAT32或NTFS文件系统格式化卷。

不能说64位的计算速度是32位的两倍

要求嵌入式操作系统能在不同位处理器平台运行:可定制性

嵌入式操作系统特点:

微型化:占用资源和系统代码量少

可定制:可运行在不同微处理器平台上

实时性:多应用于要迅速响应的场合

可靠性:对关键要害应用还要有容错和防故障

易移植性:采用硬件抽象级和板级支撑包的底层设计技术

初始化

嵌入式系统初始化三个阶段:片级初始化(微处理器)、板级初始化(除了微处理器的其他硬件)、系统初始化(操作系统)

磁盘

柱面对应磁道

移臂调度:先来先服务和最短寻找时间优先算法可能会随时改变移动臂的运动方向。

移臂调度算法:(1)先来先服务
(2)最短寻道时间优先
(3)电梯算法(扫描算法,到头往回)
(4)单向扫描调度算法

同一个柱面里的响应顺序,看扇区号,小的先响应


磁盘格式化:只有在硬件介质出错时才能格式化

磁盘分区和格式化有可能清除有用数据

设备管理

image-20211027213834666中级软件师笔记_第43张图片

数据库

多值属性:可能有多个值

复合属性:可以再分

派生属性:可以通过其他属性计算出来

事务:原子性(要么都做,要么都不做)、一致性(保证执行结果是从一个一致性状态转到另一个一致性状态)、隔离性(事务相互隔离、操作完成前都不可见)、持久性(只要提交,即使数据库崩溃,也有效)

having 只能用于 select 语句中

having是在分组后对数据进行过滤

where是在分组前对数据进行过滤

having经常和group by 联用,并且having需要和聚合函数应用。
例如查询num出现至少三次的num
select distinct Num as ConsecutiveNums from Logs
GROUP BY Num
HAVING count(Num)>=3

order by排序

数据库三级模式两级映射

内模式关注数据如何存放

概念模式关注表结构

外模式关注视图

映射从底层映射到视图

创建索引是改变内模式

中级软件师笔记_第44张图片

数据库设计过程说明

中级软件师笔记_第45张图片

在大多数情况下,定义的属性对于一个特定的实体都只有单独的一个值。例如,对于一个特定的学生,只对应一个学生号、学生姓名,这样的属性叫做单值属性。但是, 在某些特定情况下,一个属性可能对应一组值。例如,学生可能有0个、1个或多个亲属,那么学生的亲属的姓名可能有多个。这样的属性称为多值属性

ER模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a8JVbBZs-1640050736404)(https://gitee.com/spinach17/images/raw/master/images/image-20210917123347084.png)]

局部ER图集成有两种方式

中级软件师笔记_第46张图片

一个实体转成一个关系模式

一个联系,

(一对一)可以转成一个关系模式,也可以分别表示在两个实体中

(一对多)可以转成一个关系模式,也可以表示在多的关系模式里面

(多对多)必须转成一个单独的关系模式

(由此可以得到最少和最多转换出的关系模式)

弱实体:对另外一个实体有很强的依赖性

关系代数

并:两个集合(属性组一样)的记录并在一起==(都有的内容只显示一次)==

交:只显示两个集合(属性组一样)中相同的记录

差:不显示这个集合里,两个集合相同的记录

中级软件师笔记_第47张图片

笛卡尔积(符号:x):将两个集合的属性并起来

结果集的记录的个数是参与操作的两个集合的记录数之 积

结果集的属性的个数是参与操作的两个集合的属性数之和

投影(符号:π):选取目标集合中特定的列

选择(符号:):选取目标集合中特定的行

自然连接(符号:无限):和笛卡尔积相比,连接会把两个集合中都有的字段只保留一个==(以左侧为主)==(笛卡尔积无条件保留)

没有写等值条件的时候,默认是两个集合中相同的字段的值相等才会加入结果集

进行选择运算的对象是“一个关系当中某一个属性的值

下面就是选择第三个属性=销售部1

中级软件师笔记_第48张图片

中级软件师笔记_第49张图片

规范化理论:函数依赖

函数依赖:给定x的值,能求出唯一的y,称y函数依赖于x

部分函数依赖:两个的组合(x,z)中只需要一个x就可以确定唯一的y,则y部分函数依赖于(x,z)个别候选键就可以推出一个非主属性

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

完全函数依赖:两个的组合(x,z)中任意一个x或者z就都不可以确定唯一的y,则y完全函数依赖于(x,z)


amstrong公理:

Armstrong公理的推论

合并规则:若X→Y,X→Z同时在R上成立,则X→YZ在R上也成立。

分解规则:若X→W在R上成立,且属性集Z包含于W,则X→Z在R上也成立。

伪传递规则:若X→Y在R上成立,且WY→Z,则XW→Z。

中级软件师笔记_第50张图片

规范化理论的价值和用途

规范化在逻辑设计阶段

数据冗余、更新异常、插入异常、删除异常

规范化理论:求候选关键字

中级软件师笔记_第51张图片

图示法求候选键

中级软件师笔记_第52张图片

中级软件师笔记_第53张图片

规范化理论:范式

中级软件师笔记_第54张图片

1NF

例如一个员工的关系模式有多个家庭成员:属于1NF

因为(员工号,家庭成员)作为主键,但是其他的属性对员工号有部分依赖

中级软件师笔记_第55张图片

2NF:所有的非主属性,只能由所有主键一起才能唯一确认(当只有单一主属性的时候,必定满足完全依赖,主键有多个主属性则需要,检查是否有部分依赖)

中级软件师笔记_第56张图片

3NF

中级软件师笔记_第57张图片

BCNF

中级软件师笔记_第58张图片

  1. 第一范式:一言以蔽之:“第一范式的数据表必须是二维数据表”,第一范式是指数据库的每一列都是不可分割的基本数据项,强调列的原子性,试题中某一属性不能拥有几个值。比如数据库的电话号码属性里面不可以有固定电话和移动电话值。 说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。(字段不能再分)
  2. 第二范式建立在第一范式的基础上,即满足第二范式一定满足第一范式,第二范式要求数据表每一个实例或者行必须被唯一标识。除满足第一范式外还有两个条件,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。(字段不能只和主键的一部分有关)
  3. 第三范式若某一范式是第二范式,且每一个非主属性都不传递依赖于该范式的候选键,则称为第三范式,即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。(意思就是有字段,不是直接和主键相关的,而是间接相关)

规范化理论:模式分解

保持函数依赖分解:分解之前的函数依赖,分解之后依然存在

中级软件师笔记_第59张图片

无损分解:还能还原

中级软件师笔记_第60张图片

image-20210920125504684

中级软件师笔记_第61张图片

中级软件师笔记_第62张图片

确认无损分解的方法二:

中级软件师笔记_第63张图片

数据库并发控制

排它锁:X锁(写锁,其他不能读写)

共享锁:S锁(读锁,其他只可读)

中级软件师笔记_第64张图片

中级软件师笔记_第65张图片

中级软件师笔记_第66张图片

数据库完整性约束

实体完整性

参照完整性

用户自定义完整性

相比上面三种约束,为了应对更复杂情况,触发器

数据库安全

中级软件师笔记_第67张图片

数据库备份与恢复

中级软件师笔记_第68张图片

中级软件师笔记_第69张图片

中级软件师笔记_第70张图片

数据仓库与数据挖掘

数据库大多会对数据进行修改,数据仓库进去数据之后就不在改变

数据集市就是部分的数据仓库

OLAP服务器:联机分析处理器,处理数据

中级软件师笔记_第71张图片

数据挖掘方法

决策树:利用信息增益寻找数据库中具有最大信息量的属性字段,建立决策树(例如ID3方法)

神经网络:非线性,主要三种神经网络模型:前馈式网络、反馈式网络、自组织网络(神经网络的知识体现在网络连接的权值上,神经网络的学习体现在神经网络的权值逐步计算上)

遗传算法:模拟生物进化:繁殖(选择)、交叉(重组)、变异(突变)

关联规则挖掘算法:描述数据之间存在关系的规则,两个步骤:求出大数据项集、用大数据项集产生关联规则

中级软件师笔记_第72张图片

反规范化技术

牺牲空间和规范化,提高查询的速度

中级软件师笔记_第73张图片

大数据基本概念

4V:数据量、速度、多样性、值

分片透明:用户不必关注数据如何分片

复制透明:用户不用关心数据库在网络上各个节点的复制情况

位置透明:不必关心操作的数据放在何处

局部映像透明(逻辑透明):最低层次透明,不必关注DBMS

中级软件师笔记_第74张图片

中级软件师笔记_第75张图片

计网

帧中继(Frame Relay,FR)是为克服X.25交换网的缺陷、提髙传输性能而发展起来的高速分组交换技术。帧中继网络不进行差错和流量控制,并且通过流水方式进行交换,所以比X.25网络的通信开销更少,传输速度更快。

帧中继提供面向连接的虚电路服务,因而比DDN专线更能提高通信线路利用率, 用户负担的通信费用也更低廉。在帧中继网中,用户的信息速率可以在一定的范围内变化,从而既可以适应流式业务,又可以适应突发式业务,这使得帧中继成为远程传输的理想形式。

中继器:直接转发

集线器:多端口中继器(所有端口组成一个冲突域)

网桥:连接两个同类型网络的设备

交换机:多端口网桥(每个端口组成一个冲突域)

“三网合一”的三网是指电信网、广播电视网、互联网

中级软件师笔记_第76张图片

七层模型

广播在同一个局域网内,局域网只存在最下面两层协议中(不能通过路由器)

路由器连接两个广播域

集线器连接的所有主机构成一个冲突域

交换机的每个端口构成一个冲突域

中级软件师笔记_第77张图片

网络技术标准与协议

ICMP:因特网控制协议

ARP:地址转换协议(ip->mac)

RARP:反地址转换协议

ftp:20是数据口,21是控制口

POP3::110端口

SMTP:25

Telnet:23

DHCP:服务端67客户端68

TFTP:69

中级软件师笔记_第78张图片

tcp

中级软件师笔记_第79张图片

中级软件师笔记_第80张图片

dhcp分到的ip是169和0,说明有问题,是错误的

DHCP客户端可以从DHCP服务端获得本机IP地址、DNS服务器地址、DHCP服务器地址、默认网关的地址(没有web服务器地址和邮件服务器地址)

image-20210920173621963

由于第一次查询是递归,所以本地域名服务器会担负起查到到结果的责任

而使用迭代的时候,每一层不负责任

因为根域名服务器负担重,如果使用递归,会使效率降低

中级软件师笔记_第81张图片

SNMP:简单网络管理协议

FTP和TFTP:可靠与不可靠

中间三个是文件的共享协议:可以可靠实现也可以不可靠

网络类型与拓扑结构

总线型:都往总线上发信息

星形:中心节点被破坏整个网络瘫痪(单点故障)

环形:可靠,无单点故障

局域网中一般是星形,中心节点是交换机

中级软件师笔记_第82张图片

网络规划与设计

中级软件师笔记_第83张图片

逻辑网络设计

中级软件师笔记_第84张图片

物理网络设计

中级软件师笔记_第85张图片

分层设计‘

image-20210920193737610

IP地址与子网划分

中级软件师笔记_第86张图片

由于按类分的每一类差距太大,所以发展了无类域间路由(无分类网络)

子网划分:

  1. 子网掩码
  2. 将一个网络划分成多个子网(取部分主机号当子网号)
  3. 将多个网络合并成一个更大的网络==(构成超网)==(取部分网络号当主机号)

中级软件师笔记_第87张图片

DHCP动态分配ip时候:若没有获取到,Windows是169.254.0.0,linux是0.0.0.0

特殊含义IP地址

全1地址:发广播

中级软件师笔记_第88张图片

10和172和192都是内部ip,局域网内只有一个出口拥有公网ip

HTML

vlink:超链接被点击之后的颜色

alink:正在被点击的超链接的颜色

I:斜体

table的align属性:对齐方式

中级软件师笔记_第89张图片

无线网

中级软件师笔记_第90张图片

网络接入技术

重点:ADSL(非对称,上行比下行小)(光纤的优点就是上下行一样)

LTE有两个方向TDD时分、FDD频分

中级软件师笔记_第91张图片

IPv6

使ipv6节点可以使用ipv4网络,用隧道技术

使ipv6节点和ipv4节点通信,使用翻译技术

中级软件师笔记_第92张图片

命令

ipconfig:显示信息

ipconfig /all:显示详细信息,可以查看DHCP是否已启用

ipconfig /renew:更新所有适配器

ipconfig /release:释放所有匹配的连接

apr -a:查看arp告诉缓存中的内容

netstat -r:显示核心路由表

ipconfig命令参数:

中级软件师笔记_第93张图片

www.baidu.com这个主机名/网站名中,.com是顶级域名,baidu.com是一级域名,www是主机名。主机名标识服务器,所以baidu.com想建立www服务器就是www.baidu.com.,想建立mail服务器,就是mail.baidu.com)。

信息安全

信息系统安全属性

中级软件师笔记_第94张图片

对称加密与非对称加密

私钥:解密和签名

公钥:加密和认证

1976年斯坦福大学的Diffie和Heilman提出了使用不同的密钥进行加密和解密的公钥加密算法。设P为明文,C为密文,E为公钥控制的加密算法,D为私钥控制的解密算法,这些参数满足下列3个条件:

(1)D (E §) =P

(2)不能由E导出D

(3)选择明文攻击(选择任意明文-密文对以确定未知的密钥)不能破解E

加密时计算C=E §,解密时计算P=D ©。加密和解密是互逆的。用公钥加密、私钥解密,可实现保密通信;用私钥加密、公钥解密,可实现数字签名。

对称:加密和解密的时候使用一样的密钥

非对称(公开密钥加密):私钥加密-公钥解密/公钥加密-私钥解密(ECC、DSA、RSA)

替换:有一个明文-密文替换表,查表替换

对称加密:速度快、效率高

中级软件师笔记_第95张图片

非对称加密大量数据很慢,所以一般用对称加密大数据量的内容,然后用非对称加密传公钥

用对方的公钥加密,对方收到后用自己的私钥解密

公钥是公开的

公钥加密:SA结尾的(DSA、RSA)、EcC

私钥加密:DES

中级软件师笔记_第96张图片

信息摘要

内容的特征值

单向:和加密不同,只能从内容求得摘要,无法根据摘要求明文

接收方通过验证后面收到的摘要与自己收到的明文计算出的摘要,确保内容没有被篡改

中级软件师笔记_第97张图片

但是摘要也可能被篡改,所以需要数字签名

MD5摘要算法:输出4个32位分组,级联成128位的散列值

数字签名

通过将摘要用发送方的私钥数字签名(加密),接收到之后用发送方的公钥数字签名验证(解密),确保发送方(如果收到的信息被篡改了可以看出来)

数字签名没有保密性

中级软件师笔记_第98张图片

数字证书与PGP

数字信封:中间截获方就算截获了,也无法打开

中级软件师笔记_第99张图片

数字证书:将个人的密钥和信息绑定,防止收到的是别人的密钥

数字证书由CA机构颁发

确认数字证书的CA机构:使用数字签名验证颁发机构,防止伪造CA机构颁发

设计邮件加密系统

中级软件师笔记_第100张图片

某网站向CA申请了数字证书,用户通过CA的签名来验证网站的真伪。

数字证书包含版本、序列号、签名算法标识符、签发人姓名、有效期、主体名和主体公钥信息等并附有CA的签名,用户获取网站的数字证书后通过验证CA的签名来确 认数字证书的有效性,从而验证网站的真伪。

各个网络层次的安全保障

物理层次的安全性是最高的

物理层以上都是各种协议来确保安全

数据链路层:隧道,加密再传确保安全

网络层:IPSec加密ip数据报

传输层:SET针对电子商务

中级软件师笔记_第101张图片

包过滤防火墙对数据包的过滤依据包括源IP地址、源端口号、目标IP地址和目标端口号。

网络威胁与攻击

arp攻击造成无法跨网段通信:伪造网关arp报文

特洛伊木马(Trojans)程序常被伪装成工具程序或游戏,一旦用户打开了带有特洛伊木马程序的邮件附件或从网上直接下载,或执行了这些程序之后,当用户连接到互联网上时,这个程序就会向黑客通知用户的IP地址及被预先设定的端口。

拒绝服务

端口扫描就是利用Socket编程与目标主机的某些端口建立TCP连接、进行传输协议的验证等,从而侦知目标主机的扫描端口是否处于激活状态、主机提供了哪些服务、提供的服务中是否含有某些缺陷等。

网络监听是主机的一种工作模式,在这种模式下,主机可以接收到本网段在同一条物理通道上传输的所有信息。使用网络监听工具可轻而易举地截取包括口令和账号在内的信息资料。(监听的是物理信道,所以防火墙没有用,最有效的防范方式是数据加密)

欺骗攻击是攻击者创造一个易于误解的上下文环境,以诱使受攻击者进入并且做出缺乏安全考虑的决策。IP欺骗是欺骗攻击的一种,IP欺骗实现的过程是:使得被信任的主机丧失工作能力,同时采样目标主机发出的TCP序列号,猜测出它的数据序列号。然后,伪装成被信任的主机,同时建立起与目标主机基于地址验证的应用连接。如果成功,黑客可以使用一种简单的命令放置一个系统后门,以进行非授权操作。

image-20210921134211870

木马病毒:有服务端和客户端,服务端会试图建立网络连接

文件型计算机病毒感染可执行文件(包括EXE和COM文件)。

引导型计算机病毒影响软盘或硬盘的引导扇区。

目录型计算机病毒能够修改硬盘上存储的所有文件的地址。

宏病毒感染的对象是使用某些程序创建的文本文档、数据库、电子表格等文件,从文件名可以看出Macro.Melissa是一种宏病毒,

中级软件师笔记_第102张图片

防护墙技术

网络级效率高

屏蔽子网:弥补了防火墙防卫不防内的缺点,在外网和内网间有一个隔离区

中级软件师笔记_第103张图片

在IE浏览器中,安全等级从可信站点、本地Intranet、Internet到受限站点默认情况下依次为低、中低、中、高,逐步提升,

数据结构

中级软件师笔记_第104张图片

数据结构与算法基础

数组

中级软件师笔记_第105张图片

稀疏矩阵

矩阵中大量的元素都是0

中级软件师笔记_第106张图片

解题技巧:带入几个数验证选项

中级软件师笔记_第107张图片

数据结构的定义

逻辑结构:

​ 线性结构:

​ 非线性结构:树(无环路)和图(有环路)

顺序表与链表

中级软件师笔记_第108张图片

引入头结点可以让所有节点的操作一致,不然需要单独处理头结点

在串比较、求子串、串连接、串替换运算中,除了串替换外,其他运算都不会改变串中的内容,因此,在链表存储方式下进行串替换最不方便。

顺序存储与链式存储

中级软件师笔记_第109张图片

队列与栈(重点)

为了防止队空和队满都是head=tail难以分辨

一般都少存一个元素,队满条件则不一样

求循环队列存了几个元素的时候也是和容量取余

不能用两个栈模拟一个队列的操作

中级软件师笔记_第110张图片

中级软件师笔记_第111张图片

例题
中级软件师笔记_第112张图片

队列的入队顺序和出队顺序一定一样

栈的入栈序列可以有多种出栈序列

广义表

递归的形式定义

表头:最外层第一个元素

表尾:除了第一个元素的其他所有元素

长度:最外层的元素个数

深度:多少层括号(嵌套的次数)

中级软件师笔记_第113张图片

树与二叉树

结点的度:该结点拥有的孩子结点的数量

树的度:该树中所有结点的度最高的

叶子结点:度为0的结点

分支结点:有分支

内部结点:不是叶子结点,也不是根结点(看上去在树的内部)

兄弟结点:拥有同一个父节点

层次:

中级软件师笔记_第114张图片

树的结点数=分支数目+1

满二叉树与完全二叉树

满二叉树:每一层都是满的(除了最下面一层,上面的结点都有两个子结点)

对于满二叉树,可以通过log2序号,看向下取整是否相等来判断是否在同一层

完全二叉树:除了最下面一层,上面的层都是满的;最下面一层从左到右是满的

中级软件师笔记_第115张图片

二叉树中叶子结点的数量是度为2的结点的数量+1

父节点的序号是子节点序号/2==(向下取整)==


对于满二叉树:

中级软件师笔记_第116张图片

二叉树遍历

层次遍历:结果就是序号排列

序表示什么时候访问根节点

前序:根左右

中序:左根右

后序:左右根

只知道先序和后序,不能重构二叉树(必须要有中序)

反向构造二叉树

知道遍历序列后,构造二叉树

已知前序和中序:

  1. 前序的第一个是根节点
  2. 在中序里根据根节点可以分出左右子树(后面每颗子树都如此操作)

树转二叉树

  1. 孩子结点变成左子树
  2. 兄弟结点变成右子树

中级软件师笔记_第117张图片

查找二叉树

一类特殊二叉树:对于里面的所有结点,该结点左子树里的所有结点都比这个结点小右子树里面的所有结点都比这个结点大

极大提高查询速度

中级软件师笔记_第118张图片

删除有两个子节点的节点:在左子树里找值最大的,替换到这个节点里,并相当于在左子树里删除那个最大的

二叉查找树的关键码序列就是构建出树的序列:https://blog.csdn.net/qq_40969108/article/details/88798582

根节点是序列的第一个,然后一个个往左右插

最优二叉树

又称哈夫曼树,是用来进行哈夫曼编码(一种压缩编码方式,让原始信息变得更短)的工具

树的路径长度:从根节点到该结点的路径总长

权:每个叶子结点的数值,代表一个字符出现的频度

带权路径长度:路径x权

树的带权路径长度(树的代价):目标就是构造出树的带权路径长度最短的树

若用n个权值构造一棵最优二叉树(哈夫曼树),则该二叉树的结点总数为2n-1

二叉树具有以下性质:度为2的结点(双分支结点)数比度为0 (叶子结点)数正好少1。而根据最优二叉树(哈夫曼树)的构造过程可知,最优二叉树中只有度为2和0 的结点,因此,其结点总数为2n-1。


构建哈夫曼树

简化、压缩

每次把最小的两个合成一棵树,将合成的权值放回,直到只剩一棵

左小右大

左0右1

中级软件师笔记_第119张图片

中级软件师笔记_第120张图片

中级软件师笔记_第121张图片

理解:把权大的放近点,权越小越远

中级软件师笔记_第122张图片

赫夫曼编码

定长编码:码长由有多少个字符决定:若采用定长编码法,比如2位码长只能表示4个字符,6个字符就要用3位码长

中级软件师笔记_第123张图片

线索二叉树

普通二叉树中所有叶子结点的左右指针都是空的,浪费

例如前序线索二叉树中:该叶子结点的左指针指向前序遍历到该叶子结点的上一个结点,右指针指向前序遍历时的下一个节点

中级软件师笔记_第124张图片

平衡二叉树

同一个序列的排序二叉树可能有多种,但是树的深度较小的遍历更快

所以平衡二叉树用来优化排序二叉树的查询速度

平衡二叉树的左右子树都是平衡二叉树

平衡度:该结点左子树的深度-右子树的深度

中级软件师笔记_第125张图片


构建平衡二叉树

  1. 从新插入的结点往上找,找到第一个不平衡的结点

  2. 从这个不平衡的结点,往新插入的结点路径上找3个节点,将这3各节点中间大的替换当前不平衡的结点作为新的根然后3个中小的放左边,大的放右边,原来的左右子树关系不变

  3. 若有因为移动后没有位置放的节点,按规则当做一个新节点重新插入即可

讲解:https://www.bilibili.com/video/BV1Vy4y1M7cD/

图的概念与存储

中级软件师笔记_第126张图片

邻接矩阵:5个结点就5x5

中级软件师笔记_第127张图片

邻接表:一个数组记录所有的节点,链表记录当前结点与相连结点的路径长度

中级软件师笔记_第128张图片

图的遍历

中级软件师笔记_第129张图片

对于邻接表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RZcF7U3P-1640050736513)(https://gitee.com/spinach17/images/raw/master/images/image-20210924105849121.png)]

​ 深度:从当前节点访问链表的下一个,再进入下一个节点的链表访问下一个,知道访问到叶子结点

​ 广度:从当前节点,把链表访问完;再进入链表中的第一个节点,将这个结点中的链表访问完;在进入链表中的第二个节点。。。

若在带权有向图G中以顶点表示事件,以有向边表示活动,边上的权值表示该活动持续的时间,则这种带权有向图称为用边表示活动的网(Activity On Edge Network, AOE 网),通常用AOE(不是AOV)来估算工程工期

图的遍历运算是按照某种策略访问图中的每一个顶点,实质上是通过边或弧找邻接点的过程,因此广度优先搜索遍历图和深度优先搜索遍历图的时间复杂度相同,其不同之处仅仅在于对顶点访问的次序不同。

采用邻接矩阵和邻接表表示图时,查找所有顶点的邻接顶点的时间复杂度都为O(n2)

拓扑排序

用一个序列表示,在图中,哪些事件可以先执行,哪些可以后执行

解题:将执行了的一个个划掉

中级软件师笔记_第130张图片

图的最小生成树

普利姆算法

只要有环路,就是图,而不是树

规律:如果树有n个结点,边数最多是n-1,多了则会有环路

普里姆算法:将图中一些边划掉,使得留下来的边能够把所有节点连起来,并且权值加起来最小(若有n个结点,则选出n-1条边)思想:逐渐通过最小权值的路径将顶点一个个加入最小生成树

中级软件师笔记_第131张图片

克鲁斯卡尔算法

第一步:将所有边取出放入列表(边集数组)

第二步:从小到大排列

第三部:按次序每次取出一条边贴回去,判断是否有形成环(int parent[]),若没有形成环,则这条边选中成为最小生成树的一条边

直到选择了n-1条边

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C5oUL48v-1640050736516)(https://gitee.com/spinach17/images/raw/master/images/image-20210924151034289.png)]

完全连通图

例题:有8个人小组的沟通路径最多有几条

为完全连通图的边数,8(8-1)/2=28

无向连通图

无量连通图G,G任意两个顶点之间必有路径(但不是有边,不是任意两个顶点都直接相连)

G的邻接矩阵是对称矩阵

顶点数为n,最少有n-1条边,最多有n(n-1)/2条边

哈希表

装填因子表示哈希表的装满程度,显然,a越大发生冲突的可能性就越大。

算法的特性

可无输入,必有输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IhQ21eBn-1640050736518)(https://gitee.com/spinach17/images/raw/master/images/image-20210924151239824.png)]

算法的时间复杂度与空间复杂度

整个程序以时间复杂度最高的部分的复杂度作为整个程序的时间复杂度

T(n)= n + n-1+…+2+1,因此时间复杂度为O(n2)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZjHN9vg-1640050736519)(https://gitee.com/spinach17/images/raw/master/images/image-20210924151557377.png)]

顺序查找与二分查找

顺序查找的时间复杂度:O(n)

image-20210924151720690

二分查找的前提是已经有序排列

中级软件师笔记_第132张图片

求mid,low+high/2取整

在下一次比较的区间内,去掉上一次的mid,因为已经比较过了

中级软件师笔记_第133张图片

要查找的数据越多,二分查找优势越大

中级软件师笔记_第134张图片

散列表

不用查表了,直接根据散列函数计算就可以找到

中级软件师笔记_第135张图片

计算出同样的结果,冲突时有两种处理方法:

  1. 线性探测法:往后放
  2. 伪随机数法:用不同的散列函数在计算一次,使得得到不同的结果,不会发生冲突

中级软件师笔记_第136张图片

排序

稳定的排序:同样的值在排序之后会保持前后位置不变

不稳定的排序:反之

内排序:只使用内部的存储空间

外排序:会使用外部的存储空间

插入类排序:思路简单,效率不够

交换类排序:快速排序效率更高,过程更复杂

选择类排序:堆排序效率非常高,过程很复杂

中级软件师笔记_第137张图片

直接插入排序

插入时,之前的已经排好序,将要插入的与原来的一次比较,到合适位置就插入

我们从第二个元素开始向前比较,当遇到一个大于他的数时,就将该数向后移动一位,然后继续向前比较知道遇到不大于他的数停止

原来就有序的情况好

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TBVjiVpK-1640050736530)(https://gitee.com/spinach17/images/raw/master/images/image-20210924153430320.png)]

希尔排序

思想:分组插入,先分组比较,变得基本有序,后面再直接插入排序时的挪动位置会变小

先取一个d,每隔d个间隔的两个数是一组,这两个数进行比较和换位

然后d逐渐-1,一直比较和交换,最后d=1,相当于对整个组进行比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2DPcY2Ad-1640050736531)(https://gitee.com/spinach17/images/raw/master/images/image-20210924153830404.png)]

直接选择排序

依次选出最小的,放到第一个

中级软件师笔记_第138张图片

堆排序

堆:满足大顶堆(所有孩子结点都小于父节点)或者小顶堆的条件(所有孩子结点都大于父节点)

堆用数组表示的时候下标的就是节点的序号

中级软件师笔记_第139张图片

堆排序:将序列建立大顶堆,取走根节点(也就是最大的);将剩下的再建立大顶堆,再取走

中级软件师笔记_第140张图片

建立堆:从最后一个非叶子结点开始,交换它和两个孩子节点的位置,使得最大/最小的在上面

中级软件师笔记_第141张图片

取走堆顶之后,将序号最后一个节点放到堆顶,然后调整大顶堆

中级软件师笔记_第142张图片

优势场景:只想要前n大的这种

冒泡排序

从后往前,跟相邻元素比较,小则往前移动,继续比较,大则停止;

快速排序

不稳定的排序算法

分治法:将一个大问题分成若干个小问题

选一个标准,每次与未比较过的元素比较,直到将着呢个序列分成:全是比这个标准小的全是比这个标准大的 两组(有可能选到最小或者最大的数为标准,所以当中间大的数作为标准(在第一个)是最好情况)

再对这两组递归使用用同样方法,直到整个排完

最坏(输入的序列是基本有序的)的时间复杂度是O(n2)

中级软件师笔记_第143张图片

归并排序

中级软件师笔记_第144张图片

在后面的两组比较中:两个指针分别指向两组的最小,比较之后更小的放进结果序列里,指针向后移;相当于每次找出两组里面最小的放进结果

基数排序

拆成多个维度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XkylU6W4-1640050736542)(https://gitee.com/spinach17/images/raw/master/images/image-20210924162525821.png)]

排序算法的时间复杂度和空间复杂度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slWOdCwE-1640050736544)(https://gitee.com/spinach17/images/raw/master/images/image-20210924162619260.png)]

快排最好情况:O(nlgn)

最坏情况下:很多个都是O(n2),堆排序和归并排序的不是,时间复杂度比较低

程序设计语言与语言处理程序

重点:正规式、表达式、传值与传地址

解释方式和编译方式的文法语法分析、语义分析上没有区别

变量具有对应的存储单元,常量则没有

编译过程

高级语言分:编译型(先编译成目标程序,再执行,目标程序完全独立于源程序)、解释型(直接执行)

词法分析:关键字,把源程序的字符串转换成单词符号序列==(输出记号流)==

语法分析:分析程序结构(表达式、语句)(输入记号流)

语义分析:逻辑错误,编译时发现的是静态语义错误(分析方法:语法制导翻译);运行时比如进入死循环,就是动态语义错误(可以与目标机器的体系无关

目标代码生成阶段的工作与目标机器的体系结构是密切相关的。

语法错误可以全部被发现,语义错误不一定

反编译只能还原到汇编语言,不能还原出高级语言程序

语法分析有两类:自顶向下、自底向上

自顶向下:递归下降分析法、预测分析法

自底向上:移进-归约分析法

中级软件师笔记_第145张图片

中间代码常见的:逆波兰记号、四元式、三元式和树(不能栈或队列)

但是逆波兰式也就是后缀式,是用栈求解的

文法的定义和语法推导树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cfTSbd48-1640050736547)(https://gitee.com/spinach17/images/raw/master/images/image-20210924170002195.png)]

文法的类型(现在主要是3型)

中级软件师笔记_第146张图片

语法树推导过程

小写字母:终结符

大写字母:非终结符,这种符号可以推出其他符号

中级软件师笔记_第147张图片

例题

中级软件师笔记_第148张图片 中级软件师笔记_第149张图片

建立语法树

中级软件师笔记_第150张图片

有限自动机与正规式

o(S,0)=B,表示S经过0可以推到B

一般考察方式:能不能退出10,意思是从起点S到终点f能不能找到一条路径上是10

中级软件师笔记_第151张图片

正规式:有限自动机的另外一种表达形式

|:表示或

()*:表示循环多次,*可以是0到无穷

中级软件师笔记_第152张图片

中级软件师笔记_第153张图片

第二问

看哪个选项能够将题目文法的全部表达出来(能表达超过题目文法的,也排除),答案c

中级软件师笔记_第154张图片

有限自动机例题

只需要从初态A到终态C,不需要关注C->A的1了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I90REcvo-1640050736559)(https://gitee.com/spinach17/images/raw/master/images/image-20210924172255483.png)]

确定有限自动机:每一个输出只有一个状态的转移

非确定有限自动机:可能有多个状态转移

中级软件师笔记_第155张图片

图一,A输入0的话既可以到自己也可以到B,这就是多个状态转移

图二,A输入0或者1都只有一条路径走,所以是确定有限自动机

表达式

正常写的是中缀表达式

先构造树,再遍历

中级软件师笔记_第156张图片

与运算优先级高于或运算

中级软件师笔记_第157张图片

文法

一个文法的语言是该文法能产生的句子的集合。一个文法产生的句子是从文法开始符号出发推导出的所有终结符号串。

例题:设某语言的语法规则用上下文无关文法G=(N,T,P,S)表示,其中N是非终结符号的集合,T是终结符号的集合,P是产生式集合,S是开始符号,令V=NUT,那么符合该语言的句子是(50)。

(50)A.从S出发推导的、仅包含T中符号的符号串

程序语言的大多数语法现象可用上下文无关文法描述

函数调用(传值与传址)

传地址的时候,实参只能是变量,不能是常量和表达式

各种程序语言的特点

image-20210924172628467

存储分配策略

三种:静态(没有可变的数据结构)、栈式、堆式

按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。 静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.

如果编程语言提供链表的定义:则数据控件必须采用堆存储分配策略

因为链表的及节点空间需要程序员申请和释放

KMP模式匹配算法

第一位是0

然后遍历到第n个字符如果有从字符串第一位到第k-1位,从n-1往前有一串相同的字符,next值就是k

中级软件师笔记_第158张图片 中级软件师笔记_第159张图片

知识产权法与标准化

著作权:作者的利益(完成创作时开始)

邻接权:作者以外和作品相关的人(比如出版社)的权利

地理标志权:只有在该地产出的才能贴该地的标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YOubgzg-1640050736564)(https://gitee.com/spinach17/images/raw/master/images/image-20210924173156821.png)]

著作权

软件著作权中翻译权是指以不同于原软件作品的一种程序语言转换该作品原使用的程序语言,而重现软件作品内容的创作的产品权利。简单地说,也就是指将原软件从一种程序语言转换成另一种程序语言的权利。

保护期限

中级软件师笔记_第160张图片

知识产权人确定

归单位还是个人

中级软件师笔记_第161张图片

中级软件师笔记_第162张图片

非任职单位委托,如果没有特殊约定,权利归开发人

侵权判定

当官方正式译文发布之后就不收著作权保护

中级软件师笔记_第163张图片

免费表演的他人作品不能是创作人还没表演过的

中级软件师笔记_第164张图片

标准化基础知识-标准的分类与编号

中级软件师笔记_第165张图片

中级软件师笔记_第166张图片

专利权

中级软件师笔记_第167张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiFtPl1z-1640050736576)(https://gitee.com/spinach17/images/raw/master/images/image-20211027224201833.png)]

著作权从软件作品性的角度保护其表现形式,源代码(程序)、目标代码(程序)、 软件文档是计算机软件的基本表达方式(表现形式),受著作权保护

专利权从软件功能 性的角度保护软件的思想内涵,即软件的技术构思、程序的逻辑和算法等的思想内涵,当计算机软件同硬件设备是一个整体,涉及计算机程序的发明专利,可以申请方法专利,取得专利权保护

商标权是为商业化的软件从商品、商誉的角度为软件提供保护,利用商标权可以禁止他人使用相同或者近似的商标、生产(制作)或销售假冒软件产品。商标权受保护的力度大于其他知识产权,对软件的侵权行为更容易受到行政查处

商业秘密权是商业秘密的合法控制人采取了保密措施,依法对其经营信息和技术信息享有的专有使用权,我国《反不正当竞争法》中对商业秘密的定义为“不为公众所知悉、能为权利人带来经济利益、具有实用性并经权利人采取保密措施.的技术信息和经营信息”。软件技术秘密是指软件中适用的技术情报、数据或知识等,包括程序、设计方法、技术方案、功能规划、开发情况、测试结果及使用方法的文字资料和图表,如程序设计说明书、 流程图、用户手册等。软件经营秘密指具有软件秘密性质的经营管理方法以及与经营管理方法密切相关的信息和情报,其中包括管理方法、经营方法、产销策略、客户情报(客户名单、客户需求),以及对软件市场的分析、预测报告和未来的发展规划、招投标中的标底及标书内容等。

多媒体

MPEG-1、MPEG-2和MPEG-4主要针对音、视频编码技术,VCD使用了MPEG-1标准作为其音、视频信息压缩编码方案,MPEG-2标准中的音、视频压缩编码技术被应用到DVD中。

MPEG-7是多媒体内容描述接口标准(不包含音视频压缩技术)

MPEG-21是多媒体应用框架标准。

音频

带宽:频率的范围

2倍才能保证音频基本不失真,一般是8k(略高于3400Hz的两倍)

中级软件师笔记_第168张图片

合成技术:FM、WAVE Table(音质更好)

图像

中级软件师笔记_第169张图片

YUV兼容彩色和黑白

CMY印刷

CMYK加了个黑色

CIF是常用的标准化图像格式(Common Intermediate Format)。在H.323协议簇中, 规定了视频采集设备的标准采集分辨率,CIF=352X288像素。

BMP:一般没压缩

JPEG:有损压缩

TIFF:灵活,无损

GIF:存放多副图像

RGB 8:8:8图像能表示的颜色数为2的8+8+8次方


位图和矢量图

矢量图是用数学方法来描述图形图像(多用于工程,因为照片这样复杂的图像很难描述)(侧重绘制和创建)

位图是用像素点描述,图像一般是用摄像机或扫描仪等输入设备捕捉实际场景画面,离散化为空间、亮度、颜色(灰度)的序列值,即把一幅彩色图或灰度图分成许许多多的像素(点),每个像素用若干二进制位来指定该像素的颜色、亮度和属性。(一般处理细节多的图像,但是占用空间大,显示速度快)(侧重获取和复制)

媒体的种类

显示媒体:输入设备和输出设备都有

中级软件师笔记_第170张图片

多媒体的计算问题

256色,则需要8位像素

中级软件师笔记_第171张图片

双声道立体声:会有两倍大小的采样频率

k:传输时使用,是1000

K:存储时使用,是1024

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iU9Uxkhz-1640050736581)(https://gitee.com/spinach17/images/raw/master/images/image-20210925122120550.png)]

DPI:每英寸点数

常见的多媒体标准

中级软件师笔记_第172张图片

数据压缩技术基础

有冗余,才能压缩

空间冗余(几何冗余):很多一样的点

时间冗余:随着时间仍然不动的,是指以重复执行指令或程序来消除瞬时错误带来的影响

视觉冗余:人眼有无法识别的颜色

信息熵冗余

有损压缩与无损压缩

有损:无法还原(例如jpg)

有损压缩比较高

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KqSsnzRr-1640050736584)(https://gitee.com/spinach17/images/raw/master/images/image-20210925123002369.png)]

系统开发基础

软件开发模型:指导软件开发的体系

需求分析确定软件要完成的功能及非功能性要求;

概要设计将需求转化为软件的模块划分,确定模块之间的调用关系;

详细设计将模块进行细化,得到详细的数据结构和算法;

编码根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jm57wLJ8-1640050736585)(https://gitee.com/spinach17/images/raw/master/images/image-20210925124719558.png)]

瀑布模型

每个阶段末尾都会有评审,评审上一阶段的工作是否达标

缺点:初期分析需求无法把控,开发末期的结果和客户要求不一致,全盘推翻==(不能适应变化的需求)==

适用场景:需求明确/二次开发/有过经验,用新技术重构也用瀑布

中级软件师笔记_第173张图片

原型模型、演化模型、增量模型

原型:定义在需求不明确的情况,初期构建一个简易系统让用户发现问题,探索用户的需求==(只应用于需求分析阶段)==,也可以探索出特殊的软件解决方案

能够迅速开发出一个让用户看得见的系统框架,可以用来支持用户界面设计

不能指导代码优化

原型模型最不适合大规模软件开发

增量:先做出核心,好处在核心模块尽早和用户接触了==(逐步理解需求)==,但是这种模式如何进行模块划分是难点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7W87peu-1640050736587)(https://gitee.com/spinach17/images/raw/master/images/image-20210925125530979.png)]

演化(迭代)模型:相比原型,适用于需求清楚,尽早投入使用,要不断改善的时候

螺旋模型

将开发活动和风险管理结合起来,求将风险降到最小并控制风险

有多个模型的特点:瀑布+快速原型

包含维护周期,所以开发和维护之间没有本质区别

引入了风险分析:当某一个事件存在两种或者两种以上的可能性时,才认为该事件存在风险


风险分析是4个不同的活动:风险识别(系统化地确定对项目计划的威胁)、风险预测(两方面评估:发生的可能性和产生的后果)、风险评估(根据发生概率和影响,决定是否影响参考水平值)、风险控制(辅助项目路建立处理风险的策略,有效的策略要考虑风险避免、风险监控和意外事件计划)


复杂大型软件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Id88J8ZF-1640050736591)(https://gitee.com/spinach17/images/raw/master/images/image-20210925125656530.png)]

V模型

细化测试、需求对应测试(提早发现问题)

说明测试活动是如何与分析和设计联系的

概要设计:要验证模块之间的衔接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCuAf4WX-1640050736592)(https://gitee.com/spinach17/images/raw/master/images/image-20210925125846271.png)]

喷泉模型与RAD

面向对象

用户需求为动力,对象作为驱动,客服了瀑布模型不支持软件重用和多项开发活动集成的局限性

迭代、无间隙(开发活动之间不存在明显边界)

RAD:快速开发模型,SDLC(瀑布模型)+CBSD(构件化开发模型)

可以快速构建应用系统

构件组装模型(CBSD)

各个模块做成构件,之后组装

提高复用性,可靠性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3g1Q4cW-1640050736593)(https://gitee.com/spinach17/images/raw/master/images/image-20210925130331796.png)]

统一过程UP

也称RUP,用例和风险为驱动,以架构为中心,迭代并增量开发

用于大型项目

五个阶段:起始、精化、构建、移交、产生

开发过程包括多次迭代,每次迭代包括:计划、分析、设计、构造、集成、测试、内部发布、外部发布

每个迭代有五个核心工作流

初始:需求

细化:建立架构

构建:开发(产生产品)

β测试:由用户发起的测试 (α测试是在开发环境里做的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3Napb7w-1640050736594)(https://gitee.com/spinach17/images/raw/master/images/image-20210925134532632.png)]

每个阶段达到里程碑的时候代表结束了:

初始:生命周期目标==(产生一个构想文档、一个有关用例模型的调查、一个初始的业务用例、一个早期的风险评估和一个可以显示阶段和迭代的项目计划等制品)==

精化:生命周期架构==(产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等)==

构建:初始运作功能==(产生一个转交到最终用户手中的产品,包括:在适当的平台上集成的软件产品,用户手册,版本描述)==

移交:产品发布==(产生移交给用户产品发布版本)==

敏捷开发方法

给开发减轻负担

适合小型项目

随时对接客户

包括:自适应方法ASD==(6个基本原则)、水晶方法Crystal(每个项目用不同方法)、特征驱动开发、并列争球法SCRUM(30天一迭代的冲刺,按需求优先级实现)、极限编程XP(激发创造性、管理负担小)==

scrum步骤:

Product Backlog 产品待办事项氢弹

(不包括Refactoring 重构)

Sprint Backlog Sprint待办事项清单

Sprint冲刺迭代

极限编程XP是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法,其特性包含在12个最佳实践中。

(1)计划游戏:快速制定计划、随着细节的不断变化而完善;

(2)小型发布:系统的设计要能够尽可能早地交付;

(3)隐喻:找到合适的比喻传达信息;

(4)简单设计:只处理当前的需求使设计保持简单;

(5)测试先行:先写测试代码再编写程序;

(6)重构:重新审视需求和设计,重新明确地描述它们,以符合新的和现有的需求;

(7)结队编程;(编码速度和担任差不多)

(8)集体代码所有制;

(9)持续集成:可以按日甚至按小时为客户提供可运行的版本;

(10)每周工作40个小时;

(11)现场客户;

(12)编码标准。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0pZiUhS-1640050736596)(https://gitee.com/spinach17/images/raw/master/images/image-20210925135038919.png)]

信息系统开发方法

四种

结构化法:流程不灵活,所以被面向对象方法取代了(用来开发结构简单的项目)

原型法:需求不明确

开发人员和管理人员沟通的主要文档是:系统开发计划,包括工作任务分解表、PERT图、甘特图和预算分配表等

总体规划和开发合同用于与系统分析人员在系统规划和系统分析阶段的沟通。

测试计划用于系统测试人员与系统开发人员之间的沟通。

软件系统文档是系统建设过程的“痕迹”,是系统维护人员的指南,是开发人员与用户交流的工具。软件系统文档不仅包括应用软件开发过程中产生的文档,还包括硬件采购和网络设计中形成的文档;不仅包括有一定格式要求的规范文档,还包括系统建设过程中的各种来往文件、会议纪要、会计单据等资料形成的不规范文档。软件系统文档可以提高软件开发的可见度,提高软件开发效率,且便于用户理解软件的功能、性能等各项指标

系统设计为系统制定蓝图,软件设计模型关注新系统总体结构、代码设计、处理过程、数据结构和界面模型等。对项目范围的关注在软件设计之前。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-He2fZw8X-1640050736600)(https://gitee.com/spinach17/images/raw/master/images/image-20210925135420601.png)]

需求的分类

设计约束:例如让使用特定语言进行开发

基本需求:用户明确提出的需求

期望需求:用户默认希望做到的需求

兴奋需求:用户也没有觉得要做到的,但是额外做了(不提倡)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tsgm5Fd-1640050736601)(https://gitee.com/spinach17/images/raw/master/images/image-20210925135822787.png)]

结构化设计

调用的深度越深,出错的可能性越大

扇入:自己被调用

扇出:自己调用的

扇入扇出适中

划分模块的原则:作用范围应该在控制范围内

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwmkpFFS-1640050736601)(https://gitee.com/spinach17/images/raw/master/images/image-20210925140142215.png)]

内聚是一个模块内部各个元素彼此结合的紧密程度

巧合内聚(偶然内聚):两个程序块放在一起,但是没有任何关系

逻辑内聚:两个放在一起的程序块有逻辑上的关系(比如根据参数选择调用哪个程序块)

时间内聚:需要同时执行的几个任务放在一起

过程内聚:放在一起的程序块处理的元素是相关的,并且按一定次序

通信内聚(信息内聚):模块内处理的对象都是同一个数据结构

顺序内聚:放在一起的程序块处理的元素是相关的,并且顺序执行

功能内聚:模块内所有元素完成单一功能(不可再分,缺一不可)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2pQfWBW-1640050736603)(https://gitee.com/spinach17/images/raw/master/images/image-20210925140205465.png)]

耦合是模块之间相互独立性的度量,连接越紧密,耦合性越高,独立性越弱

数据耦合:两个模块之间通过简单数据交换信息

标记耦合:两个模块通过数据结构传递

公共耦合:访问同一个公共的数据环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59kKw6PJ-1640050736605)(https://gitee.com/spinach17/images/raw/master/images/image-20210925140231543.png)]

测试原则与类型

测试不只是从程序编码时开始

回归测试:修改了测试出的bug之后,要把之前测过的重新测

已经发现bug越多的,越要重点测试

测试是用来发现尽可能多的错误,而不能证明没有错误

动态测试:用到计算机的

静态测试:手动

中级软件师笔记_第174张图片

测试用例设计

黑盒:不知内部,只知道输入和输出

白盒:可以看到内部结构


黑盒

等价类划分:同一类里面选一个数据进行测试就行(只有一个角度是错的)(一个有效等价类、两个无效等价类)

一个测试用例只能覆盖一个无效等价类

中级软件师笔记_第175张图片

一般边界值测试4个:略小于下边界、下边界、上边界、略大于上边界


白盒

覆盖技术从弱到强:语句覆盖、判定覆盖(分支覆盖)、条件覆盖、路径覆盖

语句覆盖:所有的程序语句只要经过就可以

判断覆盖:只针对整个判断语句

条件覆盖:在统计所有用例中,每个判断中的每个条件的true和false都有取一次就行(两个条件,用例就可以是TF和FT)

路径覆盖是最高级别:所有可行路径都覆盖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3DRI5yT-1640050736608)(https://gitee.com/spinach17/images/raw/master/images/image-20210925143108685.png)]

测试阶段

确认测试一般是最后一个环节

单元测试:模块

确认测试:测需求

系统测试:性能,验证是否按照需求分析中的完成了(测试目标来自需求分析)

负载测试:并发

强度测试:系统不正常情况下

容量测试:极限值测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJ1VfSyb-1640050736609)(https://gitee.com/spinach17/images/raw/master/images/image-20210925143335801.png)]

三明治测试策略:结合了自顶向下和自底向上,一次性测试然后继承,缺点是需要写较多的驱动模块和桩模块

自顶向下的优点:较早验证主要的;只需要一个驱动

底向上优点:较早验证底层组件,比顶向下效率高,减少了桩的工作量(不用谢桩程序)

McCade复杂度计算

https://blog.csdn.net/m0_37063785/article/details/88784913

有向图环路复杂度:有向边数-节点数+2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oSJCn6Gb-1640050736610)(https://gitee.com/spinach17/images/raw/master/images/image-20210925143903911.png)]

软件复杂性主要参数:

  1. 规模:代码行数
  2. 难度:操作数的数目
  3. 结构:程序结构有关的度量
  4. 智能度:算法难易程度

系统运行与维护

可维护性评价指标:可理解性、可测试性、可修改性

软件系统的可维护性评价指标包括可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率

改正性维护:发现bug后维护

适应性维护:兼容环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eP3MFiDf-1640050736611)(https://gitee.com/spinach17/images/raw/master/images/image-20210925145157462.png)]

软件质量管理

快捷记忆:https://blog.csdn.net/fxq8866/article/details/49534269

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHv0Y7gd-1640050736612)(https://gitee.com/spinach17/images/raw/master/images/20151031201827151)]

易使用性:易理解性、易学性、易操作性(没有易分析性,这个属性可维护性)

将每个用户的数据隔离开,属于功能性

模块结构评审包括:控制流结构、数据流结构、模块结构与功能结构之间的对应关系

容错技术:对无法避免的差错,使其影响降到最低

冗余技术分为四类:结构冗余、信息冗余、时间冗余、冗余附加技术

结构冗余:按照工作方法可以分为静态、动态和混合冗余

信息冗余,指的是为了检测或纠正信息在运算或传输中的错误另外加的一部分信息;

冗余附加技术,是指为实现上述冗余技术所需的资源和技术。

(在屏蔽硬件错误的容错技术中,冗余附加技术包含:关键程序和数据的冗余存储:检测、表决、切换、重构、纠错、复算的实现)

(在屏蔽软件错误的容错技术中,冗余附加技术包含:冗余备份程序的存储和调用、实现错误检测和错误恢复的程序、实现容错软件所需的固化程序)

知识冗余:可以通过知识分析得到的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXUvYk0S-1640050736613)(https://gitee.com/spinach17/images/raw/master/images/image-20211104094925650.png)]

McCall

McCall认为软件质量由12个特性组成,分别面向软件产品的运行、修正、转移。
(1) 产品运行:正确性、可靠性、可使用性、效率、完整性、安全性。
(2) 产品修正:可维护性、可测试性、灵活性。
(3) 产品转移:互连性、可移植性、复用性。

1、正确性:系统满足规格说明和用户目标的程度,即在预定环境下能正确地完成预期功能的程度。

2、健壮性:在硬件发生故障、输入的数据无效或操作错误等意外环境下,系统能做出适当响应的程度。

3、效率:为了完成预定的功能,系统需要的计算资源的多少。

4、完整性:对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度。

5、可用性:系统在完成预定应该完成的功能时令人满意的程度。

6、风险:按预定的成本和进度把系统开发出来,并且为用户所满意的概率。

7、可理解性:理解和使用该系统的容易程度。

8、可维修性:诊断和改正在运行现场发现的错误所需要的工作量的大小。

9、灵活性:修改或改进正在运行的系统需要的工作量的多少。

10、可测试性:软件容易测试的程度。

11、可移植性:把程序从一种硬件配置和软件系统环境转移到另一种配置和环境时,需要的工作量多少。

12、可再用性:在其他应用中该程序可以被再次使用的程度。

13、互运行性:把该系统和另一个系统结合起来需要的工作量的多少。

软件能力成熟度模型集成(CMMI)

过程能力成熟度模型CMM基于这样的理念:改进过程将改进产品,尤其是软件产品

软件过程改进框架把不够成熟的过程提升到较成熟的过程涉及4个方面,这4个方面构成了软件过程改进的框架,

过程改进基础设施、过程改进线路图、软件过程评估方法和软件过程改进计划

在进行评估后需要把发现的问题转化为软件过程改进计划。而过程改进通常不可能是一次性的,需要反复进行。

每一次过程改进要经历4个步骤:评估、计划、改进和监控

CMMI是SEI将已有的几个CMM模型结合在一起,使之构成继承模型

分为阶段式和连续式

已执行的:共性目标是过程将克表示的输入工作转换成可标识的输出工作产品,以实现支持过程域的特定目标

可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性

已管理级:项目级别,收集对软件过程和铲平质量的详细度量==(对软件过程和产品都定量的理解和控制)==

已定义级:组织级别==(有了标准,爱用标准软件过程来开发和维护)==

优化级:过程的量化反馈和先进的新思想、新技术促使过程不断改进

定量管理级:强调量化

基于连续式表述的CMMI 共有6个(0〜5)能力等级,对应于未完成级、已执行级、已管理级、已定义级、量化管理级、优化级。每个能力等级对应到一个一般目标,以及一组一般执行方法和特定方法。

能力等级0指未执行过程,表明过程域的一个或多个特定目标没有被满足

能力等级1指过程通过转化可识别的输入工作产品,产生可识别的输出工作产品,关注于过程域的特定目标的完成

能力等级2指过程作为已管理的过程制度化,针对单个过程实例的能力

能力等级3指过程作为已定义的过程制度化,关注过程的组织级标准化和部署

能力等级4指过程作为定量管理的过程制度化

能力等级5指过程作为优化的过程制度化,表明过程得到很好地执行且持续得到改进。

中级软件师笔记_第176张图片

中级软件师笔记_第177张图片

项目管理基础知识

确定项目人数的时候不用管项目前景

无主程序员的任意两个直接都可以沟通,有主程序员的只能和主程序员沟通

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jSXlqL2-1640050736617)(https://gitee.com/spinach17/images/raw/master/images/image-20210925150327753.png)]

甘特图:简单明了,可以表达进度和情况,但是不能直观表达两个任务之间的前后和依赖关系,也不能确定关键任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLVL2Dc5-1640050736618)(https://gitee.com/spinach17/images/raw/master/images/image-20211105140145310.png)]

PERT图:(不能表现并行关系)

​ 关键路径:开始到结束结点的最长路径==(对应最短周期,可能有不止一条)==

​ 最晚开始时间:求出所有的开始时间,从结束逆推出最晚开始时间(最早开始时间是从开始推导)

松弛时间=最迟开始时间-最早开始时间

计算A结点最多的延迟开始时间:关键路径长度-A结点所在最长路径的长度

中级软件师笔记_第178张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4N1LWIS-1640050736622)(https://gitee.com/spinach17/images/raw/master/images/image-20210925150858330.png)]

项目经历可以控制的是项目风险

风险曝光度(风险暴露):量化评估风险

在软件开发过程中进行风险分析时,(19)活动的目的是辅助项目组建立处理风险的策略,有效的策略应考虑风险避免、风险监控、风险管理及意外事件计划。

(19)A.风险识别 B.风险预测 C.风险评估 D.风险控制

【答案】D

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMDmSUs3-1640050736623)(https://gitee.com/spinach17/images/raw/master/images/image-20210925151101924.png)]

软件变更控制是变更管理的重要内容,要有效进行变更控制,需要借助配置数据库和基线的概念。配置数据库一般包括开发库、受控库和产品库。(不包括信息库,信息库不属于配置数据库)

软件可维护性是一个系统在特定的时间间隔内可以正常进行维护活动的概率。用MTTF和MTTR分别表示平均无故障时间和平均故障修复时间,则软件可维护性计算公式为()。

AMTTF/(I+MTTF)

项目估算

得不到精确的估算结果

方法:专家估算方法(收到专家的主观影响)、启发式方法COCOMO模型(参数难以确定)、机器学习(难以训练数据集的特征和相似性)

Wolverton模型:基于成本矩阵,定义不同软件类型和难易成本

COCOMO模型:将规模视为成本的主要因素,考虑多个成本驱动因子

COCOMO II模型:还考虑了软件开发的不同阶段,包含三个阶段性模型,即应用组装模型、早期设计阶段模型和体系结构阶段模型,三种规模估算选择:对象点、功能点、代码行

黄金准则

Theo mandel关于界面设计(人机交互)的三条换黄金准则:

用户操纵控制、减轻用户记忆负担、保持界面一致

管道过滤器体系结构

系统处理数据流的结构

单步数据处理封装在一个过滤器中,数据在过滤器之间的管道传输。

data source(数据源),filter(过滤器)和data sink(数据汇点)三者,使用pipe(管道)进行连接
过滤器视为组件。
管道视为连接件。
管道将一个过滤器的输出传给另一个过滤器的输入。

优点:

  1. 高内聚低耦合
  2. 经系统看做过滤器简单合成
  3. 支持软件复用
  4. 维护和增强性能简单
  5. 允许分析吞吐量和死锁
  6. 支持并行

缺点:
1.数据传输和转化开销大
2.错误处理复杂

面向对象

边界类:和外界交互

泛化:抽出多个类的共性

面向对象开发方法有:Booch()方法、Coad()方法、OMT()方法

Jackson方法是面向数据结构的开发方法

面向对象开发方法中,静态成员的含义是所修饰的成员是属于类的,而不是属于某对象的。静态数据成员对该类只有一份,该类的所有对象共享静态数据成员,可被该类的所有方法访问,其值可以修改,但是不论是通过对象还是类对静态数据成员值的修改, 都会反应到整个类。类的静态方法只能访问该类的静态数据成员。

中级软件师笔记_第179张图片

多态有四种:参数多态、包含多态、过载多态(同一个名字在不同的上下文中锁代表的含义不同)、强制多态

设计原则

高层不依赖底层

抽象不依赖细节

里氏:基类出现的地方,可以用子类代替

倒转:依赖于抽象,面向接口编程

面向对象分析时,不考虑测试问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7RVw9KYu-1640050736625)(https://gitee.com/spinach17/images/raw/master/images/image-20210925161740229.png)]

UML

掌握哪些是静态图哪些是动态图

部署图表示的是软件的构建应该在那个硬件的节点上

用例图表示系统和外部的交互关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHukXil5-1640050736626)(https://gitee.com/spinach17/images/raw/master/images/image-20210925162129624.png)]

类间关系:(类间关系依次增强)依赖、关联、聚合、组合、继承

依赖:类A只使用了类B的对象,则类A依赖于类B

关联:类B作为类a的成员变量

聚合:整体和部分的关系

组合:类A的部分是由类b的对象组成,且类a控制类b的生命周期,则是组合关系

继承:父子关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wi9LCRk-1640050736628)(https://gitee.com/spinach17/images/raw/master/images/image-20211018100330769.png)]

设计模式的概念

区分架构和设计:全局还是局部

区分设计和惯用法:是否语言相关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFzDl1kC-1640050736629)(https://gitee.com/spinach17/images/raw/master/images/image-20210925162324691.png)]

设计模式的分类

创建型模式:用来创建对象

结构型模式:处理类或对象的组合

抽象工厂可以:创造一系列对象

中级软件师笔记_第180张图片

创建型模式

与对象的创建有关

原型模式:拷贝没有new消耗资源多

抽象

中级软件师笔记_第181张图片

结构型模式

处理类或者对象的组合

桥接模式:一直继承的话继承树规模很大,找到改变的点,进行拆分==(将抽象部分和实现部分相分离,使他们都可以独立变化)==对一个抽象的实现部分的修改应该对使用它的程序不产生影响。

在以下情况中可以使用Bridge模式:

(1) 不希望在抽象以及抽象的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻可以选择或切换实现部分。

(2) 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充,使用Bridge模式可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

(3) 对一个抽象的实现部分的修改应该对用户不产生影响,即客户的代码不必重新编译。

实现类的接口可以和抽象类接口完全不一样,实现类接口只给出基本操作,抽象类接口有很多更复杂的操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLjv7aqJ-1640050736632)(https://gitee.com/spinach17/images/raw/master/images/image-20211105085938393.png)]

装饰模式:动态添加,比子类灵活==(目的是在无法生成子类的时候给对象动态添加职责)==

享元模式:共享大量细粒度对象

组合模式:让客户操作单个对象和组合对象的时候有一致性,Composite定义了子部件的行为,对组合部件操作时,client通过component提供的接口操作

中级软件师笔记_第182张图片

行为型模式

对类和对象怎样交互和分配职责进行描述

.next方法就用到了迭代器模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m18ZV2Xc-1640050736634)(https://gitee.com/spinach17/images/raw/master/images/image-20210925165525624.png)]

中介者模式:例如:实现后端数据模型被多个前端用户调用

中介者模式,可以使各个对象间的耦合松散,只需关心和Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提髙可修改扩展性。

观察者模式:有依赖的自动更新

访问者模式:需要对一个对象结构中的对象进行很多不同并且不相关的操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YZwkBkB-1640050736635)(https://gitee.com/spinach17/images/raw/master/images/image-20210925165725026.png)]


状态模式经典应用:(tcp)

网络连接类TCPConnection对象可以取几个可能的状态之一:Establised(已建立连接)、Listening(聆听)和Closed(关闭)。

当TcpConnection对象接到其他对象的请求时,会根据其状态不同而给出不同的回应。

组合和聚合是关联的特殊种类

数据流图(重点)

DFD数据流图

ERD实体关系图(数据库设计)

基本概念

摆脱物理,逻辑上的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cw75IlTQ-1640050736637)(https://gitee.com/spinach17/images/raw/master/images/image-20210925172637419.png)]

数据流图的分层(DFD)

中间椭圆是要开发的系统,两边是外部实体

从顶层逐步细化到下面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYBqivsL-1640050736639)(https://gitee.com/spinach17/images/raw/master/images/image-20210925173007929.png)]

流的输入端和输出端至少有一个是加工P(不能是两个实体E之间)

加工必须至少有一个输入和输出

经过加工后的流不可以没有任何改变

每条数据流的起点和终点之一必须是加工(处理),所以两个实体之间不可以有数据流

数据字典

表示在数据流中,特定名词具体是由哪些数据组成的(对数据流图中的各个元素做出详细的说明)

条目有:数据流、数据项、数据存储、基本加工

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVlSTbxH-1640050736640)(https://gitee.com/spinach17/images/raw/master/images/image-20210925173217493.png)]

数据流图平衡原则

子图检查是否有父图中所有数据交换

子图内的加工需要既有输入又有输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4UnauEC-1640050736641)(https://gitee.com/spinach17/images/raw/master/images/image-20210925173535107.png)]

数据流图解题技巧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHScYxAL-1640050736642)(https://gitee.com/spinach17/images/raw/master/images/image-20210925174333682.png)]

在绘制数据流图时,需要注意加工的绘制。请给出三种在绘制加工的输入、输出时可能出现的错误。

在绘制数据流图的加工时,可能出现的输入、输出错误:

只有输入而无输出 或者 黑洞

只有输出而无输入 或者 奇迹

输入的数据流无法通过加工产生输出流 或者 灰洞

输入的数据流与输出的数据流名称相同

案例分析

中级软件师笔记_第183张图片

加工的输入流和输出流名字不能相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ZKmSu7p-1640050736645)(https://gitee.com/spinach17/images/raw/master/images/image-20210925174758071.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdffRvTg-1640050736646)(https://gitee.com/spinach17/images/raw/master/images/image-20210925174827609.png)]

问题1

中级软件师笔记_第184张图片

问题2

中级软件师笔记_第185张图片

问题3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVV1cUTV-1640050736649)(https://gitee.com/spinach17/images/raw/master/images/image-20210925175233970.png)]

案例分析2

中级软件师笔记_第186张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMs9It9B-1640050736654)(https://gitee.com/spinach17/images/raw/master/images/image-20210925175400012.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKn4NOKn-1640050736655)(https://gitee.com/spinach17/images/raw/master/images/image-20210925175417915.png)]

问题1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SLBWM4P4-1640050736657)(https://gitee.com/spinach17/images/raw/master/images/image-20210925175655691.png)]

问题2

中级软件师笔记_第187张图片

问题3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LQl2aHU-1640050736659)(https://gitee.com/spinach17/images/raw/master/images/image-20210925175842237.png)]

问题4

一一对应即可得

结构化分析

数据流图中的加工可以用多种方式描述:流程图、NS盒图、决策树(适用于表示加工中多个逻辑条件)

数据库

数据库设计过程

关系模式是通过对逻辑结构设计进行转换得到的

中级软件师笔记_第188张图片

ER模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oD5vu4S7-1640050736661)(https://gitee.com/spinach17/images/raw/master/images/image-20210925210041186.png)]

一对一:联系转换成两边任一里面的都行

一对多:联系只能转换成多 里面的属性

多对多:联系只能自己作为一个

中级软件师笔记_第189张图片

答题技巧

案例分析

中级软件师笔记_第190张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1CJaTGq-1640050736665)(https://gitee.com/spinach17/images/raw/master/images/image-20210926152733250.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0NFDJD3-1640050736668)(https://gitee.com/spinach17/images/raw/master/images/image-20210926152747267.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1Tyh487-1640050736670)(https://gitee.com/spinach17/images/raw/master/images/image-20210926152801715.png)]

答案

中级软件师笔记_第191张图片

第四问:规范化理论

缺点:会造成数据冗余

优点:减少了一次连接操作,增加查询速度

案例分析2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ByRRmK8g-1640050736672)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153703754.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEbOhOy0-1640050736673)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153718304.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lFFYNQA-1640050736675)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153736881.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-orhyK2CA-1640050736676)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153751369.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVCrAYKp-1640050736677)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153805515.png)]

答案:

表示经理是一种特殊的员工

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M23U57ih-1640050736679)(https://gitee.com/spinach17/images/raw/master/images/image-20210926153913478.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-De5tLM3S-1640050736681)(https://gitee.com/spinach17/images/raw/master/images/image-20210926154011196.png)]

UML图

重点:用例图、类图

静态图:用例图,类图,对象图,组件图和配置图

用例图

包含关系:include(必然会使用)

扩展关系:extend(不一定)

泛化关系:

如果可以从一个用例的执行中,在需要时转向执行另一个用例,执行完返回之前的用例继续执行,用例 间即存在《extend》关系。

业务用例和参与者一起描述:组织支持的业务过程

业务对象模型描述:业务结构以及结构元素如何完成业务用例,确定了业务人员及其处理和使用的对象之间应该具有的静态和动态关系,注重业务中承担的角色及其当前职责,既描述业务结构,又描述这些结构元素如何完成业务用例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0WkEuaf-1640050736682)(https://gitee.com/spinach17/images/raw/master/images/image-20210926154815174.png)]

1. **参与者(Actor)——**与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示

中级软件师笔记_第192张图片

2. **用例(Use Case)——**用例就是外部可见的系统功能,对系统提供的服务进行描述。用椭圆表示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sO9apfwz-1640050736686)(https://gitee.com/spinach17/images/raw/master/images/201156222169755.png)]

**3. 子系统(Subsystem)——**用来展示系统的一部分功能,这部分功能联系紧密。

中级软件师笔记_第193张图片

类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTLKBgTE-1640050736688)(https://gitee.com/spinach17/images/raw/master/images/image-20210926154955328.png)]

写多重度的时候要分别从两边看,1个这个可以对应多少对方

多重度:一个本类包含几个目标类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oattWdQF-1640050736690)(https://gitee.com/spinach17/images/raw/master/images/image-20210926154907304.png)]

关系:

泛化是对类,实现是对接口

中级软件师笔记_第194张图片

顺序图

表现出处理事务的顺序

从上到下执行

参与者:小人

横轴:对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ggMkp0SG-1640050736692)(https://gitee.com/spinach17/images/raw/master/images/image-20210926192822824.png)]

活动图

表现整个处理流程和分支状态

粗横线表示产生并行的线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fbZIfBUn-1640050736693)(https://gitee.com/spinach17/images/raw/master/images/image-20210926192952605.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9OvdDnM-1640050736694)(https://gitee.com/spinach17/images/raw/master/images/image-20210926193028899.png)]

状态图

以状态为节点,线表示触发事件(不是动作)

指的是这个系统的状态

中级软件师笔记_第195张图片

通信图

节点是对象,连线时对象间的交互

相比顺序图,没有表现时间

和顺序图统称交互图

框中的名字带有:,则是对象,冒号后面是类名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QfjAWN2P-1640050736696)(https://gitee.com/spinach17/images/raw/master/images/image-20210926193915728.png)]

案例分析

中级软件师笔记_第196张图片

状态图找最短路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pizAlL6X-1640050736700)(https://gitee.com/spinach17/images/raw/master/images/image-20210926200812512.png)]

算法

最优子结构:贪心、动态规划

时间复杂度

主公式:https://www.bilibili.com/video/BV1kQ4y1o7jx/?spm_id_from=333.788.recommend_more_video

master公式的使用

T(N) = a*T(N/b) + O(N^d)

1) log(b,a) > d ->复杂度为O(N^log(b,a))

2) log(b,a) = d ->复杂度为O((n^d)*logn)

3) log(b,a) < d ->复杂度为O(N^d)

空间复杂度

需要额外存储空间的数量

分治法

大问题拆分成同样结构的小问题(解决的函数一样)

递归

三个步骤:问题划分、递归求解、合并解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yxv8C5wp-1640050736701)(https://gitee.com/spinach17/images/raw/master/images/image-20210926203019891.png)]

分治法-递归

自己是解决问题的函数,分成较小的问题,同样用这个函数解决

自己调用自己

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOtyYWyJ-1640050736702)(https://gitee.com/spinach17/images/raw/master/images/image-20210926203243506.png)]

分治法-二分查找

在二分查找里的应用

mid = (right + left) / 2;(可以向上取整或者向下取整,一定要算index)

!!!后续找的时候不要算入mid,mid已经被排除了

二分查找的比较序列:后面一个元素,一定在前面两个元素中间

n个元素的序列,找A[i]时,最多与(log2n)+1个元素比较

回溯法

可以得到做有问题的最优解

深度优先,探到底,不通的时候,再回溯一步重新选择

回溯法可以探索到所有的解

探索到某一个满足的时候的可以选择终结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNiWFFZK-1640050736704)(https://gitee.com/spinach17/images/raw/master/images/image-20210926211541465.png)]

N-皇后问题是一个经典的计算问题,该问题基于一些约束条件来求问题的可行解。该问题不易划分为子问题求解,因此分治法不适用:由于不是要求最优解,因此不具备最优子结构性质,也不宜用动态规划法和贪心法求解。而系统搜索法–回溯法可以有效地求解该问题。

贪心算法

做出对当前的最好选择

非最优解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFKqCuPw-1640050736705)(https://gitee.com/spinach17/images/raw/master/images/image-20210926211818947.png)]

迪杰斯特拉求最短路径,用的是贪心算法,且可求得最优解

动态规划

得到一个最优解

也分成子问题

区分和分治法:要用到查表得方法

且子问题可能不是相互独立的

子问题结果存在表中,计算总结果的时候查表找子问题的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UzbCjsO-1640050736706)(https://gitee.com/spinach17/images/raw/master/images/image-20210926212542237.png)]

动态规划求矩阵乘法,先把大的行列消掉

案例分析

顺序查找其成功查找的平均查找长度(即在查找表中找到指定关键码的元素时,所进行比较的表中元素个数的期望值)为(n+ 1)/2

面向对象程序设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IHB9JmmW-1640050736707)(https://gitee.com/spinach17/images/raw/master/images/image-20210926222041331.png)]

中级软件师笔记_第197张图片

0-1背包

动态规划

N-皇后

N-皇后问题是一个经典的计算问题,该问题基于一些约束条件来求问题的可行解。该问题不易划分为子问题求解,因此分治法不适用:由于不是要求最优解,因此不具备最优子结构性质,也不宜用动态规划法和贪心法求解。而系统搜索法–回溯法可以有效地求解该问题

你可能感兴趣的:(职场和发展,学习方法)