软件设计师中级

软件设计师中级

1、考试范围

2、计算机组成原理与体系结构

  • 数据的表示
  • 计算机结构
  • Flynn分类法
  • CISC与RISC
  • 流水线技术
  • 存储系统
  • 总线系统
  • 可靠性
  • 校验码

2.1、数据的表示

R进制转十进制

  • ​ R进制转十进制使用按权展开法,其具体操作方式为: 将R进制数的每一位数值用Rk形式表示,即幂的底数是R ,指数为k , k与该位和小数点之间的距离有关。当该位位于小数点左边,k值是该位和小数点之间数码的个数,而当该位位于小数点右边, k值是负值,其绝对值是该位和小数点之间数码的个数加1。

十进制转R进制

  • ​ 十进制转R进制使用短除法。例如将94转换为二进制数。

二进制转八进制与十六进制数。

原码,反码,补码,移码

原码,反码,补码最高位上的0和1

当符号位上为0时,表示该数为正数。

当符号位上为1时,表示该数为负数。

正数1的原码是:0000 0001

负数1(-1)的原码是:将符号位上的0变成1,即1000 0001

1-1的原码就是正数1的原码+负数1的原码,遇2进一位,即1000 0010

正数1的反码是:与原码一样,不变,即0000 0001

负数1(-1)的反码是:符号位上的1不变,转换其他7位,0变1,1变0,即1111 1110

1-1的反码就是正数1的反码+负数1的反码,遇2进一位,即1111 1111(负的0)

正数1的补码是:与原码反码一样,不变,即0000 0001

负数1(-1)的补码是:在负数1的反码基础上+1,即1111 1111

1-1的补码就是正数1的补码+负数1的补码,遇2进一位,即0000 0000(正的0)

注意:在移码中,最高位的1表示正数,0表示负数。

正数1的移码是:将正数1的补码的首位即符号位取反,即1000 0001

负数1(-1)的移码是:将负数1的补码的首位即符号位取反,即0111 1111

1-1的移码是:1-1的补码最高位取反,即1000 0000(这里依然是正的0)

数值的表示范围

这里的指数上的n表示位,例如一字节八位

那么这八位的原码的范围就是-(28-1-1) 2^8-1^-1,即-127128

补码也是-127~ 128,但是补码却是-128~127

浮点数运算

例如科学计数法:

1000-----》1.0×103

119-------》1.19×102

这里需要开始进行第一步:对阶

即对阶成这两个数的最高位103

把1.19×102-----》0.119×103

然后进入第二步:尾数计算

1.0+0.119=1.119

即最后结果为1.119×103

进入最后一步:结果格式化

结果格式化有个要求是:小数点左边不能为0,并且只能有一位且只能有一位。

所以上一步我们得到的1.119×103已经是标准的结果。

2.2、计算机结构

2.3、计算机体系结构分类—Flynn分类法

2.4、CISC与RISC

CISC不采用流水线技术

CISC采用很少的通用寄存器

RISC采用很多的通用寄存器

2.5、流水线

概念

流水线计算

解:

流水线周期为:2ns(纳秒)

第一条指令单独执行的时长为2+2+1=5ns

用理论公式计算可得:5+(100-1)×2=203ns

(实践公式=(k+n-1)×∆t,这里的k表示分成几段的意思,这道题是分成取指,分析,执行三段)

用实践公式计算可得:(3+(100-1))×2=204ns

那么考试的时候哪个答案是正确的呢?

这里我们优先考虑理论公式,其次是实践公式,如果选项没有203ns,只有204ns,我们就选择204ns,如果两个都存在,优先选择203ns。(优先选择理论公式

流水线吞吐率计算

用上一个例子计算它的吞吐率

TP=100/203

最大吞吐率是指某一条指令花费的最长时间的倒数。

流水线的加速比

流水线的效率

上面的例子是执行了4个不同的任务,每个任务分成了4个不同的片段。

4个任务占用的时空区为阴影部分的面积,即:

(∆t+∆t+∆t+3∆t)×4

4个流水段(4个不同的片段,就是s1~s4的不同片段)的总的时空区为所有方格的面积,即

15∆t×4

所以$$E=\frac{(∆t+∆t+∆t+3∆t)×4}{15∆t×4}$$

这个值也就是阴影部分的面积占总的面积的比值

2.6、存储系统

  • 层次化存储结构

Cache—概念

  • Cache的功能:提高CPU数据输入输出的速率,突破冯·诺依曼瓶颈,即CPU与存储系统间数据传送带宽限制。

  • 在计算机的存储系统体系中,Cache是访问速度最快的层次。

  • 使用Cache改善系统性能的依据是程序的局部性原理。

例子:如果给出的h的命中率为95%,t1=1ns,t2=1ms=1000ns;

则t3=95%×1+(1-95%)×1000=50.95ns

可以看出,在没有引入Cache之前,主存储周期为1000ns,引入了Cache之后,Cache+主存储的平均周期大大缩短了。

局部性原理

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

如上例题。
int i,s=0; 只执行一次
s+=j;总共要执行1000X1000次。(直接放在Cache中)

时间局部性就是上一次访问过的数据,这一次直接读取Cache中的数据,达到速度的提升。

空间局部性在数组方面体现的比较直观。

一个数组A,顺次下来A[0],A[1],A[2]。。。每个空间都要初始化为0,当程序访问当前空间,再访问临近的空间则是空间局部性。

总结

  • 空间局部性是指加载一个地址的数据之后,继续加载它附近的数据;

  • 时间局部性是指在加载一个地址的数据之后,短时间内重新加载这块数据。

  • 时间局部性指的是一个数据被引用过,那么在一定的时间范围内,能被多次引用。

  • 空间局部性指的是一个数据被引用过,那么一定相邻范围内的数据,能在未来被引用。

主存—分类

  • 随机存取存储器RAM,断电后数据丢失。
  • 只读存储器ROM,断电后数据依然被保存。

闪存:

  • 掉电后信息不会丢失,属于非易失性存储器
  • 以块为单位进行删除操作
  • 闪存代替的ROM
  • 在嵌入式系统中可以使用flash代替ROM存储器。

主存—编址

上面的例子解析:

方法一:C7FFFH-AC000H+1=1C000H

方法二:(C7FFFH+1)-AC000H=C8000H-AC000H=1C000H

那么是多少K地址单元呢

因为K是1024(这里的1024是十进制数,换算成16进制就是400)

所以1C000÷400=70(16进制),即112(10进制)

当然我们也可以把1C000换算成十进制,即114688

所以114688÷1024=112

第二空:

设该芯片每个存储单元存储X位

112K×16=28×16K×X

K和K约掉,16和16约掉,112÷28=4,则X=4

磁盘结构与参数

试题:
解题:

(1)分析:

考察知识点:存取时间 = 寻道时间 + 等待时间(平均定位时间+旋转延迟时间,又称为旋转延迟时间)

一个磁道划分为11个物理块,每块存放一个逻辑记录,而存储的逻辑记录从 R0 到 R10 一共11个,所以正好成为一个回环。如下图所示

磁盘旋转是一个不会停下来的匀速旋转的过程,所以周期为 33ms时,平均每个物理块的读取时间为33/11=3ms.这 3ms 即为平均定位时间

单缓冲区意味着一次只能处理一个记录,等处理完成释放缓冲区才能进行下一个操作。

(2)解答:
1)我们来看到48题,处理这11个记录的最长时间,不要被“最长”这两个字误导,其实就是要你求处理11个记录的时间。我可以算出来,当读取R0时,用时 3ms ,加载到单缓冲区完成处理,用时 3ms ,这时候,磁头的位置应处于R2的开始处。但我们需要读取的记录是R1,因此,我们要等待到磁头旋转到R1的位置时才能继续处理记录。也就是说,处理一个记录的时候,磁头需要转一个周期还要多一个物理块才能读到下一个记录。易得出,等待时间为33+3=36ms.

