文章目录
- 2022年下半年软考软件设计师综合知识真题
- 第1章 计算机系统基础知识(12/38)
- 计算机软件知识1-6/6
- 哲学概念及收敛思维:
- 是Python程序语言中,处理异常的结构集合,和这个集合之外的结构的区分,考Python集合之外的结构
- 哲学概念及收敛思维:
- 语法分析类别中,对递归子程序分析的哲学了解,唯一分析顺序,考最大集合分析到最小集合(之前有个题目,考从大集合到小集合的唯一动作,是拆解)
- 3哲学概念及收敛思维:
- 关系代数表达式中,选择符号的表达格式,唯一'值'输入,考唯一(表)输出,唯一σ 数字第几列的输出
- 4哲学概念及收敛思维:
- 关系代数表达式中,自然联接符号的自带投影,考对联系表EP进行自然联接⋈,考对Pσ2选择表进行投影π的元素输入
- 哲学概念及收敛思维:
- 编译器工作流程和输出产物的适应性集合特性的哲学了解,大步流程和分步流程,机器码适应集合唯一,考大步流程,考适应集合唯一
- 哲学概念及收敛思维:
- **同一进程中,V,P互斥,中间一个P,考两头都是V**
- 总体图解如下,就中间这个,要多记忆一下,前后两个转换思路之后,都是简单的收敛思路
2022年下半年软考软件设计师综合知识真题
第1章 计算机系统基础知识(12/38)
计算机软件知识1-6/6
● 48.在 Python3,()不是合法的异常处理结构。
A. try… except…
B. try…except…finally
C. try… catch…
D. raise
注意,不是合法的,也就是非法的处理异常的结构
哲学概念及收敛思维:
1、Python中,用“try…except”
“try” 块中放置可能会引发异常的代码。当 “try” 块中的代码引发异常时,程序会跳转到对应的 “except” 块中执行异常处理代码
“try…except…finally”
“try” 块用于包含可能引发异常的代码,“except” 块用于捕获并处理异常。而 “finally” 块无论 “try” 块中是否发生异常,都会执行。
“raise”
在 Python 中用于主动引发异常,它也是 Python 异常处理机制的一部分。
是Python程序语言中,处理异常的结构集合,和这个集合之外的结构的区分,考Python集合之外的结构
在其他语言如 Java 中,使用 “try…catch” 来处理异常
22.对高级语言源程序进行编译或解释过程中需进行语法分析,递归子程序分析属于()的分析法。
A. 自上而下
B. 自下而上
C. 从左至右
D. 从右至左
哲学概念及收敛思维:
1、左,右,是扫描输入串的方向描述,不是语法分析方法的类别,排除C,D
2、递归子程序法又叫递归下降分析法,排除B
语法分析类别中,对递归子程序分析的哲学了解,唯一分析顺序,考最大集合分析到最小集合(之前有个题目,考从大集合到小集合的唯一动作,是拆解)
一、总览:编译流程中的语法分析
编译过程核心步骤
词法分析 → 将字符流转换为单词(Token)序列
例:a = 3 + 5
→[ID(a), OP(=), NUM(3), OP(+), NUM(5)]
语法分析 → 检查Token序列是否符合语法规则,生成抽象语法树(AST)
例:生成树状结构表示赋值语句二、语法分析的核心任务
- 核心目标
验证Token序列是否遵循编程语言的语法规则(如变量声明、表达式结构、控制流结构等)。
语法分析 相当于语文老师检查句子结构是否正确。
编程语言:
if
语句需有条件和代码块三、递归子程序分析法的本质
- 方法分类
- 自上而下分析(Top-Down Parsing):
从语法规则的最顶层开始(如“程序→函数→语句→表达式→项”),逐步展开推导。
特点:类似拆解俄罗斯套娃,从外到内解析结构。
代表方法:递归下降分析法(Recursive Descent Parsing),即递归子程序法。
- 类比现实:类比成写文章,更加形象贴切
- 如同写文章先列大纲(顶层结构),再填充章节(子结构),最后写段落和句子(底层细节)。
- 递归子程序法就是按照大纲逐层细化展开的过程。
3哲学概念及收敛思维:
1、“005”,是员工号的其中一个值,员工号在关系E中,排除C,D,,在关系P中不可能选择到“005”,括号中表示表,肯定不是(P),单引号表示选择什么’005’
2、员工号,是关系E的第一个属性,选择符号后面的就是按照顺序选择第个属性的表达式形式,排除A
关系代数表达式,格式是 选择符号σ 第几列的数字 = ‘005’ (E)
(操作是选择)(查都是查第几列) (你要查什么值) (你要查哪个表)
(目的是查询) (或者属性名) (首先应该默认这个表有这个属性,不然肯定是空)
(其次,这个值,可以查得到,也可以查不到,这是正儿八经地空)
(符号σ英文为 sigma /ˈsɪɡmə/ 大写是 Σ)
关系代数表达式中,选择符号的表达格式,唯一’值’输入,考唯一(表)输出,唯一σ 数字第几列的输出
4哲学概念及收敛思维:
1、注意,查询符号σ,执行之后,相当于生成了一个新的表,表中只有一行数据元素
2、
步骤1:明确关系属性
- 员工关系E:员工号(1)、员工名(2)、部门名(3)、电话(4)、家庭住址(5)。
- 工程关系P:工程号(1)、工程名(2)、前期工程号(3)。
- 参与关系EP:员工号(1)、工程号(2)、工作量(3)。
员工号(σ1)的值’005’
工程名(σ2)的值’虎头山隧道’
上一问σ1 = ‘005’ (E) 已经筛选出了,员工号(1)的值’005’,同时包括员工号(1)、员工名(2)、部门名(3)、电话(4)、家庭住址(5)的数据元素的表Eσ1
员工号(1) | 员工名(2) | 部门名(3) | 电话(4) | 家庭住址(5) |
---|---|---|---|---|
005 | (此处假设为空或待补充具体姓名) | (此处假设为空或待补充具体部门名) | (此处假设为空或待补充具体电话) | (此处假设为空或待补充具体住址) |
然后用σ2 = ‘虎头山隧道’ § ,筛选出,工程名(σ2)的值’虎头山隧道’,同时包括工程号(1)、工程名(2)、前期工程号(3)的数据元素的表Pσ2
工程号(1) | 工程名(2) | 前期工程号(2) |
---|---|---|
(假设值hu) | 虎头山隧道 | (假设值) |
3、题目需要的属性是,
①E的1,2,3,注意,员工号
②P的2,和1,注意这里P还是需要工程号(1),因为EP表的第2列,是根据工程号连接P的,两个后面要合并数据
- ③EP的1,2,3(用⨝,自然连接时,重复的公共列会省略,所以无需担心重复)
员工号(1) | 工程号(2) | 工作量(3) |
---|---|---|
005 | (假设值hu) | (假设值hugong) |
(假设值) | 非hu | (假设值) |
先按照要求的属性进行切分,也就是投影
(投影 π 小写)
- ① π1,2,3 ( Eσ1 ),得到π1,2,3 Eσ1,
注意这里,查询的σ,并不会损害属性的完整性,所以在π中,仍然需要对1、2、3进行切分,任何时候π都可以对所有属性进行切分,这和查询σ基于哪个属性没有关系
员工号(1) | 员工名(2) | 部门名(3) |
---|---|---|
005 | (此处假设为空或待补充具体姓名) | (此处假设为空或待补充具体部门名) |
- ②π1,2 ( Pσ2 ),得到π1,2 Pσ2
工程号(1) | 工程名(2) |
---|---|
(假设值hu) | 虎头山隧道 |
③,EP的3,其实仍然可以直接投影,切掉3,来得到,但是切掉之后,也要进行自然连接的,多此一举,这里考的就是直接进行自然联接
π1,2 Pσ2 ⨝ EP
(⨝,自然连接Natural - join)
两张表公共列是,工程号
公共列中,查询值相同的数据元素,这是对能查询到的公共列的数据元素进行扩大!公共列只保留一次,所以说是扩大!!
相当于指定了查询后面的列,就是公共列!
查询后面的值,就是所有两张表相等的值!
- 记为⨝工程号
工程号(1) | 工程名(2) | 员工号(3) | 工作量(4) |
---|---|---|---|
(假设值hu) | 虎头山隧道 | 005 | (假设值hugong) |
必须得先有公共列,数据元素才能进行扩大!!!
4、
此时⨝工程号,和π1,2,3 Eσ1,也有公共列了,就是员工号
此时就能进行扩大数据元素操作了!!!!!!
⨝工程号 ⨝ π1,2,3 Eσ1 ,
记为 ⨝员工号,这个最终的公共列,是得益于EP表本身的,员工号(1),所以难怪EP表,不要剪切属性,都放出来,直接用⨝的去重效果,就达到了π的剪切效果!同时也有了查询的影子,最终效果就是能扩大元素集合!!!!!!!!!
工程号(1) | σ工程名(2) | σ员工号(3) | 工作量(4) | 员工名(5) | 部门名(6) |
---|---|---|---|---|---|
(假设值hu) | 虎头山隧道 | 005 | (假设值hugong) | (此处假设为空或待补充具体姓名) | (此处假设为空或待补充具体部门名) |
最终得到的,就是2个输入的属性值,得到4个输出的属性值
5、
题干中的,π2,3,5,6( ⨝员工号 ),从最后的大数据元素集合表中,切4个属性出来,列的顺序不一样,应该是我合并的顺序的关系,影响不大,总之是切4个属性出来
表达式表示就是:
π2,3,5,6 (
(
π1,2 ( σ2=′虎头山隧道′(P)
)
⋈EP
)
⋈ π1,2,3 ( σ1=′005′(E) )
)
6、最后来看看答案,
$$
题目给出的表达式是:
π
2,3,5,6
(π
1,2,3
(问题1)⋈(问题2) )
$$
答案就是上面一整个:
(
π1,2 ( σ2=′虎头山隧道′(P)
)
⋈EP
)
6.1、最后肯定是和EP自然联接,排除B,C
6.2、切Pσ2这个表的,哪两个属性,根据题目需要,不需要属性3,排除有π2,3的A
6.3、选D
关系代数表达式中,自然联接符号的自带投影,考对联系表EP进行自然联接⋈,考对Pσ2选择表进行投影π的元素输入
21.编译器与解释器是程序语言翻译的两种基本形态,以下关于编译器工作方式及特点的叙述中,正确的是()。
A.边翻译边执行,用户程序运行效率低且可移植性差
B.先翻译后执行,用户程序运行效率高且可移植性好。
C.边翻译边执行,用户程序运行效率低但可移植性好
D.先翻译后执行,用户程序运行效率高但可移植性差
哲学概念及收敛思维:
1、编译器翻译整本书,先翻译后执行,并且这样执行时的特点,必然是运行效率高,前期工作一次性做完了,后续工作肯定任务量小了,排除A,C
2、编译器针对 x86 架构的 CPU 生成的机器码,在 ARM 架构的 CPU 上可能无法运行,不同架构指令集不同,移植性差,排除B
- 机器码依赖特定硬件和操作系统:不同CPU的指令集不同(比如Intel和苹果M1芯片),不同操作系统的接口也不同。
- 例子:
- 你在Windows电脑上编译了一个游戏(生成.exe文件),这个文件在Mac电脑上直接打不开,必须用Mac版的编译器重新编译一次。
编译器工作流程和输出产物的适应性集合特性的哲学了解,大步流程和分步流程,机器码适应集合唯一,考大步流程,考适应集合唯一
A. V(S1)V(S2)和 P(S2)P(S3)
B. V(S1)P(S2)和 V(S3)P(S4)
C.V(S1)V(S2)和V(S3)V(S4)
D. P(S1)P(S2)和 V(S2)V(S3)
哲学概念及收敛思维:
1、先倒着看找线索,P5中,已经先有P操作了,
⑤肯定是V操作
2、那么⑥,肯定是P操作
3、那么P1之后的,肯定是V操作,注意,这里就是V,V,要输入两个量,排除B,D
4、那么②,前面有个P(S1)操作,①中的,肯定有个是V(S1)了
P2之后的,肯定是V操作,注意,这里也是V,V,要输入两个量,排除A
选C
同一进程中,V,P互斥,中间一个P,考两头都是V
是通过这个唯一的答案,知道了①②,知道了输入是S1,S2,S3,S4,才能反推后面的题目!!!
A. V(S3)和 V(S6)V(S7)
B. V(S3)和 V(S6)P(S7)
C.P(S3)和 V(S6)V(S7)
D.P(S3)和P(S6)V(S7)
推理步骤:
第一、P1中,V(S1)是箭头驱动P2,初始值0;从P2有个P(S1)能够印证,这不就是这个问的考点的输入(P就是回应上一个主体,我执行了,所以用P进行验证)
V(S2)是箭头驱动P3,初始值0;从P3中有个P(S2)能够印证
那么P3中还有个P(S?)肯定是P2的V(S?)
第二、P2中,V(S3)是箭头驱动P3,初始值0
V(S4)是箭头驱动P4,初始值0,从P4中有个P(S4)
那么V(S?),肯定就是V(S3),那么P3中的,就是P(S3),这就是③,排除第二问的A,B
第三、P3中,V(S5)是箭头驱动,唯一的一个P5,P5中找到验证,有一个P(S5)
那么P5中的P(S6)肯定就是P4的
那么P4必定有一个V(S6)
第四,P4中,④肯定是V(S6),并且这个是驱动P5的,排除第二问的D
那么,还有个V(S??),肯定是驱动P6的,在P6中是P(S??)
选C
到这里,第二个问题,因为C的答案确定了,继续作为输入,回答第三个问题
A. V(S6)和 P(S7)P(S8)
B. P(S8)和 P(S7)P(S8)
C.P(S8)和P(S7)V(S8)
D. V(S8)和P(S7)P(S8)
进一步推理步骤:
第四中的疑问:V(S??),根据答案,就是V(S7),那么P6中的,就是P(S7),这就是⑥
并且⑥肯定是P,P,排除第三问的C
P5中,⑤里面唯一一个V,并且这里也只剩一个S8了,所以⑤就是V(S8),排除A,B
选D
总体图解如下,就中间这个,要多记忆一下,前后两个转换思路之后,都是简单的收敛思路
【【【【【【【【【【【【【【【【【【【【【【【【】】】】】】】】】】】】】】】】】】】】】】】】
简单例子理解P,V操作
用Fa -Fb表示工厂进程,Cc-Cd 表示消费者进程。前趋图如下:
Fa (工厂生产)-----> Fb(工厂送到商店)-----> Cc(消费者到商店取商品)-----> Cd(消费者消费完商品)
本身是对量的变化的控制,生产,消费,运输,都会产生量的变化,所以是一个进程结点,能够加以控制
量的变化,是针对于主体,这里只有两个主体,因为F,工厂,会对总量增加量,C,消费者,会对总量减少量
中间的商店,只是转移而已,对总量并不会有变化
注意,所谓的量的增加,减少,是针对主体的,也就是F,和C的
1、定义信号量:
- 定义一个信号量
S1
,初值为 1 。信号量S1
用于表示商店是否有空闲空间(值为 0 表示有空闲空间,主体F能够生产,值为 -1表示无空闲空间,主体F不不能生产了) - 定义另一个信号量s2,初值为0,用于表示商店是否有货物(值为1,表示有货物,主体C能够取,值-1,表示无货物,主体C不能取了)
所以说s1,和s2,是针对不同主体的一体两面,减法操作的初始值,肯定都是1
2、
2.1、Fa动作,对主体工厂来说,会增加量,所以要用减法操作加以记录,P(s1)
工厂生产产品前, 先进行减法操作,对信号量s1减去1
s1的值,为0,说明商店已满,工厂生产进程会被阻塞等待;
- 也就是Fa继续执行的集合是(s1的值为0、1、2、3…n)
(s1初始值为1,Fa执行1次,本质就是做一次减法运算,Fa能执行几次,就是能做几次减法运算,值就不再集合中了,做1次就不再了,就不能再执行Fa这个减法运算了
商店是否会满,当然会决定工厂F要不要继续生产,所以s1的本质,就是商店空余库位,库位初始是1,工厂生产之前先做减法运算,值不在s1集合中,Fa不执行,第一次Fa执行,值为0,可以执行,第二次Fa继续执行,值为-1,Fa不能执行)
2.2、Fb动作,会减少主体工厂的量,所以执行加法操作,V(s2)
值为1了,Fb继续执行的集合是(s2的值为1、2、3…n)
2.3、Cc动作,会增加主体C,消费者的量,用减法运算,P,此时输入要为多少
其实谁为1,就输入谁,s1已经是0了,肯定不能是它,s2正好变成1了,
所以P的输入值是s2=1,输入s2刚好能让Cc执行一次
减法运算一次之后,s2=0
- 继续执行Cc的集合是(s2的值为0、1、2、3…n)
2.4、Cd动作,会减少主体C的量,用加法运算,V,此时输入是多少
此时s1经过P运算为0,s2经过先V后P计算,不变,仍然为0
那么输入谁呢
因为,肯定输入s1
s1=1,继续执行
那么Cd继续执行的集合是(S1的值为1、2、3…n)
不妨如果先看看执行主体C的进程的情况
3.1、先执行Cc,P减法运算
s2=-1了,直接阻塞Cc
所以s2的-1,表示商店中无货,也就是一体两面,即代表了有库存空位
如果工厂F执行两次
4.1、先执行Fa,P减法运算
s1=0,继续运行
4.2、执行Fb,V加法运算
s2=1,继续运行
4.3、再执行Fa,P减法
s1=-1,直接阻塞,不能继续运行
也就是说,s2到不了2
【【【【【【【【【【【【【【【【【【【【【【【【】】】】】】】】】】】】】】】】】】】】】】】】
或者换一个更抽象的角度来理解,不管具体的P,V对s1,s2值的影响
整体来看,其实整个流程要完整跑一遍,首先要保障最后的环节是通畅的,不能堵,所以实际上Cd把冰箱中的物品消耗完,是第一步的隐形前提
所以V操作,可以看成是唤醒下一步进程
所以
第一步,C结束的步骤Cd,要通过V,唤醒Fa,传递的量,记为s1,不管这个量的具体值如何运算,总之它就是告诉工厂F,你可以开工了
V的作用,就是通知后续主体,你可以开始执行了
第二步,Fa,用P操作,表示我收到了,我执行了
第三步,F结束的步骤,Fb,也要唤醒下一个主体C,用V,传递s2
第四步,C的第一步Cc,要用P表示我收到了你的传递,我执行了
P的作用,只是告诉上一个主体,我执行了
上面模型有问题,s的数量,和箭头数量有关,实际上前趋图应该是
F (工厂)-----> (商店)-----> C(消费者)
s1,和s2,就是两个箭头
2024年上半年综合知识真题
章节已分类