文章目录
- 前言
- 基础
-
- 中间件基础知识
-
- [1. 中间件概述](#1. 中间件概述)
- [2. 消息中间件(MQ)](#2. 消息中间件(MQ))
- [3. 缓存中间件](#3. 缓存中间件)
-
- [3.1 Redis 基础](#3.1 Redis 基础)
- [3.2 缓存三大问题](#3.2 缓存三大问题)
- [3.3 Memcached vs Redis 对比](#3.3 Memcached vs Redis 对比)
- [3.4 分布式锁](#3.4 分布式锁)
- [4. Web 中间件与应用服务器](#4. Web 中间件与应用服务器)
- [5. 数据库中间件](#5. 数据库中间件)
- [6. ESB(企业服务总线)](#6. ESB(企业服务总线))
- [7. 分布式协调中间件](#7. 分布式协调中间件)
-
- [7.1 ZooKeeper](#7.1 ZooKeeper)
- [7.2 Nacos(近年考试新增热点)](#7.2 Nacos(近年考试新增热点))
- 进制与编码基础计算
-
- [1. 进制转换](#1. 进制转换)
-
- [1.1 常用进制对照](#1.1 常用进制对照)
- [1.2 十进制 → 其他进制(除基取余法)](#1.2 十进制 → 其他进制(除基取余法))
- [1.3 其他进制 → 十进制(按权展开法)](#1.3 其他进制 → 十进制(按权展开法))
- [1.4 二进制 ↔ 八进制 / 十六进制(快速转换法)](#1.4 二进制 ↔ 八进制 / 十六进制(快速转换法))
- [2. 原码、反码、补码](#2. 原码、反码、补码)
-
- [2.1 基本概念](#2.1 基本概念)
- [2.2 转换规则](#2.2 转换规则)
- [2.3 特殊值](#2.3 特殊值)
- [2.4 补码运算(考试重点)](#2.4 补码运算(考试重点))
- [3. 定点数与浮点数](#3. 定点数与浮点数)
-
- [3.1 定点数](#3.1 定点数)
- [3.2 浮点数(考试重点)](#3.2 浮点数(考试重点))
- [4. 逻辑运算](#4. 逻辑运算)
-
- [4.1 基本逻辑运算](#4.1 基本逻辑运算)
- [4.2 真值表](#4.2 真值表)
- [4.3 常用逻辑公式](#4.3 常用逻辑公式)
- [5. 校验码(与进制计算密切相关)](#5. 校验码(与进制计算密切相关))
-
- [5.1 奇偶校验](#5.1 奇偶校验)
- [5.2 CRC 循环冗余校验码](#5.2 CRC 循环冗余校验码)
- [5.3 海明校验码](#5.3 海明校验码)
- [6. 数据表示范围速查表](#6. 数据表示范围速查表)
- [7. 编码基础](#7. 编码基础)
-
- [7.1 BCD 码(二进制编码的十进制)](#7.1 BCD 码(二进制编码的十进制))
- [7.2 字符编码](#7.2 字符编码)
- 人工智能与新兴技术基础
-
- [1. 人工智能概述](#1. 人工智能概述)
-
- [1.1 AI 的发展阶段](#1.1 AI 的发展阶段)
- [1.2 AI 技术体系](#1.2 AI 技术体系)
- [2. 知识图谱(Knowledge Graph)](#2. 知识图谱(Knowledge Graph))
-
- [2.1 基本概念](#2.1 基本概念)
- [2.2 构建流程](#2.2 构建流程)
- [2.3 典型应用场景](#2.3 典型应用场景)
- [2.4 知识图谱 vs 传统数据库](#2.4 知识图谱 vs 传统数据库)
- [3. 检索增强生成(RAG)](#3. 检索增强生成(RAG))
-
- [3.1 什么是 RAG](#3.1 什么是 RAG)
- [3.2 RAG 工作流程](#3.2 RAG 工作流程)
- [3.3 RAG 核心组件](#3.3 RAG 核心组件)
- [3.4 RAG vs 微调(Fine-tuning)](#3.4 RAG vs 微调(Fine-tuning))
- [4. 大语言模型(LLM)](#4. 大语言模型(LLM))
-
- [4.1 核心概念](#4.1 核心概念)
- [4.2 关键技术概念](#4.2 关键技术概念)
- [4.3 LLM 的局限性](#4.3 LLM 的局限性)
- [5. Agent(智能体)与工具调用](#5. Agent(智能体)与工具调用)
-
- [5.1 什么是 AI Agent](#5.1 什么是 AI Agent)
- [5.2 Agent 架构模式](#5.2 Agent 架构模式)
- [6. 向量数据库](#6. 向量数据库)
-
- [6.1 核心概念](#6.1 核心概念)
- [6.2 主流向量数据库对比](#6.2 主流向量数据库对比)
- [7. AI 系统架构设计要点](#7. AI 系统架构设计要点)
-
- [7.1 典型 AI 应用架构](#7.1 典型 AI 应用架构)
- [7.2 架构设计关键决策](#7.2 架构设计关键决策)
- [7.3 AI 系统的非功能性需求](#7.3 AI 系统的非功能性需求)
- [8. AI 相关新技术趋势](#8. AI 相关新技术趋势)
- 一、企业信息化战略与实施
- 二、软件工程
- 三、软件架构设计
- 四、系统安全分析与设计
- 五、系统可靠性分析与设计
- 六、项目管理
- 七、计算机组成与体系结构
- 八、系统配置与性能评价
- 九、操作系统
- 十、计算机网络
- 十一、数据库系统
- 十二、知识产权与标准化
- 十三、数学与经济管理
- 其他考察知识总结
- 错题知识总结
- 参考资料
前言
本系列文章为软考系统架构设计师笔记,参考 b 站相关视频及相关资料结合自身思考总结而成,参考资料在文末给出,感谢相关博主的分享。如有侵权,立即删除。
摘要:本文是软考系统架构设计师的全面学习笔记,系统梳理了考试核心知识点。内容涵盖中间件、软件工程、架构设计、系统安全、可靠性、项目管理、计算机组成、操作系统、网络、数据库等十二大知识领域。重点解析了消息队列、缓存、分布式协调等中间件技术,深入探讨了软件架构风格、质量属性、微服务、SOA等架构设计核心概念,并详细分析了系统可靠性计算、项目管理挣值法、存储层次、进程调度等关键技术要点。文章结构清晰,采用对比表格、记忆口诀、高频考点标注等方式帮助读者高效掌握考试重点,适合备考系统架构设计师的考生系统复习使用。
基础
基础部分是博主根据近年考试热点所补充知识
中间件基础知识
中间件是位于操作系统与应用程序之间的软件层,为分布式系统提供通信、数据交换、事务管理等公共服务。在系统架构设计师考试中,中间件既是综合知识的常考点,也是案例分析和论文的重要素材。
1. 中间件概述
- 定义 :中间件是一种独立的系统软件或服务程序,位于客户端和服务器之间,用于管理分布式系统中各组件之间的通信和数据交换。
- 分类
- 数据库访问中间件:提供统一的数据库访问接口(如 ODBC、JDBC)
- 远程过程调用(RPC)中间件:允许程序调用远程主机上的过程(如 gRPC、Dubbo)
- 消息中间件(MOM):基于消息传递实现异步通信(如 RabbitMQ、Kafka、RocketMQ)
- 交易中间件(TP Monitor):管理分布式事务处理(如 Tuxedo)
- 对象中间件:支持分布式对象交互(如 CORBA、EJB、COM/DCOM)
- 中间件在架构中的位置
- 应用程序 → 中间件 → 操作系统 → 硬件
- 中间件屏蔽了底层平台的差异,为上层应用提供统一的编程接口
- 采用中间件技术的优点 (高频考点)
- 面向需求:针对特定的业务需求提供解决方案
- 业务的分隔和包容性:不同业务系统可以独立运行
- 设计与实现隔离:应用开发者无需关注底层实现细节
- 隔离复杂的系统资源:屏蔽底层硬件和操作系统的复杂性
- 符合标准的交互模型:遵循标准协议和接口规范
- 软件复用:中间件本身可以被多个应用共享
- 提供对应用构件的管理:支持构件的部署、监控和管理
2. 消息中间件(MQ)
消息队列是架构设计中异步解耦的核心手段,也是案例分析题的高频素材。
- 核心概念
- 生产者(Producer):发送消息的应用
- 消费者(Consumer):接收并处理消息的应用
- 队列(Queue):存储消息的容器
- 主题(Topic):消息的分类标识,支持一对多广播
- 两种消息模型
- 点对点(Point-to-Point) :一条消息只能被一个消费者消费,消费后从队列中移除
- 发布/订阅(Pub/Sub) :一条消息可以被多个订阅者消费,适合广播场景
- 主流消息中间件对比
| 特性 | RabbitMQ | Kafka | RocketMQ |
|---|---|---|---|
| 开发语言 | Erlang | Scala/Java | Java |
| 吞吐量 | 万级 | 百万级 | 十万级 |
| 延迟 | 微秒级 | 毫秒级 | 毫秒级 |
| 可用性 | 高(镜像队列) | 非常高(分布式) | 非常高(主从) |
| 消息可靠性 | 高 | 较高(可配置) | 非常高 |
| 典型场景 | 企业级应用 | 日志收集、大数据流 | 电商、金融 |
| 消息顺序性 | 不保证 | 分区内有序 | 支持全局有序 |
- 典型应用场景 (案例分析常用)
- 异步解耦:用户下单后,订单系统发消息给库存系统和支付系统,各系统独立处理
- 流量削峰:秒杀场景下,请求先写入 MQ,后端按处理能力逐步消费
- 日志收集:Kafka 收集各服务日志,供 ELK 或大数据平台消费
- 事件驱动架构:基于消息的事件通知与处理
- 消息可靠性保证
- ACK 确认机制:消费者处理完成后发送确认,MQ 才删除消息
- 消息持久化:消息写入磁盘,防止服务重启丢失
- 死信队列(DLQ):多次消费失败的消息进入死信队列,人工处理
- 消息幂等性:消费者需保证同一条消息多次消费结果一致(通过唯一 ID 去重)
3. 缓存中间件
3.1 Redis 基础
- 定位 :开源的、基于**内存**的高性能键值存储数据库,兼具缓存和消息队列功能
- 单线程模型 :Redis 核心处理命令采用单线程(6.0+ 引入多线程 I/O),避免了上下文切换和锁竞争,瓶颈在网络 I/O 而非 CPU
- 五种基本数据结构及应用场景
| 数据结构 | 说明 | 典型应用场景 |
|---|---|---|
| String | 最基本类型,可存储字符串、整数、浮点数 | 缓存、计数器、分布式锁、Session |
| List | 双向链表,支持头尾操作 | 消息队列、最新消息列表、时间线 |
| Hash | 键值对集合,适合存储对象 | 用户信息、商品详情等对象缓存 |
| Set | 无序集合,元素唯一 | 标签系统、共同好友、去重 |
| Sorted Set(ZSet) | 有序集合,每个元素关联一个分数 | 排行榜、延时队列、范围查询 |
- 持久化机制 (考试重点)
- RDB(快照) :定时将内存数据快照写入磁盘
- 优点:恢复速度快,文件紧凑
- 缺点:可能丢失最后一次快照后的数据
- AOF(追加日志) :将每条写命令追加到日志文件
- 优点:数据更安全(可配置每秒/每次同步)
- 缺点:文件体积大,恢复速度慢
- 混合持久化 (Redis 4.0+):AOF 重写时,前半段用 RDB 格式,后半段用 AOF 命令,兼顾恢复速度和数据安全
- RDB(快照) :定时将内存数据快照写入磁盘
- 高可用方案
- 主从复制(Replication) :一主多从,主写从读,数据自动同步
- 哨兵模式(Sentinel) :监控主从节点,主节点故障时**自动故障转移**,选举新主节点
- 集群模式(Cluster) :数据分片(16384 个槽位),支持水平扩展,每个主节点负责一部分槽位
3.2 缓存三大问题
- 缓存雪崩
- 原因 :大量缓存 key 在同一时间过期,或 Redis 宕机,导致请求全部打到数据库
- 解决方案
- 随机过期时间:在基础过期时间上加随机值,避免集中过期
- 熔断降级:缓存失效后,加锁或队列控制并发,防止大量请求穿透到数据库
- Redis 高可用:采用哨兵或集群模式,避免单点故障
- 多级缓存:本地缓存(Caffeine/Guava) + 分布式缓存(Redis),Redis 不可用时降级到本地缓存
解决方案流程图:
#mermaid-svg-VvKwnHTbZNEZf2r3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VvKwnHTbZNEZf2r3 .error-icon{fill:#552222;}#mermaid-svg-VvKwnHTbZNEZf2r3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VvKwnHTbZNEZf2r3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .marker.cross{stroke:#333333;}#mermaid-svg-VvKwnHTbZNEZf2r3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VvKwnHTbZNEZf2r3 p{margin:0;}#mermaid-svg-VvKwnHTbZNEZf2r3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster-label text{fill:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster-label span{color:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster-label span p{background-color:transparent;}#mermaid-svg-VvKwnHTbZNEZf2r3 .label text,#mermaid-svg-VvKwnHTbZNEZf2r3 span{fill:#333;color:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .node rect,#mermaid-svg-VvKwnHTbZNEZf2r3 .node circle,#mermaid-svg-VvKwnHTbZNEZf2r3 .node ellipse,#mermaid-svg-VvKwnHTbZNEZf2r3 .node polygon,#mermaid-svg-VvKwnHTbZNEZf2r3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .rough-node .label text,#mermaid-svg-VvKwnHTbZNEZf2r3 .node .label text,#mermaid-svg-VvKwnHTbZNEZf2r3 .image-shape .label,#mermaid-svg-VvKwnHTbZNEZf2r3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-VvKwnHTbZNEZf2r3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .rough-node .label,#mermaid-svg-VvKwnHTbZNEZf2r3 .node .label,#mermaid-svg-VvKwnHTbZNEZf2r3 .image-shape .label,#mermaid-svg-VvKwnHTbZNEZf2r3 .icon-shape .label{text-align:center;}#mermaid-svg-VvKwnHTbZNEZf2r3 .node.clickable{cursor:pointer;}#mermaid-svg-VvKwnHTbZNEZf2r3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .arrowheadPath{fill:#333333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VvKwnHTbZNEZf2r3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VvKwnHTbZNEZf2r3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VvKwnHTbZNEZf2r3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster text{fill:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 .cluster span{color:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VvKwnHTbZNEZf2r3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VvKwnHTbZNEZf2r3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-VvKwnHTbZNEZf2r3 .icon-shape,#mermaid-svg-VvKwnHTbZNEZf2r3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VvKwnHTbZNEZf2r3 .icon-shape p,#mermaid-svg-VvKwnHTbZNEZf2r3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VvKwnHTbZNEZf2r3 .icon-shape .label rect,#mermaid-svg-VvKwnHTbZNEZf2r3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VvKwnHTbZNEZf2r3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VvKwnHTbZNEZf2r3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VvKwnHTbZNEZf2r3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
解决方案
随机过期时间
熔断降级
Redis高可用
多级缓存
大量请求同时到达
缓存是否
大面积失效?
请求直接访问数据库
数据库压力骤增
(雪崩发生)
正常返回缓存数据
系统恢复稳定
- 缓存穿透
- 原因 :查询一个**数据库中也不存在**的数据,缓存永远不会命中,每次都查库
- 解决方案
- 缓存空值:查询结果为空时,也将空结果缓存(设置较短过期时间)
- 布隆过滤器(Bloom Filter) :在缓存前加一层布隆过滤器,快速判断 key 是否可能存在。布隆过滤器基于多个哈希函数和位数组,判定"不存在"则一定不存在,判定"存在"可能存在误判。可以有效拦截无效请求。
解决方案流程图:
#mermaid-svg-memApmhQDt3tvlG4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-memApmhQDt3tvlG4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-memApmhQDt3tvlG4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-memApmhQDt3tvlG4 .error-icon{fill:#552222;}#mermaid-svg-memApmhQDt3tvlG4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-memApmhQDt3tvlG4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-memApmhQDt3tvlG4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-memApmhQDt3tvlG4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-memApmhQDt3tvlG4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-memApmhQDt3tvlG4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-memApmhQDt3tvlG4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-memApmhQDt3tvlG4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-memApmhQDt3tvlG4 .marker.cross{stroke:#333333;}#mermaid-svg-memApmhQDt3tvlG4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-memApmhQDt3tvlG4 p{margin:0;}#mermaid-svg-memApmhQDt3tvlG4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-memApmhQDt3tvlG4 .cluster-label text{fill:#333;}#mermaid-svg-memApmhQDt3tvlG4 .cluster-label span{color:#333;}#mermaid-svg-memApmhQDt3tvlG4 .cluster-label span p{background-color:transparent;}#mermaid-svg-memApmhQDt3tvlG4 .label text,#mermaid-svg-memApmhQDt3tvlG4 span{fill:#333;color:#333;}#mermaid-svg-memApmhQDt3tvlG4 .node rect,#mermaid-svg-memApmhQDt3tvlG4 .node circle,#mermaid-svg-memApmhQDt3tvlG4 .node ellipse,#mermaid-svg-memApmhQDt3tvlG4 .node polygon,#mermaid-svg-memApmhQDt3tvlG4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-memApmhQDt3tvlG4 .rough-node .label text,#mermaid-svg-memApmhQDt3tvlG4 .node .label text,#mermaid-svg-memApmhQDt3tvlG4 .image-shape .label,#mermaid-svg-memApmhQDt3tvlG4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-memApmhQDt3tvlG4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-memApmhQDt3tvlG4 .rough-node .label,#mermaid-svg-memApmhQDt3tvlG4 .node .label,#mermaid-svg-memApmhQDt3tvlG4 .image-shape .label,#mermaid-svg-memApmhQDt3tvlG4 .icon-shape .label{text-align:center;}#mermaid-svg-memApmhQDt3tvlG4 .node.clickable{cursor:pointer;}#mermaid-svg-memApmhQDt3tvlG4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-memApmhQDt3tvlG4 .arrowheadPath{fill:#333333;}#mermaid-svg-memApmhQDt3tvlG4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-memApmhQDt3tvlG4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-memApmhQDt3tvlG4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-memApmhQDt3tvlG4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-memApmhQDt3tvlG4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-memApmhQDt3tvlG4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-memApmhQDt3tvlG4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-memApmhQDt3tvlG4 .cluster text{fill:#333;}#mermaid-svg-memApmhQDt3tvlG4 .cluster span{color:#333;}#mermaid-svg-memApmhQDt3tvlG4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-memApmhQDt3tvlG4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-memApmhQDt3tvlG4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-memApmhQDt3tvlG4 .icon-shape,#mermaid-svg-memApmhQDt3tvlG4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-memApmhQDt3tvlG4 .icon-shape p,#mermaid-svg-memApmhQDt3tvlG4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-memApmhQDt3tvlG4 .icon-shape .label rect,#mermaid-svg-memApmhQDt3tvlG4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-memApmhQDt3tvlG4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-memApmhQDt3tvlG4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-memApmhQDt3tvlG4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不存在
判定"不存在"
判定"可能存在"
存在
不存在
存在
请求查询不存在的数据
缓存是否存在?
布隆过滤器判断
直接返回空/错误
(拦截无效请求)
查询数据库
数据库是否存在?
写入缓存并返回
缓存空值(短过期时间)
返回空结果
正常返回缓存数据
- 缓存击穿
- 原因 :某个**热点 key 过期**的瞬间,大量并发请求同时打到数据库
- 解决方案
- 互斥锁(Mutex Lock):缓存失效时,只允许一个线程去查库并回填缓存,其他线程等待
- 热点 key 永不过期:不设置过期时间,由后台线程定期更新
- 提前预热:在热点 key 即将过期时主动刷新
解决方案流程图:
#mermaid-svg-0N5XrRACKP5h4q3G{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0N5XrRACKP5h4q3G .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0N5XrRACKP5h4q3G .error-icon{fill:#552222;}#mermaid-svg-0N5XrRACKP5h4q3G .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0N5XrRACKP5h4q3G .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0N5XrRACKP5h4q3G .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0N5XrRACKP5h4q3G .marker.cross{stroke:#333333;}#mermaid-svg-0N5XrRACKP5h4q3G svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0N5XrRACKP5h4q3G p{margin:0;}#mermaid-svg-0N5XrRACKP5h4q3G .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0N5XrRACKP5h4q3G .cluster-label text{fill:#333;}#mermaid-svg-0N5XrRACKP5h4q3G .cluster-label span{color:#333;}#mermaid-svg-0N5XrRACKP5h4q3G .cluster-label span p{background-color:transparent;}#mermaid-svg-0N5XrRACKP5h4q3G .label text,#mermaid-svg-0N5XrRACKP5h4q3G span{fill:#333;color:#333;}#mermaid-svg-0N5XrRACKP5h4q3G .node rect,#mermaid-svg-0N5XrRACKP5h4q3G .node circle,#mermaid-svg-0N5XrRACKP5h4q3G .node ellipse,#mermaid-svg-0N5XrRACKP5h4q3G .node polygon,#mermaid-svg-0N5XrRACKP5h4q3G .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0N5XrRACKP5h4q3G .rough-node .label text,#mermaid-svg-0N5XrRACKP5h4q3G .node .label text,#mermaid-svg-0N5XrRACKP5h4q3G .image-shape .label,#mermaid-svg-0N5XrRACKP5h4q3G .icon-shape .label{text-anchor:middle;}#mermaid-svg-0N5XrRACKP5h4q3G .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0N5XrRACKP5h4q3G .rough-node .label,#mermaid-svg-0N5XrRACKP5h4q3G .node .label,#mermaid-svg-0N5XrRACKP5h4q3G .image-shape .label,#mermaid-svg-0N5XrRACKP5h4q3G .icon-shape .label{text-align:center;}#mermaid-svg-0N5XrRACKP5h4q3G .node.clickable{cursor:pointer;}#mermaid-svg-0N5XrRACKP5h4q3G .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0N5XrRACKP5h4q3G .arrowheadPath{fill:#333333;}#mermaid-svg-0N5XrRACKP5h4q3G .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0N5XrRACKP5h4q3G .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0N5XrRACKP5h4q3G .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0N5XrRACKP5h4q3G .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0N5XrRACKP5h4q3G .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0N5XrRACKP5h4q3G .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0N5XrRACKP5h4q3G .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0N5XrRACKP5h4q3G .cluster text{fill:#333;}#mermaid-svg-0N5XrRACKP5h4q3G .cluster span{color:#333;}#mermaid-svg-0N5XrRACKP5h4q3G div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0N5XrRACKP5h4q3G .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0N5XrRACKP5h4q3G rect.text{fill:none;stroke-width:0;}#mermaid-svg-0N5XrRACKP5h4q3G .icon-shape,#mermaid-svg-0N5XrRACKP5h4q3G .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0N5XrRACKP5h4q3G .icon-shape p,#mermaid-svg-0N5XrRACKP5h4q3G .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0N5XrRACKP5h4q3G .icon-shape .label rect,#mermaid-svg-0N5XrRACKP5h4q3G .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0N5XrRACKP5h4q3G .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0N5XrRACKP5h4q3G .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0N5XrRACKP5h4q3G :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 未过期
已过期
是
否
是
否
大量并发请求热点Key
缓存是否过期?
正常返回缓存数据
尝试获取互斥锁
获取锁成功?
查询数据库并回填缓存
释放锁
返回数据
等待短暂时间
缓存是否已更新?
获取缓存数据并返回
3.3 Memcached vs Redis 对比
| 对比维度 | Memcached | Redis |
|---|---|---|
| 数据结构 | 仅 String(Key-Value) | String、List、Hash、Set、ZSet |
| 持久化 | 不支持 | 支持 RDB 和 AOF |
| 集群 | 客户端分片 | 原生 Cluster 支持 |
| 线程模型 | 多线程 | 单线程(6.0+ 多线程 I/O) |
| 内存效率 | 较高(slab 分配) | 一般(有额外结构开销) |
| 适用场景 | 纯缓存、简单 KV | 缓存 + 消息队列 + 分布式锁 + 排行榜等 |
3.4 分布式锁
- 实现原理 :利用 Redis 的
SET key value NX EX命令(NX 表示 key 不存在时才设置,EX 设置过期时间) - 关键要点
- 必须设置过期时间,防止持有锁的进程崩溃导致死锁
- 释放锁时需要验证是否是自己持有的锁(通过 Lua 脚本保证原子性)
- Redlock 算法 :在多个独立 Redis 节点上加锁,多数成功才算加锁成功,解决单点故障问题
4. Web 中间件与应用服务器
- Web 服务器 :处理 HTTP 请求,提供静态资源服务
- Nginx:高性能反向代理服务器,支持负载均衡、静态资源服务、限流
- Apache HTTP Server:老牌 Web 服务器,模块丰富
- 应用服务器 :运行业务逻辑,支持动态内容生成
- Tomcat:轻量级 Servlet 容器,支持 JSP/Servlet
- Jetty:嵌入式 Web 容器,适合微服务场景
- 正向代理 vs 反向代理
- 正向代理 :代理客户端,服务器不知道真实客户端(如 VPN、科学上网)
- 反向代理 :代理服务器,客户端不知道真实服务器(如 Nginx 负载均衡)
- Nginx 核心能力
- 反向代理与负载均衡
- 静态资源服务
- 限流与熔断
- HTTPS 终端(SSL 卸载)
- URL 重写与转发
5. 数据库中间件
- 读写分离 :主库写、从库读 ,中间件负责 SQL 路由
- 典型产品:ShardingSphere、MyCat
- 分库分表
- 垂直分库 :按业务模块拆分(用户库、订单库、商品库)
- 水平分表 :按数据行拆分(如用户表按 user_id 取模分到多张表)
- 分片策略:Hash 取模、范围分片、一致性 Hash
- 数据库连接池
- 作用:复用数据库连接,避免频繁创建/销毁连接的开销
- 核心参数:最小连接数、最大连接数、连接超时时间、空闲连接回收
- 常见实现:HikariCP、Druid、C3P0
6. ESB(企业服务总线)
- 定义 :ESB 是 SOA 架构中的核心基础设施,提供服务之间的通信、路由、转换和管理功能
- 核心功能
- 服务路由:根据请求内容将消息路由到目标服务
- 协议转换:在不同通信协议之间进行转换(如 HTTP ↔ JMS)
- 消息转换:在不同数据格式之间转换(如 XML ↔ JSON)
- 服务编排:将多个服务组合成一个业务流程
- ESB vs API 网关
| 对比维度 | ESB | API 网关 |
|---|---|---|
| 定位 | 企业内部服务集成 | 对外暴露 API 管理 |
| 协议 | 支持多种企业协议 | 主要 HTTP/HTTPS |
| 重量级 | 重量级,功能全面 | 轻量级,专注 API |
| 适用场景 | 传统 SOA 架构 | 微服务架构 |
| 典型产品 | WSO2、MuleSoft | Kong、Zuul、Spring Cloud Gateway |
7. 分布式协调中间件
7.1 ZooKeeper
- 定位 :分布式协调服务,提供**分布式一致性保障**
- 核心特性
- ZAB 协议:ZooKeeper Atomic Broadcast,保证分布式数据一致性
- 数据模型:树形结构(类似文件系统),每个节点称为 ZNode
- 临时节点 :客户端断开连接后自动删除,用于服务注册发现
- Watcher 机制:客户端监听节点变化,变化时收到通知
- 典型应用场景
- 分布式锁:基于临时顺序节点实现公平锁
- 配置中心:配置信息存储在 ZNode,变更时通知所有客户端
- 服务注册与发现:服务提供者注册为临时节点,消费者监听节点列表
- Leader 选举:利用临时节点的唯一性实现主节点选举
7.2 Nacos(近年考试新增热点)
- 定位:阿里巴巴开源的服务发现和配置管理平台
- 核心功能:服务注册发现 + 动态配置管理 + 服务健康检查
- 与 ZooKeeper 的区别 :Nacos 同时支持 CP(强一致性) 和 AP(高可用) 模式,更适合作为微服务注册中心
进制与编码基础计算
进制转换和编码计算是系统架构设计师考试上午题的必考基础,几乎每年都会出 1-2 道计算题。掌握以下内容可稳拿 2-4 分。
1. 进制转换
1.1 常用进制对照
| 进制 | 基数 | 数码 | 前缀/后缀 | 示例 |
|---|---|---|---|---|
| 二进制(B) | 2 | 0, 1 | 0b 或 B | 0b1010 = 10 |
| 八进制(O) | 8 | 0-7 | 0 或 O | 012 = 10 |
| 十进制(D) | 10 | 0-9 | 无 | 10 |
| 十六进制(H) | 16 | 0-9, A-F | 0x 或 H | 0xA = 10 |
1.2 十进制 → 其他进制(除基取余法)
- 整数部分 :除以基数,取余数,从下往上读
- 小数部分 :乘以基数,取整数,从上往下读
例题:将十进制 13.625 转换为二进制
- 整数部分 13:13÷2=6...1 ,6÷2=3...0 ,3÷2=1...1 ,1÷2=0...1 → 1101
- 小数部分 0.625:0.625×2=1 .25,0.25×2=0 .5,0.5×2=1 .0 → 101
- 结果:13.625 = 1101.101(B)
1.3 其他进制 → 十进制(按权展开法)
- 方法:每一位数码 × 基数的位权次幂,然后求和
例题:将二进制 1011.101 转换为十进制
- 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³
- = 8 + 0 + 2 + 1 + 0.5 + 0 + 0.125 = 11.625
1.4 二进制 ↔ 八进制 / 十六进制(快速转换法)
- 二进制 → 八进制 :每 3 位二进制一组,转为 1 位八进制(因为 2³ = 8)
- 二进制 → 十六进制 :每 4 位二进制一组,转为 1 位十六进制(因为 2⁴ = 16)
例题:二进制 10 110 011 → 八进制
- 分组:010 | 110 | 011(高位补 0 凑 3 位)
- 转换:2 | 6 | 3 → 263(O)
例题:二进制 1011 0011 → 十六进制
- 分组:1011 | 0011
- 转换:B | 3 → B3(H)
2. 原码、反码、补码
计算机内部一律使用补码存储和运算,这是考试的核心考点。
2.1 基本概念
| 码制 | 正数(以 +5 为例,8 位) | 负数(以 -5 为例,8 位) |
|---|---|---|
| 原码 | 0 0000101 | 1 0000101(符号位为 1) |
| 反码 | 0 0000101 | 1 1111010(符号位不变,其余取反) |
| 补码 | 0 0000101 | 1 1111011(反码 + 1) |
2.2 转换规则
- 正数 :原码 = 反码 = 补码(三码合一)
- 负数
- 原码 → 反码 :符号位不变,其余各位取反
- 反码 → 补码 :末位加 1
- 原码 → 补码快捷法:从右往左找到第一个 1,该 1 及其右边不变,左边(不含符号位)全部取反
- 补码 → 原码:对补码再求一次补码(即取反加 1)
2.3 特殊值
| 表示 | 原码 | 反码 | 补码 |
|---|---|---|---|
| +0 | 0 0000000 | 0 0000000 | 0 0000000 |
| -0 | 1 0000000 | 1 1111111 | 0 0000000(与 +0 相同) |
| -128 | 无原码表示 | 无反码表示 | 1 0000000 |
- 8 位补码的表示范围:-128 ~ +127(比原码多表示一个 -128)
- n 位补码的表示范围:-2^(n-1) ~ +2^(n-1) - 1
2.4 补码运算(考试重点)
- 补码加法 :A+B补 = A补 + B补 (直接相加,符号位参与运算,进位自动丢弃)
- 补码减法 :A-B补 = A补 + -B补(减法变加法,对减数求负的补码)
例题:用 8 位补码计算 5 + (-3)
- 5补 = 0 0000101
- -3补:原码 1 0000011 → 反码 1 1111100 → 补码 1 1111101
- 相加:0 0000101 + 1 1111101 = 1 0000010(进位丢弃)
- 结果的补码 1 0000010 → 原码为 0 0000010 = +2 ✓
3. 定点数与浮点数
3.1 定点数
- 定点整数:小数点固定在最低有效位之后,纯整数表示
- 定点小数:小数点固定在符号位之后、最高有效位之前,纯小数表示
3.2 浮点数(考试重点)
- 表示格式 :N = M × 2^E
- M(尾数/Mantissa):表示精度,用定点小数表示
- E(阶码/Exponent):表示范围,用定点整数表示
- 基数(Radix):2(二进制)
- IEEE 754 单精度浮点数(32 位)(高频考点)
| 部分 | 位数 | 含义 |
|---|---|---|
| 符号位 S | 1 位 | 0 正 1 负 |
| 阶码 E | 8 位 | 偏移量为 127(即实际指数 = E - 127) |
| 尾数 M | 23 位 | 隐含前导 1(即实际尾数 = 1.M) |
- IEEE 754 双精度浮点数(64 位)
| 部分 | 位数 | 含义 |
|---|---|---|
| 符号位 S | 1 位 | 0 正 1 负 |
| 阶码 E | 11 位 | 偏移量为 1023 |
| 尾数 M | 52 位 | 隐含前导 1 |
- 计算公式 :N = (-1)^S × 1.M × 2^(E-偏移量)
例题 :某 IEEE 754 单精度浮点数为 0 10000010 01000000000000000000000,求其十进制值。
- S = 0(正数)
- E = 10000010(B)= 130,实际指数 = 130 - 127 = 3
- M = 0100000...,实际尾数 = 1.01(B)= 1 + 0.25 = 1.25
- 结果 = (+1) × 1.25 × 2³ = 1.25 × 8 = 10
4. 逻辑运算
4.1 基本逻辑运算
| 运算 | 符号 | 规则 | 记忆口诀 |
|---|---|---|---|
| 与(AND) | ∧ 或 · | 有 0 则 0,全 1 才 1 | 乘法逻辑 |
| 或(OR) | ∨ 或 + | 有 1 则 1,全 0 才 0 | 加法逻辑 |
| 非(NOT) | ¬ 或 ¯ | 0 变 1,1 变 0 | 取反 |
| 异或(XOR) | ⊕ | 相同为 0,不同为 1 | 不进位加法 |
4.2 真值表
| A | B | A∧B | A∨B | A⊕B | ¬A |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 |
4.3 常用逻辑公式
- 德摩根定律 (考试常考)
- ¬(A∧B) = ¬A ∨ ¬B
- ¬(A∨B) = ¬A ∧ ¬B
- 记忆:"长杠变短杠,开口换方向"
- 其他常用公式
- A ∧ 0 = 0,A ∧ 1 = A,A ∧ A = A
- A ∨ 0 = A,A ∨ 1 = 1,A ∨ A = A
- A ⊕ 0 = A,A ⊕ 1 = ¬A,A ⊕ A = 0
5. 校验码(与进制计算密切相关)
5.1 奇偶校验
- 奇校验 :数据位 + 校验位中
1的个数为奇数 - 偶校验 :数据位 + 校验位中
1的个数为偶数 - 只能检 1 位错,不能纠错
例题:数据 1011001,采用奇校验,校验位为?
- 数据中 1 的个数 = 4(偶数),要使总数为奇数,校验位 = 1
5.2 CRC 循环冗余校验码
- 可检错,不可纠错
- 计算步骤
- 设生成多项式最高次为 r,在数据后补 r 个 0
- 用补 0 后的数据模 2 除法(异或运算) 除以生成多项式
- 得到的余数即为校验码,附加在原始数据后发送
- 模 2 除法 :不考虑借位,相当于异或运算
例题:数据 1100,生成多项式 1011(最高次为 3),求 CRC 码。
- 补 3 个 0:1100000
- 模 2 除法:1100000 ÷ 1011
- 1100 ⊕ 1011 = 0111
- 01110 ⊕ 1011 = 0101
- 01010 ⊕ 1011 = 0001
- 00010 ÷ 1011 = 0...010(不够除,余数为 010)
- CRC 码 = 1100 010(原始数据 + 余数)
5.3 海明校验码
- 既可检错,也可纠错
- 校验位数量公式 :2^r ≥ m + r + 1(r 为校验位数,m 为信息位数)
例题:数据 8 位,至少需要几个校验位?
- 2^r ≥ 8 + r + 1
- r=4 时:2⁴ = 16 ≥ 8+4+1 = 13 ✓
- 答:至少需要 4 个校验位
6. 数据表示范围速查表
| 数据类型 | 位数 | 无符号范围 | 有符号(补码)范围 |
|---|---|---|---|
| 字节(Byte) | 8 位 | 0 ~ 255(2⁸-1) | -128 ~ +127 |
| 字(Word) | 16 位 | 0 ~ 65535(2¹⁶-1) | -32768 ~ +32767 |
| 双字(DWord) | 32 位 | 0 ~ 2³²-1 | -2³¹ ~ +2³¹-1 |
- n 位无符号数范围:0 ~ 2^n - 1
- n 位有符号数(补码)范围:-2^(n-1) ~ +2^(n-1) - 1
7. 编码基础
7.1 BCD 码(二进制编码的十进制)
- 8421 码:用 4 位二进制表示 1 位十进制,权重从高到低为 8-4-2-1
| 十进制 | 8421 码 | 十进制 | 8421 码 |
|---|---|---|---|
| 0 | 0000 | 5 | 0101 |
| 1 | 0001 | 6 | 0110 |
| 2 | 0010 | 7 | 0111 |
| 3 | 0011 | 8 | 1000 |
| 4 | 0100 | 9 | 1001 |
- 8421 码的加法修正 :两个 8421 码相加,如果结果 > 9(即 > 1001),需要加 6(0110)修正
例题:8421 码计算 7 + 5
- 0111 + 0101 = 1100(十进制 12,> 9,需要修正)
- 1100 + 0110 = 1 0010 ,即十进制 12(0001 0010)
7.2 字符编码
- ASCII 码 :7 位编码,共 128 个字符
- 数字 '0'-'9':48-57(0x30-0x39)
- 大写 'A'-'Z':65-90(0x41-0x5A)
- 小写 'a'-'z':97-122(0x61-0x7A)
- 记忆:大写 A = 65,小写 a = 97,数字 0 = 48
- Unicode:统一编码,UTF-8 是变长编码(1-4 字节),中文一般占 3 字节
- GB2312 / GBK:中文编码,GBK 兼容 GB2312
人工智能与新兴技术基础
近年软考高级系统架构设计师考试中,AI 相关考点比重持续上升,尤其在案例分析和论文中频繁出现。本节梳理考试需要掌握的 AI 核心概念与架构设计要点。
1. 人工智能概述
1.1 AI 的发展阶段
| 阶段 | 时间 | 核心特征 | 代表技术 |
|---|---|---|---|
| 符号主义 | 1950s-1980s | 基于规则和逻辑推理 | 专家系统、知识表示 |
| 连接主义 | 1980s-2010s | 基于神经网络和统计学习 | BP 神经网络、SVM |
| 深度学习 | 2012-2020 | 多层神经网络自动提取特征 | CNN、RNN、Transformer |
| 大模型时代 | 2020-至今 | 大规模预训练 + 涌现能力 | GPT、大语言模型(LLM) |
1.2 AI 技术体系
- 机器学习(ML) :让计算机从数据中自动学习规律
- 监督学习:有标注数据,学习输入→输出映射(分类、回归)
- 无监督学习:无标注数据,发现数据内在结构(聚类、降维)
- 强化学习:通过与环境交互获得奖励来学习策略(AlphaGo)
- 深度学习(DL):机器学习的子集,使用多层神经网络
- 自然语言处理(NLP):让机器理解和生成人类语言
- 计算机视觉(CV):让机器"看懂"图像和视频
- 知识工程:知识表示、知识获取、知识推理
2. 知识图谱(Knowledge Graph)
知识图谱是系统架构设计师考试中 AI 考点的高频词汇,案例分析中常与语义网、智能搜索结合出题。
2.1 基本概念
- 定义 :知识图谱是一种用图结构来表示和组织知识的语义知识库 ,以**实体(节点)和关系(边)**为基本单元,描述现实世界中的概念及其相互关系
- 表示形式 :三元组(Subject, Predicate, Object) ,即(主语,谓语,宾语)
- 例:(北京,是中国的,首都)
- 例:(爱因斯坦,出生于,乌尔姆)
- 核心组成
- 本体(Ontology) :定义概念、属性和关系的模式层(Schema),是知识图谱的"骨架"
- 实例(Instance) :填充具体数据的数据层(Data),是知识图谱的"血肉"
2.2 构建流程
- 信息抽取 :从非结构化/半结构化数据中提取实体、关系和属性
- 命名实体识别(NER):识别人名、地名、机构名等
- 关系抽取:判断实体之间的语义关系
- 属性抽取:提取实体的属性信息
- 知识融合:消歧(同一实体不同表述)、对齐(不同来源的知识统一)
- 知识推理:基于已有知识推导隐含知识(如:A 是 B 的父亲,B 是 C 的父亲 → A 是 C 的祖父)
- 知识存储 :使用图数据库(如 Neo4j)或 RDF 三元组存储
2.3 典型应用场景
- 智能搜索与问答:Google 知识图谱、百度知心
- 推荐系统:基于实体关系的精准推荐
- 智能客服:理解用户意图,关联相关知识
- 风控系统:识别企业/个人之间的关联关系
2.4 知识图谱 vs 传统数据库
| 对比维度 | 知识图谱 | 关系型数据库 |
|---|---|---|
| 数据模型 | 图结构(实体+关系) | 二维表结构 |
| 查询语言 | SPARQL / Cypher | SQL |
| 擅长场景 | 复杂关系推理、语义搜索 | 结构化数据的 CRUD |
| Schema | 灵活,可动态扩展 | 严格,修改成本高 |
| 典型产品 | Neo4j、JanusGraph | MySQL、Oracle |
3. 检索增强生成(RAG)
RAG 是当前大模型应用架构中最核心的技术模式,案例分析和论文中都有可能涉及。
3.1 什么是 RAG
- 全称:Retrieval-Augmented Generation(检索增强生成)
- 核心思想 :先从外部知识库中检索相关信息,再将检索结果作为上下文输入给大语言模型生成答案
- 解决的问题 :
- 大模型的知识截止问题(训练数据有时效性)
- 大模型的幻觉问题(生成看似合理但不正确的内容)
- 企业私有数据无法被通用大模型覆盖
3.2 RAG 工作流程
用户提问 → 向量检索 → 获取相关文档片段 → 拼接 Prompt → 大模型生成答案
- 知识库构建 (离线阶段)
- 文档加载 → 文本分块(Chunking) → 向量化(Embedding) → 存入向量数据库
- 检索与生成 (在线阶段)
- 用户问题 → 向量化 → 在向量数据库中相似度检索 Top-K 相关片段
- 将检索到的片段 + 用户问题 → 拼接成 Prompt → 送入 LLM → 生成答案
3.3 RAG 核心组件
| 组件 | 作用 | 典型技术/产品 |
|---|---|---|
| 文档加载器 | 解析 PDF/Word/网页等格式 | LangChain DocumentLoader |
| 文本分块器 | 将长文档切分为合适大小的片段 | 固定长度分块、语义分块 |
| Embedding 模型 | 将文本转换为高维向量 | OpenAI Embedding、BGE、M3E |
| 向量数据库 | 存储和检索向量 | Milvus、Pinecone、Faiss、Chroma |
| 大语言模型 | 基于检索结果生成回答 | GPT-4、文心一言、通义千问 |
| 编排框架 | 串联各组件 | LangChain、LlamaIndex |
3.4 RAG vs 微调(Fine-tuning)
| 对比维度 | RAG | 微调(Fine-tuning) |
|---|---|---|
| 知识更新 | 实时更新(修改知识库即可) | 需要重新训练 |
| 成本 | 较低(无需训练) | 较高(需要 GPU 和标注数据) |
| 可溯源 | 可追溯答案来源 | 无法追溯 |
| 适用场景 | 知识密集型问答、企业知识库 | 特定领域风格/格式适配 |
| 幻觉控制 | 较好(基于检索的事实) | 一般 |
4. 大语言模型(LLM)
4.1 核心概念
- 定义 :基于 Transformer 架构、经过大规模预训练的语言模型,具备理解和生成自然语言的能力
- Transformer 架构 (2017 年 Google 提出)
- 核心机制:自注意力机制(Self-Attention)------计算序列中每个词与其他所有词的关联度
- 优势:并行计算 (相比 RNN)、长距离依赖建模能力强
- 组成:编码器(Encoder)+ 解码器(Decoder)
- 预训练方式
- 自回归(GPT 系列):根据前文预测下一个词(Decoder-only)
- 自编码(BERT 系列):遮盖部分词,预测被遮盖的词(Encoder-only)
- 编码器-解码器(T5、BART):同时使用编码器和解码器
4.2 关键技术概念
- Prompt Engineering(提示工程) :通过精心设计输入提示词来引导模型输出
- 零样本(Zero-shot):直接给任务描述,无示例
- 少样本(Few-shot):提供几个示例,让模型学习模式
- 思维链(Chain-of-Thought, CoT):引导模型"逐步推理",提升复杂任务准确率
- 上下文窗口(Context Window) :模型一次能处理的最大 token 数量
- GPT-4:8K / 32K / 128K tokens
- 窗口越大,能处理的文档越长,但计算成本越高
- Token:模型处理文本的最小单位,中文约 1 个字 ≈ 1-2 个 token
- Temperature(温度) :控制生成的随机性
- 温度低(如 0)→ 输出确定性强,适合事实性问答
- 温度高(如 1)→ 输出多样性强,适合创意写作
4.3 LLM 的局限性
- 幻觉(Hallucination):生成看似合理但实际错误的内容
- 知识截止:训练数据有时间限制,无法获取最新信息
- 推理能力有限:对复杂数学和逻辑推理仍有不足
- 上下文长度限制:超出窗口的内容无法处理
- 隐私与安全:可能泄露训练数据中的敏感信息
5. Agent(智能体)与工具调用
Agent 是大模型应用的高级形态,是当前 AI 架构设计的前沿方向。
5.1 什么是 AI Agent
- 定义 :以大语言模型为"大脑",具备自主规划、工具调用和记忆能力的智能体
- 核心能力
- 规划(Planning):将复杂任务分解为子任务
- 工具使用(Tool Use):调用外部 API、数据库、搜索引擎等
- 记忆(Memory):短期记忆(上下文)+ 长期记忆(向量数据库)
- 反思(Reflection):评估自身输出质量,自我纠错
5.2 Agent 架构模式
- ReAct 模式 :推理(Reasoning)+ 行动(Acting)交替进行
- 思考 → 行动 → 观察结果 → 继续思考 → ...
- Multi-Agent(多智能体) :多个 Agent 协作完成复杂任务
- 例:一个 Agent 负责搜索,一个 Agent 负责分析,一个 Agent 负责生成报告
6. 向量数据库
6.1 核心概念
- 定义 :专门用于存储和检索高维向量的数据库,是 RAG 和语义搜索的基础设施
- 工作原理 :将文本/图像等数据通过 Embedding 模型转换为高维向量,通过相似度计算(余弦相似度、欧氏距离)进行检索
- 核心操作 :近似最近邻搜索(ANN)------在海量向量中快速找到最相似的 Top-K 个向量
6.2 主流向量数据库对比
| 产品 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Milvus | 开源分布式 | 高性能、可扩展、支持多种索引 | 大规模生产环境 |
| Faiss | Facebook 开源 | 速度快、内存优化 | 研究/中小规模 |
| Chroma | 开源轻量 | 简单易用、与 LangChain 集成好 | 快速原型开发 |
| Pinecone | 商业云服务 | 全托管、免运维 | 不想自建的团队 |
| Weaviate | 开源 | 支持多模态(文本+图像) | 多模态检索 |
7. AI 系统架构设计要点
7.1 典型 AI 应用架构
前端交互层 → API 网关 → 应用服务层 → AI 推理层 → 数据/知识层
↓
编排引擎(LangChain/LlamaIndex)
↓
向量数据库 ← Embedding 模型 ← 文档库
↓
大语言模型(云端 API / 私有化部署)
7.2 架构设计关键决策
| 决策点 | 选项 | 考虑因素 |
|---|---|---|
| 模型部署 | 云端 API vs 私有化部署 | 数据隐私、成本、延迟 |
| 知识更新 | RAG vs 微调 | 更新频率、成本、精度要求 |
| 向量数据库 | 自建 vs 云服务 | 数据规模、运维能力 |
| 编排框架 | LangChain vs 自研 | 灵活性、可控性 |
| 安全防护 | 输入过滤 + 输出审核 | 防注入、防泄露、合规 |
7.3 AI 系统的非功能性需求
- 可解释性:AI 决策过程是否可追溯、可解释(金融/医疗场景的合规要求)
- 可审计性:记录 AI 的输入、输出和决策依据
- 公平性:避免模型产生歧视性输出
- 鲁棒性:面对对抗样本和异常输入时的稳定性
- 隐私保护:联邦学习、差分隐私、数据脱敏
8. AI 相关新技术趋势
- 多模态大模型:同时处理文本、图像、音频、视频(如 GPT-4V、Gemini)
- 小模型 / 端侧模型:在手机/嵌入式设备上运行的轻量模型(如 Phi、Gemma)
- MLOps:机器学习的 DevOps,覆盖模型训练→部署→监控→迭代的全生命周期
- AI 原生应用:以 AI 为核心能力重新设计的应用(而非在传统应用上"加 AI")
- 数据飞轮:用户使用 → 产生数据 → 优化模型 → 提升体验 → 吸引更多用户
一、企业信息化战略与实施
- 信息的概念及特点
- 香农:信息就是不确定性的减少。
- 信息 在时间上的传递即是存储;在空间上的传递即是转移或扩散。
- 信息化及其意义
- 信息化是 从工业社会到信息社会的演进与变革。
- 信息系统战略规划-方法
- 第一阶段:以数据处理为核心
- 企业系统规划法(BSP ):自上而下 识别系统目标
- 关键成功因素法(CSF ):关键信息整合,从而确定开发优先次序
- 战略集合转化法(SST ):"信息集合",把战略目标转变成信息系统的战略目标
- 第二阶段:以企业内部MIS为核心
- 战略数据规划法(SDP):主题数据库
- 信息工程法(IE)
- 战略栅格法(SG)
- 第三阶段:以集成为核心
- 信息系统的生命周期
- 立项阶段(企业全局、形成概念、需求分析)
- 开发阶段
- 单个系统开发:总体规划->系统分析->系统设计->系统实施->系统验收
- 运维阶段(通过验收、移交之后)
- 消亡阶段(更新改造、功能扩展、报废重建)
- 政府信息化与电子政务
- 政府对政府(G2G)
- 政府对企业(G2B)或B2G
- 政府对公民(G2C)或C2G
- 政府对公务员(G2E)
- 企业信息化与电子商务
- 企业资源计划(ERP):互联互通,便于事前事中监控
- 客户关系管理(CRM):通过维护客户关系,让企业获得利益
- 供应链管理(SCM)
- 商业智能(BI)
- 数据仓库:面向主题、集成的、相对稳定的(非易失的)、反映历史变化(随着时间变化)
- 数据挖掘
- OLAP(联机分析处理)-数据仓库-决策分析OLTP(联机事务处理)-数据库-事务处理
- 数据湖
- 数据仓库仅支持分析处理;数据湖既支持分析处理,也支持事务处理
- 决策支持系统(DSS)
- 业务流程重组(BPR):对企业的业务 流程 进行 根本性 的再思考和 彻底性的再设计
- 业务流程管理(BPM):持续的系统优化 方法
- 企业门户
- 企业网站
- 企业信息门户(EIP)
- 企业知识门户(EKP) :知识性内容
- 企业应用门户(EAP) :以业务流程和企业应用为核心
- 企业通用门户
- 企业应用集成
- 表示集成(界面集成)
- 数据集成
- 控制集成(应用集成、API集成)
- 业务流程集成(过程集成、B2B)
- 电子商务的形式
- 企业对消费者(B2C)
- 企业对企业(B2B)
- 消费者对消费者(C2C)
- 线上对线下(O2O)
二、软件工程
- 软件开发方法
- 结构化法
- 原型法
- 面向对象方法
- 面向服务的方法
- 软件开发模型
- 瀑布模型
- 螺旋模型
- 原型模型
- 统一过程(用例驱动、以架构为中心、迭代和增量)/统一开发方法
- 敏捷开发方法(小步快跑、适合于小型项目开发 )
- Scrum开发模型(2-4周一个冲刺)
- 基于架构的开发方法
- V模型(测试贯穿于始终、测试尽早做,提前做)
- 喷泉模型(面向对象)
- RAD快速应用开发(SDLC瀑布模型+CBSD基于构建的开发)
- 构件组装模型(快的核心原因:建立了 构件库)
- 软件开发方法
- 逆向工程(一般不视为开发方法)
- 净室软件工程(净室即无尘室、洁净室。也就是一个受控污染级别的环境)
- 需求工程
- 用例图描述一组用例、参与者及它们之间的关系。
-
- 需求定义
- 需求验证
- 需求管理
- 定义需求基线
- 需求跟踪
- 变更控制
- 软件系统建模
- 系统设计
- 人机界面设计
- 结构化设计
- 面向对象设计
- 基本过程
- 设计原则
- 设计模式
- 软件测试
- 测试类型
- 测试用例设计
- 测试阶段
- 面向对象的测试
- 算法层(单元测试);
- 类层(模块测试);
- 模板层/类树层(集成测试);
- 系统层(系统测试)。
- 软件调试
- 蛮力法
- 回溯法
- 原因排除法
- 测试的目的是找出存在的错误;调试的目的是定位错误并修改程序来修正错误。
- 系统运行与软件维护
- 系统转换计划
- 遗留系统演化策略
- 新旧系统的转换策略
- 数据转换与迁移
- 系统运行与维护
- 常见的用户文档包括:功能描述、安装文档、使用手册、参考手册、操作员指南。
- 交互图:顺序图与协作图称为交互图。
- 在结构化分析方法中,用 DFD 表示功能模型,用 状态转换图 表示行为模型。
- 在UML提供的系统视图中,进程视图 是逻辑视图的一次执行实例,描述了并发与同步结构;用例视图 是最基本的需求分析模型。
- RUP强调采用 迭代和增量 的方式来开发软件,这样做的好处是 在软件开发的早期就可以对关键的,影响大的风险进行处理。
- 集成测试的技术依据是 软件概要设计文档。
三、软件架构设计
- 软件架构的概念
- 架构设计就是需求分配,即将满足需求的职责分配到组件上。
- 体系结构=架构
- 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。
- 软件架构为软件系统提供了一个结构、行为和属性的高级抽象。
- 软件架构是项目干系人进行交流的手段。
- 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
- 软件架构是可传递和可复用的模型。
- 软件架构建模
- 软件架构风格
-
数据流风格
- 批处理序列 :数据必须是完整的,以整理的方式传递(大量 整体 数据、无需用户交互)。
- 管道-过滤器 :数据流传输处理(流式数据、弱用户交互)。
- 早期编译器采用该架构。要一步一步处理的,均可考虑采用此架构风格。
- 优点
- 松耦合(高内聚低耦合)
- 良好的重用性/可维护性
- 可扩展性(标准接口适配)
- 良好的隐蔽性
- 支持并行
- 缺点
- 交互性较差
- 复杂性较高
- 性能较差(每个过滤器都需要解析与合成数据)
- 典型实例
- 传统编译器
- 网络报文处理
-
调用/返回风格 (构件之间 直接交互,紧耦合)
- 主程序/子程序
- 面向对象
- 层次结构
- 优点
- 将一个复杂问题分解成一个增量步骤序列的实现。
- 每一层最多只影响两层,允许每层用不同的方法。
- 为软件复用提供了强大的支持。
- 缺点
- 并不是每个系统都可以很容易地划分为分层的模式。
- 很难找到一个合适的、正确的层次抽象方法。
-
独立构件风格 (构件之间 不直接交互,松耦合)
- 进程通信
- 事件驱动系统(隐式调用)
- 优点
- 松耦合
- 良好的重用性/可修改性/可扩展性
- 缺点
- 构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其他构件是否会响应它。而且即使它知道事件注册了哪些构件的过程,它也不能保证这些过程被调用的顺序。
- 数据交换的问题。
- 既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题。
- 特点
系统由若干子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制。
-
虚拟机风格
- 解释器
- 适合领域:适用于需要"自定义规则"的场合
- 基于规则的系统(规则为中心) :在解释器的基础上增加经验规则
- 适合领域:适用于专家系统
- 优点:可以灵活应对自定义场景
- 缺点:复杂度较高
- 解释器
-
仓库风格(以数据为中心的风格)
- 数据库系统
- 特点:以数据为中心
- 黑板系统 (信号处理、问题规划和编译器优化等):语音识别、知识推理
- 优点
- 可更改性和可维护性
- 可重用的知识源
- 容错性和健壮性
- 缺点
- 测试困难
- 不能保证有好的解决方案
- 难以建立好的控制策略
- 低效
- 开发困难
- 缺少并行机制
- 特点:在以数据为中心的基础上,使用中心数据触发业务逻辑部件。
- 典型实例
- 语音识别
- 模式识别
- 图像处理
- 知识推理
- 优点
- 超文本系统
- 现代集成编译环境一般采用这种架构风格。
- 数据库系统
-
闭环控制架构(过程控制)
- 适合于嵌入式系统,涉及连续的动作与状态,用于解决简单闭环控制问题。
- 经典应用:空调温控,定速巡航。
-
C2风格(层次型架构风格)
- 基本规则(构件与构件之间不能直接相连,必须要通过连接件)
- 构件和连接件都有一个顶部和一个底部
- 构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。
- 一个连接件可以和任意数目的其他构件和连接件连接
- 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
- 基本规则(构件与构件之间不能直接相连,必须要通过连接件)
-
MVC架构风格
- M:Model(模型)用于 处理应用程序数据逻辑的部分。
- V:View(视图)用于 处理数据显示的部分。
- C:Controller(控制器)用于 处理用户交互的部分。
- 数据流:用户 → C → M → C → V(Controller 是核心协调者)
-
MVP架构风格
- 是MVC的变种;Presenter 替代 Controller ,实现了 V 与 M 之间的**完全解耦**
- V 与 M 互不知道对方的存在,所有交互通过 Presenter
- 更好地支持单元测试(Presenter 可独立测试)
- 数据流:V ↔ P ↔ M(Presenter 是核心协调者,V 和 M 完全隔离)
-
MVVM架构风格
- ViewModel 替代 Presenter,通过**数据绑定**自动同步 View 和 Model
- View 的变化自动反映到 ViewModel,ViewModel 的变化自动反映到 View(双向绑定)
- 适用场景:WPF、Vue.js、Angular 等前端框架
- 数据流:V ↔ VM ↔ M(双向数据绑定,减少手动 UI 更新代码)
-
MVC / MVP / MVVM 对比
| 对比维度 | MVC | MVP | MVVM |
|---|---|---|---|
| V 与 M | 可直接通信 | 完全隔离 | 通过 ViewModel 绑定 |
| 核心组件 | Controller | Presenter | ViewModel |
| 数据同步 | 手动 | 手动 | 自动绑定 |
| 可测试性 | 较差 | 好 | 好 |
| 典型框架 | Struts、Spring MVC | Android 原生 | Vue.js、Angular |
- 富互联网应用(RIA)
- 打开时,慢,因为需要加载;之后的运行,表现力强。
- 基于服务的架构(SOA)
- 松散耦合;粗粒度;标准化接口
- SOA的实现方式
- Web Service :基于 XML 的 Web 服务
- SOAP:简单对象访问协议,基于 XML 的消息格式,重量级
- WSDL:Web 服务描述语言,描述服务的接口和调用方式
- UDDI:统一描述发现和集成,服务注册和发现的标准
- REST(表述性状态转移) :一种**架构风格(非协议)**,基于 HTTP,使用 URL 定位资源,用 HTTP 方法(GET/POST/PUT/DELETE)操作资源
- SOAP vs REST
- Web Service :基于 XML 的 Web 服务
| 对比维度 | SOAP | REST |
|---|---|---|
| 协议 | 独立协议,基于 XML | 架构风格,基于 HTTP |
| 数据格式 | XML(严格规范) | JSON / XML(灵活) |
| 重量级 | 重量级,规范复杂 | 轻量级,简单易用 |
| 性能 | 较低(XML 解析开销大) | 较高(JSON 更轻量) |
| 安全性 | WS-Security(企业级) | HTTPS + Token |
| 适用场景 | 企业级、金融、电信 | 互联网应用、移动端 |
* ESB
* 服务注册表
* 关键技术
- 微服务
- 定义 :将单一应用拆分为一组小型、独立部署的服务,每个服务运行在自己的进程中,通过轻量级机制(HTTP REST)通信
- 核心特征 :服务组件化 、去中心化治理 、去中心化数据管理、基础设施自动化
- 微服务 vs SOA
| 对比维度 | SOA | 微服务 |
|---|---|---|
| 服务粒度 | 粗粒度 | 细粒度 |
| 通信方式 | ESB(重量级) | REST/gRPC(轻量级) |
| 数据管理 | 共享数据库 | 每个服务独立数据库 |
| 部署方式 | 通常整体部署 | 独立部署 |
| 治理方式 | 集中式治理 | 去中心化治理 |
| 技术栈 | 倾向统一 | 可异构 |
* 微服务核心技术栈:服务注册发现(Nacos/Eureka)、配置中心、API 网关、负载均衡(Ribbon)、熔断降级(Sentinel/Hystrix)、链路追踪、容器化(Docker + Kubernetes)
- MDA(Model Driven Architecture)
- 平台独立模型(PIM)
- 平台相关模型(PSM)
- 代码Code
- 架构描述语言(ADL)
三个基本元素
- 构件
- 连接件
- 架构配置
- 特定领域软件架构(DSSA)
- 定义 :DSSA 是在一个特定应用领域中,为一组应用提供可复用的架构 和构件的软件架构
- 三个基本活动
- 领域分析 :通过分析领域中的应用,识别**共性需求**,建立**领域模型**。主要输出是领域需求和领域模型。
- 领域设计 :根据领域模型,开发出 DSSA(特定领域软件架构),并验证其准确性和一致性。主要输出就是 DSSA 本身。
- 领域实现 :根据 DSSA,开发可复用的构件,建立构件库。
- 三层次模型
- 领域分析者:控制整个领域分析过程,进行知识获取,将知识组织到领域模型中
- 领域设计者:根据领域模型开发 DSSA,并验证其准确性和一致性
- 领域实现者:根据 DSSA 开发可复用构件
- 领域类型
- 垂直域 :面向**特定行业或应用领域**(如电信计费系统),定义该领域的系统族及通用架构
- 水平域 :定义**多个系统族间的公共功能区域**(如安全子系统、日志子系统),范围在** 子系统级**
- 基于架构的软件开发方法
- 基于架构的软件设计(ABSD)
- 架构驱动(强调由业务、质量和功能需求的组合驱动架构设计)
- 三个基础:功能的分解、选择架构风格来实现质量和业务需求、软件模板的使用。
- 方法是递归的。
- 视角与视图:从不同的视角来检查,所以会有不同的视图。
- 用例用来捕获功能需求、特定场景来捕获质量需求。
- 开发过程
- ABSD能很好地支持软件重用
- 软件架构评估
- 质量属性
- 性能:系统的响应能力
- 代表参数:响应时间、吞吐量
- 设计策略:优先级队列、资源调度
- 可用性:正常运行的时间比例
- 代表参数:故障间隔时间
- 设计策略:冗余、心跳线
- 安全性:向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力
- 设计策略:追踪审计
- 可修改性:较高的性能价格比对系统进行变更的能力
- 主要策略:信息隐藏
- 可靠性:容错、健壮性
- 代表参数:MTTF、MTBF
- 设计策略:冗余、心跳线
- 可靠性决定可用性
- 功能性
- 可变性
- 互操作性
- 性能:系统的响应能力
- 风险点:潜在问题所带来的隐患
- 敏感点:为实现某种特定的质量属性
- 权衡点:影响多个质量属性的特性
- 评估方式
- 基于场景的方式
- 软件架构分析法(SAAM)
- 最初用于分析架构 可修改性,后扩展到其它质量属性。
- 架构权衡分析法(ATAM)
- 在 SAAM的基础 上发展起来的,主要针对性能、实用性、安全性和可修改性,在系统开发之前,对这些质量属性进行评价和折中。
- 成本效益分析法(CBAM)
- 软件架构分析法(SAAM)
- 质量效用树
- 基于场景的方式
- 软件产品线
- 过程模型
- 双生命周期模型
- SEI模型
- 三生命周期模型
- 建立方式
- 组织结构
- 过程模型
- 构件与中间件技术
- 中间件是构件的一种
- 构件的复用
- 检索与提取构件
- 理解与评价构件
- 修改构件
- 组装构件
- 采用中间件技术的优点
- 面向需求
- 业务的分隔和包容性
- 设计与实现隔离
- 隔离复杂的系统资源
- 符合标准的交互模型
- 软件复用
- 提供对应用构件的管理
- Corba(公共对象请求代理体系结构)
- 典型应用架构
- J2EE
- 分布式多层应用程序
- J2EE核心组成
- 容器
- 组件
- 服务
- J2EE
- Web架构设计
- 单台机器到数据库与Web服务器分离
- 应用服务器集群
- 负载均衡技术
- 基于特定软件的负载均衡(HTTP重定向)(应用层)
- 基于DNS的负载均衡(传输层)
- 混合型负载均衡
- 静态算法:轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列算法、随机算法
- 动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法
- 有状态与无状态
- 无状态服务:对单词请求的处理,不依赖其他请求;
- 有状态服务:自身保存一些数据,先后的请求是有关联的。
- 数据库读写分离化
- 用缓存缓解读库的压力
- Memcached是一个自由开源的、高性能、分布式内存对象缓存系统。
- 缓存技术
- MemCache
- Redis
- Squid
- Redis常见难题
- 缓存雪崩 :大部分缓存失效导致数据库崩溃
- 解决方案
- 缓存的高可用性
- 缓存降级
- Redis备份
- 提前演练
- 解决方案
- 缓存穿透 :查询无数据返回导致直接查数据库。
- 解决方案
- 直接设置一个默认值存放到缓存
- 设置布隆过滤器
- 解决方案
- 缓存雪崩 :大部分缓存失效导致数据库崩溃
- CDN(内容分发网络)
- XML与JSON
- Web应用服务器
- REST(表述性状态转移)
- 响应式Web设计
- 采用流式布局和弹性化设计
- 响应式图片
- 中台
- 业务中台
- 数据中台
- 基于软件架构的设计(ABSD)强调采用 视角与视图 来描述软件架构,采用 用例与质量场景 来描述需求。
- 架构风格 描述了一类软件架构的特征,它独立于实际问题,强调软件系统中通用的组织结构选择。垃圾回收机制是Java语言管理内存资源时常用的一种 设计模式。
四、系统安全分析与设计
- 对称加密技术
加密解密同一密钥
- DES
- RC-5
- IDEA算法
- AES算法
缺陷
- 效率高但加密强度不高
- 密钥分发困难
- 非对称加密技术
加密解密不同密钥
- RSA
- Elgamal
- ECC
缺陷
- 加密速度慢
- 信息摘要
单向散列函数、固定长度的散列值(原文变,摘要跟着变)。
- MD5(散列值128位)
- SHA(散列值160位)
- 数字签名
- 数字签名流程 (考试重点)
- 签名过程 :发送方用**Hash 函数对原文生成摘要 → 用发送方的 私钥**加密摘要 → 将加密后的摘要(即数字签名)附在原文后一起发送
- 验签过程 :接收方用发送方的**公钥**解密签名得到摘要 → 对收到的原文用同样的 Hash 函数生成摘要 → 对比两个摘要,一致则验证通过
- 关键点 :签名用**私钥加密**,验签用** 公钥解密**(与加密过程相反)
- 数字签名保证了**完整性**(Hash 校验)和** 不可否认性**(私钥唯一性)
- 使用非对称加密技术加密对称密钥,被称为数字信封。
- 数字证书
内容
- 所有人的名称
- 所有人的公开密钥
- 版本信息
- 序列号
- 有效期
- 签名算法
- 证书发行者对证书的签名(CA使用CA自己的私钥)
- PKI公钥体系
- CA(Certificate Authority)认证中心
- RA(Registration Authority)注册审批机构
- 证书受理点
- 密钥管理中心-KMC
- 网络安全
- 各个网络层次的安全保障
- PGP(Pretty Good Privacy):优良保密协议
- SSL(Secure Sockets Layer):安全套接字协议
- TLS(Transport Layer Security):传输层安全协议
- SET(Secure Electronic Transaction):安全电子交易协议
- IPSEC(Internet Protocol Security):互联网安全协议
- 网络威胁与攻击
- 被动攻击:收集信息为主,破坏保密性。
- 主动攻击:中断(破坏可用性)、篡改(破坏完整性)、伪造(破坏真实性)。
- SQL注入
- 安全保护等级
- 信息安全体系结构
- 在PKI系统结构中,负责生成和签署数字证书的是 证书机构CA ,负责验证用户身份的是 注册机构RA。
五、系统可靠性分析与设计
- 可靠性相关基本概念
- 系统可靠性 是系统在规定的时间及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。
- 系统可用性 是指在某个给定时间点上系统能够按照需求执行的概率。
- 软件可靠性不等于硬件可靠性
- 复杂性
- 物理退化
- 唯一性
- 版本更新周期
- 系统可靠性分析
- 可靠性指标
- MTTF(平均无故障时间) :系统正常运行的平均时长,MTTF = 1/λ(λ 为失效率)
- MTTR(平均修复时间):系统故障后修复所需的平均时长
- MTBF(平均故障间隔时间) :MTBF = MTTF + MTTR
- 可用性 A :A = MTTF / (MTTF + MTTR) = MTTF / MTBF
- 串联系统可靠性 (考试高频计算题)
- 只有所有子系统都正常,系统才正常;任一子系统故障,系统故障
- R = R₁ × R₂ × ... × Rₙ
- 特点:串联越多,可靠性越低;提高可靠性的关键是改善最薄弱的子系统
- 并联系统可靠性
- 只要有一个子系统正常,系统就正常;所有子系统都故障,系统才故障
- R = 1 - (1-R₁) × (1-R₂) × ... × (1-Rₙ)
- 特点:并联可以提高可靠性,但成本和复杂度增加
- 串并联混合系统
- 先计算各并联子系统的可靠性,再将并联子系统视为串联节点计算总可靠性
- 例题 :某系统由 3 个串联模块组成,其中模块 2 采用双机并联冗余,各模块可靠性均为 0.9。则系统可靠性 = 0.9 × 1-(1-0.9)² × 0.9 = 0.9 × 0.99 × 0.9 ≈ 0.8019
- 可靠性设计
- N 版本程序设计
- 核心思想:由 N 个独立的开发团队,根据同一需求规格说明,独立开发功能相同的程序版本
- 运行方式 :各版本**并行运行**,通过** 多数表决**机制确定最终结果
- 容错方式 :前向恢复(通过表决消除错误结果)
- 关键要求 :各版本必须独立开发,避免使用相同的算法和编程语言,确保错误不相关
- 适用场景:对安全性要求极高的系统(如航空航天、核电控制)
- 恢复块方法
- 核心思想:程序由主模块和多个备用模块组成,按顺序执行
- 运行方式 :先执行主模块,用**验收测试**检验结果;若通过则使用;否则执行下一个备用模块,直到通过验收测试或所有模块都失败
- 容错方式 :后向恢复(回到上一个正确的状态重新执行)
- 关键要求:验收测试的设计至关重要,必须能准确判断结果的正确性
- 与 N 版本程序设计的对比
| 对比维度 | N 版本程序设计 | 恢复块方法 |
|---|---|---|
| 执行方式 | 并行执行 | 串行执行 |
| 容错方式 | 前向恢复(表决) | 后向恢复(回退) |
| 判定机制 | 多数表决 | 验收测试 |
| 资源消耗 | 高(N 份同时运行) | 较低(按需执行) |
| 实时性 | 较好 | 较差(可能多次重试) |
- 防卫式程序设计
- 不采用特殊的冗余技术,而是在程序中插入错误检查代码
- 实现策略:错误检查 → 破坏估计 → 错误恢复
- 典型手段:断言(Assertion)、异常处理、错误码检查
- 双机容错 (双机间连接**心跳线**,相互监测状态)
- 双机热备模式 :主系统运行,备用系统待命。主系统故障时,备用系统接管。同一时刻只有一台提供服务。
- 双机互备模式 :两台主机**各自运行不同的业务**,互为备份。一台故障时,另一台接管其业务。** 资源利用率较高**。
- 双机双工模式 :两台主机**同时运行相同的业务**,协同工作。一台故障时,另一台继续服务。类似集群,** 性能最高但成本也最高**。
- 集群技术
- 可伸缩性:可通过增加节点提升处理能力
- 高可用性:节点故障时自动转移负载
- 可管理性:统一管理和监控
- 高性价比:使用通用硬件构建
- 高透明性:对用户透明,无需感知集群内部结构
六、项目管理
- 范围管理:确定项目的边界
- 时间管理(进度管理):确定进度目标等
- 前导图法(单代号网路图,PDM)
- 关键路径法
- 总时差(松弛时间 ):在不延误总工期的前提下,该活动的机动时间。 活动的总时差等于该活动最迟完成时间与最早完成时间之差,或该活动最迟开始时间与最早开始时间之差。
- 自由时差:在不影响紧后活动的最早开始时间前提下,该活动的机动时间。
- 对于有紧后活动的活动,其自由时差等于所有紧后活动最早开始时间减本活动最早完成时间所得之差的最小值。
- 对于没有紧后活动的活动,也就是以网络计划终点节点为完成节点的活动,其自由时差等于计划工期与本活动最早完成时间之差。
- 甘特图(Gantt)
- 优点:简单直观、容易制作、便于理解。
- 缺点:不能系统地表达一个项目所包含的各项工作之间的复杂关系,难以进行定量的计算和分析,以及计划的优化等。
- 成本管理
- 成本估算
- 成本预算
- 成本控制
- 挣值管理(EVM) ------考试高频计算题
- 三个基本参数
- PV(计划值) :截至某时间点,计划完成工作的预算成本(应该做的事 × 预算单价)
- EV(挣值) :截至某时间点,实际完成工作的预算成本(实际做的事 × 预算单价)
- AC(实际成本) :截至某时间点,实际完成工作的实际成本(实际做的事 × 实际单价)
- 四个评价指标
- CV(成本偏差)= EV - AC:正值表示成本节约,负值表示超支
- SV(进度偏差)= EV - PV:正值表示进度超前,负值表示落后
- CPI(成本绩效指数)= EV / AC:> 1 表示成本节约,< 1 表示超支
- SPI(进度绩效指数)= EV / PV:> 1 表示进度超前,< 1 表示落后
- 预测公式
- EAC(完工估算)= BAC / CPI(典型偏差,即当前偏差将持续到项目结束)
- EAC = AC + (BAC - EV)(非典型偏差,即当前偏差不会再次发生)
- ETC(完工尚需估算)= EAC - AC
- 记忆口诀 :"EV 始终在前,减 AC 看成本,减 PV 看进度;指数用除法"
- 三个基本参数
- 软件质量管理
- 质量保证(质量审计和过程分析)与质量控制
- 软件评审
- 软件过程改进
- CMMI
- 软件配置管理
- 配置项与配置库
- 设备清单、CASE工具操作手册等不属于配置项
- 配置库
- 开发库(动态库、程序员库、工作库):可以随意修改。
- 受控库(主库、系统库):必须先申请,申请通过才有权限修改。
- 产品库(备份库、静态库):不能修改。
- 软件工具
- 软件开发工具
- 软件维护工具
- 软件管理和软件支持工具
- 变更控制
- 版本控制
- 配置项与配置库
- 风险控制
- 风险基本属性:随机性和相对性
- 项目风险
- 技术风险
- 商业风险
- 风险曝光度=风险影响×概率
- 项目管理工具
- 能做什么(项目管理相关工作辅助)
- 不能做什么(开发技术相关辅助工作)
- 通常可以使用 工作分解结构(WBS) 来进行活动定义。
- 软件质量保证是软件项目控制的重要手段,软件评审 是软件质量保证的主要活动之一。
- 项目配置管理中,配置项的状态通常包括 草稿、正式发布和正在修改。
七、计算机组成与体系结构
- Flynn分类法(按指令流和数据流的多倍性分类)
| 类型 | 指令流 | 数据流 | 说明 | 代表 |
|---|---|---|---|---|
| SISD | 单指令 | 单数据 | 传统串行计算机 | 单核处理器 |
| SIMD | 单指令 | 多数据 | 一条指令同时处理多个数据 | 阵列处理器、GPU |
| MISD | 多指令 | 单数据 | 实际中很少见 | 容错计算机(理论模型) |
| MIMD | 多指令 | 多数据 | 多处理器独立执行不同指令 | 多核处理器、集群 |
- CISC(复杂指令集计算机)与RISC(精简指令集计算机)
- 冯·诺依曼结构与哈佛结构
- 冯·诺依曼结构:也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
- 哈佛结构:是一种将程序指令存储器和数据存储分开的存储器结构。
- 层次化存储结构
- 理论依据:局部性原理
- Cache
- Cache为提高CPU数据输入输出的速率
- Cache是除寄存器以外访问速度最快的层次
- 使用Cache改善系统性能的依据是程序的局部性原理
- 局部性原理
- 时间局部性:程序中某条指令一旦执行,不久后该指令可能再次执行(由于程序中存在大量循环操作)。
- 空间局部性:程序在一段时间内所访问的地址可能集中在一定的范围内(由于程序的顺序执行)。
- 工作集理论:工作集是进程运行时被频繁访问的页面集合。
- 主存
- 分类
- RAM随机存储器
- DRAM动态随机存储器
- SRAM静态随机存储器
- ROM只读存储器
- MORM掩模式只读存储器
- PROM一次可编程只读存储器
- EPROM可擦除可编程只读存储器
- Flash Memory闪存存储器
- RAM随机存储器
- 编址
- 存储单元
- 存储单元个数:最大地址-最小地址+1
- 编址方式
- 按字节编址
- 按字编址
- 总容量=存储单元个数×编址内容=单位芯片容量×芯片个数
- 存储单元
- 磁盘结构与参数
- 存取时间=寻道时间+等待时间(平均定位时间+转动延迟)
- 注:寻道时间是磁头移动到磁道所需的时间;等待时间是等待读写的扇区转到磁头下方所用的时间。
- 磁盘调度
- 先来先服务FCFS
- 最短寻道时间优先SSTF
- 流水线
- 流水线执行时间:1条指令执行时间+(指令条数-1)×流水线周期
- 流水线周期为执行时间最长的一段
- 超标量流水线
- 吞吐率=指令条数/流水线执行时间(单位时间内流水线所完成的任务数量或输出的结果数量)
- 最大吞吐率=1/流水线周期
- 加速比=不使用流水线执行时间/使用流水线执行时间
- 总线
一条总线同一时刻仅允许一个设备发送,但允许多个设备接收。所以 总线是半双工模式 。- 数据总线(DB)
- 地址总线(AB)
- 控制总线(CB)
- 嵌入式系统开发设计
- 芯片
- DSP(数字信号处理器)
- SoC(片上系统,有专用目标的集成电路)
- MPU(微处理器,是构成微机的核心部件)
- MCU(微控制单元/单片微型计算机/单片机,芯片级的计算机)
- 交叉开发环境
- 交叉编译器
- 交叉链接器
- 调试器
- 动态装载器
- 链接装载器
- 调试监视器
- 调试代理
- 嵌入式系统初始化过程
- 片级初始化 (嵌入式微处理器的初始化)->板级初始化 (其他硬件设备的初始化)->系统初始化(以软件初始化为主)
- 校验码
- 奇校验:整个校验码(有效信息位和校验位)中
1的个数为奇数。 - 偶校验:整个校验码(有效信息位和校验位)中
1的个数为偶数。 - 奇偶校验,可检查1位的错误,不可纠错。
- 奇校验:整个校验码(有效信息位和校验位)中
- CRC循环冗余校验码
可检错不可纠错- 模2除法(异或)
- 除法之前补
0,生成多项式的最高次就是要补的0的个数,也和余数的个数相同,最终要发送的就是在原始报文后添加上余数即可。
- 海明校验码
既可检错也可纠错- 2r>=m+r+1(r为校验位,m为信息位)
八、系统配置与性能评价
- 性能指标
- CPI(平均每条指令所需的时钟周期数):CPI = 执行程序所需的时钟周期数 / 指令条数
- IPC(每个时钟周期运行的指令条数):IPC = 1 / CPI
- MIPS(每秒执行的百万条指令数)
- MIPS = 指令条数 / (指令执行时间 × 106) = 主频 / CPI = 主频 × IPC
- 例题 :某处理器主频为 1GHz,CPI 为 2,则 MIPS = 1000 / 2 = 500 MIPS
- 阿姆达尔定律(Amdahl's Law) ------系统架构考试高频考点
- 公式:S = 1 / (1 - f) + f/n
- f = 可加速部分占总执行时间的比例
- n = 可加速部分的加速倍数
- 含义 :系统的整体性能提升受限于**不可加速部分的比例**,即使可加速部分无限快,整体加速比也不会超过 1/(1-f)
- 例题 :某系统中可并行化的计算占总任务的 80%,使用 4 个处理器并行处理。加速比 S = 1 / (1-0.8) + 0.8/4 = 1 / 0.2 + 0.2 = 1 / 0.4 = 2.5
- 推论 :即使处理器数量趋于无穷,S 的极限 = 1 / (1-f) = 1 / 0.2 = 5。这就是阿姆达尔定律揭示的性能上限。
- 公式:S = 1 / (1 - f) + f/n
- 性能评价方法
- 时钟频率法
- 指令执行速度法
- 等效指令速度法(吉普森混合法)**考虑指令比例不同的问题**
- 数据处理速率法(PDR)**考虑CPU+存储**
- 综合理论性能法(CTP)
- 基准程序法 :把应用程序中用得最多、最频繁的那部分核心程序作为评估计算机系统性能的标准程序,称为基准测试程序(benchmark)。基准测试法是目前一致承认的测试系统性能的较好方法。
- 真实程序->核心程序->小型基准程序->合成基准程序
九、操作系统
- 概述
- 管理系统硬件、软件、数据资源
- 控制程序运行
- 人机之间的接口
- 应用软件与硬件之间的接口
- 进程管理
- 进程状态
- 运行
- 就绪
- 阻塞
- 前趋图
- 进程的同步与互斥
- 互斥
- 同步
- PV操作
- 临界资源
- 临界区:每个进程中访问临界资源的那段 代码。
- 信号量:一种特殊的变量
- P操作:申请资源;判断资源是否足够(<0)
- V操作:释放资源;检查是否有人排队(<=0);通知阻塞进程
- 信号量是资源数;信号量小于0表示排队的进程数
- 死锁问题
- 不会产生死锁的最少资源数:每个进程所需资源数均减去一的和最后加一
- 死锁的产生的条件
- 互斥
- 保持和等待
- 不剥夺
- 环路等待
- 死锁的预防:打破四大条件
- 死锁的避免
- 有序资源分配法
- 银行家算法
- 存储管理
- 页式存储组织
- 高级程序语言使用逻辑地址;运行状态,内存中使用物理地址。
- 逻辑地址=页号+页内地址
- 物理地址=页帧号+页内地址
- 针对状态位为1(在内存中的):优先淘汰访问位为0的;若存在多个页面访问位为0,则考虑修改位为0的。
- 段式存储组织
- 段页式存储组织
- 快表
- 快表:将页表存于Cache上;慢表:将页表存于内存上。
- 文件管理
- 索引文件结构
- 逻辑块号从0开始
- 文件和树型目录结构
- 文件属性
- R只读文件属性
- A存档属性
- S系统文件
- H隐藏文件
- 文件名的组成
- 驱动器号
- 路径
- 主文件名
- 扩展名
- 绝对路径:从盘符(/)开始的路径。
- 相对路径:从当前目录开始的路径。
- 文件属性
- 空闲存储空间的管理
- 位示图法
- 默认位从0开始编号;字从1开始编号。
- 字号=取整((物理块号+1)/字长)+1
- 位号=求余((物理块号+1)/字长)-1
- 位示图法
- 设备管理
- 数据传输控制方式
- 程序控制(查询)方式
- 程序中断方式
- DMA(直接存储器访问)方式
- 通道方式
- I/O处理机
- 虚设备与SPOOLING技术(假脱机技术)
- 微内核操作系统
- 可靠性、稳定性和安全性较高。
- 可用于分布式系统。
- 嵌入式操作系统
- 特点:
- 微型化
- 代码质量高
- 专业化
- 实时性强
- 可裁剪、可配置
- 嵌入式RTOS(实时操作系统):VxWorks、RT-Linux、QNX、pSOS
- 特点:
相似内容可参考【软件设计师-从小白到大牛】上午题基础篇:第二章 操作系统
十、计算机网络
- DHCP协议(动态主机配置协议)
- DNS(域名系统)协议
- 主机向本地域名服务器的查询采用递归查询。
- 本地域名服务器向根域名服务器的查询通常采用迭代查询。(根据返回的是否是正确答案来判断:如果返回的是线索,则是迭代查询;如果返回的是正确答案,则是递归查询)
- 网络规划与设计
- 需求分析
- 逻辑网络设计
- 物理网络设计
- 需求规范->通信规范->逻辑网络设计(拓扑结构、网络地址分配、安全规划、网络管理、选择路由协议、设备命名规则)->物理网络设计(设备的具体物理分布、运行环境等确定、设备选型、结构化布线、机房设计)
- 分层设计
- 接入层:用户接入、计费管理、MAC地址认证、收集用户信息
- 汇聚层:网络访问策略控制、数据包处理、过滤、寻址
- 核心层:高速数据交换,常用冗余机
- 网络接入技术
- 有线接入
- 非对称数字用户线路(ADSL)
- 无线接入
- 3G/4G/5G
- 网络存储技术
- 分类
- 直连式存储(DAS)
- 网络附加存储(NAS)
- 存储区域网络(SAN)
- IPSAN(iSCSI)
- Raid(磁盘阵列)
- IPv6
- 长度为128位,地址空间增大了296倍。
- 高位0可省略;一段全为0,则记为1个0;多段0,直接省略为
::,只能用一次。 - IPv4/IPv6过渡技术
- 双协议栈技术
- 隧道技术
- NAT-PT技术
- 综合布线系统
- 物联网
- 物联网关键技术
- RFID(射频识别技术,其基本组成部分通常包括:标签、阅读器、天线)
- 二维码
- 物联网关键技术
- 云计算
- 特点
- 集合了大量计算机,规模达到成千上万。
- 多种软硬件技术相结合
- 对客户端设备的要求低
- 规模化效应
- 三层服务模型(考试重点)
- 特点
| 层次 | 全称 | 提供内容 | 用户管理范围 | 典型产品 |
|---|---|---|---|---|
| IaaS | 基础设施即服务 | 虚拟机、存储、网络 | OS + 中间件 + 应用 + 数据 | AWS EC2、阿里云 ECS |
| PaaS | 平台即服务 | 运行环境 + 开发工具 | 应用 + 数据 | Google App Engine、Heroku |
| SaaS | 软件即服务 | 完整的应用软件 | 仅配置和使用 | Office 365、钉钉、Salesforce |
* **记忆口诀**:**==IaaS 给你"毛坯房"(基础设施),PaaS 给你"精装房"(开发平台),SaaS 给你"拎包入住"(完整应用)==**
十一、数据库系统
- 三级模式
- 两层映射
- 内模式(物理模式、存储模式、文件级)-概念模式(基本表)-外模式(用户模式、视图)
- 外模式-概念模式映射(逻辑独立性)
- 概念模式-内模式映射(物理独立性)
- 视图
- 数据库视图(虚拟表、逻辑上的表)
- 物化视图(实体化视图、本身会存储数据)
- 数据库设计过程
需求分析(数据流图、数据字典、需求说明书 )->概念结构设计(E-R模型 )->逻辑结构设计(关系模式(二维表))->物理设计(聚簇索引)
- 数据库管理系统(DBMS)
- E-R模型
- 联系的类型:
1:1、1:n、m:n - 一个实体型转换为一个关系模式
1:1联系可以转换为一个关系模式,也可以与任意一端实体的关系模式合并。1:n联系可以转换为一个关系模式,也可以与n端实体的关系模式合并。m:n联系必须单独转成一个关系模式。
- 关系代数
- 并
- 交
- 差
- 笛卡尔积(属性列数是二者之和、元组行数是二者乘积)
- 投影
- 选择
- 自然连接(属性列数是二者之和减去重复的列数、元组行结果是同名属性列取值相等的)
- 一般认为自然连接的性能优于笛卡尔积;应尽量先把操作的子表压缩(通过选择或投影等操作)
- 规范化理论
- 函数依赖
- 部分函数依赖
- 传递函数依赖
- 键
- 候选键(唯一标识元组且无冗余)
- 候选键中任选一个作为主键
- 外键(其他关系的主键)
- 范式
- 1NF(属性都是不可分的原子值)->2NF消除非主属性对候选键的部分依赖
- 2NF->3NF消除非主属性对候选键的传递依赖
- 3NF->BCNF消除主属性对候选键的部分和传递依赖
- 保持函数依赖分解(冗余的函数依赖可不保留,只要属性在,函数依赖就在)
- 无损分解:指的是将一个关系模式分解成若干关系模式后,通过自然连接和投影等运算仍然还能还原到原来的关系模式。
- 表格法
- 表格列为各属性,行为各关系模式(根据关系模式中的属性,在对应位置打√)
- 找到有同名属性列的两个关系模式(根据该同名属性列是否为依赖关系中的左侧,若为且别的关系模式中保留了该函数依赖(左侧为组合属性也可还原),则还原出其余关系模式中未出现的右侧属性(打√))
- 只要有一个关系模式中所有列的属性都是√,则该分解为无损分解。
- 公式法
- 表格法
- Amstrong公理
- 自反律
- 增广律
- 传递律
- 合并规则
- 伪传递规则
- 分解规则
- 反规范化
- 规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术。
- 采用反规范化技术的益处
- 降低连接操作的需求
- 降低外码和索引的数目
- 减少表的数目
- 提高查询效率
- 可能带来的问题
- 数据的重复存储,浪费了磁盘空间;
- 可能出现数据完整性问题,为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度。
- 技术手段
- 增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。
- 增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
- 重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把者两个表重新组成一个表来减少连接而提高性能。
- 分割表(水平分割、垂直分割)
- 水平分割表:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
- 垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少I/O次数。
- 并发控制
- 事务
- 原子性
- 一致性
- 隔离性
- 持续性
- 并发产生的问题
- 丢失更新
- 不可重复读
- 读"脏"数据
- 解决并发产生的问题--->封锁协议
- S封锁(读锁、共享锁)
- X封锁(写锁,排他锁、独占锁)
- 一级封锁协议(加X锁,事务结束释放锁,可防止丢失修改)
- 二级封锁协议(加S锁,读完释放锁,可防止丢失修改以及读"脏"数据)
- 三级封锁协议(加S锁,事务结束释放锁,可防止丢失修改、读"脏"数据以及数据重复读)
- 两段锁协议(可串行化,可能发生死锁)
- 使用封锁协议可能会产生死锁问题
- 数据库完整性约束
- 实体完整性约束(主键唯一且非空)
- 参照完整性约束(外键)
- 用户自定义完整性约束(
CHECK) - 触发器(解决复杂约束性问题)
- 数据库安全性
- 用户标识和鉴定(身份验证)
- 存取控制(权限)
- 密码存储和传输(加密和摘要)
- 视图的保护
- 审计(日志记录,事后审查,可追溯)
- 数据备份
- 冷备份(静态备份,数据库关闭状态下备份)
- 热备份(动态备份,数据库运行状态下备份)
- 完全备份(备份所有数据)
- 差量备份(仅备份上一次完全备份之后变化的数据)
- 增量备份(备份上一次备份之后变化的数据)
- 日志文件:事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。(先写日志,再写数据)
- 数据库故障与恢复
- 事务本身的可预期故障
- 故障原因:本身逻辑
- 解决方法:在程序中预先设置
Rollback语句
- 事务本身的不可预期故障
- 故障原因:算术溢出、违反存储保护
- 解决方法:由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态。
- 系统故障
- 故障原因:系统停止运转
- 解决方法:通常使用检查点法
- 介质故障
- 故障原因:外存被破坏
- 解决方法:一般使用日志重做业务(DBA数据库管理员介入)
- 分布式数据库
- 分布透明性
- 分片透明性(水平分片按记录分片、垂直分片按字段分片、混合分片)
- 位置透明性
- 局部数据模型透明性
- 分布式数据库管理系统
- 组成
- LDBMS(局部数据库管理系统)
- GDBMS(全局数据库管理系统)
- 全局数据字典
- 通信管理(CM)
- 结构
- 全局控制集中的DDBMS(分布式数据库管理系统)
- 全局控制分散的DDBMS(分布式数据库管理系统)
- 全局控制部分分散的DDBMS(分布式数据库管理系统)
- 组成
- 数据表分区
- 表分区:将一个数据量比较大的表,用某种方法把数据从物理上分成若干个小表来存储,从逻辑来看还是一个大表。
- 分区的策略
- 范围分区(RANGE)
- 散列分区(HASH)
- 列表分区(LIST)
- 联邦数据库FDBS
- 联邦数据库特征
- 分布性
- 异构性
- 自治性
- 透明性
- 联邦数据库分类
- 紧耦合
- 松耦合
- NoSQL
NoSQL(Not-only SQL)泛指非关系型的数据库。
- 特点
- 并发性能高
- 海量数据存储、查询效率高
- 向外扩展(水平)
- 键值索引
- 特定应用领域
- 分类
- 键值(key-value)
- 列存储数据库
- 文档型数据库
- 图形数据库(Graph)
- 内存存数据库
全部数据都在内存中 - 数据库性能优化
- 集中式数据库优化
- 硬件系统:CPU,内存,I/O(硬盘,阵列),网络
- 软件系统:参数(如进程优先级,CPU使用权,内存使用)
- 数据库设计
- 表与视图
- 表的规划
- 建立物化视图
- 索引:常查询--建索引,常修改-避免索引
- SQL优化
- 以不相干子查询替代相干子查询
- 只检索需要的列
- 用带
IN的条件子句等价替换OR子句 - 经常提交
COMMIT,以尽早释放锁。 - 尽可能减少多表查询
- 表与视图
- 应用软件:数据库连接池
- 分布式数据库优化
- 通信代价
- 全局查询树的变换
- 多副本策略
- 查询树的分解
- 半连接与直接连接
- 通信代价
- 大数据
- 4V
- 数据量(Volume)
- 速度(Velocity)
- 多样性(Variety)
- 值(Value)
- 大数据处理系统应该具有的重要特征
- 高度可扩展性
- 高性能
- 高度容错
- 支持异构环境
- 较短的分析延迟
- 易用且开放的接口
- 较低成本
- 向下兼容性
十二、知识产权与标准化
- 知识产权
- 保护范围与对象
- 保护期限
- 知识产权人确定
- 侵权判定
- 中国公民、法人或其他组织的作品,不论是否发表,都享有著作权。
- 开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。
- 著作权法不适用于下列情形:
- 法律、法规、国家机关的决议、决定、命令和其他具有立法、行政、司法性质的文件及其官方正式译文。
- 时事新闻
- 历法、通用数表、通用表格和公式
- 标准化
- 标准的分类
- 标准的编号
十三、数学与经济管理
- 图论应用
- 最小生成树
- Prim算法:按顶点找,依次找最近顶点。
- Kruskal算的:按边找,依次找最短边。
- 最短路径
- 网络与最大流量
- 运筹方法
- 线性规划
- 求交点:列不等式(组);不等关系化为等式关系;代入交点求目标函数值。
- 动态规划(穷举思路)
- 转移矩阵
- 排队论
- 决策
- 不确定型决策
- 乐观主义准则大中取大(在决策表中各个方案对各个状态的结果中选出最大者,记在表的最右列,再从该列中选出最大者)
- 悲观主义准则小中取大(决策时从决策表中各方案对各个状态的结果选出最小者,记在表的最右列,再从该列中选出最大者)
- 折中主义准则
- 等可能准则
- 后悔值准则大中取小
- 不确定型决策
- 决策树
- 数学建模
- 模型准备
- 模型假设
- 模型建立
- 模型求解
- 模型检验
- 模型应用
- 数学建模方法
- 直接分析法
- 类比法
- 数据分析法
- 构想法
其他考察知识总结
- 在嵌入式操作系统中,板级支持包BSP作为对硬件的抽象,实现了 硬件有关性,操作系统有关性。
- 主频=外频×倍频
- 假设n个进程,m个资源,其中每个进程都需要w个资源,不可能 发生死锁:n×(w-1)+1<=m.
- 在数据库设计的需求分析阶段,业务流程一般采用 数据流图 表示。
- 在分布式数据库中,局部数据模型透明性 是指各场地数据的逻辑结构对用户不可见。
- TCP和UDP协议均提供了 端口寻址 能力。
- 建筑物综合布线系统中的园区子系统是指 连接各个建筑物的通信系统。
- IPV6的地址空间是IPV4的 296 倍
- MIPS适合衡量标量处理机的性能,MFLOPS适合衡量向量处理机的性能。
- 软件系统架构是关于软件系统的结构、行为和属性的高级抽象。
- 系统构件组装分为三个不同的层次:定制、集成、扩展。这三个层次对应于构件组装过程中的不同任务。
- 时间管理的过程包括:活动定义、活动排序、活动的资源估算、活动历时估算、制定计划、进度控制。
错题知识总结
- 针对复杂的约束,系统提供了触发器机制。
- 嵌入式系统中采用中断方式实现输入输出的主要原因是 能对突发事件做出快速响应。
- 系统间进行异步串行通信时,数据的串/并和并/串转换一般是通 过 接口中的移位寄存器 实现的。
- 三层模型主要将网络划分为核心层、汇聚层和接入层:核心层提供不同区域或者下层的高速连接和最优传送路径;汇聚层将网络业务连接到接入层,并实施与安全、流量负载和路由相关的策略;接入层为局域网接入广域网或者终端用户访问网络提供接入。
- SAN(Storage Area Network)存储区域网络是一种连接存储设备和存储管理子系统的专用网络,专门提供 数据存储和管理 功能。
- 计算机CPU利用率为100%只能说明计算机目前正在运行大型计算任务,此时改进外设也可成提高性能的一个方面。
- 使用虚存的计算机如果主存太小,则页面交换的频率将增加,CPU的使用效率就会降低,因此应当增加更多的内存。
- 企业应用集成中,面向过程的集成模式强调处理不同应用系统之间的交互逻辑,与核心业务逻辑相分离,并通过不同应用系统之间的协作共同完成某项业务功能。
- 电子数据交换(EDI)的实施在技术上比较成熟,但是实施EDI需要统一数据格式,成本代价较大。
- 用户文档包括:功能描述、安装文档、使用手册、参考手册、操作员指南。
- 配置项包括
- 属于产品组成部分的工作成果:如需求文档、设计文档、源代码和测试用例等;
- 属于项目管理和机构支撑过程域产生的文档:如工作计划、项目质量报告和项目跟踪报告等。
- 敏捷 方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化,比较适合需求变化较大或者开发前期对需求不是很清晰的项目。
- 逆向工程 导出的信息可分为以下四个抽象层次
- 实现级:包括程序的抽象语法树、符号表等信息。
- 结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图等。
- 功能级:包括反映程序段功能及程序段之间关系的信息。
- 领域级:包括反映程序分量或程序与应用领域概念之间对应关系的信息。
- 面向对象的设计模型包含以 包图 表示的软件体系结构图,以 交互图 表示的用例实现图,完整精确的类图,针对复杂对象的状态图和用以描述流程化处理的活动图等。
- 基于构件的开发模型由 软件的需求分析定义、体系结构设计、构件库建立、应用软件构建以及测试和发布 5个阶段组成。
- 在一个典型的基于MVC的J2EE应用中,系统的界面由JSP构件实现,分发客户请求、有效组织其他构件为客户端提供服务的控件器由Servlet构件实现,数据库相关操作由Entity Bean构件实现,系统核心业务逻辑由Seesion Bean构件实现。
- 系统输入设计中应尽可能考虑人的因素,输入应该尽可能使用已有含义明确的设计,需要采用模仿的模式而非创新。
- 系统测试主要有恢复测试、安全性测试、压力测试、性能测试、可靠性测试、可用性测试、可维护性测试和安装测试。
- 良好的架构设计能够更好地捕获并了解用户需求。
- 架构设计能够支持项目计划和项目管理等活动。
- 使用ABSD(基于架构的软件设计)方法,设计活动的开始意味着需求抽取和分析活动可以终止。
- 使用ABSD(基于架构的软件设计)方法,设计活动可以从项目总体功能框架明确就开始。
- Windows操作系统在图形用户界面处理方面采用的核心架构风格是 事件驱动 风格。
- 采用闭环结构的软件通常由几个协作构件共同构成,且其中的主要构件彼此分开,能够进行替换与重用,但闭环结构通常适用于处理简单任务(如机器装配等),并不适用于复杂任务;分层结构的特点是通过引入抽象层,在较低层次不确定的实现细节再较高层次会变得确定,并能够组织层间构件的协作,系统结构更加清晰。
- 早期的编译器采用管道-过滤器架构风格,并且大多数编译器在词法分析时创造独立的符号表,在其后的阶段会不断修改符号表,因此符号表并不是程序数据的一部分 。现代的编译器采用以数据共享为中心的架构风格,分析树是在语法分析阶段结束后才产生作为语义分析的输入,分析树是数据中心中重要的共享数据,为后续的语义分析提供了帮助。
- ATAM是一种软件架构的评估方法,而且并不是一种精确的评估方法,该方法表现的主要形式是评审会议。
- RSA和ECC属于非对称加密算法,MD5为摘要算法,RC-5为对称加密算法。
- 采用反编译技术获得的软件 不属于我国著作权法所保护的的内容。
- 网络设计过程中,在 逻辑设计 阶段的任务是 根据需求规范和通信规范,实施资源分配和安全规划。
- 网络系统生命周期的五个阶段顺序:需求规范、通信规范、逻辑网络护色剂、物理网络设计、实施阶段。
- 对运行系统进行评估的主要目的是 评价信息系统性能方面的表现,找出系统可能存在的性能瓶颈。
- 企业应用门户 是一个用来提高企业的集中贸易能力、协同能力和信息管理能力的平台。它以商业流程和企业应用为核心,将商业流程中功能不同的应用模块通过门户集成在一起,提高公司的集中贸易能力、协同能力和信息管理能力。
- 客户关系管理(CRM)系统的重要功能是 客户服务与支持 。目前,客户服务与支持的主要手段是通过呼叫中心和互联网来实现 。CRM系统能够与ERP系统在财务、制造、库存等环节进行连接,虽然关系比较独立,但由于两者之间具有一定的关系,因此会形成一定的闭环反馈结构。
- 共享数据库集成方式的一个重要限制来自外部的已封装应用,这些封装好的应用程序只能采用自定义的数据库模式,调整和集成余地较小。 共享数据库为不同的应用程序提供了统一的数据存储与格式定义,能够在一定程度上缓解数据语义不一致的问题,但无法完全解决该问题。
- 详细的项目范围说明书是项目成功的关键。项目定义的输入包括;
- 项目章程。如果项目章程或初始的范围说明书中没有在项目执行组织中使用,同样的信息需要进一步收集和开发,以产生详细的项目范围说明书。
- 项目范围管理计划。
- 组织过程资产。
- 批准的变更申请。
- 通常可以使用 工作分解结构(WBS) 来进行 活动定义。
- 鱼骨图 (也称为lshikawa图)是一种发现问题"根本原因"的方法,通常用来进行 因果分析。
- 人们总是希望使用自动工具来执行需求变更控制过程。定义变更控制计划,并指导设计人员按照所制定的计划实施变更不是这类工具所具有的功能。
- 需求管理是CMM可重复级中6个关键过程域之一,其主要目标是 对于软件需求,必须建立基线以进行控制,软件计划、产品和活动必须与软件需求保持一致。
- 在RUP中采用"4+1"视图模型来描述软件系统的体系结构。在该模型中,最终用户 (关心系统功能)侧重于 逻辑视图 ;系统工程师 (关心系统的发布、安装、拓扑结构等问题)侧重于 部署视图 ;分析和测试人员 (关心系统的行为)侧重于 用例视图 ;程序员 (关心系统的配置、装配等问题)侧重于 实现视图 ;系统集成人员 (关心系统的性能、可伸缩性、吞吐率等问题)侧重于 进程视图。
- 软件开发环境是支持软件产品开发的软件系统,它由软件工具集和环境集成机制构成。环境集成机制包括:数据集成机制 (提供存储或访问环境信息库的统一的数据接口规范 );界面集成机制 (采用统一的界面形式,提供统一的操作方式 );控制集成机制 (支持各开发活动之间的通信、切换、调度和协同工作)。
- 采用面向对象开发方法时,可以使用状态图和活动图对系统的动态行为进行建模。
- 在进行结构化分析时,必须使用数据流图和软件结构图这两种模型。(没有"必须"这种讲法,一般都说"可以"使用某种图...)
- 基于构件的软件开发中,物理构件模型 用技术设施产品、硬件分布和逻辑结构、以及用于绑定的网络和通信协议描述系统的物理设计,用来了解系统的性能、吞吐率等非功能性属性 ;逻辑构件模型 用功能包描述系统的抽象设计,用接口描述每个服务集合,以及功能之间如何交互以满足用户需求,它 作为系统的设计蓝图以保证系统提供适当的功能。
- 对象管理组织(OMG)基于CORBA基础设施定义了4种构件标准。会话构件的状态信息是由构件自身而不是由容器维护 ;实体构件 需要长期持久化并主要用于事务性行为,由容器管理其持久化;加工构件 同样需要容器管理其持久化,但没有客户端可访问的主键;服务构件 是无状态的。
- 客户机/服务器系统开发时可以采用不同的分布式计算架构
- 分布式表示架构 是将表示层和表示逻辑层迁移到客户机,应用逻辑层、数据处理层和数据层仍保留在服务器上。
- 分布式数据架构 是将数据层和数据处理层放置于服务器,应用逻辑层、表示逻辑层和表示层放置于客户机。
- 分布式数据和应用架构,数据层和数据处理层放置在数据服务器上,应用逻辑层放置在应用服务器上,表示逻辑层和表示层放置在客户机。
- 恢复测试 主要是 检查系统的容错能力。
- 强度测试 检查系统能力的最高实际限度。
- 可靠性测试通常使用 平均失效间隔时间MTBF是否超过了规定的时限;因故障而停机时间MTTR在一年中不应超过多少时间来衡量系统的可靠性。
- 软件架构能够指导设计人员和实现人员的工作 。一般在设计架构之初,会根据用户需求,确定多个候选架构,并从中选择一个较优的架构,并随着软件的开发,对这个架构进行微调,以达到最佳效果 。(根据用户需求,能够确定一个最佳的软件架构,指导整个软件的开发过程)
- 一般来说,软件架构设计活动将已标识构件集成到软件架构中,设计这些构件,但不予以实现。
- 基于软件架构的设计(ABSD)强调由商业、质量和功能需求的组合驱动软件架构设计。它强调采用 视角与视图 来描述软件架构,采用 用例与质量场景 来描述需求。
- 特定领域软件架构(DSSA)的实施过程中包括一系列基本的活动,其中 领域设计 活动的主要目的是为了获得DSSA。
- 代理模式 可以解决直接访问对象时带来的问题,例如:要访问的对象在远程的机器上;对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问等。
- ARP攻击造成网络无法跨网段通信的原因是 伪造网关ARP报文使得数据包无法发送到网关。
- 操作系统为用户提供了两类接口:操作一级和程序控制一级的接口。系统调用不属于操作一级的接口。操作系统既提供了与用户交互的接口,也提供了与应用程序交互的接口。用户可以通过菜单、命令、窗口与操作系统进行交互,而应用程序可以通过系统调用(如调用系统API)来与操作系统交互。
- 自然连接操作会自动以两个关系模式中共有属性值相等作为连接条件,对于连接结果,将 自动去除重复的属性。
- 网络主干部分称为 核心层 ,核心层的主要目的在于通过高速转发通信,提供优化、可靠的骨干传输结构。核心交换机应具有跟高的可靠性、性能和吞吐量。核心层为网络提供了骨干组件或高速交换组件,在纯粹的分层设计中,核心层只完成数据交换的特殊任务(策略路由不属于核心层特性,策略路由属于汇聚层特性)。
- 逻辑网络设计 的内容:网络及结构设计、物理层技术选择、局域网技术选择与应用、广域网技术选择与应用、地址设计与命名模型、路由协议选择、网络管理、网络安全、逻辑网络设计文档。
- 物理网络设计 的内容:设备选型、结构化布线、机房设计及物理网络设计相关的文档规范(如:软硬件清单,费用清单)。
- 负载均衡 建立在现有网络结构之上,它提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
- 增量备份 可 针对上次任何一种备份 进行,将上次备份后所有发生变化的数据进行备份,并将备份后的数据进行标记。
- 差异备份 :差异备份与增量备份一样,都只备份变动过的数据。但前者的备份是 针对上次完整备份 后,曾被更新过的。
- 某大型商业公司欲集成其内部的多个业务系统,这些业务系统的运行平台和开发语言差异较大,而且系统所使用的通信协议和数据格式各不相同,针对这种情况,采用基于 总线 的集成框架较为合适。
- 需求定义方法包括 严格定义方法 和 原型方法 两种。严格定义方法使用于需求已全面获取,需求较为明确的情况。 如果达不到这个要求,则适宜用原型方法。
- 迪米特法则(最少知识原则) :一个对象应当对其他对象有尽可能少的了解。
- 迪米特法则的应用准则
- 在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,就越有利于复用。
- 在类的结构设计上,每一个类都应当尽量降低成员的访问权限。一个类不应当
public自己的属性,而应当通过提供取值和赋值的方法让外界间接访问自己的属性。 - 在类的设计上,只要有可能,一个类应当设计成不变类。
- 在对其他对象的引用上,一个类对其他对象的引用应该降到最低。
- 迪米特法则的应用准则
- 结构化方法 的核心特色:"自顶向下,逐步求精" ;与传统方法相比,敏捷开发方法比较适合需求变化较大或者开发前期需求不是很清晰的项目,以它的灵活性来适应需求的变化。
- 企业战略数据模型可分为两种类型:数据库模型 描述日常事务处理中的数据及其关系;数据仓库模型 描述企业管理决策者所需信息及其关系。
- 事务型数据库容易形成"信息孤岛",而主题数据库不容易形成"信息孤岛" 。围绕核心业务应用计算机和网络技术是企业信息化建设的有效途径。
- 快速迭代式的原型开发能够有效控制成本,演化式原型开发 是指在开发过程中逐步改进和细化原型直至产生出目标系统。
- 架构风格 描述了一类软件架构的特征,它独立于实际问题,强调软件系统中通用的组织结构选择。
- "4+1"视图
- "4"
- 逻辑视图:从系统的静态结构和动态行为角度显示系统内部如何实现系统的功能。用来描述设计的对象模型和对象之间的关系。
- 开发视图:又称实现视图,显示的是源代码以及实际执行代码的组织结构。描述了软件模块的组织与管理。
- 过程视图:又称处理视图,显示程序执行时并发的状态。
- 物理视图:展示软件到硬件的映射
- "1"
- 场景视图:又称用例视图,显示外部参与者观察到的系统功能。
- "4"
- ABSD(基于架构的软件设计)方法有三个基础:功能分解、选择架构风格实现质量及商业需求和软件模板的使用。
- 提高质量属性的常见手段
- 提高 可用性 的手段:命令/响应机制、心跳机制、异常处理机制、冗余机制等。
- 提高 性能 的手段:引入并发、维持数据或计算的多个副本、增加可用资源、控制采样频度、限制执行时间、固定优先级调度等 。* 提高 安全性 的手段:身份认证、限制访问、检测攻击、维护完整性等。
- 敏感点 是一个或多个构件(和/或构件之间的关系)的特性;权衡点 是影响多个质量属性的特性,是多个质量属性的敏感点。
- 对于争议处理的流程:对于任何争议基本上都是先找主管行政管理部门进行仲裁,仲裁不成功再进行诉讼 (先仲裁后诉讼)。
- 利用 商业秘密权 可以对软件的技术信息、经营信息提供保护。
- 已正式公布的行业标准代号:QJ(航天)、SJ(电子)、JB(机械)、JR(金融)、HB(航空) 等等。
- SAAM的主要输入是问题描述、需求说明 和架构描述文档,其分析过程主要包括场景开发、架构描述、单个场景评估、场景交互和总体评估。
- 采用以架构为核心的软件开发方法,在建立软件架构的初期,首要任务是选择一个合适的 架构风格 ,在此基础上,开发人员通过架构模型,可以获得关于 架构属性 的理解,为将来的架构实现与演化过程建立目标。
- ANSI/IEEE 1471~2000是对软件密集型系统的架构进行描述的标准。在该标准中,视图 这一概念主要用于描述软件架构模型。在此基础上,通常采用 视角 描述某个利益相关人所关注架构模型的某一方面。架构 则是对所有利益相关人关注点的响应和回答。
- ADL主要包括:组件、组件接口、连接件 和架构配置。
- 动态测试工具 需要运行被测试系统,并设置探针,向代码生成的可执行文件中插入检测代码,可用于软件的覆盖分析和性能分析,也可用于软件的模拟、建模、 仿真测试和变异测试 等。
- 等价类划分法根据软件的功能说明,对每一个输入条件确定若干个有效等价类和无效等价类,无效等价类是用来测试非正常的输入数据的,所以要为每个无效等价类设计一个测试用例 ,既要为有效等价类设置测试用例,也要为无效等价类设置测试用例。
- 因果图方法是从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输出或程序状态的改变),可以通过因果图转换为判定表。
- 在运用 里氏替换原则 时,尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类进行编程。
- 软件开发环境应支持多种集成机制。根据功能不同,可以将集成机制分为三个部分:环境信息库 ,用以存储与系统开发有关的信息,并支持信息的交流与共享;过程控制与消息服务器 ,是实现过程集成和控制集成的基础;环境用户界面,它的统一性和一致性是软件开发环境的重要特征。
- 快速应用开发(RAD)通过使用基于 构件 的开发方法获得快速开发。当 系统模块化程度较高 时,最适合于采用RAD方法。
- 企业信息资源集成管理是对企业 信息功能 的集成,其核心是对企业 内部和外部信息流 的集成。
- CRM是一套先进的管理思想及技术手段,它通过将 人力资源、业务流程与专业技术 进行有效的整合,最终为企业涉及的各个领域提供了集成环境。CRM系统的四个主要模块包括 销售自动化、营销自动化、客户服务与支持、商业智能。
- ERP中的企业资源包括 物流、资金流和信息流。
- 对采用管道-过滤器架构风格的系统,可以通过引入过滤器的数据并发处理提高系统性能;对于采用过程调用架构风格的系统,将显式调用策略替换为隐式调用策略能够提高系统的灵活性,但会降低系统的性能。
- 任务的执行时间 不是反映嵌入式实时操作系统实时性的评价指标。
- 在嵌入式系统设计中,硬件抽象层主要负责封装与硬件直接相关的接口和操作,如I/O操作、中断处理、异常处理等,使得操作系统能够通过统一的接口与硬件交互。而设备驱动是特定于硬件的,用于控制和管理硬件设备的软件组件,它们通常不属于硬件抽象层的一部分。任务调度则是操作系统内核的一个核心功能,用于管理多个任务或线程件,它也不属于硬件抽象层的范畴(硬件抽象层应包括设备驱动程序和任务调度)。
- 使用中间件将降低应用软件设计的复杂度。
- 数学模型常带有多个参数,而参数会随环境因素而变化。根据数学模型求出最优解或满意解后,还需要进行 灵敏性分析,对结果进行检验,分析计算结果对参数变化的反应程度。
- 进行层次化网络设计时,应是先从 接入层 开始设计,然后逐级往核心层走。
- 网络需求分析包括网络总体需求分析、综合布线需求分析、网络可用性与可靠性分析、网络安全性需求分析,此外还需要进行 工程造价估算。
- JRP是一种相对来说 成本较高 的 需求获取 方法。
- 在结构化分析中,主要进行三个方面的建模:功能建模(DFD)、行为建模(状态转换图)、数据建模(ER图)
- 用例视图 是最基本的需求分析模型。
- RAID5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。这种方案中数据信息与校验信息的配比是N+1方案,即N份数据,1份校验信息。(即N块硬盘,实际容量为N-1块硬盘的容量,使用不同容量硬盘时,会以最小容量的盘为准)
- 原子构件的归属是 唯一 的,它 只能属于一个构件家族。
- 企业系统规划法(BSP)由IBM提出,是一种结构化的信息系统规划方法。它通过 自上而下识别企业的战略目标和业务过程 ,再通过 自下而上的数据分析 设计信息系统,是一种综合性强的方法。
- 特定领域软件架构(DSSA) 中
- 垂直域 :面向特定行业或应用领域 ,定义该领域的系统族及通用架构;
- 水平域 :定义多个系统族间的公共功能区域 ,范围在子系统级。
- 领域分析者 的任务是控制整个领域分析过程,进行知识获取,将获取的知识组织到领域模型中;
- 领域设计者 的任务是根据领域模型和现有系统开发出DSSA,并对DSSA的准确性和一致性进行验证。
- ABSD方法是一个自顶向下、递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生 软件构件和类。
- 可靠性建模 是 测试阶段 的重要任务之一,通过收集测试数据并结合实际运行环境建立数学模型,以评估和预测软件的可靠性。
- 系统测试是为了发现 概要设计 出现的错误。
- 在架构复审过程中,主要由用户代表与领域专家决定架构是否满足需求、质量需求是否在设计中得到体现。
- 联机分析处理 能够实现数据的上卷、下钻和旋转分析。
- 和UML相比SysML新增了 需求图 ,其中 需求图 用于描绘需求。
- 体系结构演化6个步骤:需求变化归类、制定体系结构演化计划、修改、增加或删除构件、更新构件的相互作用、构件组装与测试、技术评审。
- 净室软件工程是一种强调形式化规格说明与增量开发的软件开发方法,主要 基于函数理论和抽样理论。
- 软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括 计划、执行、检查和处理。
- 自顶向下方法 从系统的高层功能开始,逐步向下分解实现,能够尽早搭建系统骨架,便于形成可演示的原型,在早期阶段就可以与用户沟通和验证。
- 要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中 共享内存 是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。消息队列 作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。
- 测试精确度从高到低:真实程序 、核心程序 (提取关键部分)、小型基准测试 、合成基准测试(模拟性最强、偏差最大)。
- MIME:多用途互联网邮件扩展标准 ,用于支持电子邮件中的非ASCII文本、附件、多部分消息等功能,与安全无关。与安全电子邮件相关的是 S/MIME(安全/多用途互联网邮件扩展)。
- CDN(内容分发网络)和反向代理的基本原理都是 缓存。
CDN通过在全球各地的分发节点缓存用户常访问的内容 ,使得用户在访问网站时能从距离自己最近的服务器获取数据,从而提高访问速度,减轻源站的负载;反向代理则是将请求代理到后端的不同服务器上,如果请求的资源在反向代理服务器的缓存中,代理服务器直接返回缓存数据给用户,而不需要再次请求后端服务器。缓存时这两种技术的共同点。
- RAID 5容量计算
- 计算公式为:可用容量 = (硬盘数量 - 1) × 单块硬盘容量
- 在 RAID 5 中,如果硬盘容量不一致,会 按最小硬盘容量作为统一容量进行计算。
- 在构件组装过程中需要检测并解决架构失配问题。其中 构件 失配主要包括由于系统对构件基础设施、控制模型和数据模型的假设存在冲突引起的失配。连接子 失配包括由于系统对构件交互协议、构件连接时数据格式的假设存在冲突引起的失配。
- 软件过程是制作软件产品的一组活动以及结果,这些活动主要由软件人员来完成,主要包括 软件描述、软件开发、软件有效性验证和软件进化。
- 软件结构化设计包括 架构设计、接口设计、数据设计、过程设计。
- 软件架构常见复用方式包括 机会复用 和 系统复用 。机会复用 是指开发过程中,只要发现有可复用的资产,就对其进行复用。系统复用 是指在开发之前,就要进行规划,以决定哪些需要复用。
- 管道-过滤器风格通过将处理过程划分为一系列过滤器节点,并通过管道连接,这种结构 非常适合并发处理。每个过滤器可以在独立线程中运行,从而实现流水线处理。
- 在软件开发过程中,测试活动需要依据不同阶段的文档来设计和执行。详细设计 最适合作为单元测试的依据。
- 事务处理性能委员会(TPC)是制定商务应用基准程序(benchmark)标准规范、性能和价格度量,并管理测试结果发布的非营利组织,其发布的TPC-C是 在线事务处理 的基准程序。
- 在架构评估中,敏感点 是指系统中一个或多个构件(或构件之间的关系)的特性,它们对质量属性的实现起决定性作用;权衡点 是多个质量属性的敏感点,即当一个设计决策影响多个质量属性时产生的点,范围更广。
- 安全性 是指关注软件系统同时兼顾用户提供服务阻止未授权用户使用。
- 集成开发环境(IDE)通常集成了代码编辑、语法高亮、编译、调试等多种功能,这些功能通常围绕同一个核心数据(如语法树、符号表等)进行操作,适合采用 数据仓储(Repository) 架构风格,即一个中心数据结构为核心,其他功能模块作为独立的处理器与该数据结构交互。
- 软件开发过程模型中,原型模型 主要由原型开发阶段和目标软件开发阶段构成。
- 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。其中,在批处理风格软件体系结构中,每个处理步骤是一个单独的程序,每一步必须在前一步结束后才能开始,并且数据必须是完整的,以 整体 的方式传递,基于规则的系统包括规则集、规则解释器、规则/数据选择器及 工作内存。
- 在ABSD(基于架构的软件开发)方法中,顶层被分解为 概念子系统 ,ABSD体系结构需求一般来自3个方面,分别是系统的质量目标、系统的商业目标和 开发人员的商业目标。
- C2 架构风格可以概括为通过连接件绑定在一起按照一组规则运作的并行构件。
规则系统是以规则驱动的推理系统 ,核心是知识库与推理机。
- 聚合关系是用于类图中的结构性关系,表示"整体-部分"的关系,例如一辆车由多个零件构成。
- Lambda架构是一种结合批处理与流处理 的大数据处理架构,核心思想是"既要保证数据结果的准确性,又要具备实时性"。其三层结构包括:
- 批处理层 :处理全量数据,生成准确的离线视图;
- 加速层 :处理实时增量数据,提供低延迟的实时视图;
- 服务层 :整合前两层的结果,对外提供统一的查询接口。