由于最后一个的位置特殊,读取完后,不需要等待磁头转到下个记录这部分时间,因而R10的处理时间为读取的时间+处理的事件,即3ms+3ms=6ms.

所以处理这11个记录的时长为:36 x 10 + 6 = 366ms.

答案是C.

2)若对信息存储进行优化分布后,处理11个记录的最少时间。做完48题的时候你就明白了,最理想的信息存储分布

就是,当读取完一个记录,执行完后立刻能读取下一个记录这样的布局是最快的。如下图所示

易得出,处理一个记录的用时仅为6ms,一共有11条记录,11 x 6 = 66ms.

答案选择B.

2.7、计算机总线

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

  • 内部总线:往往是指的危机内部各个外围的芯片与处理器之间的总线,它是芯片这一个级别的,
  • 系统总线:是指危机中各个插件版和系统版之间的总线,它是属于插件版这一层级的
    • 数据总线:是用来传输数据的,比方说我们的计算机是32位的还是64位的,如果说是32位的,代表了一个计算机的字就是32bit,这说明它的总线宽度就是32个bit。一次或者叫一个周期能够传输的数据量就是32个bit
    • 地址总线:假设地址总线是32位(bit),说明它代表的地址空间是2的32次方,也就是4g这样的一个宽度
    • 控制总线:就是发送相应的控制信号的总线
  • 外部总线:是指危机和外部设备的总线

2.8、系统可靠性分析

串联系统与并联系统

串联

必须保证每个子系统都能运行,整个系统才能运行,这就是串联。

R:总得可靠度

λ:总的失效率

注意,这个失效率的公式算的是一个近似值,只有当子系统比较多,并且每个子系统失效率极低的情况下,可以用这个公式快速的求出总的失效率。

假如我的一个系统只有20个子系统,每个子系统可靠度有90%,那每个子系统的失效率就有0.1,累加后得到结果为2,即200%,显然这是不正确的,失效率怎么可能有200%呢,所以这个公式只能在子系统比较多的情况下,且失效率极低的情况下,才能使用。

并联

只有当全部的子系统失效,整个系统才会失效,但凡有一个子系统可以运行,整个系统依旧可以正常运行,这是并联。

R:总得可靠度

μ:总的失效率(通过上图的公式可以看出,失效率的公式极其复杂,我们一般直接用1-R即可。)

假如每个子系统的可靠度为0.9,则总的系统可靠度为:

1-(1-0.9)3=0.999

n模冗余系统与混合系统

R1,R2,...Rm做的事情是一模一样的。

m:子系统的个数

假如R1计算得到1,R2计算得到1,R3计算得到0,这三个结果最终汇总到表决器,表决器就会判断最终的输出结果为1,而不是0。所以即使R3可能因为故障等原因导致结果出错,也不会影响到最后的输出结果。

常考类型,串并联结合的模型

2.9、校验码

差错控制—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

CRC是一种只能检错不能纠错的编码

先了解是什么是异或

  • 异或(xor)是一个数学运算符。它应用于逻辑运算。

  • 异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

  • 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

  • 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

什么是模2除法,它和普通的除法有何区别?

模2除法是指在做除法运算的过程中不计其进位的除法。(同为0,异为1)

例如,10111对110进行模2除法为:

例题:

海明校验码

海明校验码是一种能检错并能纠错的编码

例:求信息1011的海明码。

image-20220503202608159

(1) 2r>=4+r+1, 确定校验码为3位: 23>=4+3+1。 分别放在20=1、21=2、 22=4位。

(2)列出校验位公式。

异或操作:同为0,异为1

假如收到的校验位是000

