软考中级笔记
上午题
二 程序设计语言 6′
1、编译程序和解释程序
解释器:翻译源程序时不生成独立的目标程序。
解释程序和源程序要参与到程序的运行过程中。
编译器:翻译时将源程序翻译成独立保存的目标程序。
机器上运行的是与源程序等价的目标程序。
源程序和编译程序都不再参与目标程序的运行过程。
2、数据类型:
①便于为数据合理分配存储单元
②便于对参与表达式计算的数据对象进行检查
③便于规定数据对象的取值范围及能够进行的运算
3、
传值调用:
将实参的值传递给形参,实参可以是变量、常量和表达式。
不可以实现形参和实参间双向传递数据的效果。
传引用(地址)调用:
将实参的地址传递给形参,形参必须有地址,实参不能是常量(值),表达式。
可以实现双向传递数据。
4、
编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
解释方式:词法分析、语法分析、语义分析
编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换即词法分析、语法分析、语义分析是必须的。
编译器方式中中间代码生成和代码优化不是必要,可省略。
即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码。
5、符号表
不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
6、
词法分析:分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。
输入:源程序 输出:记号流
语法分析:对各条语句的结构进行合理性分析,分析程序中的句子结构是否正确。
输入:记号流 输出:语法(分析)树
语义分析:是进行类型分析和检查。
输入:语法树
语法分析可以发现程序中的语法错误,但不能发现程序中所有的语义错误。
语义分析可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现。
目标代码生成阶段的工作与具体的机器密切相关。
寄存器的分配处于目标代码生成阶段。
中间代码生成
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器)。
可以将不同的高级程序语言翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。
7、正规式
8、
有限自动机是词法分析的一个工具,它能正确地识别正规集。
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不唯一的
正确识别:最后停留在终态,ε为空
9、大多数程序设计语言的语法规则用 上下文无关文法 描述即可。
10、中缀、后缀 —— 栈
优先级:()> 逻辑与∧ 逻辑或∨
五 知识产权 2~3′
1、
人身权:发表权、署名权、修改权、保护作品完整权。
仅发表权有时间性,终生+死亡后50年。另外三个永永远远。
2、知识产权的地域性。
3、计算机软件著作权
主体是指享有著作权的人,根据《中华人民共和国著作权法》和《计算机软件保护条例》规定,主体包括公民、法人和其他组织。
客体是受保护的对象,著作权法保护的计算机软件是计算机程序及其有关文档。计算机程序包括源程序和目标程序。
4、计算机软件著作权的权利
- 计算机软件的著作人身权
《中华人民共和国著作权法》规定,软件作品享有两类权力,一类是软件著作权的人身权(精神权利);另一类是软件著作权的财产权(经济权力)。《计算机软件保护条例》规定,软件著作权人享有发表权和开发者身份权,这两项权力与软件著作权人的人身权是不可分离的。- 发表权
- 开发者身份权(署名权)。开发者的身份权不随软件开发者的消亡而丧失,且无时间限制。
- 计算机软件的著作财产权
使用权、复制权、修改权、发行权、翻译权、注释权、信息网络传播权、出租权、使用许可权和获得报酬权 - 计算机软件著作权的保护期
根据《著作权法》和《计算机软件保护条例》的规定,计算机软件著作权的权利自软件开发完成之日起产生,保护期为50年。保护期满,除开发者身份权外,其他权利终止。
5、软件盗版 行为是指任何未经软件著作权人许可,擅自对软件进行复制、传播,或以其他方式超出许可范围传播、销售和使用的行为。
6、《计算机软件保护条例》是国务院颁布的,用来保护软件著作权人的利益。
六 数据库 6′
1、根据模型应用的不同目的,可将数据模型分成:
①概念数据模型:从信息世界中抽象的数据模型
②结构数据模型:从计算机世界中抽象出的DBMS支持的数据模型。主要分为层次、网状、关系和面向对象模型。
关系模型:二维表格结构
2、数据库的三级模式结构
概念模式/模式——基本表
外模式/用户模式/子模式——视图
内模式/存储模式——存储文件
3、数据库的两级映像
模式/内模式映像:实现了概念模式与内模式转换。—— 物理独立性
外模式/模式映像:实现了外模式与概念模式转换。—— 逻辑独立性
4、关系模型基本术语
关系:一个关系就是一张二维表。
元组:表中一行即为一个元组。对应存储文件中的一个记录值。
属性:表中的列。相当于记录中的数据项或字段值。
域:属性取值范围。
关系模式:对关系的描述。格式:关系名(属性名1,属性名2......)
码=键
候选码/候选键:属性或属性集合,唯一地表示一个元组。
主键/主码:候选码中选择一个。
主属性:包含在任何候选码中的属性。否则为非主属性。
外码/外键:如果一个属性不是关系的主键却是另一个关系的主键。
全码:所有属性组是候选码。
超码:一个包含码的属性集。
5、关系模型
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。
关系完整性约束:
①实体完整性:主码的值不能为空或部分为空,即主属性不能取空值。
②参照完整性:
③用户自定义完整性
6、笛卡尔积:
7、关系代数
集合运算
专门的关系运算符:选择 投影 连接 除
连接
θ连接、等值连接:在基于笛卡尔积的基础上选择满足条件的结果。
自然连接:除去重复属性的等值连接。
外连接:
8、
投影、选择转SQL语言
select 属性 from 表名/关系 where 条件
笛卡尔积转SQL语言
select R.A,R.B,R.C,S.A,S.B,S.C from R,S
自然连接转SQL语言
9、SQL语言
建立数据库:create database 数据库名
建立基本表:create table 表名
(列名 数据类型 完整性约束,
......,
.......
)
not null,unique,not null unique,default
primary key(属性)
foreign key(id) referencces 表名(id)
check (条件)
增加列:alter table 表名 add 列名 类型
修改列:alter table 表名 alter column 列名 新类型
删除列:alter table 表名 drop column 列名
删除基本表:drop table 表名
insert 插入语句:
①直接插入元组值:insert into 表名(列名序列) values (元组值)
②插入一个查询的结果值:insert into 表名(列名序列) select 查询语句
delete from 表名 where 条件
update 表名
set 列名=值,...
where 条件
select (distinct 去除重复行) 列名
from 表名
where 行条件
group by 列条件
having 组条件
order by 列名 asc升序/desc降序
- 选择查询
- 条件表达式 where 条件
- select 列名 as '别名' from 表名
- 字符串匹配:(not) like '匹配串'
- %(百分号)代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串,如 acb、addgb、ab 等都满足该匹配串。
- _(下划线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串,acb、afb 等都满足该匹配串。
- 聚合函数 avg count min max
- 表的连接查询
- select 列名 from 表1,表2 where 连接条件
- 查询结果的并交差
- union intersect except
10、SQL访问控制
授权:grant 权限 on 对象类型 对象名 to 用户
收回权限:revoke 权限 on 对象类型 对象名 from 用户
11、视图:从一个或多个基本表或视图中导出的表,是一个虚拟表
create view 视图名(列表名)
as select 查询子句
[with check option];
12、索引:改变的是内模式。
13、关系模式:R<U,F>
R关系名,U属性,F为属性组U上的一组数据依赖。A→B:A决定B,B依赖于A
14、关系数据库规范化 函数依赖
15、规范化
1NF
若关系模式R的 每一个分量是不可再分的数据项,则关系模式R属于第范式(1NF)
存在问题 : 冗余 、修改异常、 插入异常 、 删除异常
2NF
若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF
(即当 1NF消除了非主属性对码的部分函数依赖,则称为2NF )
3NF
若关系模式R(U, F)中不存在这样的码X、属性组Y及非主属性Z(Z不属于y),
使得X→Y,Y→X,Y→Z成立,则称关系模式R∈3NF
(即当 2NF消除了非主属性对码的传递函数依赖,则称为3NF )
3NF的模式必是2NF的模式。
产生冗余和异常的两个重要原因是部分依赖和传递依赖。
16、模式分解 ——无损连接性,保持函数依赖
17、E-R图转换为关系模式
对于联系:
一对一 : 联系 作为一个属性 随便加入 哪个实体中
一对多 : 联系可以单独转换为一个关系模式, 也可 以 作为一个属性加入到N端中(N端实体包含1端的主键)
多对多 : 联系必须单独转换为一个关系模式(且此关系模式应该包含两端实体的主键)
18、数据库的控制功能——事务管理
原子性 :事务的所有操作在数据库中 要么全做,要么全都不做
一致性 :数据不会因为事务的执行而被破坏
隔离性 :一个事务的 执行不能被 其他事务 干扰
持久性 :事务一旦提交 ,对数据库中数据的 改变必须是永久 的,
即便系统出现故障时也是如此
19、数据库的保存与恢复
恢复的基本原理是“建立数据冗余”(重复存储) 。建立冗余数据的方法是进行 数据转储 和 登记日志文件 。
20、并发控制技术——封锁
排他锁(X锁) :若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
共享锁(S锁) :若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。
21、分布式数据库
分片 透明:用户或应用程序 不需要知道逻辑上访问的表具体是怎么分块存储的
复制 透明:采用复制技术的分布方法,用户不需知道数据是复制到哪些节点,如何复制的
位置 透明:用户无须知道数据存放的物理位置
逻辑 透明:用户或应用程序 无需知道局部场地使用的是哪种数据模型
共享 性:指数据存储在 不同的结点数据共享
自治 性:指 每结点对本地数据都能独立管理
可用 性:指 当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
分布 性:指 数据在不同场地上的存储
七 面向对象 3~4'
1、
对象 :基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体 。
消息 : 对象之间进行通信的一种构造称为消息
类 :是对象的抽象 ,定义了一组大体相似的对象结构,定义了 数据 和 行为 。包括:
实体类(对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类 )
边界类(系统内部与系统外部的业务主角之间进行 交互建模 的类)
控制类(对用例特有的控制行为进行建模 ,被动出现的特定行为的类)
继承 : 父类 和 子类 之间 共享数据和方法 的机制。是类之间的一种关系
多态 :不同的对象收到 同一个消息时产生完全不同的反应 。包括:
参数多态(不同类型参数多种结构类型,最纯的多态)
包含多态(父子类型关系,子类型化)
过载多态(类似于重载,一个名字不同含义,上下文)
强制多态(强制类型转换)
多态由继承机制支持
覆盖 :子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。即 在子类中重定义一个与父类同名同参的方法
函数重载 : 与覆盖要区分开 ,函数重载与子类父类无关,且 函数是同名不同参数
封装 :一种 信息隐蔽技术 ,其目的是 使对象的使用者和生产者分离 ,也就是使其他开发人员 无需了解所要使用的软件组件内部的工作机制,只需知道如何使用组件
静态类型 是指一个对象的类型 在编译时 就 确定
动态类型 指对象类型在 运行时 才能 确定
静态绑定 (静态分配)是基于静态类型的,在程序 执行前方法已经被绑定
动态绑定 是基于动态类型的, 运行时 根据变量实际引用的对象类型 决定调用哪个方法 , 动态绑定支持多态和继承。
2、面向对象设计的原则
(1) 单一责任原则 (Single Responsibility Principle,SRP)。就一个类而言,应该仅有一个引起它变化的原因。即,当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
(2)开放-封闭原则 (Open & Close Principle,OCP)。软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。对扩展开放,修改关闭。
(3)里氏替换原则 (Liskov Substitution Principle,LSP)。子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
(4)依赖倒置原则 (Dependence Inversion Principle,DIP)。抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
(5)接口分离原则 (Interface Segregation Principle,ISP)。不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。即:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。
(6) 重用发布等价原则 (Release Reuse Equivalency Principle,REP)。重用的粒度就是发布的粒度。
(7)共同封闭原则 (Common Closure Principle,CCP)。包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
(8)共同重用原则 (Common Reuse Principle,CRP)。一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
(9) 无环依赖原则 (Acyclic Dependencies Principle,ADP)。在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的五环图形。
(10)稳定依赖原则 (Stable Dependencies Principle,SDP)。朝着稳定的方向进行依赖。
(11)稳定抽象原则 (Stable Abstractions Principle,SAP)。包的抽象程度应该和其稳定程度一致。
3、面向对象分析 :是为了 确定问题域,理解问题 。包含五个活动:
认定对象 (按自然存在的实体 确定对象 )
组织对象 (分析对象关系, 抽象成类 )
对象间的相互作用 (描述各对象 在 应用 系统中的关系 )
确定对象的操作 (操作,如创建增加删除等)定义对象的内部信息 (属性)
4、面向对象设计 :是设计分析模型和实现相应源代码在目标代码环境中这种源代码可被执行。 设计问题域的解决方案。
识别类及对象,定义属性,定义服务,识别关系,识别包
5、面向对象 程序设计 :用面向对象 程序 设计 语言实现设计方案
6、面向对象 测试 :与普通测试步骤并无不同。可分为四个层次:
算法层 ( 测试 类中定义的 每个方法 ,类似 单元测试 )
类层 ( 测试同一个类中所有方法与属性 的 相互作用 ,特有的模块测试)
模板层 (测试一组 协同工作的类 之间的 相互作用 ,类似集成测试)
系统层 (类似 系统测试 )
八 UML 3~4'
九 设计模式 4'
1、
创工厂类,原生单抽(创工厂累就去原神单抽)
结构对象:傣族乔氏享外装
行为类:行嘞芥末
行为对象:邢队泽明爹终被冠状测方
十 操作系统 6'
1、
2、前趋图 有向无环图
几个箭头几个信号量,左v+右p-
3、三态模型
4、进程资源图
5、互斥与同步
p申请,v释放
同步在外,互斥在内
生产者与消费者问题
6、死锁避免 —— 银行家算法
7、死锁计算问题
系统内有n个进程,每个进程都需要R个资源:
那么其 发生死锁 的 最大资源数 为 n*(R-1) 。
其 不发生死锁 的 最小资源数 为 n*(R-1)+1
8、线程
传统的进程有两个属性:可拥有资源的独立单位,可独立调度和分配的基本单位
引入线程后,线程是独立调度的最小单位 ,进程是拥有资源的最小单位
线程可以共享进程的公共数据、全局变量、代码、文件等资源,
但不能共享线程独有的资源,如线程的栈指针等标识数据
9、页内存储管理
10、段页式存储管理
11、单缓冲区
双缓冲区
12、移臂调度算法 / 磁盘调度算法
13、旋转调度算法
最少时间 = (旋转时间+处理时间)*总处理记录数
最长时间 = (旋转时间+处理时间)+(总数-1)*(旋转时间+处理时间+(旋转时间*(总记录数-2)))
(磁道时间*磁道个数+延迟时间+传输时间) * 总块数
14、多级索引结构
15、树形文件目录
相对路径 :是从 当前路径开始 的路径
绝对路径 :是从 根目录开始 的路径,前没有\,后有\
全文件名 = 绝对路径 + 文件名 。
下午题
试题一 15′
形式:说明 + 2图 + 问题
数据流图DFD基本图形元素 ——
矩形 E :外部实体
数据存储:D
加工 P :圆角矩形
外部实体:当前系统之外的人、物、外部系统
人:学生、老师、员工、主观、医生、客户、供应商......
物:传感器、控制器、单车、车辆、采购部门......
外部系统:支付系统、车辆交易系统、库存管理系统、道闸控制系统......
数据存储:存储数据和提供数据,存储加工的输出数据和提供加工的输入数据
例子:客户表、订单表、学生表、课表文件、维修记录文件
加工:将输入数据处理后得到输出数据
一个加工至少有一个输入数据流和一个输出数据流加工
只有输入没有输出:黑洞
只有输出没有输入:白洞
输入数据不足以产生输出数据:灰洞
数据流的起点或终点必须有一个是加工。
问题一 实体
问题二 数据存储 +表/文件
问题三 补充缺失数据流
第一种方法:父图子图平衡 连连看
第二种方法:加工既有输入数据流又有输出数据流
第三种方法:数据守恒
格式: