# 系统架构设计师知识点


## 综合知识

### 系统架构设计

1. 软件系统架构是关于软件系统的**结构、行为和属性**的高级抽象。软件系统架构不仅指定了软件系统的**组织结构和拓扑结构**，而且显示了**系统需求和构成组件**之间的对应关系，包括设计决策的基本方法和基本原理。

2. 软件体系结构风格定义了**一个词汇表和一组约束**，包含**构件和连接件**类型，反应众多系统所共有的**结构和语义**特性，强调对架构**设计**的重用。

3. 架构描述语言(ADL)：组件、组件接口、**连接件**(建立组件间的交互和规则)和架构配置(组件和连接件的连接图)

4. 架构风格：数据流：**批处理**(**传统编译器, 整体传输**)，管道-过滤器(构件是过滤器，连接件是管道；**每个阶段产生的结果作为下一个阶段的输入**；管道负责传输，过滤器负责处理；支持并行); 

   调用/返回：面向对象(构件：对象，连接件：交互方式)，层次结构，主程序 / 子程序(构件是：主程序和子程序；连接件：过程调用)； 

   独立构件：进程通信(构件：独立的进程，连接件是消息传递)，**事件驱动(语法高亮，触发动作**)；

   虚拟机(模拟新系统)：解释器(**用户自定义，更灵活**)，规则系统(**定义关系进行执行**，将业务逻辑中频繁变化的部分定义为规则，基于规则的系统包括规则集、规则解释器、规则/数据选择器及**工作内存**等组成)；

   仓库：数据库(**IDE, 数据共享**)，超文本，黑板(**语音识别，知识推理**); (两种构件：**中央数据结构**说明当前数据的状态，**独立构件**在中央数据存储上执行)。

   闭环：过程控制(**设定参数，定速巡航**)；

   C2：通过连接件绑定在一起按照一组规则运作的并行构件

5. 层次结构风格：三层在两层上增加一个**应用服务器**，构成包括**表示层**(用户接口部分，存在于客户机)、**功能层**(应用本体)和**数据层**(数据库管理系统)三个部分

6. MVC: Modle负责数据， View 负责展示、Controller负责协调。

7. 面向服务的架构(SOA )：实现方式：Web Service(UDDI用于**描述、发现和集成**)、服务注册表模式和**企业服务总线** ESB 模式；SOA是集中式管理(微服务架构是去中心化管理)；描述Web服务的三个基本属性：**服务做些什么、如何访问服务、服务位于何处**。

   微服务特点：独立部署、去中心化治理、服务自治、轻量级通信。

8. 特定领域软件架构(DSSA) 通常是一个具有三个层次的系统模型，包括**领域开发环境、领域特定应用开发环境和应用执行环境**。

   **领域架构师**在领域开发环境工作，**应用工程师**在领域特定的应用开发环境工作，**操作员**在应用执行环境工作。

   4角色：**领域专家**(提供需求规格和实现知识)、**领域分析师**(获得的知识组织到**领域模型**中)、**领域设计人员**(根据领域模型和现有系统开发出 **DSSA** 以及建立两者联系)和**领域实现人员**(软件实现，可重用构件验证)

   2领域：水平域(不同行业共性)，垂直域(通用)

   过程是**并发的、递归的、反复的**。

9. 基于架构的软件设计(ABSD)：**自顶向下**，递归细化，产生软件**构件和类**。由**商业、质量和功能需求**的组合驱动软件架构设计，采用**视角和视图**来描述软件架构，采用**用例**来描述功能需求，采用**质量场景**来描述质量需求。描述软件架构：功能组织的**静态视角**能判断质量特性，展示并发行为的**动态视角**能判断系统行为特性。

   3基础：系统进行功能分解、采用**架构风格**实现质量属性与商业需求、采用软件模板设计软件结构。

   6过程：架构需求、架构设计、**架构文档化**(输出架构规格说明书和架构质量说明书)、**架构复审**(标识潜在风险，用户代表和领域专家决定)、**架构实现**、架构演化(按需求修改，6步骤：需求变化归类，制订体系结构演化计划，修改、增加或删除构件、**更新构件的相互作用**、构件组装与测试、技术评审)

   顶层被分解为若干**概念子系统**和一个或若干个软件模板。在第2层，概念子系统又被分解成概念构件和一个或若干个附加软件模板。

   体系结构需求一般来自3个方面，分别是**系统的质量目标、系统的商业目标和系统开发人员的商业目标**。

10. 架构权衡分析方法(ATAM): 4阶段：需求收集、**架构视图**描述、属性模型构造和分析、架构决策与折中；强调以**属性**为架构评估的核心概念，主要针对性能、可用性、安全性和可修改性，在系统开发之前，对这些质量属性进行**评价和折中**。通过头脑风暴和优先场景理解质量属性要求，分析架构方法的三种场景：用例场景，增长情景，探索性情景。

11. 基于场景的架构分析方法(SAAM)：针对最终架构而非详细设计进行评估。5步骤：场景开发、体系结构描述、单个场景评估、场景交互和总体评估。主要输入问题是**问题描述、需求声明和体系结构描述**。

   场景是从**风险承担者**的角度对系统交互的描述，一般采用**刺激、环境和响应**三个方面对场景进行描述。