计算得到的校验位是001

我们需要把他们进行异或操作,得到001,在r0的位置为1,说明我们收到的校验码000在r0位置出错,那么我们进行取反操作,得到纠错的校验码为001。如果收到的校验码和计算的校验码相同,说明在传输过程中没有出错。

3、操作系统基本原理

3.1、操作系统

操作系统的系统性能指标有:系统的可靠性系统的吞吐率(量)系统响应时间系统资源利用率可移植性

概述

文件和树型目录结构

3.2、进程管理

进程状态替换图

前趋图(常考)

进程的同步与互斥

PV操作的经典问题:

生产者和消费者问题

PV操作(比较难)

  • 临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等
  • 临界区:每个进程中访问临界资源的那段代码称为临界区
  • 信号量:是一种特殊的变量

S:信号量

P(S):是否进行阻塞操作

V(S):是否进行激活操作

生产者消费者问题

单缓冲区生产者、消费者问题PV原语描述:

1、当先执行生产者进程

初始值s1=1;

初始值s2=0;

生产者开始工作;

P(s1)———p操作(S=S-1)——》s1=0;

由于s1<0的判断为F,将继续往下执行;

V(s2)———v操作(S=S+1)——》s2=1;

由于s2<=0的判断为F,将继续往下执行;

P(s1)———p操作(S=S-1)——》s1=-1;

由于s1<0的判断为T,将生产者放入进程队列当中,生产者进入阻塞状态;

这时候消费者开始进入进程;

P(s2)———p操作(S=S-1)——》s2=0;

由于s1<0的判断为F,将继续往下执行;

V(s1)———v操作(S=S+1)——》s1=0;

由于s1<=0的判断为T,这时候从进程队列中取出一个进程进行执行;

(因为上面生产者在进程队列中,所以取出的是生产者进程)

生产者开始工作.....

2、当先执行消费者进程

初始值s1=1;

初始值s2=0;

消费者开始工作;

P(s2)———p操作(S=S-1)——》s2=-1;

由于s2<0的判断为T,将消费者放入进程队列当中,消费者进入阻塞状态;

这时候生产者开始进入进程;

P(s1)———p操作(S=S-1)——》s1=0;

由于s1<0的判断为F,将继续往下执行;

V(s2)———v操作(S=S+1)——》s2=0;

由于s2<=0的判断为T,这时候从进程队列中取出一个进程进行执行;

(因为上面消费者在进程队列中,所以取出的是消费者进程)

消费者开始工作.....

PV操作实际考题
解答:

PV操作与前趋图

例题:

死锁问题

  • 进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。

例:系统有3个进程: A、B、C。这3个进程都需要5个系统资源。如果系统至少有多少个资源,则不可能发生死锁。

k:进程数

n:每个进程占用的资源数

至少需要k*(n-1)+1个资源。

上面的例子至少需要:3*(5-1)+1=13个资源,才会不可能发生死锁。

银行家算法(考察频率较高)

银行家算法:分配资源的原则

  • 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
  • 进程可以分期请求资源,但请求的总数不能超过最大需求量
  • 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源
银行家算法例子
解答:

检验p2—>p1—>p4—>p5—>p3是否是死锁;

通过分配资源表可以看出,当前序列是不安全的,会产生死锁状态。

3.3、存储管理

分区存储组织

某计算机系统的内存大小为128k,采用可变分区分配方式进行内存分配,当前系统的内存分块情况如下图所示,现有作业4申请内存9k,几种不同的存储分配算法在分配中,会产生什么样的结果呢?

分配9K空间;

在首次适应算法当中,会从上到下分配,所以25K分配出9K后,还剩16K;

在最佳适应算法当中,会将空闲内存排序,然后从最小的空闲内存块匹配是否有可以匹配的空间,所以10K分配出9K后,还剩1K;

在最差适应算法当中,会将空闲内存排序,然后从最大的空闲内存块中分配空间,所以28K分配出9K后,还剩19K;

在循环首次适应算法当中,会将内存从上至下链接,形成一个环,当第一个空间分出空间后,下一次分配空间会从第二个空闲内存中分配,所以假如本次在25K分出9K内存后,下一次会在28K的空闲内存中分配出空间依次循环,最后保证每个空间会被平均分配。

页式存储组织

常考:逻辑地址和物理地址的转换

逻辑地址的页内地址和物理地址的页内地址是一样的。唯一不同的是逻辑地址的页号与物理地址的页帧号;

练习

1K=210;

4K=212;

说明一个页的页内地址是12位的;

那么高于12位的就是页号;

注意:2进制每3位代表一个八进制位;2进制每4位代表一个16进制位

逻辑地址5A29H是十六进制的,所以A29这12位是页内地址,5就是页号;

那么逻辑地址的页号5对应的物理地址的页块号(页帧号)通过查表可知是6;

所以第一空应该选D;

状态位为0代表不在内存当中;

所以如果要淘汰只能淘汰在内存当中的页号,(不在内存的页号根本就淘汰不了,因为都不在内存当中,怎么淘汰呢。);

那么页号0,页号1,页号2和页号5四个可能其中一个被淘汰,那么怎么判断谁被淘汰呢;

这时候需要看访问位(注意:刚刚被访问过的页号的访问位是1),访问位为1的不能被淘汰,0才能被淘汰。

使用第二空应该选B(页号1被淘汰);

段式存储组织

段页式存储组织

快表

  • 快表是一块小容量的相联存储器(Associative Memory),由高速缓存器组成,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号。
  • 快表是放在Cache中的。

相联存储器:按内容查找的存储器;

慢表是放在内存当中的。

页面置换算法

