文章目录
- 软考知识点总结
- 1. 计算机组成原理
- 网络与信息安全
- 数据结构与算法
- AOE网
- 编译原理
- 操作系统
- 软件设计
- 软件测试
- 数据库
- 计算机软件产权
- 其它
软考知识点总结
1. 计算机组成原理
-
cpu控制器,专门产生指令操作,送到计算机各个部位执行处理
-
DMA(Direct Memery Access),在主存与外设之间建立数据同路,直接进行数据交换,无需CPU参与
-
CRC,采用模2运算构建校验位
-
流水线
- 流水线周期和执行时间的计算
-
流水线周期
,指的是流水线执行过程中最长的一段。(例如取址5s, 分析3s,执行2s. 那么周期就是5s) -
执行时间(理论公式)
,流水线构建时间 + (n - 1) * 流水线周期。其中,流水线构建时间指的是第一条指令完全执行完所需要的时间,n是指令条数 -
执行时间(实践公式)
,(K + n - 1) x 流水线周期
,其中k
指的是工序数,n是指令条数
-
- 流水线周期和执行时间的计算
-
Cache与主存之间的映射由硬件操控
-
中断向量:中断向量就是一个指向中断服务程序入口地址的指针
-
RISI精简指令集
- 只包含基本指令,内存仅仅通过load和store访问,不支持指令嵌入内存操作,**主要依赖硬布线(组合逻辑)**控制逻辑,拥有较多的寄存器(摆脱对内存的依赖),易于实现流水线操作
-
CISI复杂指令集
- 拥有强大的复杂指令集,支持多种复杂的寻址方式,内存指令操作可以直接对内存读写,主要采用微程序控制
网络与信息安全
-
MIME 它是一个互联网标准,扩展了电子邮件标准,使其能够支持,与安全无关
-
SSL、HTTPS涉及邮件传输过程的安全
-
PGP(Pretty Good Privacy) 是一套用于信息加密、验证的应用程序,可用于加密电子邮件内容
-
数字证书 权威的第三方机构颁发的电子文档,使得接收方可以通过验证证书来确认公钥确实属于其所声称的实体
-
数字签名 数学算法应用,可以进行身份验证,确定数据的正确性、完整性,同时保证事后不能否认自己不是签名者
-
震网(Stuxnet),指一种蠕虫病毒。专门定向攻击真实世界 中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网
-
引导区病毒破坏的是引导盘、文件目录
-
宏病毒破坏的是 OFFICE 文件相关
-
木马病毒的作用一般强调控制操作
-
主动攻击:攻击者直接与目标系统或网络进行交互,通常通过发送伪造、篡改的数据包,或者发起特定的请求来影响系统行为
- 加密和认证能够拦截
- 加密通过公钥、私钥等方式进行数据加密,如果无法进行正确解密,则认为数据无效,从而对主动攻击进行防御
- 认证通过信息的合适,判断当前请求是否为合法用户发出的请求。如果认证不通过,则认为当前请求非法,从而拦截
- 加密和认证能够拦截
-
被动攻击:攻击者仅监听、记录目标系统的网络通信,不主动与系统交互,也不改变传输中的数据。他们“悄然无息”地获取信息,尽量避免引起系统的注意或改变其状态
- 加密能够拦截,认证不能
- 加密数据被监听,不会暴露数据原始内容
- 认证信息被劫持后,信息会暴露给攻击者。攻击者可以通过劫持的信息冒充正常用户,从而破坏系统
- 加密能够拦截,认证不能
-
审计:安全审计对主体访问和适用客体的情况进行记录和审查,以保证安全规则被正确执行,并帮助分析安全事故产生的原因。
-
数据的特性
- 保密性:数据传输过程中,不会被窃取
- 完整性:数据不能被非法篡改
- 真实性(不可抵赖):信息的发送者,身份的确认且合法,不可抵赖
- 可用性:发送者,接收者双方的通信方式正常
-
ipconfig (Linux: ifconfig):显示IP地址,MAC值,网关地址等
-
tracert(Linux:tracerroute):定位数据包发送目标ip地址采取的网络路径,若网络不通,能定位到具体的网络节点
-
netstat:显示网络信息,路由表,接口信息等(包含协议、地址、端口,连接状态…)
-
nslookup:查询DNS记录
-
非对称加密算法:使用不同的密钥进行加密、解密
-
常见的公钥加密算法:RSA,ElGamal,背包算法,ECC(椭圆加密)
需要公布公钥
-
DSA(Digital Signature Algorithm)数字签名(公钥数字签名),私钥签名,公钥验证签名。整个流程是消息发送者用私钥签名,接收方用发送方公钥验证签名
加密与签名不是同一个概念
加密:对数据加密,使得第三方无法破解数据信息,从而保证真实数据不会被窃取,不会被破解
签名:签名是为了保证
数据的完整性
,真实性
,不可否认性
-
-
对称加密算法:使用相同的密钥进行加密、解密
- DES(Data Encryption Standard),对称加密算法,使用相同的密钥进行加密,解密。因此不会公开密钥
- 3DES,AEC
-
重放攻击(Replay Attacks),又叫重播攻击、回放攻击、新鲜攻击(Freshness Attacks)。攻击者捕获已经发送给目的主机的数据包,重复发送已经通过验证的数据包,以此达到迷惑目的主机的目的。
例如捕获用户的登录数据信息,在一定的时效内重发登录信息,以此登录目的服务。
-
Kerberos采用时间戳的方式判断数据包是否是攻击信息
-
RIP:Routing Information Protocol,路由信息协议,内部网关协议(IGP),是一种动态路由选择协议
静态路由协议:由网络管理员手动下发网络路由信息,路由消息发送并不会随着网络拓扑的改变而改变
动态路由协议:由路由器自行计算网络结构中,最短的信息发送路径。具有很强的自适应性
-
OSPF:Open Shortest Path First, 开放式最短路径优先,内部网关协议,用于单一自治系统内决策路由
-
BGP:边界网关协议,是一种外部网关协议(EGP),设计用于不同自治系统(AS)之间的路由交换。适用于互联网服务提供商(ISP)网络、大型跨国企业网络、云服务提供商等跨AS的广域网环境,负责在全球互联网范围内传递和控制路由信息
-
无效的 IP 地址:169.254.X.X(windows) 和 0.0.0.0(linux)
-
POP3:(Post Office Protocol version 3)是一种电子邮件协议,用于在客户端和邮件服务器之间传输电子邮件。它是一种基于TCP/IP的协议,使用端口号110
-
IMAP4:端口号143
-
SMTP:端口号25
-
ESMTP:端口号587
数据结构与算法
AOE网
-
某项目的活动持续时间及其依赖关系如下表所示,则完成该项目的最少时间为 ( )天
编译原理
-
词法分析(Lexical Analysis):
- 任务:将源代码的字符流分解成一系列有意义的符号,即词法单元或记号(Token)。
- 工具:词法分析器(Lexer、Scanner)。
- 输出:词法分析的结果通常是以一种标准格式(如元组<token_type, token_value>)表示的记号流。
-
语法分析(Syntactic Analysis):
- 任务:检查词法分析生成的记号流是否符合给定的语法规则(即是否构成语法正确的句子),并构造出反映这些规则关系的抽象语法树(Abstract Syntax Tree, AST)或语法树(Syntax Tree)。
- 方法:包括自顶向下分析(如LL分析、递归下降分析)和自底向上分析(如LR分析、SLR分析、LALR分析)。
- 工具:语法分析器(Parser)。
- 输出:语法分析的结果通常是一个结构化的树形表示,清晰地展现出源代码的结构。
-
语义分析(Semantic Analysis):
- 任务:检查源代码的语义是否正确,即代码的逻辑意义是否符合编程语言的规范和约定,包括类型检查、作用域分析、声明与使用的合法性检查、约束条件验证等。
- 目标:确保代码不仅在语法上正确,而且在逻辑意义上也是有意义的。
- 输出:可能包括类型信息、符号表(Symbol Table)、中间代码(如三地址码、四元式)等。
-
中间代码生成(Intermediate Code Generation):
- 任务:将源代码转换成一种平台无关的中间表示形式,便于后续的优化和目标代码生成。
- 目的:简化编译器设计,实现编译器的前端与后端分离,增强编译器的可移植性。
- 中间代码形式:如抽象语法树(AST)、三地址码、四元式、静态单赋值形式(SSA)、堆栈机器代码等。
-
优化(Optimization):
- 任务:对中间代码进行各种静态分析和变换,以提高目标代码的运行效率,减小程序体积,改善程序性能。
- 类型:包括局部优化(如循环展开、常量折叠、死代码消除等)、全局优化(如函数内联、循环不变量外提、数据流分析等)。
- 目标:使生成的代码在保持正确性的前提下,更高效、更紧凑。
-
目标代码生成(Code Generation):
- 任务:将优化后的中间代码转换为目标机器的机器语言代码,可以直接在特定硬件平台上执行。
- 过程:包括代码布局、寄存器分配、指令选择、指令调度等。
- 输出:目标代码(Object Code),通常以二进制文件形式保存。
-
代码链接(Linking):
- 任务:将编译生成的目标代码与其他目标代码(如库函数)、外部引用的符号等合并成一个可执行文件或库文件。
- 类型:静态链接(在编译时完成)和动态链接(在运行时完成)。
- 输出:最终的可执行文件(Executable File)或动态链接库(Dynamic Link Library, DLL)。
-
动态绑定:在运行时确定函数调用的具体实现,适用于多态场景,如通过基类指针或引用调用虚函数时,实际执行的是子类的重写版本。
-
静态绑定:在编译时确定函数调用的目标,适用于非虚函数调用、函数重载、模板函数实例化等,编译器根据函数名、参数类型和作用域直接关联到相应函数。
-
参数绑定:无论静态或动态绑定,均涉及将函数调用时的实参与函数声明中的形参进行匹配关联,确保参数传递的正确性。
-
过载绑定:在编译时,针对同名但参数列表不同的函数(函数重载),编译器根据调用时提供的参数类型和数量,选择匹配的重载函数版本。它是静态绑定的一部分,用于处理函数重载情况。
操作系统
- 嵌入式操作系统特点
- 微型化,从性能和成本角度考虑,希望占用的资源和系统代码量少;
- 可定制,从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处 理器平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用的需求;
- 实时性,嵌入式操作系统主要应用于过程控制、数据采集、传输通信、多媒体信息及 关键要害领域需要迅速响应的场合,所以对实时性要求较高;
- 可靠性,系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提 供容错和防故障措施;
- 易移植性,为了提高系统的易移植性,通常采用硬件抽象层和板级支撑包的底层设计技术
软件设计
-
耦合类型
- 内容耦合:一个模块可以直接访问另一个模块的内部数据
- 公共耦合:多个模块都访问同一个公共数数据结构
- 外部耦合:多个模块访问同一个全局简单变量(非全局数据结构)
- 控制耦合:模块之间传递信息中包含用于控制模块内部的信息
- 标记耦合:模块通过参数表传递数据结构信息
- 数据耦合:模块通过参数表传递简单数据信息(非数据结构)
- 非直接耦合:多个模块之间没有直接联系,通过主模块的控制和调用实现联系
-
偶然内聚或巧合内聚:指一个模块内的各处理元素之间没有任何联系。
-
逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
-
时间内聚:把需要同时执行的动作组合在一起形成的模块。
-
过程内聚:指一个模块完成多个任务,这些任务必须按指定的次序执行。
-
通信内聚:指模块内的所有处理元素都在同一数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。
-
顺序内聚:指一个模块中的各个处理元素都密切相关于同一各功能且必须顺序执行,前一个功能元素的输出就是下一个功能的输入。
-
功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可。
-
Theo Mandel 在其关于界面设计三条“黄金准则”
- 置于用户控制之下
- 减少用户的记忆负担
- 保 持界面的一致性
-
类设计原则
- 开闭原则:对扩展开放,对修改关闭
- 单一职责原则:一个类只负责一个功能领域中的相应职责
- 依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象
- 里氏替换原则:所有引用基类(父类)对象的地方必须能无副作用地被其子类对象替换
- 接口隔离原则:客户端不应该依赖它不需要的接口
-
过程内聚:模块内部的任务需要按照一定的顺序执行,则称为过程内聚
-
时间内聚:模块内部的功能需要在同一个时间段内完成(系统初始化),则称时间内聚
-
顺序内聚:模块内部的任务和同一个需求有关,并且一个任务的输出作为另一个任务的输入,则称为顺序内聚
-
逻辑内聚:模块内部的任务因为逻辑功能相关,因而放在同一个模块中,称为逻辑内聚
软件测试
-
McCabe度量计算环路复杂度:CC=E−N+2P
E
:源代码中的边(Edge)数,即程序流程图中的控制流转移次数(如条件判断、循环跳转等)。N
:源代码中的节点(Node)数,即程序流程图中的基本块(Basic Block)数量。一个基本块是指一组连续执行且只有一个入口和一个出口的语句序列。P
:程序中的外部调用点(Entry Point)数量,通常为1
-
测试用例设计:一个好的无效等价类,应该只从一个角度违反规则
数据库
-
授权SQL
-
GRANT <权限>[,…n] [ON <对象类型><对象名>] TO<用户>[,…n]
grant update(name) on table dept to user_0 with grant option
为user_0授权update dept表name字段的功能,并允许user_0将该权限授权他人
-
-
多对多的关系需要建立新的类
计算机软件产权
-
A公司委托我开发软件产品,若无特殊约定,软件权力归我
- 依据《计算机软件保护条例》等相关法律法规,委托开发的计算机软件著作权通常归受托人,也就是您——实际进行开发的自然人或组织
-
我就职于A公司,软件开发完后按照我司开发规章申请著作权,若无特殊规定,著作权原则上归您所在的公司A
- 根据《软件保护条例》等相关规定,您在公司任职期间,为完成工作任务或主要利用公司物质技术条件所开发的软件,通常被视为职务作品
- 但作为实际创作者,您通常保留对软件的署名权,即有权在软件上表明您是其作者
-
著作权永久保护以下权力
- 署名权:即表明作者身份的权利,作者有权在作品上署名,或者决定是否署名以及以何种方式署名。即使在著作权财产权保护期届满后,作者依然享有署名权,可以要求他人在使用其作品时正确标明其作为创作者的身份。
- 修改权:作者有权对已发表的作品进行修改或者授权他人进行修改。这项权利不受时间限制,意味着即使在著作财产权期限过后,只要作者还在世或者其继承人能够行使权利,作者仍有权对作品进行修改,或者决定是否允许他人对作品进行修改。
- 保护作品完整权:即保护作品不受歪曲、篡改的权利。作者有权禁止他人未经许可对作品进行歪曲、篡改或者其他损害作品完整性的行为。即使过了著作财产权的保护期限,他人未经作者同意也不能对作品进行有损其原意或声誉的改动。
其它
-
**极限编程(XP)**提倡小型版本发布,每一轮迭代大约 2 周;只处理当前的需求,使设计保持简单
-
敏捷开发框架(如Scrum、Kanban、XP等),敏捷开发大致流程
- 产品待办事项列表(Product Backlog)
- 迭代规划(Sprint Planning)
- 迭代执行(Sprint Execution)
- 迭代评审(Sprint Review)
- 迭代回顾(Sprint Retrospective)
-
软件开发成本估计
-
COCOMO
-
E=a⋅D⋅K
其中:
E
是软件开发成本(以人月或货币单位表示)。D
是软件规模的度量,通常采用源代码行数(SLOC,Source Lines of Code)作为规模指标。a
是规模调整因子(Scaling Factor),反映了软件规模对成本的影响。K
是成本驱动因子(Cost Drivers),反映了除规模外的其他影响成本的因素,如开发团队的经验、项目复杂性、开发环境等。
-
-