12. 质量属性：6组成：刺激源、刺激、**环境**、制品、**响应和响应度量**；**响应**是在激励到达后所采取的行动；效用树结构：**树根、质量属性、属性分类，质量属性场景**。描述质量属性的手段：**质量属性场景**

   **性能**：系统的响应能力。(优先级队列，引入并发，**资源调度**)(效率、响应时间、**吞吐量**、负载)

   **可用性**：系统能够正常运行的时间比例。(**心跳**、Ping/Echo、**主动冗余**、被动冗余、选举)MTBF(平均无故障时间) / (MTBF &#43; MTTR(平均修复时间))

   **安全性**：系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。(**追踪审计**、**检测攻击**)

   **可修改性**：系统快速进行修改的能力。(**接口-实现分离**、抽象、信息隐藏(通过信息隐蔽可以提高软件的**可修改性、可测试性和可移植性)**)

   可靠性：在意外或错误使用的情况下维持软件系统的功能特性的基本能力。(冗余和心跳线)(鲁棒性，和健壮性)

   易用性：降低学习成本

   可测试性：开放API，支持远程

   可维护性：当需要修改缺陷、增加功能、提高质量属性时，定位修改点并实施修改的难易程度。=易修改&#43;易理解&#43;易测试

   可伸缩性：用户数和数据量增加时，软件系统维持高服务质量的能力

   **运行期质量**属性包括性能、安全性、易用性、可伸缩性、互操作性、可靠性、持续可用性和鲁棒性。

   **开发期质量**属性包括易理解性、可扩展性(新需求)、可重用性，可测试性、可维护性和可移植性。

   架构评估方式：

   敏感点：一个或多个构件的特性。

   权衡点：影响多个质量属性的特性，是多个质量属性的敏感点。(让一个变好，一个变差才要权衡)

   风险点和非风险点：某个做法如果有隐患，有可能导致一些问题，则为风险点；而如果某件事是可行的、**可接受的**，则为非风险点。

11. 4&#43;1视图：多视图反映了**关注点分离**的思想

   逻辑视图(描述对象模型和对象关系，功能)，

   开发视图(源代码及实际执行代码的**静态组织结构**)，

   进程视图(并发，同步特征)

   物理视图 (软件到硬件的映射)

   统一场景

12. 系统应用集成(EAI)：基本原则是集成多个系统并保证系统**独立性**，4层次服务从下至上：通信服务、信息传递与转化服务、应用连接服务和**流程控制服务**。

13. 中间件：分布式系统中中间件的两种不同类型的支持：**交互支持和提供公共服务**

14. 软件架构复用：类型：**机会复用**(抓住机会)和**系统复用**(开发前规划)；主要阶段：构造/获取可复用的软件资产、管理可复用资产和使用可复用资产

15. 类图：(类内部属性，类间关系)；状态图(对象内部行为)

16. 区块链：公有链，私有链，联盟链。本质是分布式账本，解决的是多方协作时的信任问题。特点：去中心化、不可篡改、透明性、安全性。

17. 数字孪生生态系统由基础支撑层、数据互动层、模型构建层与仿真分析层、**共性应用层**(涵盖描述、诊断、预测和决策)以及行业应用层。

18. 物联网应用：感知层、网络传输层和应用层

19. 云计算3服务模式：IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)

20. 大数据处理框架

    | 框架       | 特点                         | 应用场景                 |
    | ---------- | ---------------------------- | ------------------------ |
    | **Hadoop** | 批处理、MapReduce、HDFS      | 离线数据分析、ETL        |
    | **Spark**  | 内存计算、支持批处理和流处理 | 实时推荐、机器学习       |
    | **Flink**  | 流批一体、低延迟             | 实时风控、物联网数据处理 |
    | **Kafka**  | 分布式消息队列               | 数据管道、事件流         |

### 软件工程

1. 软件生命周期：**软件定义**(主要任务：可行性研究)、**软件开发**、**软件运行与维护**

2. 软件过程4活动：描述(需求分析与规格说明)、开发(设计与实现)、有效性验证(测试、评审)、进化(维护与升级)

3. 软件系统工具：软件开发工具(如需求分析、设计、编码与排错工具)、软件维护工具(如逆向工程工具、版本控制工具)、软件管理工具(如项目管理工具、配置管理工具)和软件支持工具(如软件评价工具、开发环境支持工具)

4. 软件能力成熟度模型(CMM)5等级：初始级、可重复级、已定义级、已管理级、优化级。

   1级靠人，2级有计划；3级定标准，4级看数据；5级求优化

5. 数据管理能力成熟度评估模型(DCMM)8核心领域，细分为 28 个过程域和 445 个能力等级标准。

   8核心领域：数据战略、数据治理、数据架构、数据应用、数据安全、数据质量、数据标准和数据生存周期。

   5等级：初始级(1级)、受管理级(2级)、稳健级(3级)、量化管理级(4级)和优化级(5级)。