页面置换算法广泛应用于分层的存储体系当中;

  • 最优(Optimal, OPT)算法:理论算法,在实际应用当中是比较复杂的。
  • 随机(RAND)算法:性能不稳定的算法
  • 先进先出(FIFO) 算法:有可能产生"抖动”。例如,432143543215序列,用3个页面,比4个缺页要少
  • 最近最少使用(LRU)算法:不会“抖动”

抖动:意思就是我分配给你更多的资源,我希望你把这个事情做的更加好一些,更漂亮一些,结果给你分配了更多的资源,你不但没有起到正面的效果,反而让效率降低了。

注意:刚刚被访问的是不会被淘汰出去的,因为局部性原理。

FIFO例子:

解释

FIFO(先进先出)

再看一个例子

讲的是FIFO和LRU的区别

解析

在记录第6列的3时,FIFO认为当前内存的0,1,2中的0是先进来的,所以把0淘汰了;

而FRU认为当前内存的1,2,0中的0是刚刚在第5列被访问过的,不能淘汰,其次是2,不能淘汰,最后是1被最先访问的,可以被淘汰。

页面淘汰算法练习题

第一空:

题目给出提示“系统中没有使用快表”,意思就是说,每读一次程序的块,就需要先在内存上查表,然后才能在内存是读取数据,也就是说每读一次程序的块,需要访问2次内存。

总共是6个块,所以需要访问12次内存。

第二空:

所有的指令默认会一次性读取该块所有信息。swap指令也是如此。

根据图可以看到。swap指令跨了0和1这两个页(块),所以只会产生一次缺页中断。

而数据类型的操作数不会一次性读所有信息,操作数是每跨一次块就有一次缺页中断。

根据图可以看到,操作数A跨了2和3这两个页,所以会产生2次缺页中断,B也是如此。

那么swap指令产生1次缺页中断,操作数A产生了2次缺页中断,操作数B产生了2次缺页中断。

总共就是1+2+2=5次缺页中断。

3.4、文件管理

索引文件结构

标准是索引节点是13个(0~12)

解释
练习题
解答

1K=1024字节

每个地址是4字节

一个磁盘索引块就有256个一级索引

image-20220515213841374

因为101在索引7,索引7是二级间接地址索引,所以101号物理块存放的是二级地址索引表;

空闲存储空间的管理

位示图当中的1表示被占用。0表示空闲状态;

试题讲解
解答:

一个字是32位

4195号物理块也就是第4196个物理块(像图中31号物理块是第4196个物理块,因为块号是从0开始的)

$$\frac{4196}{32}=131.125$$,超过了131了,说 明要把前面131个字填满,并且当前的这个物理块所占的位是在第132个字当中。所以第一空选D;

所以第二空选B;

3.5、设备管理

数据传输控制方式

虚设备与SPOOLING技术

3.6、微内核操作系统

4、数据库系统

4.1、数据库模式

三级模式—两级映射(选择题出现)

数据库设计过程

4.2、ER模型

  • 集成的方法:

    • 多个局部E-R图一次集成。
    • 逐步集成,用累加的方式一次集成两个局部E-R。
  • 集成产生的冲突及解决办法:

    • 属性冲突:包括属性域冲突和属性取值冲突。
    • 命名冲突:包括同名异义和异名同义。
    • 结构冲突: 包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。

    注意:

    1对1可以转换成2个或3个关系模式,因为联系的那部分可以和两个实体的其中一个合并成关系模式;

    1对多也可以转换成2个或3个关系模式,联系的那部分可以和多实体合并成一个关系模式;

    多对多必须转换成多个关系模式,因为联系的那部分只能单独成一个关系模式;

4.3、关系代数与元组演算(常考上午题)

假如只对(S1联接S2)的Sno,Sname,Age投影

(联接会去掉重复的列)

假如只对(S1×S2)的(笛卡尔积)Sno,Sname,Age投影

(笛卡尔积不会去掉重复的列)

4.4、规范化理论(常考上午题)

函数依赖

解释部分依赖:(假如:A是学号,B是姓名,C是性别)A和B组成一个主键组合,A和B可以确定这个人的性别,但是我们发现,仅仅知道A我们也可以确定这个人的性别,那么这里就出现了部分函数依赖。(仅知道一个属性值,就可以确定另一个属性值,而不需要知道一个组里面的全部属性值)

解释传递函数依赖:A可以确定B,B可以确定C,所以A可以确定C,这就是传递函数依赖。(注意,不能出现B确定A,否则A和B就等价了)

价值与用途

求候选键
  • 将关系模式的函数依赖关系用“有向图”的方式表示
  • 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
  • 若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一 些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
求候选键实例

解答:

范式

第一范式

第一范式(1NF) :在关系模式R中,当且仅当所有域只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式。

第二范式

第二范式(2NF) :当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在部分依赖)时,则称R是第二范式。

主属性:所谓主属性,就是候选键的一部分。

例如SNO,CNO都是主属性。而GRADE和CREDIT是非主属性。

SNO:学号;CNO:课程号;GRADE:成绩;CREDIT:课程学分;

SNO和CNO组合(这两个候选键缺一不可)可以确定GRADE;

但是CNO这一个单键可以确定CREDIT,所以可以看出这里出现了部分函数依赖;

那么需要把CREDIT进行进一步拆分成一个新的关系模式。(切记不能拆分CNO)

第三范式

第三范式(3NF) :当且仅当R是1NF,且E中没有非主属性传递依赖于码时,则称R是第三范式。

从图表可以看出,会发生数据冗余,更新异常,插入异常,删除异常....

解决方案就是:把DNO,DNAME,LOCATION这三个独立出来,这三个成为一个关系模式。

然后原来的关系模式就只剩SNO,SName,DNO这三个字段。

BC范式

BC范式(BCNF) :设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。

这里的候选键有(S,J),(S,T)

为什么单独的T不是候选键呢?因为T可以确定J,但是T不能确定S,候选键必须可以遍历所有节点。

(S,J)可以确定T,(S,T)可以确定J

所以这里的S,J,T都是主属性,不存在非主属性,所以满足第二,第三范式;

函数依赖包括:S和J确定T,T确定J;

可以看到上面的S和J是候选键,单独的T不是候选键;

所以这不是BC范式。

例题

p51

模式分解

模式分解—例题讲解
判断无损分解的第一种方法

用表格分析

判断无损分解的第二种方法

只适用一分为二的R

4.5、并发控制

基本概念

存在的问题示例

封锁协议

X锁是写锁;S锁是读锁

  • 一级封锁协议。事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。可防止丢失修改
  • 二级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。可防止丢失修改,还可防止读“脏”数据
  • 三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改、防止读“脏”数据与防止数据重复读
  • 两段锁协议。 可串行化的。可能发生死锁

4.6、数据库完整性约束

  • 实体完整性约束

  • 参照完整性约束

  • 用户自定义完整性约束

  • 触发器

4.7、分布式数据库(常考下午题)

数据库安全

数据备份

  • 冷备份也称为静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来。
  • 热备份也称为动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。
  • 完全备份:备份所有数据
  • 差量备份:仅备份上一次完全备份之后变化的数据
  • 增量备份:备份上一次备份之后变化的数据

(1)静态海量转储:在系统中无运行事务时进行,每次转储全部数据库。
(2)静态增量转储:在系统中无运行事务时进行,每次只转储上一次转储后更新过的数据。
(3)动态海量转储:转储期间允许对数据库进行存取或修改,每次转储全部数据库。
(4)动态增量转储:转储期间允许对数据库进行存取或修改,每次只转储上一次转储后更新过的数据。

日志文件:事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中

数据库故障与恢复

4.8、数据仓库与数据挖掘(常考下午题)

数据挖掘方法分类

  • 方法

    • 决策树
    • 神经网络
    • 遗传算法
    • 关联规则挖掘算法
  • 分类

    • 关联分析:挖掘出隐藏在数据间的相互关系。
    • 序列模式分析:侧重点是分析数据间的前后关系(因果关系)。
    • 分类分析:为每一个记录赋予一个标记再按标记分类。
    • 聚类分析:分类分析法的逆过程。

4.9、反规范化技术

由于规范化会使表不断的拆分,从而导致数据表过多。这样虽然减少了数据冗余,提高了增、删、改的速度,但会增加查询的工作量。系统需要进行多次连接,才能进行查询操作,使得系统效率大大下降

  • 技术手段
    • 增加派生性冗余列
    • 增加冗余列
    • 重新组表
    • 分割表

4.10、大数据基本概念

大数据

5、计算机网络

五层模型

5.1、OSI/RM七层模型

  • 网关:对高层协议(包括传输层及更高层次)进行转换的网间连接器。允许使用不兼容的协议,比如SPX/IPX和TCP/IP的系统和网络互连。因为协议转换是网关最重要的功能,所以是工作在传输层及以上层次。

  • 防火墙:传统的包过滤防火墙工作在网络层,电路网关防火墙工作在传输层(线路级防火墙工作在会话层),应用网关类的代理防火墙则工作在OSI最高的应用层。

练习题

5.2、网络技术标准与协议

  • TCP/IP协议:Internet,可扩展,可靠,应用最广,牺牲速度和效率
  • IPX/SPX协议:NOVELL,路由,大型企业网
  • NETBEUI协议:IBM,非路由,快速
  • SNMP协议的报文是封装在UDP协议中发送的

  • PGP工作在应用层

  • SSL工作在应用层和传输层之间

  • IPSec工作在网络层,为IP数据报文进行加密。

  • HTTPS是HTTP与SSL 的结合体,为传输层以上层次数据加密。

  • TLS安全传输层协议用于在两个通信应用程序之间提供保密性和数据完整性。

  • HTTP默认的端口是80

  • HTTPS默认的端口是443

  • SMTP默认的端口是25

  • POP3默认的端口是110

TCP协议

DHCP协议

DNS协议

假如本地域名服务器使用的是递归查询

实例:

5.3、计算机网络的分类

拓扑结构

5.4、网络规划与设计

逻辑网络设计

  利用需求分析和现有网络体系分析的结果来设计逻辑网络结构,最后得到一份逻辑网络设计文档,输出内容包括以下几点:

  • 逻辑网络设计图
  • IP地址方案
  • 安全方案
  • 具体的软硬件、广域网连接设备和基本服务
  • 招聘和培训网络员工的具体说明
  • 对软硬件、服务、员工和培训的费用初步估计

物理网络设计

  物理网络设计是对逻辑网络设计的物理实现,通过对设备的具体物理分布、运行环境等确定,确保网络的物理连接符合逻辑连接的要求。输出如下内容:

  • 网络物理结构图和布线方案
  • 设备和部件的详细列表清单
  • 软硬件和安装费用的估算
  • 安装日程表,详细说明服务的时间以及期限
  • 安装后的测试计划
  • 用户的培训计划

分层设计

5.5、IP地址与子网划分

IPV4-IP地址

A类拥有的主机数是224-2=16,777,214;

为什么减2呢,因为全为0的IP地址是网络地址,而不是主机地址;全为1的是广播地址也不是主机地址。

网络号相差

B类—A类 相差64

C类—>B类 相差32

D类—>C类 相差16

E类—>D类 相差16

常见的二进制转十进制
1000 0000------------->128------>192-2^6(64)
1100 0000------------->192------>224-2^5(32)
1110 0000------------->224------>240-2^4(16)
1111 0000------------->240------>248-2^3(8)
1111 1000------------->248------>252-2^2(4)
1111 1100------------->252------>254-2^1(2)
1111 1110------------->254------>255-2^0(1)
1111 1111------------->255

