计算机系统基础知识
计算机硬件
存储器中存取方式总结
| 存取方式 | 访问依据 | 访问特点 | 存取时间 | 典型设备 |
|---|---|---|---|---|
| 顺序存取 | 顺序 | 必须按顺序访问数据 | 可变 | 磁带 |
| 直接存取 | 地址 | 可以直接定位到某块数据 | 可变 | 磁盘 |
| 随机存取 | 地址 | 任意地址访问时间相同 | 固定 | 主存 RAM |
| 相联存取 | 内容 | 根据内容匹配访问 | 固定 | Cache |
硬件类型
- DRAM:动态随机存取存储器;
- SRAM: 静态随机存取存储器;
- Cache: 高速缓存;
- EEPROM: 电可擦可编程只读存储器。
计算机网络
| OSI 七层模型 | 作用 | 典型协议 | 典型设备 / 元件 |
|---|---|---|---|
| 应用层 | 为应用程序提供服务 | HTTP、HTTPS、FTP、SMTP、DNS、NFS、Telnet、Rlogin、SNMP、Gopher、SSH | 应用服务器、Web 服务器、DNS 服务器、邮件服务器、网关(应用层网关) |
| 表示层 | 数据格式转化、数据加密 | JPEG、MPEG、SSL/TLS、ASCII、UTF-8、加密/压缩协议 | |
| 会话层 | 建立、管理和维护会话 | RPC、NetBIOS、PPTP、SIP | |
| 传输层 | 建立、管理和维护端到端的连接 | TCP、UDP、SCTP | 防火墙(部分工作在 4 层) |
| 网络层 | IP选址及路由选择 | IP、ICMP、ARP、RARP、IGMP、OSPF、BGP、RIP | 路由器、三层交换机(L3 Switch)、防火墙(L3)、VPN 网关 |
| 数据链路层 | 提供介质访问和链路管理 | Ethernet、PPP、HDLC、VLAN(802.1Q)、STP、MAC | 交换机、网桥 |
| 物理层 | 物理层 | IEEE 802.3/802.11、光纤、RJ45、比特流 | 集线器 Hub、光纤收发器、网卡、双绞线、光纤、放大器、中继器 |
要点如下:
- 会话/表示/应用层:软件服务为主,代表设备:Web 服务器、DNS 服务器、邮件服务器、应用网关
- 传输层:按端口号(TCP/UDP)分类,代表设备:四层负载均衡、防火墙(L4)
- 网络层:根据 IP 地址路由,代表设备:路由器、三层交换机、防火墙(L3)
- 数据链路层:根据 MAC 地址转发,代表设备:Switch、网桥、AP(二层部分)
- 物理层:只管电信号,代表设备:网线、光纤、Hub、NIC、Repeater
云服务分类:
- Saas:软件即服务
- Paas:平台即服务(云计算体系中最关键的一层)
- Iaas:基础设施即服务
校验码
奇偶校验:只能校验奇数位出错的编码。
编译原理
编译器分类:
- 传统编译器(管道过滤器风格):词法分析 -> 语法分析 -> 代码生成
- 现代编译器(数据共享风格):集成了编译器、连接器、调试器等多种工具
操作系统
P操作:执行P操作的进程将进入等待队列
V操作:执行V操作的进程将从阻塞队列中唤醒一个进程
死锁的四个必要条件:
- 互斥:资源只能被一个进程占用
- 不可抢占:资源只能由占有者主动释放
- 持有并等待:进程持有资源同时申请其他资源
- 循环等待:形成环状等待链
文件管理程序将正在修改的目录文件写回磁盘时系统的影响较大。
UML
UML中,序列图的基本元素包括:对象、生命线和消息。
UML称为“标准”建模语言的主要原因是:与程序设计语言无关。
- 类图:展现了一组对象、接口、协作和它们之间的关系。
- 定时图:强调消息跨越不同对象或参与者的实际时间,而不仅仅只是关心消息的相对顺序。
- 部署图:软件和硬件组件之间的物理关系以及处理节点的组件分布情况
- 包图:描述由模型本身分解而成的组织单元,以及它们之间的依赖关系
- 序列图:需要建模和描述复杂的交互过程,也会采用状态图加以辅助
UML 2.0 中,顺序图用来描述对象之间的交互,其中循环、选择等复杂交互使用序列片段表示。
对象之间的消息类型包括:同步消息、异步消息、返回消息、参与者创建消息、参与者销毁消息。
UML中有四种事物:
- 结构事务:是UML模型的静态部分,描述模型的概念或物理元素,包括类、连接口、协作、用例、主动类、构建、制品和结点
- 行为事务:是UML模型的动态部分。描述一种跨越时间和空间的行为。包括交互、状态机和活动
- 分组事务:是UML模型的组织部分。最主要的分组事务是包
- 注释事务:是UML模型的解释部分。一般用来描述、说明和标注模型的任何元素
算法与数据结构
哈希算法与一致性哈希算法:
哈希是一种单向不可逆的加密函数,将任意长度数据映射为固定长度的散列值。
一致性哈希将节点和数据映射到0~2³²-1的环上,数据顺时针绑定到最近节点。
优点:
- 节点增删只影响相邻少量数据,可扩展性强
- 极大减少数据迁移,适应快速增长
信息安全基础知识
信息安全的三类措施:
- 技术方面的安全措施
- 管理方面的安全措施
- 相应的法律法规
信息安全框架:
- 技术体系
- 组织机构体系
- 管理体系
信息安全包括5个基本要素:
- 机密性:确保信息不暴漏给未授权的实体或进程
- 完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改
- 可用性:得到授权的实体在需要时可以访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作
- 可控性:可以控制授权范围内的信息流向及行为方式
- 可审查性:对出现的信息安全问题提供调查的依据和手段。
加密技术
对称加密:加密和解密的密钥相同,不公开加密算法。优点是加密快,加密过程简单。缺点是加密强度不高(只有一个密钥),密钥分发困难,保密性差。
常见对称加密算法:DES、3DES、AES、RC-5、IDEA。
非对称加密:需要一对公开密钥与私钥。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。优点是无须交换密钥,保密性好。缺点是仅适用少量数据加密,加密速度慢,时间长。常用来加密对称加密算法的密钥。(数字信封的原理)。
常见的非对称加密算法:RSA、DSA、ECC。
数字加密与数字签名
数字加密的主要过程:
- 当信息发送者需要发送信息时,首先生成一个对称密钥,用该对称密钥加密要发送的报文
- 信息发送者用信息接收者的公钥加密上述对称的密钥
- 信息发送者将上述两个步骤的结果集合在一起传给信息接收者,称为数字信封
- 信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,最后得到真正的原文
数字签名的主要过程:
- 信息发送者使用一个单项散列函数(哈希函数)对信息生成信息摘要
- 信息发送者使用自己的私钥签名信息摘要
- 信息发送者把信息本身与已签名的信息摘要一起发送出去
- 信息接收者使用与发送者相同的单项散列函数(哈希函数)对接收的信息生成新的信息摘要,再使用发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过
软件工程基础知识
软件生命周期划分的目的:各阶段时间尽可能独立。
软件开发模型
| 类型 | 特征 |
|---|---|
| 瀑布模型 | 结构化方法,开发阶段性,需求明确,文档齐全,风险控制弱 |
| 原型模型 | 迭代方法。分为原型开发与目标软件开发,需求不明确 |
| 螺旋模型 | 迭代方法,瀑布与原型(演化)模型结合体。适用于大型、复杂、风险项目 |
| 喷泉模型 | 面向对象方法,复用好、开发过程无间隙,节省时间 |
| V模型 | 开发与测试结合 |
| 变换模型 | 适用于形式化开发 |
| 智能模型 | 适用于基于规则的专家系统 |
| 快速应用开发RAD | 基于构件的开发方法。用户参与、开发或复用构件、模块化要求高,不适用新技术 |
| RUP/UP | 用例驱动、架构为中心、迭代,增量 |
| 可重用构件模型 | 基于构件的开发方法。开发或复用构件 |
螺旋模型的两个特点:
- 采用循环的方式逐步加深系统定义和实现的深度,同时降低风险
- 确定一系列里程碑,确保开发过程中的相关利益者都支持可行的和令人满意的系统解决方案
系统需求不清晰、不确定时,最适合采用的开发方法是:渐进迭代开发。
需求管理
需求分类:
- 常规需求
- 期望需求
- 意外需求
需求管理重点在于对已确定需求的有效管理和跟踪。需求开发是将用户需求转化为具体可实现的需求。在需求管理中,维持对用户原始需求和产品构件需求的双向跟踪很关键,能确保需求的一致性和可追溯性。
需求分类:
- 业务需求:为什么做
- 用户需求:要让谁怎么用
- 功能需求:开发人员必须实现的功能
需求变更的管理过程:变更分析和成本计算、问题分析、变更描述、变更实现。
成本类型
- 固定成本。固定成本是指其总额在一定期间和一定业务量范围内,不受业务量变动的影响而保持固定不变的成本。例如,管理人员的工资、办公费、固定资产折旧费、员工培训费等。固定成本又可分为酌量性固定成本和约束性固定成本。酌量性固定成本是指管理层的决策可以影响其数额的固定成本,例如,广告费、员工培训费、技术开发经费等;约束性固定成本是指管理层无法决定其数额的固定成本,即必须开支的成本,例如,办公场地及机器设备的折旧费、房屋及设备租金、管理人员的工资等。
- 变动成本。变动成本也称为可变成本,是指在一定时期和一定业务量范围内其总额随着业务量的变动而成正比例变动的成本。例如,直接材料费、产品包装费、外包费用、开发奖金等。变动成本也可以分为酌量性变动成本和约束性变动成本。开发奖金、外包费用等可看作是酌量性变动成本;约束性变动成本通常表现为系统建设的直接物耗成本,以直接材料成本最为典型。
软件风险大致可以分为三类:
- 项目风险
- 技术风险
- 商业风险
- 开发了一个没有人真正使用的优良产品或系统
- 开发的产品不在符合公司的整体策略
- 开发了一个销售部不知如何销售的软件
- 失去了高层管理人员的支持
- 没有得到预算或人员的保证
软件环境集成机制
根据功能的不同,可划分为环境信息库、过程控制与消息服务器、环境用户界面三个部分。
- 环境信息库。环境信息库是软件开发环境的核心,用以存储与系统开发有关的信息,并支持信息的交流与共享。环境信息库中主要存储两类信息,一类是开发过程中产生的有关被开发系统的信息,例如,分析文档、设计文档和测试报告等;另一类是环境提供的支持信息,例如,文档模板、系统配置、过程模型和可复用构件等。
- 过程控制与消息服务器。过程控制与消息服务器是实现过程集成和控制集成的基础。过程集成是按照具体软件开发过程的要求进行工具的选择与组合,控制集成使各工具之间进行并行通信和协同工作。
- 环境用户界面。环境用户界面包括环境总界面和由它实行统一控制的各环境部件及工具的界面。统一的、具有一致性的用户界面是软件开发环境的重要特征,是充分发挥环境的优越性、高效地使用工具并减轻用户的学习负担的保证。
软件逆向工程总结
- 逆向工程:凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程
- 重构:指在同一抽象级别上转换系统描述形式
- 设计恢复:指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息(不一定是原设计)
- 再工程:也称修复和改造工程,它是在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本
软件工具分类
- 软件开发工具:需求分析工具、设计工具、编码与排错工具。
- 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
- 软件管理工具和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择
CMMI 特征
- 初始级(1级)过程随意且混乱;
- 已管理级(2级)的特征是单一项目过程已文档化并遵循计划执行,但不同项目之间不统一;
- 已定义级(3级)实现不同项目过程的统一定义和集成;
- 量化管理级(4级)实现过程性能的可预测。
螺旋模型:
- 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
- 风险分析:分析评估所选方案,考虑如何识别和消除风险;
- 实施工程:实施软件开发和验证;
- 客户评估:评价开发工作,提出修正建议,制定下一步计划。
遗留分析
- 淘汰策略。低水平、低价值象限即遗留系统的技术含量较低,且具有较低的业务价值。对这种遗留系统的演化策略为淘汰,即全面重新开发新的系统以代替遗留系统。
- 继承策略。低水平、高价值象限即遗留系统的技术含量较低,已经满足企业运作的功能或性能要求,但具有较高的商业价值,目前企业的业务尚紧密依赖该系统。称这种遗留系统的演化策略为继承。
- 改造策略。高水平、高价值象限即遗留系统的技术含量较高,本身还有强大的生命力。系统具有较高的业务价值,基本上能够满足企业业务运作和决策支持的需要。这种系统可能建成的时间还很短,称这种遗留系统的演化策略为改造。
- 集成策略。高水平、低价值象限即遗留系统的技术含量较高,但其业务价值较低,可能只完成某个部门(或子公司)的业务管理。这种系统在各自的局部领域里工作良好,但对于整个企业来说,存在多个这样的系统,不同的系统基于不同的平台、不同的数据模型,形成了一个个信息孤岛,对这种遗留系统的演化策略为集成。
系统工程是在 20 世纪中后期发展起来的一门新兴学科,最早产生于 20 世纪 40 年代左右 的美国。时至今日,系统工程已经成为现代社会高速发展不可或缺的一部分。它的诞生让自 然科学和社会科学中有关的思想、理论和方法根据总体协调的需要联系起来,综合应用并利 用现代电子计算机,对系统的结构、要素、信息和反馈等进行分析,以达到最优规划、最优 设计、最优管理和最优控制等目的。
模块的内聚类型
| 内聚类型 | 描述 |
|---|---|
| 功能内聚 | 各个部分协同完成一个单一功能,缺一不可 |
| 顺序内聚 | 处理元素相关,而且必须顺序执行,通常前一任务的输出是后一任务的输入 |
| 通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
| 过程内聚 | 处理元素相关,而且必须按待定的次序执行 |
| 时间内聚 | 所有包含的任务必须在统一时间间隔内执行 |
| 逻辑内聚 | 完成逻辑上相关的一组任务,互相存在调用关系 |
| 偶然内聚 | 完成一组没有关系或松散关系的任务,或者仅仅代码相似 |
软件设计包含四个既独立又相互联系的活动:
- 体系结构设计(定义部件关系):定义软件系统的总体结构、主要功能部件(模块)之间的关系和相互作用。
- 数据设计(定义数据结构):将分析模型转换为数据结构定义,高质量的数据设计能改善程序结构,降低过程复杂性。
- 接口设计(界面与通信设计): 明确软件内部、软件与外部系统(操作系统、硬件)以及软件与人之间的通信机制。
- 过程设计(部件细节算法):将体系结构部件转换为软件的过程性描述,定义各模块内的具体算法和局部数据结构
这些活动旨在将软件需求转换为全面且高质量的系统模型。
需求管理是软件项目开发过程中控制和维持需求约定的活动,它包括:变更控制、版本控制、需求跟踪、需求状态跟踪等工作。
一般说来,信息化需求包含3个层次,即:战略需求、运作需求和技术需求。
- 一是战略需求。组织信息化的战略需求的目标是提升组织的竞争能力、为组织的可持续发展提供一个支持环境。从某种意义上来说,信息化对组织不仅仅是服务的手段和实现现有战略的辅助工具;信息化可以把组织战略提升到一个新的水平,为组织带来新的发展契机。特别是对于企业,信息化战略是企业竞争的基础。
- 二是运作需求。组织信息化的运作需求是组织信息化需求非常重要且关键的一环,它包含三方面的内容:一是实现信息化战略目标的需要;二是运营策略的需要;三是人才培养的需要。
- 三是技术需求。由于系统开发时间过长等问题在信息技术层面上对系统的完善、升级、集成和整合提出了需求。也有的组织,原来基本上没有大型的信息系统项目,有的也只是一些单机应用,这样的组织的信息化需求,一般是从头开发新的系统。
数据库设计基础知识
数据库的一致性指的是:从一个一致性的状态到另一个一致性的状态。
模式分类
| 类型 | 说明 |
|---|---|
| 外模式 | 用户看到的表/视图 |
| 模式 | 表结构、关系、约束等 |
| 内模式 | 磁盘上的实际存储方式 |
派生属性:可以由其他属性计算获得的属性,例如:年龄可以推出生日。
系统架构设计
系统架构基础知识
架构风格定义:特定领域中的组织方式和惯用模式,反映了众多系统所有共有的结构和语义特征。一个体系结构定义了一个词汇表和一组约束。
软件架构设计:关注软件组件的结构,属性和交互作用。
软件架构是关于软件系统的结构,行为和属性的高级抽象。
软件架构,4+1视图模型
- 物理视图:软件到硬件的映射
- 逻辑视图:描述了设计的对象模型,功能需求
- 进程视图:设计的并发和同步特征,支持系统的运行特性
- 开发视图:开发环境的静态组织结构,支持软件开发的内部需求
仓库风格:
- 中央数据结构:说明当前状态
- 独立构件:在中央数据存储上执行
构件
构件的组装方式:
- 顺序组装
- 层次组装
- 叠加组装
构件的不同阶段:
- 组装阶段
- 开发阶段
- 获取阶段
软件架构复用的类型:
- 机会复用:只有发现有可复用的资产,就复用
- 系统复用:开发之前就要进行规划,以决定哪些需要复用
在基于对象管理组织(OMG)的CORBA基础设施定义中,四种主要的软件构件标准分别为:以下是四种构件标准的具体特征:
- 实体构件:代表持久化数据,通常对应数据库中的一条记录,通过主键标识,具有长期状态。
- 服务构件:提供无状态的功能性服务,不保存任何客户端状态信息,适用于事务处理。
- 会话构件:用于特定客户端的交互会话,状态信息仅在会话期间内存在,由容器或构件本身管理。
- 进程构件:用于协调多个对象间的复杂业务流程,通常具备生命周期状态,描述任务的执行过程。
软件构件有3个核心特点:
- 独立部署单元
- 作为第三方的组装单元
- 没有(外部的)可见状态
构件组装技术:
- 基于功能的构件组装技术:这种技术侧重于根据软件系统的功能需求来组装构件。
- 基于数据的构件组装技术:这种技术首先根据当前软件问题的核心数据结构设计一个框架,然后根据框架中各个结点的需求提取构件并进行适应性修改。
- 面向对象的构件组装技术:面向对象技术提供了封装、继承和多态等特性,这些特性使得面向对象比其他的软件开发方法更适合支持软件复用。
基于构件的开发模型由软件的需求分析定义、体系结构设计、构件库建立、应用软件构建以及测试和发布5个阶段组成。
C2体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
- 系统中的构件和连接件都有一个顶部和一个底部;
- 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
- 一个连接件可以和任意数目的其他构件和连接件连接;
- 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
DSSA
DSSA:以一个特定问题,领域参考模型,参考需求,一般采用螺旋模型。
CRM:以客户为中心,最大程度帮助企业实现经营目标。
DSSA:
- 数据和模型是DSSA的主要资源
- 用来支援用户作决策
- 用于解决半结构化和结构化问题
- 提升用户决策的有效性
特定领域软件架构(Domain Specific Software Architecture,DSSA)以一个特定问题领域为对象,形成由领域参考模型、参考需求、参考架构等组成的开发基础架构,其目标是支持一个特定领域中多个应用的生成。
DSSA的基本活动包括领域分析、领域设计和领域实现。
- 领域分析的主要目的是获得领域模型,领域模型描述领域中系统之间共同的需求,即领域需求;
- 领域设计的主要目标是软件架构。获得DSSA,DSSA描述领域模型中表示需求的解决方案;
- 领域实现的主要目标是依据领域模型和DSSA开发和组织可重用信息,并对基础软件架构进行实现。
架构风格总结
数据流风格:批处理序列、管道-过滤器,第一空选择D选项批处理。
调用/返回风格:主程序/子程序、面向对象、层次结构。
独立构件风格:进程通信、事件驱动系统(隐式调用)。
虚拟机风格:解释器、基于规则的系统,第二空选择C选项规则系统。
仓库风格:数据库系统、超文本系统、黑板系统。
基于规则的系统包括规则集、规则解释器、规则/数据选择器和工作内存,一般用在人工智能领域和DSS中。
用户界面设计的“黄金规则:
- 置用户于控制之下
- 减少用户的记忆负担
- 保持界面一致性
微服务
微服务的优势
- 技术异构性
- 有弹性
- 容易扩展
- 简化部署方案(可自动部署)
- 与组织结构相匹配
- 服务之间可组合性
- 对可替代的优化
微服务的挑战
- 分布式系统的复杂度
- 运维成本高
- 部署自动化
- DevOps与组织结构
- 服务间的相互依赖测试
- 服务间依赖管理
分布式系统开发分为五个逻辑计算层:
- 表示层实现用户界面;表示逻辑层为了生成数据表示而必须进行的处理任务,如输入数据编辑等;
- 应用逻辑层包括为支持实际业务应用和规则所需的应用逻辑和处理过程,如信用检查、数据计算和分析等;
- 数据处理层包括存储和访问数据库中的数据所需的应用逻辑和命令,如查询语句和存储过程等;
- 数据层是数据库中实际存储的业务数据。
ORM的全称是:Object Relational Mapping(对象关系映射)。简单的说,ORM是通过使用描述对象和数据之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM的优点:
- 提高开发效率,降低开发成本;
- 使开发更加对象化;
- 可移植;
- 可以很方便地引入数据缓存之类的附加功能。
B/S架构和C/S架构的区别
| 架构类型 | 优点 | 缺点 |
|---|---|---|
| C/S 架构 | 1. 客户端与服务器分离,可独立或并行开发 2. 技术成熟,支持分布式操作,交互性强,安全性较高 3. 网络压力小,响应速度快,适合处理大量数据 4. 模型简单,易理解 |
1. 依赖网络通信,服务器负载压力大 2. 部署困难,维护成本高,升级不方便 3. 开发成本高,客户端复杂,灵活性差 4. 界面不统一,移植和集成困难5. 客户端直连数据库,安全性降低 |
| B/S 架构 | 1. 易部署、易维护、易升级 2. 开放性强、扩展性好,适合广域网 3. 跨平台,无需开发客户端 4. 基于 JDBC 等接口,通用性和可移植性好 |
1. 动态交互性较弱,不适合 OLTP 2. 响应速度较慢 3. 安全性较难控制 |
云原生
云原生架构原则:
服务化原则:将应用拆分为独立、可重用微服务,通过API交互,便于开发、部署和扩展,支持分布式系统。
弹性原则:系统自动根据负载调整资源,实现水平扩展和收缩,确保高可用性和成本优化,使用容器化和编排工具如Kubernetes。
可观测原则:通过监控、日志、追踪和指标收集,提供系统内部状态的全面可见性,帮助快速诊断问题和优化性能。
韧性原则:设计系统能承受故障、自动恢复,如使用熔断、限流、重试机制,确保服务连续性而非追求零故障。
所有过程自动化原则:从开发、测试、部署到运维全部自动化,使用CI/CD管道、IaC(基础设施即代码),减少人为错误,提高效率。
零信任原则:不默认信任任何网络或用户,每项访问需验证身份、授权和加密,防范内部外部威胁。
架构持续演进原则:架构非静态,通过持续迭代、反馈和实验优化,适应业务变化和技术进步。
统一过程(UP或者RUP)
特点:
- 用例驱动
- 以架构为中心
- 迭代和增量
分为四个阶段:
- 初始:
- 确定项目范围和边界
- 识别系统的关键用例
- 展示系统的候选架构
- 估计项目费用和时间
- 评估项目风险
- 细化(完成架构):
- 分析系统问题领域
- 建立软件架构基础
- 淘汰最高风险元素
- 构建:
- 开发剩余的构件
- 构件组件与测试
- 交付:
- 进行开发环境、用户环境测试
- 制作发布版本
- 用户文档定稿
- 确定新系统
- 培训、调整产品
双机热备技术分类
- 双机热备模式:一台工作,一台后备
- 双机互备模式:两台运行独立应用,互为后备
- 双机双工模式:两台同时运行相同应用,互为后备
服务器集群通过内部局域网通信,故障节点应用会被集群内其他节点自动接管,无需人工干预。
系统质量属性与架构评估
质量属性
软件的可靠性:能够通过历史数据和开发数据直接测量。
软件系统质量属性包括:
- 可维护性(Maintainability):发生故障后,快速定位、修复、恢复的难易程度。 核心指标:MTTR(平均修复时间)越短越好,支持热插拔、远程诊断、活性维护等。
- 可修改性(Modifiability)
- 性能(Performance):在给定条件下,性能、资源利用、容量表现
- 可用性(Availability):系统实际可使用时间占计划使用时间的比例。 核心指标:可用率(通常追求99.99%或更高),计算公式:A = MTBF / (MTBF + MTTR)。
- 安全性(Security):防止未授权访问、数据泄露、篡改、拒绝服务攻击,保护系统与数据的机密性与完整性。核心手段:访问控制、加密、身份认证、入侵检测、防火墙。
- 可测试性(Testability)
- 可移植性(Portability):易适应新环境、易安装、易替换
- 可扩展性(Scalability)
- 可靠性 (Reliability):系统在规定时间内、规定条件下不发生故障的概率,核心指标:MTBF(平均故障间隔时间)越高越好。
- 完整性 (Integrity):数据在存储、传输、处理过程中不被破坏、篡改、丢失,保持一致性和正确性。
核心手段:ECC、校验和、备份、RAID、事务完整性控制。
软件架构战术总结:
- 可用性:Ping/Echo、主动冗余
- 安全性:限制访问
- 性能:队列调度
- 可修改性:运行时注册、接口-实现分离、信息隐藏
- 可测试性:记录-回放
质量数据场景描述
质量属性场景中:
- 刺激源(Stimulus Source):引发质量属性需求的事件或动作的来源(如用户、外部系统、时间、故障等)。
- 环境(Environment):刺激发生时的系统运行状态或外部条件(如正常运行、过载、高峰期、降级模式等)。
在架构评估过程中,评估人员关注的是系统的质量属性。主要包括:性能、可靠性、可用性、安全性、可修改性、功能性、可变性、互操作性。
在系统架构评估中,场景通常采用触发机制(刺激)、环境和影响三个方面来描述。场景是确定架构质量评估目标的交互机制,通过这三个方面的描述可以全面反映系统的质量属性。
架构评估中的关键点:
- 敏感点:实现质量目标的关键构件特性,变化显著影响系统表现
- 权衡点:同时影响多个质量属性,某属性提升会导致另一属性下降,需要权衡决策
- 风险点:架构决策中潜在问题,可能带来隐患
- 非风险点:经评估确认无潜在威胁或不利影响的点
总结:敏感点是一个或多个构件(和/或构件之间的关系)的特性。
权衡点是影响多个质量属性的特性,是多个质量属性的敏感点。
体系结构失配问题:
软件复用中,因构件对体系结构和环境的假设与实际不符导致冲突。
主要失配类型(构件组装阶段):
- 构件引起的失配:基础设施、控制模型、数据模型假设冲突
- 连接子引起的失配:交互协议、数据模型假设冲突
- 系统成分对全局体系结构假设冲突
解决方法:先检测失配,再通过适当手段消除。
软件架构复用
软件架构复用的类型包括机会复用和系统复用。
- 机会复用是指开发过程中,只要发现有可复用的资产,就对其进行复用。
- 系统复用是指在开发之前,就要进行规划,以决定哪些需要复用。
可复用的资产包括:需求、架构设计、元素、建模分析、测试、项目规划、过程+方法+工具、人员、样本系统、缺陷消除。一般形式的复用包括:函数的复用、库的复用、面向对象开发中的类、接口和包的复用。
复用过程遵循“构建/获取可复用的软件资产(复用前提)→管理可复用资产→使用可复用资产”的顺序。
系统架构评估方法
数据库系统
数据库完整性约束
实体完整性:主键唯一且非空(一行数据唯一标识,不能重复,不能缺主键值)
参照完整性:外键值要么为空,要么必须匹配被参照表的主键值(保证引用关系正确)
用户定义完整性:用户/业务自定义的约束(如年龄>0、性别只能是“男/女”、薪资≥最低工资等)
数据一致性:数据库整体数据在逻辑上保持正确、一致(以上三种完整性约束 + 事务一致性共同保障)
非关系型数据库特点总结:
- 键值(Key-Value)存储数据库。这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/Value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/Value就显得效率低下了。数据库产品包括:TokyoCabinet/Tyrant,Redis,Voldemort,Oracle BDB。
- 列存储数据库。这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。数据库产品包括:Cassandra,HBase,Riak。
- 文档型数据库。文档型数据库的灵感来自于Lotus Notes办公软件,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许中间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。数据库产品包括:CouchDB,MongoDb,SequoiaDB。
- 图形(Graph)数据库。图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它使用灵活的图形模型,并且能够扩展到多个服务器上。查询时利用图结构相关算法,比如最短路径寻址,N度关系查找等。数据库产品包括:Neo4J,InfoGrid,Infinite Graph。
非关系型数据的缺点:
- NoSQL数据库的现有产品不够成熟,大多数产品处于初创期。
- NoSQL数据库并未形成一定的标准,产品种类繁多,缺乏官方支持。
- NoSQL数据库不提供对SQL的支持,学习和应用迁移成本较高。
- NoSQL数据库支持的特性不够丰富,现有产品提供的功能比较有限。
数据库设计
数据库设计四个阶段:
用户需求分析
收集、分析用户业务需求、数据需求、处理需求,产出需求规格说明书。概念结构设计
抽象现实世界,形成独立于具体DBMS的E-R图(实体-联系模型),描述实体、属性、联系。逻辑结构设计
把E-R图转换为特定DBMS支持的数据模型(通常关系模型),设计表、字段、主外键、完整性约束等。物理结构设计
确定数据的存储结构与方法:文件组织方式、索引建立、存储分配、访问路径优化等。
ER图集成时产生的冲突及解决办法:
- 属性冲突:包括属性域冲突和属性取值冲突。
- 命名冲突:包括同名异义和异名同义。
- 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同。
分布式数据库
透明性:
- 分片透明
- 位置透明
- 局部数据模型透明
数据仓库和数据挖掘
自然语言处理:
- 机器翻译
- 语义理解
- 问答系统
数据挖掘的主要任务:
- 聚类分析
- 分类分析
- 关联规则挖掘等
大数据
大数据系统的特性:
- 鲁棒性:软件系统在非正常的情况下(如用户进行了非法操作,相关的软硬件系统发生了故障等)下仍然能够正常运行的能力
- 容错性
- 低延迟读取
- 更新能力
- 横向扩容
- 通用性
- 延展性
- 最少维护能力
- 可调试性
嵌入式操作系统
特点
嵌入式操作系统的特点:
- 专用性强。
- 技术融合
- 软硬件一体软件为主
- 比通用计算机资源少
- 程序代码固化在非易失存储器中
- 需专门开发工具和环境
- 体积小、价格低、工艺先进、性能价格比高、系统配置要求低、实时性强
- 对安全性和可靠性的要求高
嵌入式操作系统采用中断方式实现输入输出的主要原因是能突发事件快速做出相应。
知识产权和标准化
说明专利保护范围:权利要求书。
企业集成架构(常见指EAI或SOA/ESB相关)中最常提到的六大类服务(或集成层面)通常为:
- 表示集成(界面/门户集成)
- 数据集成
- 控制集成(应用逻辑/功能集成)
- 业务流程集成(过程集成)
- 门户集成(或企业门户集成)
- 企业间集成(B2B集成)
软件维护四类:
- 改正性维护:修BUG(纠正已发现错误)
- 适应性维护:适应环境变化(外部/数据环境)
- 完善性维护:增加新功能、提升性能
- 预防性维护:提前为未来变化做准备(如专用→通用)
软件可维护性7大因素:
- 可理解性:代码+文档易读(90-10测试)
- 可测试性:验证正确性容易(设计简单、复杂性低)
- 可修改性:修改难度低(D = A/C)
- 可靠性:故障少,维护需求低(MTTF或复杂性预测)
- 可移植性:易迁移到新环境(良好结构、机器无关语言)
- 可使用性:用户上手快(设计简单)
- 效率:功能/性能好且不浪费资源(过度优化会损害可维护性)
我国标准四类总结:
国家标准
代号:GB(强制) / GB/T(推荐)
编号:GB 8567-1988行业标准
代号:行业字母(如QJ、SJ、JB、HB)+ /T(推荐)
强制示例:HB 6698-1993
军用:GJB地方标准
代号:DB + 地区代码前两位(强制DBXX / 推荐DBXX/T)
编号:DB11 123—2023企业标准
代号:Q/ + 企业代码
编号:Q/XXX 001—2024
无强制/推荐之分,企业内部强制性文件
核心区分:制定主体 + 代号规则 + 强制/推荐标记
系统配置与性能评价
计算机的主要性能指标:字长、存取周期、运算速度、计算机即时存储信息的能力。
计算机系统的可用性可以从如下三个方面来进行评测:
- 故障率
- 健壮性
- 可恢复性
计算机评价的主要性能指标有时钟频率(主频)、运算速度、运算精度、内存的存储容量、存储器的存取周期、数据处理速率(Processing Data Rate,PDR) 、吞吐率、各种响应 时间、各种利用率、 RASIS 特性(即可靠性 Reliability、可用性 Availability、可维护性、完整 性和安全性、平均故障响应时间、兼容性、可扩充性和性能价格比)。
操作系统的性能指标有系统的可靠性、系统的吞吐率(量)、系统响应时间、 系统资源利用率、可移植性。
数据库管理系统的主要性能指标包括数据库本身和管理系统两部分,即数据库的大 小、数据库中表的数量、单个表的大小、表中允许的记录(行) 数量、单个记录(行) 的大 小、表中所允许的索引数量、数据库所允许的索引数量、最大并发事务处理能力、负载均衡 能力及最大连接数等。
系统性能测试方法:
- 真实程序
- 核心程序
- 小型基准程序
- 合成基准程序
基准测试的目的:旨在通过运行标准程序,对多种计算机系统进行性能检查与比较。
基准测试:运行一个标准程序对多种计算机系统进行检查,以比较和评价它们的性能。
设计模式总结
设计模式特点
| 设计模式 | 特点 |
|---|---|
| 桥接模式 | 用于把抽象化与实现化解耦,使得二者可以独立变化。 这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 |
| 组合模式 | 是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 |
| 装饰器模式 | 允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能 |
| 享元模式 | 用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 |
| 观察者模式 | 定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 |
| 访问者模式 | 使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。 根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 |
| 中介者模式 | 定义了一个中介对象来封装一系列对象之间的交互。中介者使各对象之间不需要显式地相互引用,从而使其耦合松散,且可以独立地改变它们之间的交互。 |
| 适配器模式 | 充当两个不兼容接口之间的桥梁。 它通过一个中间件(适配器)将一个类的接口转换成客户期望的另一个接口,使原本不能一起工作的类能够协同工作。 |
设计模式分类
| 类型 | 模式名称 |
|---|---|
| 结构型 | 适配器、桥接、组合、装饰者、外观、享元、代理 |
| 行为型 | 责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者 |
| 创建型 | 单例、工厂方法、抽象工厂、建造者、原型 |
数学与经济管理
阿姆达尔定律,系统整体加速比计算公式为:
整体加速比 = 1 / [(1 - p) + p/s]
容斥原理
- 三者交集放中间
- 两两交集减中间
- 用总人数减其它
- 最后求全集
未来信息综合技术
数字孪生
数字孪生的三项核心技术
- 建模:构建物理实体的精确数字模型,这是数字孪生的基础,包含结构、功能和行为的数字化。
- 仿真:在数字模型中模拟物理实体的运行过程、性能和潜在变化,进行预测和测试。
- 数字线程:贯穿物理实体生命周期的实时数据流,将传感器数据、分析结果与模型同步,实现双向信息流动和智能决策,如可视化与预测分析。
数字孪生的三大组成部分
- 物理实体:现实世界中被数字化的对象(设备、系统、流程等)。
- 虚拟/数字模型:物理实体的数字化映射,包含数据、算法和工程模型。
- 实时数据流:连接物理实体与虚拟模型的桥梁,通过传感器收集数据并传输,实现同步。
边缘计算
边缘计算介绍
边缘计算是一种分布式计算模式,它将数据处理和存储能力移至数据源(如IoT设备、用户设备或本地服务器)的“网络边缘”,靠近实际生成和使用数据的地方,以减少延迟、降低带宽需求并提高效率,而不是将所有数据都传输到遥远的中心云进行处理。这种方法能实现更快的实时决策、更好的性能和更高的安全性,特别适用于需要快速响应的应用,如物联网、自动驾驶和实时分析。
核心理念
- 靠近数据:计算发生在数据产生的地方或网络边缘,而不是集中在遥远的数据中心。
- 分散处理:将部分计算任务从云端下沉到本地设备或边缘节点。
主要优势
- 低延迟:数据在本地处理,显著缩短了数据传输时间,实现毫秒级响应。
- 减少带宽:仅将处理后的关键数据发送到云端,大大节省了网络带宽。
- 提高效率:更快的实时洞察和决策,优化了应用性能。
- 增强安全性:敏感数据在本地处理,减少了在公共互联网上暴露的风险。
典型应用
- 物联网:智慧城市、智能制造中的设备实时监控和控制。
- 人工智能/机器学习:在本地运行图像识别、视频分析等,提供即时反馈。
- 自动驾驶:车辆实时处理传感器数据以做出驾驶决策。
- 智能零售:分析顾客行为,提供个性化推荐。
- 医疗保健:远程患者监护、即时健康数据分析。
- 智慧园区
- 安卓云与云游戏
- 智能家居
边缘计算系统通常结合了边缘设备(如传感器、网关)和本地小型服务器,通过智能管理,让数据在边缘进行预处理、分析和部分决策,只有需要长期存储或复杂训练的数据才发送到云端。
传统云计算模型中引入边缘计算模型的优势。
- 速度:如果使用边缘计算,则物联网设备将在边缘数据中心或本地处理数据。因此,数据无需传输回中央服务器,速度优势明显;
- 安全:边缘计算将在不同的数据中心和设备之间分配数据处理工作。黑客无法通过攻击一台设备来影响整个网络;
- 可扩展性:通过购买具有足够计算能力的设备来扩展边缘网络。企业无需为其数据需求建立自己的私有或集中式数据中心;
- 可靠性:所有的边缘数据中心和物联网设备都位于用户附近。因此,网络中断的可能性非常小。