6. 能力成熟度模型集成(CMMI) 

   初始级(Level 1)：流程随意、混乱，依赖个人能力和英雄主义精神。
   已管理级(Level 2)：项目层面的流程被规划、文档化、执行、监控和控制，能满足成本、进度和质量目标。
   已定义级(Level 3)：组织层面形成了**标准化、制度化**的管理流程，并根据自身特点进行定义；开始收集项目的经验资产，确保过程一致性。
   量化管理级(Level 4)：建立产品质量、服务质量和过程性能的**定量目标**，能够**预测和控制过程性能**。
   优化级(Level 5)：通过**持续的增量式和创新式改进**，利用多个项目收集的数据优化过程性能。

   体系文件层次结构：自顶向下的顺序为：①顶层方针(制定质量管理的总体目标和方向)→ ③过程文件(描述各个过程域的具体活动、步骤和职责，是体系运行的主要依据) → ④规程文件 (过程文件细化，提供具体规则和标准)→ ②模板类文件(用于规范相关文档和记录的格式)。

7. 敏捷开发方法

   快速响应变化、**以人为中心**的软件开发方法，是**适应性**而非预设性，以**原型开发思想**为基础，采用**迭代式增量**开发，适合**中小型团队和需求不确定性高**的项目。

   XP(极限编程)：费用严格控制。测试先行。

   水晶系列(Crystal)：面对面沟通的小团队，最少纪律约束。

   开放式源码(Open Source)：强调全球范围内协作开发，开发人员地域广。

   并列争球法SCRUM：强调团队短期冲刺和每日站会，更适合集中式团队。明确定义了的可重复的方法过程。

   FDD(特性驱动开发)：将开发人员分为首席程序员和类程序员，**首席程序员**负责整体设计和任务分配，**类程序员**负责具体实现。

   ASD(自适应软件开发)

8. 软件开发方法：

   瀑布模型：线性顺序，需求明确，各阶段活动之间具有严格的因果关系，前一阶段的成果是后一阶段的输入

   原型模型：针对需求不明确，不适合大项目。分为原型开发阶段(快速构建、验证和修改原型以明确需求)和目标软件开发阶段(根据确认需求进行系统化开发)

   增量模型：与用户确认，每个增量版本独立。

   螺旋模型：针对需求不明确，适合大项目。**快速原型**的基础上扩展，**风险驱动**为核心，结合原型、迭代和瀑布等特点，强调风险评估和原型验证。

   v模型：强调了测试与开发阶段的对应关系(单元测试-编码，集成测试-详细设计，系统测试-概要设计，验收测试-需求分析)

   w模型：强调开发与测试真正“并行进行”

   喷泉模型：描述**面向对象**的软件开发过程的开发模型

   基于构件的开发模型(CBSD):增强可复用性，快速应用开发。

   形式化方法模型：数学基础

9. 软件工程过程模型4部分：计划、执行、检查、处理。

10. 软件开发环境(SDE)强调平台、数据、界面、控制、过程等方面的集成。**过程控制与消息服务器**是实现过程集成和控制集成的基础。

   算法模型库：主要存储可复用的算法和模型

   **环境信息库**：是 SDE 的核心部分，用于集中存储与系统开发相关的各种信息，支持多工具间的信息交流与共享

   信息模型库：用于存储特定信息模型

   用户界面库：用于提供界面组件

11. 统一过程RUP(Rational Unified Process)以**用例驱动**、以**架构为中心**、**迭代和增量**式的软件过程框架

   4阶段：**初始**(制定初步用例模型和商业案例，完成初步风险评估和项目草案计划)、**细化**(确定系统的体系结构(架构基线)，细化和确认需求，制定详细的项目计划和资源安排)、**构建**(编码实现为主)、**移交**(包括部署、培训和最终验收)

12. 逆向工程(低层次的描述转化为更高层次)4抽象层次

   实现级：包含与源代码直接对应的底层信息，如程序的抽象语法树(AST)、语句序列、变量与数据结构

   结构级：描述程序内部结构关系，如模块依赖图、调用图

   功能级：程序段的功能和功能之间的关系

   领域级：程序实体与应用领域概念的映射

   通过用户指导的搜索与变换方法，常常能够恢复实现级和结构级。

13. 再工程：对现有系统进行修改或重构，从而产生系统的一个新版本

14. 软件重用指在软件开发过程中重复使用相同或相似的软件元素，这些元素包括**需求分析文档、设计文档、程序代码、测试用例和领域知识**等。

   软件重用分为两种类型：**垂直式重用**(局限于某一特定领域，如电力系统)和**水平式重用**(适用于不同领域，如标准函数库)。水平式重用的范围更广，而垂直式重用更有针对性。