子网划分

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

例题:

例1 :将B类IP地址168.195.0.0划分成27个子网,子网掩码为多少?

例2 :将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台,则子网掩码为多少?


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

例题:

特殊含义的IP地址

5.6、HTML

5.7、无线网

5.8、网络接入技术

5.9、IPV6

IPv6是设计用于替代现行版本IP协议( IPv4 )的下一代IP协议。

6、系统安全分析与设计

6.1、信息系统安全属性

  • 安全属性
    • 保密性:最小授权原则、防暴露、信息加密、物理保密
    • 完整性:安全协议、校验码、密码校验、数字签名、公证
    • 可用性:综合保障( IP过滤、业务流控制、路由选择控制、审计跟踪)
    • 不可抵赖性:数字签名

6.2、对称加密技术

6.3、非对称加密技术

  • RSA算法具有数字签名和验签的功能。

6.4、信息摘要

  • MD5的散列值为128
  • SHA的散列值为160

6.5、数字签名

6.5、数字信封与PGP

  • 发送方将原文用对称密钥加密传输,而将对称密钥用接收方公钥加密发送给对方。

  • 接收方收到电子信封,用自己的私钥解密信封,取出对称密钥解密得原文。

  • PGP可用于电子邮件,也可以用于文件存储。采用了杂合算法,包括IDEARSAMD5ZIP数据压缩算法。

  • PGP承认两种不同的证书格式: PGP证书和X.509证书。

  • PGP证书包含PGP版本号、证书持有者的公钥、证书持有者的信息、证书拥有者的数字签名、证书的有效期、密钥首选的对称加密算法。

  • X.509证书包含证书版本、证书的序列号、签名算法标识、证书有效期、以下数据:证书发行商名字、证书主体名、主体公钥信息、发布者的数字签名。

练习题

设计邮件加密系统

要求邮件以加密方式传输,邮件最大附件内容可达500MB,发送者不可抵赖,若邮件被第三方截获,第三方无法篡改。

6.6、网络安全

各个网络层次的安全保障

网络威胁与攻击(1)

网络威胁与攻击(2)

  • 主动攻击
    • 拒绝服务攻击
    • 分布式拒绝服务(DDos)
    • 信息篡改
    • 资源使用、欺骗、伪装、重放

防火墙

7、数据结构与算法基础

  • 数组与矩阵
  • 线性表
  • 广义表
  • 树与二叉树
  • 排序与查找
  • 算法基础及常见的算法

7.1、数组

按行存储是先填满第一行数据,再从第二行开始,以此类推;

按列存储是先填满第一列数据,再从第二列开始,以此类推;

已知5行5列的二维数组a中的各元素占两个字节,求元素a[2] [3]按行优先存储的存储地址?

答案:a[2] [3]的存储地址=a+(2 * 5+3) * 2=a+13 * 2=a+26

7.2、稀疏矩阵

  • 上三角矩阵对应的一维数组下标公式:(2n-i+1)×$$\frac{i}{2}$$+j

  • 下三角矩阵对应的一维数组下标公式:(i+1)×$$\frac{i}{2}$$+j

例子:

7.3、数据结构的定义

7.3、线性表

1.线性表的概念

     (a1, a2,...,an)

2.线性表常见的两种存储结构

  • 顺序存储结构
    • 顺序表
  • 链式存储结构
    • 链表

线性表的两种存储结构

链表的操作

顺序存储与链式存储对比

队列与栈

练习:

7.4、广义表

例1答案:长度为3,深度为2。

例2解答:

先操作tail(LS1)---->LS2((b,c),(d,e))

再操作head(LS2)----->LS3(b,c)

最后再head(LS3)----->b

即答案为:head(head(tail(LS1)))。

7.5、树与二叉树

  • 节点1的度为2(因为1号节点有2、3两个孩子节点)
  • 节点3的度为2(因为3号节点只有6号一个孩子节点)
  • 上面的树的度是2(也就是子节点最多的个数,假如2号节点有三个子节点,那么这个树的度是3)
  • 上面的图只有4、5、7、8是叶子节点(叶子节点就是没有孩子的节点)
  • 分支节点有1、2、3、6(节点的度不为0的节点)
  • 内部节点有2、3、6(除去根节点和叶子节点)

二叉树深度就是层数。二叉树结点的度数指该结点所含子树的个数,二叉树结点子树个数最多的那个结点的度为二叉树的度。二叉树的根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此下去。深度是指所有结点中最深的结点所在的层数。

二叉树

二叉树遍历

  • 前序遍历
    • 先访问根节点,再访问左子树和右子树节点
  • 中序遍历
    • 先访问左子树节点,然后访问根节点,最后访问右子树节点
  • 后序遍历
    • 先访问左子树节点,然后访问右子树节点,最后访问根节点
  • 层次遍历
    • 从上到下,从左往右以此遍历。

反向构造二叉树

  • 知道前序序列中序序列,可以推出原来的二叉树
  • 或者知道中序序列后序序列,也可以推出原来的二叉树
  • 仅仅知道前序序列的后序序列,是不能推出原来的二叉树的

还原后

树转二叉树

查找二叉树

查找二叉树又叫排序二叉树

最优二叉树(哈夫曼树)快速

权就是该节点的值。

某带权路径长度=该权值*根节点到该节点的路径长度

例如:2的带权路径长度=2*2=4;

4的带权路径长度=4*3=12

如果把这些节点的带权路径长度相加就是树的带权路径长度。

线索二叉树

前序序列为:A B D E H C F G I

叶子节点绿色箭头指向前面的节点红色箭头指向后面的节点。

平衡二叉树

平衡二叉树是一种特殊的查找(排序)二叉树

7.6、图

基本概念

图的存储

邻接矩阵
邻接表

