赞
踩
Note:以希赛网,信管网的题目为导向而整理的知识点
【计组】时钟周期、机器周期、指令周期、总线周期、存储周期(指令周期 >
机器周期 >
时钟周期)
Note:
浮点数加减法运算(对阶(阶码小向阶码大看齐)、尾数求和、规格化、舍入、溢出判断)
Note:
定点数的移位、加法与减法运算
Note:
计算机的内部存储(缓存cache、内存main memory),解释概念:内存 = 主存 + cache、外存 = 辅存、闪存、RAM、SRAM、DRAM、ROM、PROM、EPROM、EEPROM
相联存储器的工作原理(按内容访存,cache、快表中应用),相联存储器(Cache,快表是一种相联存储器,按内容访问,而不是按地址访问)
Note:
SRAM
(静态随机访问存储器),成本比DRAM
(动态随机访问存储器)高,为了扩大缓存容量,使用SRAM作为一级缓存,使用DRAM作为二级缓存。CPU访问数据先是在一级缓存中找,找不到再到二级缓存中找,再没有就去内存中找。ROM
不能随意更改。ROM
主要用于检查计算机系统的配置情况并提供最基本的输入输出(I/O)程序,如存储BIOS
参数的CMOS
芯片。ROM
的特点是计算机断电后存储器中的数据仍然存在。DRAM
。它之所以叫动态,是因为将数据写入DRAM
后,一段时间过后数据会丢失,需要一个额外的电路不断对其进行刷新操作才行。因为DRAM
储存数据利用的是电容中是否有电荷,有代表1,无代表0。但是电容会放电或吸电,刷新操作会对其进行检查。如果电量大于满电量的1/2,则将电充满,否则将电全部放掉。SRAM
虽然不需要刷新操作,但是断电后仍会丢失数据。 所以 RAM
都要在有电源时工作。EEPROM
)的变种,EEPROM与闪存不同的是,它能在字节水平上进行删除和重写而不是整个芯片擦写,这样闪存就比EEPROM的更新速度快。由于其断电时仍能保存数据,闪存通常被用来保存设置信息。RAM
)。但是在嵌入式中,可以用闪存代替ROM
存储器。(2021上午4)DFFFFH - A0000H = E0000H - A0000H
=
(
5
−
1
)
×
1
6
4
(5 - 1) \times 16^4
(5−1)×164计算机指令流水线时间计算,计算机指令-流水线和吞吐率,流水线吞吐率的计算
Note:
总线复用的概念及目的
Note:
指令的寻址方式
Note:
中断方式DMA方式的区别 - (DMA获得总线控制权,CPU无需调用中断程序处理IO,共同点就是CPU和IO外设可以实现并行工作),查询 / 中断 / DMA / 通道
计算机中三大总线:地址总线、数据总线、控制总线,CPU数据总线和地址总线 内存和外存
Note:
32bit
,时钟频率为200MHz
,若总线上每5
个时钟周期传送一个32bit
的字,则该总线的带宽为:一个T
为
1
/
(
2
∗
1
0
8
)
1/(2 * 10^8)
1/(2∗108) s,1
s内共
2
∗
1
0
8
2 * 10^8
2∗108个周期,传输了
2
∗
1
0
8
/
5
2 * 10^8 / 5
2∗108/5个32bit
字,共160
MB/S(注意字节和比特的换算:1B = 8bit
)。CPU的RISC和CISC架构的区别
Note:
指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其它 |
---|---|---|---|---|
CISC | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长 |
RISC | 数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有Load/Store操作 | 支持方式少 | 增加了通用寄存器,硬布线控制逻辑为主,适合采用流水线 | 优化编译,有效支持高级语言 |
中央处理器—CPU的功能和基本结构
Note:
计组中CPI和MIPS怎么算, 及其之间的换算关系
Note:
奇偶校验码、海明码、CRC码
Note:
CRC
冗余校验码的计算
例1:设生成多项式
G
(
x
)
=
X
3
+
X
2
+
1
G(x)=X^3+X^2+1
G(x)=X3+X2+1 ,数据序列为101001
,求对应的CRC码?参考CRC码
解析:通过多项式,得到除数为1101
,数据序列需要左移3位(除数位-1),得到101001000
,接着使用如下方法进行计算(异或运算,相同取0,不同取1) :
得到最终的余数001
拼接在原数据序列101001
后面,得到CRC冗余校验码(101001 001
)。
例2:设生成多项式
P
(
x
)
=
x
4
+
x
+
1
P(x)=x^4+x+1
P(x)=x4+x+1 ,信息码为 101011
,求对应的CRC码?参考CRC循环冗余校验(计算机网络)
解析:通过多项式,得到除数为10011
,数据序列需要左移4位(除数位-1),得到1010110000
,接着使用如下方法进行计算(异或运算,相同取0,不同取1) :
CRC
冗余校验码如何检错和纠正错误:
用生成的CRC码除以生成多项式G(x)
所对应的的二进制数码,若余数为0,则信息码在传输过程中没有产生错误,数据正确。
吞吐量(数)和网络负载(百分比)的区别,jmeter之吞吐量 / 吞吐率 / TPS / 带宽及压力测试和负载测试及其区别
Note:
位示图的概念
Note:
嵌入式系统初始化过程
Note:嵌入式操作系统的特点:
存储管理之页式、段式、段页式存储 以及 优缺点,页式存储、段式存储、段页式存储
Note:
文件管理-索引文件结构
Note:
假设在采用索引节点管理的某文件系统中,磁盘索引块和磁盘数据块大小均为1KB
,每个文件索引节点有8
个地址项:iaddr[0]~iaddr[7]
,每个地址项为4B
,其中
iaddr[0]~iaddr[4]
为直接地址索引,每个直接索引地址指向一个磁盘数据块,共5
个磁盘索引块;iaddr[5]~iaddr[6]
为一级间接地址(的起始)索引,即每个一级间接地址索引指向一个磁盘索引块,该磁盘索引块可以划分成1024/4=256
个间接索引地址,每个间接索引地址指向1
个磁盘数据块,因此两个一级间接地址索引实际上间接指向了2 * 256 = 512
个磁盘索引块;iaddr[7]
为二级间接地址(的起始)索引(指向一级间接地址索引),即每个一级间接地址索引指向一个磁盘索引块,每个磁盘索引块又分成256
个一级间接地址,存放着二级间接地址索引,每个二级间接地址索引指向一个磁盘索引块,每个磁盘索引块又分成256
个二级间接地址,每个二级间接地址指向1
个磁盘数据块,因此对于该文件的地址项iaddr[7]
,最多可以指向256 * 256 = 65535
个磁盘数据块。由于每个磁盘数据块大小均为1KB
,因此该文件的最大长度是(5 + 512 + 65535)* 1KB
磁盘寻道调度算法(FCFS, SSTF, SCAN, CSCAN)
Note:
一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结(候选码(画图后)可以遍历所有属性), 数据库的规范理论
数据库范式 & 模式分解 详细介绍(1NF,2NF,3NF,BCNF,4NF), 数据库的规范理论
Note:
(A,B)
,A,B
→
\rightarrow
→ 非主属性E
,则非主属性E
完全函数依赖于(A,B)
(A,B)
,B
→
\rightarrow
→ 非主属性C,D
,则非主属性C,D
部分函数依赖于(A,B)
A
,存在A->BC
,B->D
,A->D
,则非主属性D
传递函数依赖于A
SLC
为(Sno - 学生号, Sdept - 部门, Sloc - 学生住处, Cno - 课程编号, Grade - 学生成绩)
(Sno,Cno)
,其中:
(Sno,Cno)
→
\rightarrow
→ 决定
→
\rightarrow
→Grade
,则非主属性Grade
完全函数依赖于(Sno,Cno)
Sno
→
\rightarrow
→ 决定
→
\rightarrow
→Sdept
和Sloc
,则非主属性Sdept
和Sloc
部分函数依赖于(Sno,Cno)
(Sno,Cno)
,其中:
Grade
完全函数依赖于(Sno,Cno)
Sdept
和Sloc
部分函数依赖于(Sno)
Sno
→
\rightarrow
→ 决定
→
\rightarrow
→ Sdept
和Sloc
,非主属性Sdept
→
\rightarrow
→ 决定
→
\rightarrow
→ Sloc
,因此存在Sno
→
\rightarrow
→ Sdept
,Sdept
→
\rightarrow
→ Sloc
,则非主属性Sloc
传递函数依赖于Sno
三种数据模型—层次模型、网状模型以及关系模型
Note:
Nosql
)。层次数据模型只能表示实体之间的1:n
的关系,不能表示m:n
的复杂关系。而网状模型结构复杂,使用不易,随着应用环境的扩大,数据结构越来越复杂,数据的插入、删除牵动的相关数据太多,不利于数据库的维护和重建。sql
)是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用二维表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。详解MySQL事务(超详细),Mysql的四个隔离级别是如何实现的
Note:
T1
和T2
, T1
读取了已经被 T2
更新(update
) 但还没有被提交(commit
)的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的( T2 update
→
\rightarrow
→ T1 read
→
\rightarrow
→ T2 rollback
).T1
和T2
,T1
读取了一个字段, 然后 T2
更新(update
)了该字段之后, T1
再次读取同一个字段, 值就不同了(T1 read
→
\rightarrow
→ T2 update
→
\rightarrow
→ T1 read
).T1
和T2
, T1
从一个表中读取了一个字段, 然后 T2
在该表中插入了一些新的行之后, 如果 T1 再次读取同一个表, 就会多出几行(T1 read
→
\rightarrow
→ T2 insert
→
\rightarrow
→ T1 read
)RU
):三个问题都不可以解决
RC
使用MVVC技术实现):可以解决脏读;
RR
):可以解决脏读和可重复读;
RR
读写操作和加锁逻辑和RC
相同,都是使用MVVC(多版本并发控制)技术实现RC
级别对数据的可见性是该数据的最新记录,RR
级别对数据的可见性是事务开始时,该数据的记录。TCP
)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流,每一条 TCP 连接只能是点对点的(一对一,单播)的传输层通信协议。TCP将用户数据打包成报文段,它发送后会启动一个定时器。UDP
)是一种不可靠的、无连接的协议,没有连接管理能力,不负责重新发送丢失或出错的数据消息,也没有流量控制,拥塞控制的功能。它面向报文,支持单播、多播、广播的交互通信。协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名
。http://www.dailynews.com.cn/channel/welcome.htm
中,www
为主机名,dailynews
为本地域名,com
为组织域名,cn
为最高层域名(表示中国)IPv6
和IPv4
两种协议,那么该主机既能与支持IPv4
协议的主机通信,又能与支持IPv6
协议的主机通信,则IPv6
和IPv4
节点可以通过双协议栈技术实现通信。IPv6
网络通过IPv4
骨干网络相连,如果要让 IPv6
节点和IPv4
网络 进行通信,必须使用隧道技术。IPv6
节点与IPv4
节点的通信时需借助于中间的协议转换服务器(翻译技术),此协议转换服务器的主要功能是把网络层协议头进行IPv6/IPv4
间的转换,以适应对端的协议类型。IPV6
(
2
128
2^{128}
2128)的地址空间是IPV4
(
2
32
2^{32}
232)的
2
96
2^{96}
296倍www.baidu.com
)
.com
域的顶级域名服务器;.com
的顶级域名服务器发出请求,返回baidu.com
权限域名服务器;baidu.com
权限域名服务器发送请求,得到了www.baidu.com
的IP地址。浅谈常见的七种加密算法及实现,参考加密,签名,token解释及场景分析,摘要算法和加密算法区别
Note:
摘要算法和加密算法是不同的:
token
验证过程)将明文处理成密文,密文作为签名用于比较验证,无法处理成明文。Token
也是基于签名的,是在服务器端和客户端进行发送的,比如说服务器用HMAC-SHA256
算法(信息摘要算法),加上一个密钥(加密算法), 对用户名的数据(通常对userId
)做一个签名,并将“数据 + 签名”作为token
保存在客户端的cookies
中。
在验证的时候,客户端通过cookies
向服务端发送token
,服务端会使用私钥对数据部分进行解密得到新的签名,并与原token
中的签名进行比较,如果相等则验证通过,如果不等说明数据已被篡改。参考加密,签名,token解释及场景分析,cookie、session与token的真正区别
RSA
是非对称加密算法;SHA-1
与MD5
属于信息摘要算法(不属于加密算法);RC-5
属于对称加密算法。
这些算法中SHA-1与MD5是不能用来加密数据的,而RSA由于效率问题,一般不直接用于大量的明文加密,适合明文加密的,也就只有RC-5
了。
对称加密、非对称加密、摘要算法介绍
Note:
RSA
、EIGamal
、背包算法
、Rabin
(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(Elliptic Curve Cryptography,ECC);DSA
数字签名(又称公钥数字签名), 将摘要信息用发送者的私钥加密,接收者只有用发送者的公钥才能解密被加密的摘要信息,也是属于公开密钥加密算法。DES
是典型的私钥加密体制,属于对称加密,不属于公开秘钥加密,所以本题选择D选项。什么是数字签名?(数字签名又称公钥数字签名)
Note:
IDEA
,DES
和RC4
算法都是对称加密算法(私钥加密体制),只能用来进行数据加密。MD5
算法是消息摘要算法,只能用来生成消息摘要,无法进行数字签名。RSA
算法是典型的非对称加密算法,主要具有数字签名和验证的功能。数字证书及CA详解
Note:
PPP与PPPoe
Note:
防火墙技术(包过滤)
Note:
Internet
安全和预警的方便端点。FTP
服务器中是否存在可写目录的信息。计算机病毒的6大特征
Note:
计算机病毒分类
Note:
office
相关文件,一般感染以doc
为后缀名的文件。DDOS - 分布式拒绝服务攻击
Note:
拒绝服务,会话拦截和修改数据命令为主动攻击,系统干涉为被动攻击。
网络安全管理(如何进行内防内控,强化访问控制策略:访问控制策略,网络权限控制策略等)
Note:
XP
强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。XP
,纪律性较弱,但其管理运作与团队产出相协调。SCRUM
)的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。Scrum
开发流程中的三大角色分别为产品负责人,流程管理员和开发团队,开发方式包括站立会议,任务看板,计划纸牌。A
通过传递标志变量参数(flag
,或者叫做控制变量),来控制模块B
执行某一个功能。A
直接访问模块B
的内部数据;一个模块不通过正常入口转到另一个模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。MTTF
和MTTR
分别表示平均无故障时间和平均修复时间,则可用公式MTTF / (1 + MTTF)
计算软件可靠性;MTBF/(1+MTBF)
可以用来度量可用性;1/(1+MTTR)
可以用来度量可维护性。参考MTTR、MTTF、MTBF详解->
表示导致):错误 -> 缺陷 -> 故障 -> 失效IBM
模型和基本COCOMO
模型为静态单变量模型Putnam
模型为动态多变量模型(软件方程和人力增加方程,适合70000行以上的项目)中级COCOMO
模型在基本模型中已计算的软件开发工作量的基础上,在用涉及产品、硬件、人员、项目和项目的15个成本驱动因素来调整工作量的估算。高级COCOMO
模型不但包括中级COCOMO
模型的所有特性,而且为上述15个因素在软件生存周期的不同阶段赋予了不同的权重。组件聚合原则(复用/发布原则,共同闭包原则,共同复用原则)
Note:面向对象设计的几大原则
JAVA实现23种设计模式,Java中常用的设计模式
Note:
组合模式(结构型;部分整体模式;依据树形结构来组合对象,用来表示部分以及整体层次)
Note:
面向对象分析的5个活动(识别对象,类定义与类继承,对象间的通信)
Note:
识别对象目的是为了定义类,而类可以分为三种:实体类、接口类(边界类)和控制类,所以一开始就需要对对象进行好好分析,接着组织对象(创建类,类继承),描述对象相互作用(传参或者设置为类属性)
UML中类之间的关系
Note:
类与类之间6种关系:依赖(带箭头的虚线),关联(不带箭头的实线),聚合(空心菱形,has a
),组合(实心菱形,contain a
),泛化 / 继承(空心三角形,实线),实现(空心三角形,虚线)(在UML中聚合和组合表示容易记错,这里用谐音来记:聚(ju 类似 zuo)空;组实(主食),因此转化成“做空,主食”来记;两者的强弱等级也容易记错,这里可以通过字典序j < z
,判断聚合的关联等级低于组合的等级)
聚合和组合的区别:两者都是整体和部分之间的关系,但在聚合关系中,成员对象可以脱离整体对象而独立存在,例如,学校与老师的关系;在组合关系中,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系
类与类之间的6种关系,按相互联系程度由强至弱依次为:继承/泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
依赖是通过类方法来调用,即其他类的对象通过方法参数与当前类交互;关联是通过类的实例化来创建,即对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时(类A
对象是类B
的成员变量),这两个对象之间为关联关系。关联关系分为单向关联和双向关联,在java
中:
A
当中使用了类B
,其中类B
是作为类A
的成员变量。A
当中使用了类B
作为成员变量;同时类B
中也使用了类A
作为成员变量。因此组合和聚合也属于关联,只不过组合和聚合强调类之间的主次关系(只能在类的设计阶段看出来,仅通过代码看不了),而关联没有。组合例子:人和人的生命;聚合例子:笔和笔芯;关联的例子:笔记本和鼠标;参考关联,聚合,组合三者之间的关系
A
的某个属性是类B
的一个对象,并且类A
对象消失时,类B
对象也随之消失,则类A
与类B
的关系应为组合关系。
UML
三种关系简化为继承(实现,泛化),关联和依赖,参考UML类图的依赖和关联详解(含代码)
UML之状态图
Note:
[tries<3]
和tries++
分别表示监护条件和转换,带有【】
表示限制条件,没带【】
的具体操作表示一个状态到另外一个状态的转换。时序图,时序图学习2_组成元素之角色和对象
Note:
UML图:活动图详细介绍(动作状态、活动状态、起始点、结束点、分支与合并、泳道和对象流)
Note:
软考必考题型之UML图形
Note:UML中提供了多种建模系统需求的图,体现系统的静态方面和动态方面。
C++中的public,protected,private继承机制 - (C++默认使用私有继承,三者区别在于 派生类会将父类的成员转换成那种类型 & 对象访问权限)
java的继承机制
Note:
java
默认使用公有继承,而没有c++
中的私有继承和保护继承。因此子类将父类的public
,protected
方法变成子类的public
,protected
方法,子类无法获得父类的private
方法。default
访问模式“。该模式下,只允许在同一个包中进行访问,访问权限仅次于private
。参数多态、包含多态、过载多态和强制多态,C++>多态,强制多态,参数类型多态,重载多态,包含多态(运行时多态)
Note:
其中在面向对象方法中,动态绑定是实现多态的基础(通过动态绑定机制,在调用子类对象方法或属性时,会选择调用子类还是父类的方法或属性),换句话说,运行时结合是动态绑定(泛化过程的实现),编译时结合是静态绑定。参考java的动态绑定机制(不是动态分配)(2019下半年40题)
参考2019下半年第18题,可以先求解关键路径(最长路径)确定里程碑节点,接着利用里程碑节点子图,计算"活动BE最多可以晚 ()
天开始而不影响工期"
比如关键路径为:A-B-F-J-L
和A-D-G-I-J-L
,那么计算BE
最晚推迟几天动工时可以只考虑B-F-J-L
和B-E-H-J
两个子图,发现(6+5)-(2+2+5) = 2
即为答案。
LL
,RR
,LR
,RL
,其中LL
表示新插入的节点位于根结点左孩子(L)的左子树(L)上。LL/RR/LR/RL
进行调整。LR
类型的非平衡可以先通过LL
调整方式,再通过RR
调整方式进行调整;RL
类型可以先通过RR
,再通过LL
进行调整。O(nlgn)
),常见排序算法的时间复杂度、空间复杂度、稳定性比较arr = [5 8 5 2 9]
,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。参考选择排序为什么是不稳定的?O(1)
,但是时间复杂度会提高。O(N*M)
,其中N为数据个数,M为数据位数3,7,6,5,4
3,6,4
,7,5
排序,得到3,4,6
和5,7
3,4,6,5,7
依次进行排序1,45,32,23,22,31,47,24,4,15
,假设按十位数分为5个桶
1,4 | 15 | 23,22,24 | 32,31 | 45,47
1,45,32,23,22,31,47,24,4,15
,由于最大只有十位数,因此可以进行两次桶排序:
1,31 | 32,22 | 23 | 24,4 | 45,15 | 47
,得到序列为1,31,32,22,23,24,4,45,15,47
1,4 | 15 | 22,23,24 | 31,32 | 45,47
,输出即为有序序列1,45,32,23,22,31,47,24,4,15
,策略是选择每个分组中的首元素作为基数,每一趟执行顺序为:假设左i
右j
,循环依次
←
\leftarrow
←(j--
)找比基数小的值并与i
替换,
→
\rightarrow
→(i++
)找比基数大的值并与j
替换,每一趟结束会得到{比基数小
},基数,{比基数大
}
1,45,32,23,22,31,47,24,4,15
47,24,45,23,22,31,32,1,4,15
,接着将堆顶47
与堆底15
进行交换。[2,6]
和[4,8]
),需要开辟一个O(n)
的数组,以及2个指针来完成两个子区间的归并)n + 2e
,邻接矩阵的存储空间为
n
2
n^2
n2。因此邻接矩阵多用于边多的稠密图;而邻接表多用于边少的稀疏图。最小生成树算法:
Prim:从任意顶点出发选择与当前顶点集最近的一个顶点(记忆方法:prim
和 prince
相似,prince
有家族,所以是prim
是顶点集算法)
构建最小生成树的步骤:
在生成树的构造过程中,图中n个顶点分属两个集合:已落在生成树上的顶点集合U
和 尚未落在生成树上的顶级集合V-U
,则应在所有连通U
中顶点和V-U
中的顶点的边中选取权值最小的边。
Kruskal:从边开始,把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并(记忆方法:Kruskal
中有ru
,联想ruler
,所以是基于边的贪心算法)
构建最小生成树的步骤:
T = (V, 空 )
,即最小生成树T是图G的生成零图。TE
中,否则舍弃。直至TE
中包含n-1
条边为止。两者均采用贪心思想。
单源最短路径(假设以 v 1 v_1 v1为起点,求 v 1 v_1 v1到各顶点的最短路径)vs 任意点最短路径:
Dijkstra算法是单源最短路径算法:把网中所有的顶点分成两个集合S和T、S集合的初态只包含顶点v0, T集合的初态为网中除v0之外的所有顶点。凡以v0为源点,已经确定了最短路径的终点并入S集合中(记忆方法:Dijkstra
中有Tesla
(斯特拉 = 特斯拉),联想到开车寻路,即两点的最短路径问题,可以和prim
区分开)
Floyd算法是任意点最短路径算法:核心代码就有五行,主要用公式
m
i
n
(
D
i
s
(
i
,
j
)
,
D
i
s
(
i
,
k
)
+
D
i
s
(
k
,
j
)
)
min(Dis(i,j),Dis(i,k)+Dis(k,j))
min(Dis(i,j),Dis(i,k)+Dis(k,j))来不断优化带权邻接矩阵,最后得到矩阵就是每对顶点之间的最短距离了
Dijkstra算法采用贪心思想,而Floyd算法采用动态规划思想。
有限自动机;正规式->NFA->DFA->最小化DFA->词法分析器
Note:
M=(S,Σ,move,s0,F)
S
是有限个状态的集合Σ
是有限个输入字符(包括ε)的集合move
是一个状态转移函数,move(si,ch) = sj
表示当前状态si
下若遇到输入字符ch
,则迁移到状态sjs0
是唯一的初态F
是终态集,它是S
的子集,包含了所有的终态语法分析器的输入
Note:
词法分析是编译过程的第一阶段,其任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个的“单词”符号(2019下半年20题中,词法分析输出的结果为 记号流,不是字符流(Java Reader
)。
完成的工作:检测非法字符、单词拼写错误等
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”、“语句”和“程序”等。
完成的工作:标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
(静态)语义分析阶段主要检查源程序是否包含语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。
目标代码(机器码)生成是编译器工作的最后一个阶段(动态语义分析)。这一阶段的任务是把中间代码(汇编语言) 变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
完成的工作:动态语义错误,包括陷入死循环、变量取零时做除数、引用数组元素下标越界等错误等。
从原理上讲,对源程序进行语义分析之后就可以直接生成目标代码,但由于源程序与目标代码的逻辑结构往往差别很大,特别是考虑到具体机器指令系统的特点,要使翻译一次到位很困难,而且用语法制导方式机械生成的目标代码往往是繁琐和低效的,因此有必要设计一种中间代码,将源程序首先翻译成中间代码表示形式,以利于进行与机器无关的优化处理。
由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性。常用的中间代码有后缀式、三元式、四元式和树(图)等形式。中间代码并不依赖于具体的机器。
源程序不可避免地会有一些错误,这些错误大致可分为语法错误和语义错误。
上下文有关文法(1型文法)/ 上下文无关文法(2型文法),文法和正规式(四种文法)
Note:
上下文有关文法(1型文法):此文法对应于线性有界自动机,它是在0型文法的基础上增加了一条对于每一个a->b
,都存在|a|<=|b|
,这里的|b|表示的是b的长度,而不是绝对值。即由Ab->B
不属于1型文法,而A->Bba
则属于1型文法。即左侧可以既有终结符也有非终结符。
上下文无关文法(2型文法):左侧只含有一个非终结符,在推导式的过程中,左侧会被完全替换掉,只起到一个中间的作用。如A->Ba
符合2型文法要求,如Ab->Bab
不是2型文法,因为Ab
不是非终结符。
正规文法(3型文法):它对应于有限状态自动机,它是在2型文法的基础上满足:A->a|aB
(右线性)或A->a|Ba
(左线性)。如果有A->a
,A->aB
,B->a
,B->cB
则符合3型文法的要求。但是A->ab,A->aB,B->a,B->cB
或A->a,A->Ba,B->a,B->cB
则不符合3型文法的要求。正规文法要求,不能够推导出两个终结符,而且左线性和右线性只能使用一种,不能够同时出现。
大多数程序设计语言的语法规则用 上下文无关文法 来描述。
什么是脚本,脚本语言?
Note:
编译与反编译详解,C语言编译过程(预处理,编译(汇编码),汇编(机器码),链接)
Note:
可视化程序设计的基本理论
Note:
Visual Basic
、Visual C++
、Visual C#
、中文Visual Foxpro、Borland公司的Delphi
等。强类型&弱类型语言、动态&静态语言有什么区别,强类型语言和弱类型语言的区别
Note:
java
,python
;python
代码如下:b = 3
c = 3.1415926
print(b + c)
---
6.1415926
a = "123"
b = 3
print(a + b)
---
TypeError: can only concatenate str (not "int") to str
js
,php
;js
代码如下:var a = "123"
var b = 3
console.log(a + b)
---
1233
python
);而静态类型语言在编译期间就去做数据类型检查(java
,c++
)。20Hz ~ 20KHz
。CIF
是Common Intermediate Format的简称,即常用的标准化图像格式。在H.323协议簇中,规定了视频采集设备的标准采集分辨率CIF=352×288像素。150DPI
的扫描分辨率扫描一幅3×4
英寸的彩色照片,得到原始的24
位真彩色图像的数据量是
3
∗
4
∗
150
∗
150
∗
24
/
8
=
810000
3 * 4 * 150 * 150 *24 / 8 = 810000
3∗4∗150∗150∗24/8=810000 字节44.1 * 16 * 2 = 1411.2kb/s
Note:下午案例分析题共5道题,每题15分。算法题变化性较大,个人建议要保证1,2,3,5题的正确性,争取每题拿到12分以上。
数据流图中存在3种数据流向:
1)实体(E
)
→
\rightarrow
→ 加工(P
)
→
\rightarrow
→ 存储(D
)
2)实体(E
)
←
\leftarrow
← 加工(P
)
←
\leftarrow
← 存储(D
)
3)加工(P
)
→
\rightarrow
→ 加工(P
)(例如2021上半年案例分析:P1
(车辆识别)
→
\rightarrow
→ 车辆入场信息
→
\rightarrow
→ P5
(道闸控制) )
不存在E
→
\rightarrow
→ E
,D
→
\rightarrow
→ D
,D
→
\rightarrow
→ E
,E
→
\rightarrow
→ D
的数据流,必须有P
加工的过程。
数据流图的题目经常会问存储(D)的名称,最简单的解题规范:“直接使用数据流传入 或 传出的名称” + “信息表”,比如2019年上半年题1:
其中D2
为学生信息,D3
为校园场所信息;如果想要获得更准确的D
的名称,可以在"数据流缺失问题求解"上进行修补。比如2021年上半年题1:D2
初定为会员信息表,后来确定为两张表:车位信息表和车主余额表。
在问数据流图缺失情况时(补充图中缺失的数据流及其起点和终点),即分析数据流图中的 数据流向 是否完整(是否满足上面2种),如果不完整,再判断该数据流图是否存在“分布式”存储:
D2
、D1
的数据流向虽然不完整,但是是“分布式”存储,因此缺失的数据流从D4
、D3
开始分析:D2
。如何对步骤2中题干内容的提炼,决定着我们是否能找到缺失数据流的关键,以2021年上半年案例分析为例,题干内容和数据流图如下,假设我们已知:E1
:汽车,E2
:车主,E3
:支付系统,E4
:管理人员,E5
:道闸控制系统;D1
:停车记录表,D2
:用户或车主账号储存余额表/会员信息表,D3
:车位信息表/基础信息表。
1、信息维护。管理人员
E4
对车位(总数、空余车位数等)计费规则等基础信息D3
进行设置。
2、会员注册。车主E2
提供手机号、车牌号等信息D3
进行注册,提交充值信息D2
(等级、绑定并授权支付系统进行充值或交费的支付账号),不同级别和充值额度享受不同停车折扣点。
3、车牌识别。当车辆E1
进入停车场时,若有(空余车位数大干1),自动识别车牌号,当车主开车离开停车场时,识别车牌号P1
后进行道闸控制P5
P1
,计费成功P3
后,请求道闸控制P5
。
4、计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主E2
是会员,提示停车费用P2
:若储存余额够本次停车费用,自动扣费,若储值余额P3
,更新余额D2
D2
不足,自动使用授权缴费账号请求支付系统E3
进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统E3
自助交费P3
,获取支付状态。
5、道闸控制。根据道闸控制P5
请求向道闸控制系统E5
发送若干放行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,(道闸控制;P5
)将车牌号及其入场时间信息存入停车记录,修改空余车位数D3
(道闸控制。当因道闸重置系统出现问题(断网断电或是故障为抬杠等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,P5
)对出场车辆更新停车状态,修改空余车位数D3
系统,确保车辆有序出入停车场。P5
向管理人员发送异常告警信息,之后管理人员E4
安排故障排查处理P4
问:缺失数据流及其起点和终点?
答题思路:已完成1~2题对实体(E
)和存储(D
)的补充之后,先从题干中圈出并标记每个实体E
,加工P
和存储D
,然后再通过标记去逐一检查那条数据流丢失了,一般丢失情况包括一开始介绍的3种数据流情况。如上面删除线表示:
标准答案为:
P3
到D2
:余额(若储存余额够本次停车费用,自动扣费,更新余额)P5
到D3
:车位数(修改空余车位数)P1
到P5
:车辆入场信息P4
到P5
:故障排查处理在问数据流“学生状态”,“学生信息” 的组成时,其实是在问这些数据在数据库中用哪些字段进行存储,此时需要结合题意和数据流图进行分析。
如果要求使用结构化语言对业务需求进行分析时,解题步骤为:
COPY
整个句子。IF
,WHILE
:比如2021上半年1题中,车辆入场和出场是想对的概念,因此是IF
;比如2020下半年1题中,图像采集是一个WHILE
过程。latex
代码格式,参考Latex写伪代码)书写,常见语法包括:while(...) do {xxx} end while
,if(...) then {xxx} end if
缺陷检测。根据检测模型和检测质量标准对图像采集所收到的产品检测信息中所有图像进行检测或所有图像检测合格。若一个产品出现一张图像检测不合格,就表示该产品不合格,对不合格产品,其检测结果包括,产品型号和不合格类型。
参考答案:
WHILE(接收图像)DO{
检测所收到的所有图像;
IF(出现一张图像检测不合格)THEN{
返回产品不合格;
不合格产品检测结果=产品星号+不合格类型;
}END IF
}END WHILE
如果一名培训师可以讲授多门课程、一门课程可由多名培训师讲授,如果关系模式设计如下:
则关于讲授关系的主键为 (课程号,员工号);讲授关系的外键为 (课程号,员工号),即这两个字段分别对应 员工表 和 课程表的主键。(2019下半年第二题)
如果A->BC,B->D
,则存在传递依赖A->D
;比如关系模式设计如下:
题目给定不同岗位设置不同的基本工资,因此员工号(主键A)可以决定岗位号(B),岗位号(主键B)可以决定基本工资(C),则员工与基本工资之间存在传递依赖。(2019下半年第二题)
比如问某个字段(所属公司代码,投资方编号)的完整性约束关系(2019年上半年第二题),则把该字段在哪个表中作为外键,主键都罗列出来,比如:
- 员工 - 外键:所属公司代码
- 项目 - 外键:投资方编号
- 项目 - 主键:(项目编号,投资方编号)组合
有时要注意题干中给出的字段信息不全,主键/外键信息可能没有明确在题干中显示,需要自己归纳出一个字段名(比如2020年下半年第二题),题干如下:
业务部关系模式需要记录的信息包括业务部的编号、名称、地址、电话和分公司编号,业务部编号唯一标记分公司关系模式中的每一个元素,每个业务部各有一名主管负责业务部的管理工作,每个业务部有多名职员,每个职员只能来源于一个业务部。
在确定业务部关系模式中的主外键时,业务部的主键很容易得到,即业务部的编号,但业务部的外键不单单只有分公司编号,还有主管编号(题目中未明确给出,建议参照第二问的ER
图归纳得到)。
如果题目中问表设计是否合理时,可以从数据是否存在冗余、插入异常、更新异常、删除异常等问题考虑。比如2020下半年第二题问:
职员关系模式需要记录的信息包括职员号、姓名、所属业务部编号、岗位、电话、家庭成员姓名和成员关系。在职员关系模式中,假设每个职员有多名家庭成员,那么职员关系模式存在什么问题?应如何解决?
在原来的职员关系表中,主键为(职员号,家庭成员姓名),有些非主属性存在部分依赖于职员号,即该表符合1F
但不符合2F
。这里可以将字段(职员号,家庭成员姓名)从表中抽离出来,并共同构成主键。
参考答案为:
对职员关系模式进行拆分,职员1(职员号、姓名、岗位、所属业务部编号,电话);职员2(职员号,家庭成员姓名,关系)。这样非主属性完全依赖于码(
2F
)。
include
:基用例是一个抽象的用例,不能单独作为一个完整用例,需要配合子用例使用extend
:基用例是一个扩展点,子用例在执行时必须先激活基用例;generalize
:子用例继承基用例的所有属性和通信方式, 与extend
不同的是,基用例并不是一个扩展点,子用例在执行时不需要先激活基用例;类图是软件的蓝图,用于详细描述系统内各个对象的相关的类,以及这些类之间的静态关系。设计类是已经完成了规格说明并且达到能够被实现程度的类。
类组件:类名 - 如果是抽象类需要斜体
类属性:可见性 名称:类型 [=缺省值]
+
(public),–
(private), #
(protected) ~(package)
六种类间关系(耦合度由低到高):依赖关系use-a
、关联关系has-a
、聚合关系(has a
)、组合关系(contain a
)、泛化关系is a
、实现关系(类与接口)
类可以分为三种:实体类、接口类(边界类)和控制类。
实体类是应用领域的核心类,一般用于保存系统中的信息以及提供针对这些信息的相关处理行为,主要负责数据和业务逻辑;
接口类(边界类)是系统内对象和系统外参与者的联系媒介,负责和用户进行交互,即用户界面;
控制类主要是协调实体类和边界类之间的交互。
include
基用例为抽象用例;extend
基用例为扩展点;generalize
基用例被子用例继承)include
,extend
和generalize
关系的内涵。
include
:包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例共享。因为子用例被抽出,基用例并非一个完整的用例,所以include
关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>
),箭头从基用例指向子用例。如2021上半年题3,文字描述和用例图如下:
3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收贷人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。
答:因为U1
作为基用例,即抽象的用例,需要配合U2
子用例一起使用,由题干可知U1
:确认处方,U2
:支付
extend
:扩展关系,表示对基用例的扩展。基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend
的基用例中存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。extend
关系在用例图中也使用带箭头的虚线表示(在线上标注<<extend>>
),但箭头是从子用例指向基用例。generalize
:泛化关系,是一种继承关系。子用例将继承基用例的所有行为关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用实线空心箭头表示,箭头方向从子用例指向基用例。U3
,U4
继承于U2
(支付) ,而U1
(确认处方) 又包含着U2
(支付) ,因此U3
、U4
分别为微信支付、支付宝支付。
- 生成器模式:2017上,2018上
- 桥接模式(无类图):2017下
- 状态模式:2018下
- 策略模式:2019上
- 观察者模式:2019下
- 组合模式:2021上
C++/Java
二选一),利用接口与实现类、抽象类与子类的关系,直接进行代码填充即可(试了2017~2021
的设计模式题,亲测有效)。
abstract
等Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。