15. 构件特性：(1)独立的部署单元；(2)作为第三方的组装单元；(3)没有外部可见状态，但可以通过运行时容器(如应用服务器、框架等)管理状态并对外提供可见性。

   具备属性：**独立部署性、封装性、复用性和唯一性**；

   原子构件的归属是唯一的，它只能属于一个构件家族。

   在一个环境中最多只能存在一个特定构件的拷贝。

   构件模型要素：接口(一个已命名的一组操作的集合，是构件与外界交互的唯一访问点，定义了构件提供的服务及其使用方式)、使用信息、部署。

   IDL(接口定义语言) 文件一般包含六大元素：接口描述(核心，映射为Java类或C&#43;&#43;类)、模块定义(映射为Java包或C&#43;&#43;命名空间)、类型定义、常量定义、异常、值类型(映射为类或结构体)。

16. 构件按照外部形态，可以分为**独立而成熟的构件**、**有限制的构件**(提供接口并指出使用条件)、**适应性构件**(经过包装或接口技术处理，可以跨环境使用)、**装配的构件**(预先装配)和**可修改的构件**(可以进行版本替换并增加构件新功能。)。

17. 常见的构件分类方法包括关键字分类法、刻面分类法和超文本组织方法(基于文档跳转的浏览式检索)。

18. 构件组装的3层次：**定制(Customization)**指对构件进行参数设置、接口适配等操作以满足特定需求；**集成(Integration)**是将多个构件组合为可运行系统；**扩展(Extension)**是通过增加新构件或功能来增强系统。

   技术3分类：基于**功能**的构件组装技术、基于**数据**的构件组装技术和**面向对象**的构件组装技术。

   构件组装方式：顺序组装(按顺序调用)、层次组装(一个构件直接调用另一个构件)、叠加组装(多个构件合并以创建一个新的构件)、点对点组装(构件之间直接通过接口进行交互)。

   不兼容问题：参数不兼容、操作不兼容、操作不完备。

19. 构件组装的失配

   构件失配：由于系统对构件基础设施、控制模型和数据模型的假设存在冲突引起的失配

   连接子失配：由于系统对构件交互协议、构件连接时数据格式的假设存在冲突引起的失配

   模型失配：涉及系统建模方法上的不一致

   协议失配：涉及交互规则和顺序的冲突

20. 服务端构件模型分类

   应用服务器的构件模型：EJB(Enterprise JavaBeans)模型和 COM&#43; 模型，支持事务管理、安全控制和分布式调用。
     Web 服务器的构件模型：servlet 模型，以及基于 Visual Basic 和 ASP 技术的模型，通常用于处理 Web 请求与响应。

21. 面向构件的编程(Component-Oriented Programming, COP)基本支持要素：**多态性**确保构件可替换和可重用；**模块封装性**隐藏内部实现细节；**后期绑定与装载**支持构件的独立部署和动态组装；**安全性**保证类型与模块安全，防止非法使用(核心要素)。

22. EJB (Enterprise JavaBeans)

   **会话型构件(Session Bean)**：用于实现业务逻辑，负责完成服务端与客户端的交互。

   **实体型构件(Entity Bean)**：数据持久化来简化数据库开发工作

   **消息驱动构件(Message-Driven Bean)**：用于处理并发和异步消息请求。

23. 模型驱动体系结构(Model Driven Architecture, MDA)以模型为核心，不同抽象层次

   (1)计算无关模型(CIM)：描述业务领域的高层抽象，与系统实现细节无关，主要用于领域分析阶段。\

   (2)平台无关模型(PIM)：描述系统的结构和行为，对系统进行详细建模，但不涉及具体平台实现，能够通过转换生成不同平台的模型。

   (3)平台相关模型(PSM)：在 PIM 基础上增加特定平台的实现细节，可直接生成目标平台的代码。

24. 双生命周期模型指的是软件开发中复用技术所支持的两个开发生命周期：**领域工程(Domain Engineering)** 和 **应用工程(Application Engineering)**。

25. DO-178 将软件适航要求抽象为三大核心元素：**适航目标(Objectives)、完成这些目标所需的活动(Activities)、用于证明目标达成的数据(Software Life Cycle Data)**

###  系统分析与设计

1. UML4&#43;1视图

   逻辑视图(描述对象模型和对象关系，功能)(最终用户)

   实现视图(源代码及实际执行代码的**静态组织结构**)(程序员)

   进程视图(并发，同步特征)(系统集成人员)

   部署视图 (软件到硬件的映射)(系统和网络工程师)

   用例视图  最基本的需求分析模式。(分析人员和测试人员)

2. UML建模

   **结构图(静态图)**

   类图、对象图、构件图、部署图、制品图、包图、组合结构图

   **行为图(动态图)**

   用例图(描述系统与外部参与者之间的交互，**用例之间的关系**包括：包含(include)，扩展(extend)，泛化(generalization)；**参与者之间的关系**只有一种：**泛化**)、顺序图(展示对象间的消息传递顺序和交互过程)、通信图(协作图，描述对象之间的协作关系和消息传递)、定时图、交互概览图、活动图(描述业务流程和控制流)、状态图。

3. Mccabe环形复杂度：P(条件判断节点，通常用菱形表示) &#43; 1; 封闭区域个数&#43;1

4. 面向对象设计

   类的分类

   **实体类**：用于映射需求中的实体，存储和表达业务数据

   **控制类**：用于协调、控制用例的执行逻辑

   **边界类**：封装系统与外部的交互信息，实现界面控制与环境隔离，

   分析模型由**顶层架构图**、**用例与用例图**、**领域概念模型**构成；设计模型则包含以**包图**表示的**软件体系结构图**、以**交互图**表示的**用例实现图**、完整精确的**类图**、针对复杂对象的**状态图**和用以描述流程化处理过程的**活动图**。

5. 需求工程

   需求开发：需求获取，需求分析，需求定义，需求验证。

   需求管理：变更控制，版本控制，需求跟踪，需求状态跟踪。

   联合需求计划(JRP): 主要目的是获取需求

   结构化的需求分析：**数据流图**DFD表示功能模型，**状态转换图**表示行为模型，实体联系图(ER)表示数据模型。

   结构化分析的核心是使用数据流图(DFD)来建模系统，强调**自顶向下**。DFD互斥$\oplus$

   需求变更过程：识别问题；问题分析与变更描述；变更分析与成本计算；变更实现

6. 系统设计：概要设计(将软件需求转化为软件设计的**数据结构**和软件的**系统结构**)、详细设计。

7. 软件设计4活动

   数据设计 ：改善程序结构和模块划分，降低过程复杂性

   软件结构设计：开发一个模块化的程序结构，并表示出模块间的控制关系

   人机界面设计：描述了软件与用户之间的交互关系

   过程设计：确定模块内部处理逻辑

8. 结构化设计工具

   盒图：表示模块及其调用关系；

   HIPO(Hierarchy plus Input-Process-Output)图：展示系统分解结构和功能流程

   程序流程图：用于描述程序执行的控制流程

9. 耦合低到高：**非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合**。

   内聚高到低：**功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚**。记忆(公孙铜锅涮罗欧)

10. COM 对象重用的两种形式：包含(Containment)与聚集(Aggregation)

11. 设计模式

   **创建型模式**

   单例模式 (Singleton)：保证一个类只有一个实例

   抽象工厂(Abstract factory)：提供一个接口，用于创建一系列相关或相互依赖的对象

   工厂方法 (Factory)：

   构建器模式(Builder)：构建复杂对象的过程与其表示分离

   原型模式(Prototype)：通过**拷贝**创建对象，无需知道这些对象的类或创建过程

   **结构型模式**

   适配器 (Adapter) : 将一个接口转换为客户端期望的接口

   桥接模式(Bridge)：将接口与实现相分离

   组合模式(Composite)：整体-部分

   装饰模式(Decorator)：在不改变原有对象的基础上，为对象动态地添加额外的功能。比静态继承具有更大的灵活性

   外观模式(Facade)：为复杂系统提供统一的简化接口

   享元模式(Flyweight)：支持大量细粒度对象共享

   代理模式(Proxy)：代理控制

   **行为型模式**

   职责链模式(cChain of Responsibilty):传递请求

   命令模式(Command)：将请求封装为对象，可参数化客户请求、排队、**记录日志**并支持**撤销**

   解释器模式(Interpreter):解释器，虚拟机

   迭代器模式(Iterator)：提供一种顺序访问聚合对象元素的方式

   中介者模式(Mediator Pattern)：减少多个对象和类之间的通信复杂性，目的是解耦和简化对象间通信结构

   备忘录模式(Memento):保存，以后恢复

   观察者模式(Observer)：通知自动更新

   状态模式(State)：内部状态改变时改变行为

   策略模式(Strategy)：算法的可替换性

   模板方法模式：用于定义算法骨架

   访问者模式(Visitor)：对个元素新操作，数据和操作分离。
    
###  数据库系统

1. 事务的ACID特性： Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性。

2. 函数依赖和无损分解：U还能推出F就是保持了函数依赖；无损分解：$U_1\cap U_2 \rightarrow U_1-U2\  or\  U_2-U1 $，或者表格法能填满就行

3. 判断几范式

   2NF：消除非主属性部分函数依赖

   3NF:消除非主属性传递依赖

   BCNF:消除主属性部分函数依赖和传递依赖

   4NF:消除多值依赖

4. 分布式数据库的分布透明性：分片透明、复制透明(复制情况)、位置透明(物理位置)和逻辑透明(数据模型)

   分布式数据库两阶段提交协议中的两个阶段：表决阶段，执行阶段

5. NoSQL数据库分类

   | 类型         | 代表产品          | 特点                      | 适用场景             |
   | ------------ | ----------------- | ------------------------- | -------------------- |
   | **键值存储** | Redis、Memcached  | 简单、高速                | 缓存、会话存储       |
   | **文档存储** | MongoDB、CouchDB  | JSON/BSON格式，灵活模式   | 内容管理、用户画像   |
   | **列族存储** | HBase、Cassandra  | 列式存储，高压缩比        | 大数据分析、时序数据 |
   | **图形存储** | Neo4j、JanusGraph | 节点-边模型，擅长关系查询 | 社交网络、推荐系统   |

###  计算机组成原理

1. PC(程序计数器)指向下一条，IR(指令寄存器)存当前指令；ACC(累加器)放结果，AR(地址寄存器)存地址。
   
2. 取指→译码→执行
   
3. 流水线技术：流水线不能缩短单条指令执行时间，只能提高**吞吐量**。计算题：一条完整指令&#43;(N -1)\*最长指令时间
   
4. 双缓冲和单缓冲 

###  计算机网络

局域网3层：核心层(负责高速转发和网络骨干通信)、汇聚层(承担路由汇总、策略控制、协议转换等功能)和接入层

RAID 5计算：可用容量 = (硬盘数量 - 1) × 最小容量 

TCP协议中端口号作用：标识主机上的具体应用进程

软件定义网络(SDN)3层次：**控制层(**负责网络的流量控制、流表的管理和决策)，**转发层**(负责根据控制器的指令进行数据包的转发)，**应用层**(实现网络流量优化、安全管理、流量监控等功能)

会话层是唯一在OSI安全体系中未专门定义安全服务的层次。

物理层：中继器、集线器；数据链路层：网桥，交换机；网络层：路由器

###  软件测试

单元测试：对应编码，依据详细设计

集成测试：对应详细设计，目标：验证系统中各个单元模块之间的协作性；依据概要设计

系统测试：对应概要设计，依据需求建模

验收测试：对应需求建模；目标：程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求

1. 集成测试策略：一次性组装测试和增量式组装测试

2. 测试内容划分：功能测试、性能测试、用户界面测试和安全性测试

   用户参与程度划分：内部测试、Alpha、Beta 和验收测试

   测试方法分类：黑盒(功能测试)，白盒

3. 静态测试：桌面检查、代码审查、代码走查等，目的是在早期发现语法错误、逻辑缺陷和设计问题。

   动态测试：黑盒测试方法(如边界值分析、等价类划分、错误推测法)和白盒测试方法(如逻辑覆盖、基本路径测试等)。

4. 软件性能测试：**强度测试**：在资源受限条件下；**负载测试**：逐步增加负载下的性能变化；**压力测试**：超负荷条件下的反应，主要关注系统的崩溃点；**容量测试**：最大并发用户数量。

###  项目管理

项目时间管理6过程：活动定义、活动排序、活动资源估算、活动历时估算、制定进度计划、进度控制。

进度管理，三点估算法=(最可能×4&#43;最乐观&#43;最悲观)/6

赶工平均每天增加费用=赶工费用/(正常工期-赶工工期),只有赶工增加费用低于日常间接费用那就赶工，不亏。

软件质量模型中的三维度模型三方面：产品运行，产品修改，产品转移。

###  企业信息化战略

1. 电子政务的三大主要行为主体是**政府、企业和公民**

2. 企业信息集成：**技术平台集成**(解决系统运行的基础环境问题)、**数据集成**(解决数据来源多样、冗余和不一致问题)、**应用系统集成**(应用集成，实现不同应用系统之间的互操作，使系统能够共享数据和方法)和**业务过程**(流程)集成(解决跨系统的业务流程统一和协同)

3. 企业资源规划 ERP 5层次计划：经营规划、销售与运作规划 (生产规划)、主生产计划、物料需求计划、车间作业控制

4. 企业集成平台功能：**通信服务**(侧重于底层网络和消息传输)；**信息集成服务**(实现不同数据库系统之间的数据交换、互操作)；应用集成服务(负责应用层之间的协作)，二次开发工具；平台运行管理工具

   企业集成从下往上：网络集成、数据集成(数据联邦、数据复制和基于接口)、会聚集成、服务集成、接口集成

5. 商业智能系统4阶段：数据预处理；建立数据仓库；数据分析；数据展现。联机分析处理(OLAP)强调多维数据查询与分析，支持数据上卷、下钻、旋转等操作；数据挖掘是侧重于发现隐藏模式、建立模型进行预测。

6. 组织信息化需求3层次：战略需求、运作需求和技术需求

7. 企业应用集成(EAI)的四层体系结构：通讯服务、信息传递与转化服务、应用连接服务、流程控制服务

###  信息安全

1. Kerberos 认证体系采用的是对称密钥体制，核心组件是**KDC(密钥分发中心)**。防重放攻击：加入时间戳

2. PKI 中保存数字证书的是 **CA**，数字证书由 CA 签发，CA 使用自己的私钥对证书内容进行签名。用户可以使用 CA 的公钥验证签名，从而确认证书是否有效。

3. 生成消息摘要的目的是**防止篡改**，通过私钥加密信息摘要，接收方可以验证消息是否来自发送方，**防止抵赖**。

4. 攻击类型

   被动攻击：通过监视数据流的模式、时间和频率来推测通信双方的行为和信息，不会直接修改数据(流量分析)

   主动攻击：篡改、伪装、重放、拒绝服务等操作，会对数据或系统产生直接影响

   物理攻击：直接破坏或干扰硬件、网络设备或环境条件

   分发攻击：软硬件交付或安装环节中植入恶意代码或后门，改变系统行为

5. **机密性**是指确保信息不泄露给未授权的用户、实体或过程；**完整性**保证信息的完整和准确，防止信息被非法修改；**可控性**保证对信息的传播及内容具有控制的能力，防止为非法者所用。

6. 数据安全治理的3个关键目标：满足合规要求；管理数据安全风险；促进数据开发利用

###  数学经济管理

1. 最优化分配：每行元素减去该行最小值，然后每列元素减去该列最小值，寻找独立0 构造最优匹配

## 案例

### 架构相关

1. 质量属性：性能、可用性、可修改性、安全性。

   可靠性方法：ping/echo和心跳模式：(资源利用率)

2. **架构评估核心概念**

   软件架构风格是描述某一特定应用领域中系统组织方式得惯用模式/架构风格定义一个系统家族，即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型，而这组约束指出系统是如何将这些构件和连接件组合起来的。

   架构风险：指架构设计中潜在的、存在问题的架构决策所带来的隐患。

   敏感点：为了实现某种特定的质量属性，一个或多个构件所具有的特性。

   权衡点：影响多个质量属性的特性，是多个质量属性的敏感点。

   风险点和非风险点：可能引起风险的因素称为风险点。如果某件事是可行的可接受的，则为非风险点。

3. 常考架构风格对比

| 架构风格    | 主要特点                                                     | 主要优点                                                     | 主要缺点                                               | 适合领域                                         |
| ----------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------ |
| 管道-过滤器 | 过滤器相对独立                                               | 高内聚、低耦合；支持软件复用；可维护性、可拓展性较强；具有并发性、灵活性 | 不适合交互性强的应用，对于存在关系的数据流必须进行协调 | 系统可划分清晰的模块；模块想对独立；有清晰的接口 |
| 解释器风格  | 系统核心是虚拟机                                             | 自定义一套规则，增加灵活性，跨平台适配，可拓展性强           | 执行效率低，规则数量多增加系统复杂度，性能较差         | 模式匹配，语言编辑器                             |
| 面向对象    | 构件是对象，对象是通过函数和过程的调用来交互的               | 高度模块化；实现封装；代码共享灵活；易维护，性能好           | 增加了对象间依赖关系                                   |                                                  |
| 事件系统    | 构件不直接调用一个过程，而是触发或广播一个或多个事件         | 支持软件复用；容易实现并发处理和多任务；可拓展性好           | 对系统计算的控制弱；各个对象的逻辑关系复杂             | 一个系统对外部表现可以从它对事件的处理表征出来   |
| 层次型      | 构件组成一个层次结构；多层相互协调工作，每一层为上层提供服务，并作为下层的客户，只对自己相邻层可见 | 支持系统设计过程中的逐级抽象；可拓展性好，支持软件复用       | 耦合度高的系统难以划分层次                             | 适合功能层次的抽象和相互之间低耦合的系统         |
| 仓库        | 由中央数据结构(说明当前数据状态)和一组独立构件(对中央数据进行操作)组成 | 中央数据结构实现了数据的集中，以数据为中心；可拓展性强       | 适合特定领域                                           | 以数据为中心                                     |

4. 瘦客户端C/S架构：业务逻辑集中在服务器端，客户端负责展示和部分交互。

   胖客户端C/S架构：业务逻辑在客户端，服务器只提供数据。

5. 大数据架构: Lambda(批处理(Batch) &#43; 加速层(Speed) &#43; 服务层(Serving))和Kappa

   Hsaoop:用于存储主数据集

   Apark：构成速度层

   HBase：作为服务层，有Hive创建可查询的视图。

6. 单体架构和微服务架构

   单体优点：开发测试部署简单、技术栈单一、本地调用性能高。缺点：复杂性高、技术选型不灵活、可扩展性差、一个模块问题影响全局。

   微服务架构是一种将应用拆分为多个**小型、独立部署的服务单元**的架构模式。每个服务聚焦于一个业务功能，**运行在独立进程中**，通过轻量协议(如 HTTP/REST、消息队列等)与其他服务通信。服务间**松耦合、自治开发、独立部署**，常配合容器化和 DevOps 实现快速迭代和弹性伸缩。

   微服务架构的优点在于服务独立、易于扩展部署，支持技术异构，有利于故障隔离和小团队并行开发，提高了系统的灵活性和开发效率；

   缺点是系统整体复杂度高，带来通信开销、运维监控难度增加、跨服务数据一致性难以保障，同时对自动化运维和服务治理能力提出更高要求。


### 数据库

1. redis和Memche区别

|            | Redis                      | Memcache                      |
| ---------- | -------------------------- | ----------------------------- |
| 数据类型   | 丰富的数据结构             | 简单key-value结构             |
| 持久性     | 支持(RDB快照和AOF日志 )  | 不支持                        |
| 分布式存储 | 多种方式，主从、哨兵、集群 | 客户端哈希分片/一致性哈希分片 |
| 多线程支持 | 不支持                     | 支持                          |
| 内存管理   | 无                         | 私有内存池/内存池             |
| 事务支持   | 有限支持                   | 不支持                        |
2. Redie持久化方法
|              | RDB快照(指定时间间隔内，执行指定次数的写操作，将内存中的数据集快照写入磁盘中，生成dump.rdb文件) | AOF日志(采用日志来记录每个写操作，追加到文中，重启时在执行AOF文件中的命令来恢复数据) |
| ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 磁盘更新频率 | 指定时间间隔内将内存中的数据快照保存到磁盘                   | 实时记录每次写操作到磁盘。                                   |
| 数据安全     |                                                              | 通过追加日志的方式记录每次写操作，可以更好地保证数据的安全性 |
| 数据一致性   | 在快照时刻保存数据，可能会导致部分数据丢失                   | 记录每次写操作，数据一致性高，数据完整性高                   |
| 重启性能     | 在重启时加载快照文件，速度较快                               | 需要重新执行日志文件中的写操作，重启时间可能较长。           |
| 数据文件大小 | 叫AOF小                                                      | 记录内容越多，文件越大，数据恢复变慢                         |
3. 缓存问题

|          | 现象                          | 解决方案                                                     |
| -------- | ----------------------------- | ------------------------------------------------------------ |
| 缓存穿透 | 查询不存在的数据，击穿DB      | 1.非法请求进行参数校验。&lt;br/&gt;2.查询数据库为空时，给缓存设置空值或者默认值；&lt;br/&gt;3.布隆过滤器快速判断数据是否存在。 |
| 缓存雪崩 | 大量key同时过期，DB压力骤增   | 1.过期时间随机分布；&lt;br/&gt;2. 集群部署；&lt;br/&gt;3.熔断降级        |
| 缓存击穿 | 热点key过期，瞬时高并发击穿DB | 1.使用互斥锁方案 &lt;br/&gt;2.永不过期(异步线程更新和设置过期时间) |

布隆过滤器：一种占用空间很小的数据结构，由一个很长的二进制向量和一组哈希映射函数组成，用于检索一个元素是否在一个集合中。空间效率和查询时间比一般算法好，缺点时有一定的误识别率和删除困难。

4. 内存淘汰机制：当内存不足以容纳新写入数据时；LRU(最近最少使用)、LFU(最不经常使用)

   volatile-lru: 从设置了过期时间的key中使用LRU

   allkeys-lru: 所有key中使用LRU

   volatile-lfu:过期的key中，使用LFU

   allkeys-lfu: 所有key中使用LFU

   allkeys-random: 所有key中随机淘汰数据

   voatile-ttl: 设置了过期时间的key中，根据过期时间进行淘汰，越早过期优先淘汰

   noeviction: 默认策略，新写入报错

5. 反规范化设计方法：增加冗余列；增加派生列；重新组表；水平分割表；垂直分割表 。处理数据不一致：定期同步更新；触发器同步；应用程序级同步。

6. Redis和MySQL数据实时同步问题

   延迟双删策略：删除缓存，更新数据库，延迟一段时间，再次删除缓存。

   基于 Binlog 异步同步。用 Canal 等工具监听 MySQL 的 Binlog 日志，解析数据变更事件并推送到 Redis。对应用透明，能捕获多种操作，可靠性高，但有延迟，部署复杂。适用于高频写且要求最终一致场景。

   应用层双写。业务代码中同步写 MySQL 和 Redis，靠事务保证原子性。强一致、低延迟，但双写增加耗时，事务处理复杂。适用于低频写、强一致场景 。

   消息队列解耦。写 MySQL 后发消息到队列，消费者异步更新 Redis。可解耦、削峰填谷，但有秒级延迟和消息堆积风险。适用于高并发写、允许短暂不一致场景。延迟双删。更新 MySQL 前后各删一次 Redis 缓存。简单有效，能减少不一致窗口，但极端并发下仍可能有脏数据。适用于读多写少、对一致性要求不苛刻场景。

   结合数据库触发器。在 MySQL 设触发器，监听数据变更并调外部程序更新 Redis。会增加数据库负载，维护困难。适用于遗留系统改造。

7. 缓存分片方法：哈希算法，一致性哈希算法

   普通哈希算法通过哈希函数将键值映射到固定缓存节点上，节点变动会导致大量数据迁移。

   一致性哈希算法将节点和数据通过哈希函数映射到一个环形空间，节点增减只影响局部数据，迁移量小。(良好的节点扩展性与容错性，适应系统动态变化，同时保持数据分布均衡，保障缓存访问效率。)

8. 抵御SQL注入攻击：分级管理；参数校验

9. 常见术语

   MongoDB:   存储非结构数据方式：文档存储(BSON 文档)；灵活的数据模型；动态模式；索引支持。矢量化存储优点：高效存储与查询；简化数据模型(支持嵌套文档、数组字段)；易于拓展与演变；高性能。

   图数据库(Graph Database)，如 Neo4j、Amazon Neptune )：支持高效的关系遍历、多跳查询和图算法分析。

   HDFS:分布式文件系统，适合存储海量的、一次写入多次读取的数据。HDFS是存储数据的基础设施，Hive是让数据查询变得更简单的工具，而 HBase是提供快速随机访问和实时数据处理的数据库。

   HBase:基于 Hadoop 的分布式列式数据库，能处理海量数据的随机读写，适合存储像瓦片数据等需要快速查询和更新的数据


### 应用设计

ES(elasticsearch):开源分布式搜索和分析引擎，在存储层可用于存储索引数据，方便对数据进行快速检索

k8s(Kubernetes):开源的容器编排平台，用于自动化部署、扩展和管理容器化应用程序

kafka: 分布式流处理平台，用于构建实时数据管道和流应用程序。它具有高吞吐量、可扩展性和持久性等特点，适用于处理大规模数据流。

CDN: 内容分发网络。主要加速静态资源，HTML、CSS和JS  202411 201611

REST(Representational State Transfer，表述性状态转移)

Mybatis(持久层框架)， JWT(Json Web Token用于在双方之间安全传输信息的简洁的、URL安全的令牌标准)

Nginx：高性能的HTTP和反向代理web服务器。占有内存少，并发能力强。

Strut2：用于构建Java Web应用程序的开源框架

J2EE平台：与浏览器直接通过HTTP交互的视图层构件：JSP(动态网页技术，组织信息内容并为用户产生响应页面的HTME数据流)和Servelt(用来接收用户输入信息，执行业务操作逻辑后转发用户请求)

MQTT:物联网传输协议，设计用于轻量级的发布订阅式消息传输。

## 参考阅读

[刷题-芝士架构](https://www.cheko.cc/)

[软考达人](https://ruankaodaren.com/exam/#/)

---

> 作者:   
> URL: https://fengchen321.github.io/posts/other/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%B8%88%E7%9F%A5%E8%AF%86%E7%82%B9/  