图的遍历

拓朴排序

图的最小生成树

普里姆算法(复杂)

一棵树的节点是N,那么他的边数最多为N-1

克鲁斯卡尔算法(简单)

7.7、算法基础

算法的特性

  • 5个特性有穷性确定性输入输出有效性

算法的复杂度

7.8、查找

顺序查找

  • 顺序查找的思想:将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功;否则,则查找失败。

二分查找

  • 折半查找在查找成功时关键字的比较次数最多为[log2n]+1次。
  • 折半查找的时间复杂度为O(log2n)
例题

第一次比较下标1 ~ 12的中间的那个值((1+12)/2=6.5【取整法】)

拿17与下标6相比,17<18;

第二次比较下标1 ~ 5(注意这里不是1 ~ 6)的中间的那个值((1+5)/2=3)

拿17与下标3相比,17>10;

第三次比较下标4 ~ 5((4+5)/2=4.5)

拿17与下标4相比,17>16;

第四次比较下标5 ~ 5((5+5)/2=5)

拿17与下标5相比,17=17;

散列表

散列表冲突的解决方法

7.9、排序

直接插入排序

希尔排序

  • 希尔排序就是把一个大的序列分成n组,每个n组内部进行直接插入排序

直接选择排序

堆排序

堆排序的概念
堆排序的基本思想
例题

先把80(最大)取走,然后把最后一个元素拿到根节点位置,进行大顶堆的排序;

上面的第六张图的根节点(60)是进行一次大顶堆排序得到的最大的数;

然后把60取走,再把元素最后一个拿到根节点文字,再进行一次大顶堆排序;

以此类推,就会得到一个由大到小的序列。

堆排序的效率比直接选择排序要高很多。

判断是不是小根堆,将其转换为完全二叉树,自由节点类似二叉排序树,但不区分左右子树大小。

冒泡排序

快速排序

选择哪个元素作为基准是没有任何要求的。

最佳的是选择中位数作为基准

归并排席

基数排序

每次排序能够确定至少一个元素最终位置的排序

  • 选择排序和交换排序

8、语言处理程序基础

  • 编译与解释
  • 文法
  • 正规式(几乎每次都考)
  • 有限自动机
  • 表达式(偶尔考到)
  • 传值与传址(出现概率频度较高)
  • 多种程序语言特点

8.1、编译过程

8.2、文法定义

8.3、文法

8.4、语法推导树

8.5、有限自动机

8.6、正规式

8.7、文法推导

8.8、有限自动机例题

8.9、程序语言基础

表达式

各种程序语言特点

8.10、函数调用

传值与传址

例题

传值
传址

9、法律法规

9.1、保护期限

9.2、知识产权人确定

9.3、侵权判定

9.4、标准化基础知识

标准的分类

标准的编号

10、多媒体基础

  • 多媒体技术基本概念
  • 多媒体相关计算问题
  • 常见多媒体标准
  • 数据压缩技术

10.1多媒体技术基本概念

音频相关概念

图像相关概念

  • YUV------>电视机
  • CMY------>印刷
  • HSV------>艺术

媒体的种类

  • 感觉媒体:指人们接触信息的感觉形式。如:视觉、听觉、触觉、嗅觉和味觉等。
  • 表示媒体:指信息的表示形式。如:文字、图形、图像、动画、音频和视频等。
  • 显示媒体(表现媒体) :表现和获取信息的物理设备。如:输入显示媒体键盘、鼠标和麦克风等;输出显示媒体显示器、打印机和音箱等。
  • 存储媒体:存储数据的物理设备,如磁盘、光盘和内存等。
  • 传输媒体:传输数据的物理载体,如电缆、光缆和交换设备等。

多媒体相关计算问题

例题:
解析:

小写的k表示的是采样,1k=1000;

大写的K表示的是存存储,1K=1024;

常见的多媒体标准

数据压缩基础

  • 空间冗余(几何冗余)
  • 时间冗余
  • 视觉冗余
  • 信息熵冗余
  • 结构冗余
  • 知识冗余

有损压缩与无损压缩

一类是无损压缩编码法 ( Lossless compression coding), 也称冗余压缩法或熵编码法;

另一类是有损压缩编码法( Loss compression coding),也称为熵压缩法。

11、软件工程

11.1、软件开发模型

瀑布模型(SDLC)

针对需求明确的系统

原型模型

原型针对需求不明确的系统

增量模型与螺旋模型

V模型、喷泉模型和RAD模型

瀑布模型是结构化的典型代表

喷泉模型是最早的面向对象的模型

SDLC:瀑布模型

CBSD:构件组装模型

RAD:快速开发模型

构件组装模型(CBSD)

统一过程(UP/RUP)

敏捷开发方法

11.2、信息系统开发方法

11.3、需求开发

需求分类与需求获取

11.4、结构化设计

基本原则

内聚与耦合

速记内聚:功顺通过 瞬逻偶。

速记耦合:非数表控,外公内

往往内聚越高,这个系统就越好。

耦合越高代表与其他模块联系比较紧密。

系统结构/模块结构

11.5、软件测试

测试原则与类型

测试用例设计

测试阶段

image-20220421205450712

McCabe复杂度(重要)

image-20220421210450603

11.6、系统运行与维护

 软件维护是生命周期的一个完整部分。可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动。交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等

image-20220421211131541

11.7、软件过程改进

CMMI

image-20220421220532424

11.8、项目管理

image-20220421221423665

时间管理

image-20220421222046018

风险管理

image-20220421222123113

12、面向对象

12.1、面向对象基本概念

需求开发—需求分析—OOA—相关概念

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

12.2、面向对象设计

设计原则

  • 单一职责原则:设计目的单一的类
  • 开放-封闭原则:对扩展开放,对修改封闭
  • 李氏(Liskov)替换原则:子类可以替换父类
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
  • 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解

UML

image-20220423155005072

设计模式的概念

  • 架构模式:软件设计中的高层决策,例如C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所作的基本设计决策
  • 设计模式:主要关注软件系统的设计,与具体的实现语言无关
  • 惯用法:是最低层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如引用-计数就是C++语言中的一种惯用法

设计模式的分类

工原单构

适桥组装享外代

中职备命解迭,观状策模访

image-20220423160444983

创建型模式

image-20220423160628335

结构型模型

image-20220423161611067

行为型模式

image-20220423161651119 image-20220423162453140

13、数据流图(DFD)(重点)

13.1、数据流图前言

内容提要

  • 数据流图基本概念
  • 数据字典
  • 数据平衡原则

13.2、数据流图基本概念

image-20220423163847695 image-20220423163934400

13.3、数据流图的分层(DFD)

image-20220423164334520

13.4、数据字典

image-20220423164627501

符号例子:

image-20220423164727177

13.5、数据流图平衡原则

image-20220423165129810

父图与子图之间的平衡

image-20220423165236252

13.6、数据流图试题解题技巧

image-20220423165744008

13.7、数据流图案例分析1

题目

image-20220423170211802

问题

image-20220423170302554

image-20220423170530011

分析题目:

image-20220423170956876 image-20220424124511906 image-20220424124727142

13.8、数据流图案例分析2

题目

image-20220424130639434

问题

image-20220424130850219

image-20220424130922048

分析

image-20220424131127707 image-20220424131656525

14、数据库设计

14.1、数据库设计前言

  • 数据库设计过程
  • ER模型
  • 答题技巧

14.2、数据库设计过程

image-20220424173634638

14.3、ER模型

实体间联系类型

image-20220424194423358

E-R图向关系模型的转换

转换的基本原则是:实体和联系分别转换成关系,属性则转换成相应关系的属性。

  • 一对一联系
  • 一对多联系
  • 多对多联系
  • 多元联系

14.4、数据库设计答题技巧

  • 详细分析试题说明
  • 熟练掌握基本知识

14.5、数据库设计案例分析1

试题1:

image-20220424200204849 image-20220424200324885 image-20220424200341111

问题

image-20220424200355994

14.6、数据库设计案例分析2

image-20220424202713985 image-20220424203057900 image-20220424203124666 image-20220424203142773 image-20220424203205207

问题

image-20220424203225277

解答

image-20220424204433109

15、UML建模

内容提要

  • 用例图
  • 类图与对象图
  • 顺序图
  • 活动图
  • 状态图
  • 通信图
  • 构件图

15.1、用例图

image-20220424205252586

15.2、类图与对象图

image-20220424205757249 image-20220424210015116 image-20220424210213204

https://zhuanlan.zhihu.com/p/350793664

15.3、顺序图(序列图)

image-20220424210400881

15.4、活动图

image-20220424210627009

带泳道的活动图

image-20220424210753184

15.5、状态图(动态图)

image-20220424210921204

15.6、通信图(协作图)

image-20220424211204216

15.7、UML案例分析1

image-20220424211603514 image-20220424212726938 image-20220424211703043 image-20220424211719881

15.8、UML案例分析2

image-20220424213552406 image-20220424213718750

问题

image-20220424213748954

解答

image-20220424214124992 image-20220424214310283 image-20220424214920479

16、数据结构及算法应用

  • 分治法
  • 回溯法
  • 贪心法
  • 动态规划法

16.1、分治法

  对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。

image-20220424215507981

递归技术

image-20220426143520322

二分法查找

image-20220426143944877

16.2、回溯法

  回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法。

image-20220426144534476

16.3、贪心法

  总是做出在当前来说是最好的选择,而并不从整体上加以考虑,它所做的每步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有可能解,因此其耗费时间少,一般可以快速得到满意的解,但得不到最优解。

image-20220426144934621

贪心法的邻分(分数)背包问题

image-20220426145332915

16.4、动态规划法

  在求解问题中,对于每一步决策,列出各种可能的局部解,再依据某种判定条件,舍弃那些肯定不能得到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局是最优解。

动态规划法求解的最优化问题应该具备两个要素:最优子结构问题重叠

动态规划法的显著特征就是把每个子问题不同的答案存在一张表中,后期通过查表的方式来找答案。

image-20220426145558795

16.5、数据结构及算法应用案例分析1

试题1

image-20220426145940886 image-20220426152907719 image-20220426152939299

问题

image-20220426154017396

解答

image-20220426153523624 image-20220426153604315 image-20220426154301048

16.6、数据结构及算法应用案例分析2

image-20220426191906003 image-20220426192011078 image-20220426192055419 image-20220426192111285

17、面向对象程序设计

  • C++及Java语法要点
  • 设计模式程序实现

17.1、C++

类与派生类的定义

image-20220426194410675

类外定义函数体

image-20220426194547756

构造函数与析构函数

image-20220426194608949

对象指针与对象引用

image-20220426194715033

虚函数

image-20220426194842711

17.2、JAVA

类的定义

image-20220426195008764

抽象类

image-20220426195404099 image-20220426195533335

接口的定义

image-20220426195106962 image-20220426195323135

17.3、面向对象程序设计案例分析1

image-20220426195914192 image-20220426200141408

解答

image-20220426200344094 image-20220426200416223 image-20220426200635469

答案

image-20220426200806588

17.4、面向对象程序设计案例分析2

image-20220426200915918 image-20220426201219595 image-20220426201600178 image-20220426201617782

当你看到这行字的时候,学习已经结束,接下来就是不断的刷题。祝上岸成功!!!

posted @ 2022-04-26 20:45  海边蓝贝壳  阅读(1004)  评论(0编辑  收藏  举报