软考高级架构知识点

439 阅读1分钟

架构

ABSD(基于架构的软件设计)

1. 概念:ABSD是以构成软件架构的商业、质量、功能需求等要素驱动的软件设计过程。ABSD是一个自上而下逐步递归的方法。软件系统的体系结构通过该方法得到细化,直到产生软件构件和类

  1. 分层模式:系统 -> 概念子系统 ->概念构件 ->实际构件。

3. 基础:功能分解、通过选择架构风格实现质量和业务需求、软件模版的选择。

4.过程:架构需求、架构设计、架构文档化、架构复审、架构实现、架构演化

架构需求:需求获取(系统的质量目标、商业目标和系统开发人员的商业目标)、标识构件(生成类图,对类进行分组,把类打包成构件)、架构需求评审。

架构设计过程:选择一个合适的架构风格,提出软件架构模型、把已经标识的构件映射到软件架构中、分析构件之间的关系、产生软件架构、设计评审。

架构文档化的主要输出内容:架构规格说明书和架构质量说明书

架构实现(以架构规格说明书作为输入):分析与设计、构件实现、构件组装、系统测试。

软件架构的演化步骤:需求变化归类(使得变化的需求和已有构件对应),制定体系结构演化计划,修改、增加、删除构件,更新构件的相互作用,构件组装和测试,技术评审。

架构风格

架构风格是描述某一特定的应用领域中系统组织方式的惯用模式。架构风格定义了一个系统家族,即一个架构定义了一个词汇表和一组约束。词汇表包含了一些构件和连接件类型,而约束则指出系统如何将这些构件和连接件组合起来的。架构风格反映了领域中众多系统所共有的结构和语义特征,并指导如何将各个模块和子系统有效得组织成一个完整的系统。构件代表有独立功能的组件或者模块;连接件描述构件之间如何交互和通信;约束描述了构件和连接件基于什么规则进行组装。

分类

数据流风格

批处理、管道过滤器

特点:

调用/返回风格

主程序/子程序、面向对象、层次结构、客户端/服务器

特点:分而治之,结构清晰,降低复杂度,提高可修改性。

缺点:层次越多,性能越差;基于严格的层次结构,灵活性下降;单点故障风险

独立构件风格:

进程通信、事件驱动(隐式调用)

特点:构件相对独立,通过消息进行通信,降低耦合度,提升灵活性。基于事件,高响应性,高灵活性和扩展性。

缺点:数据一致性复杂;事件管理逻辑复杂

虚拟机风格

解释器:解释引擎、引擎状态、被解释执行的程序、程序执行的状态、存储器。解释器对程序逐条解释执行。

规则系统:规则解释器、规则集、规则选择器、工作内存。规则选择器选择数据和规则传递给解释器执行

特点:人为构造一个运行环境,解析和运行自定义语言或者规则,提升灵活性;平台无关性,可移植性。

缺点:解释器解析执行,性能瓶颈;解释器复杂性;调试复杂性;资源消耗。

以数据为中心的架构风格

黑板系统、仓库风格

特点:数据一致性高;可扩展性高;灵活性;

缺点:单点故障;性能瓶颈;中央仓库扩展性较差;数据一致性复杂

4+1视图模型

1.通过多个视角,描述软件架构。

2. 4视角:逻辑视图,开发视图,进程视图,物理视图;1:场景视角(用例视图)。

逻辑视图又称为功能视图,描述系统中各个模块之间的交互方式。关注者:用户。通常用类图表达。

开发视图描述代码组织结构;关注者:开发者。通常用包图、组件图表达。

进程视图描述功能模块间运行时的通信和流转机制(并发和同步的状态);关注者:集成开发;通常用序列图表达。

物理视图描述软件如何部署到硬件的相关内容。关注者:运维;通常用部署图表达。

场景视角通过具体用例描述具体的功能和场景属性

软件架构复用

类型包括机会复用和系统复用。其中机会复用是指开发过程中,发现有可复用的资产,就对其进行复用。系统复用是指在开发前,就进行规划,已决定哪些可以复用。

可复用资产的对象包括需求、架构设计、元素、建模与分析方法、测试、项目规划、过程、方法和工具、人员、样本系统、缺陷消除。

形式包括函数的复用、库的复用、在面向对象开发中的类、接口、包的复用。

过程:构造和获取可复用的资产、管理资产、复用资产。

管理资产:最重要的是形成构件库

构件获取的方式

1. 从现有构件库中获取。

2. 从现有系统中,将可以复用的功能进行抽离为构件。

3. 购买商用构件。

4. 开发新构件。

DSSA 特定领域软件体系结构

DSSA是针对某个特定领域的软件开发,提出的一套软件架构方法论。侧重研究该领域内系统的共性和重用性,通过定义通用的框架、构件和模式,简化该领域内的系统的软件开发过程。提高开发效率、可维护性、质量,降低开发成本。

1. 领域分析:产出领域模型,即领域需求。

2. 领域设计:依据领域需求,设计解决方案即DSSA

3. 领域实现:根据领域设计,进行方案的落地。

DSSA角色职责

领域专家:提供了专业领域知识

领域分析:根据领域知识控制领域分析过程,维护领域模型

领域架构师:根据领域知识设计领域架构

领域工程师:实现可复用构件

应用工程师:构件应用

DSSA三层次系统模型:领域开发环境(领域架构师)、领域特定的应用开发环境(应用工程师)、应用执行环境(操作员)

DSSA五个阶段:

1. 确定领域范围。

2. 定义领域中的特定元素。领域字典。

3. 定义领域特定的设计和实现约束。

4. 定义领域模型和体系结构。

5. 搜索可重用的产品单元

架构评估方法

1. 分类:基于问卷调查或检索表、基于场景的方式、基于度量的方式。

2. 场景:场景是从风险承担者的角度对系统的交互的简短描述。在架构评估中,一般用刺激、环境、响应三方面来对场景进行描述。

3. SAAM:主要关注点为架构的可修改性。用于架构的最终版本。输入为:问题描述、需求声明、架构描述。步骤为:场景开发、架构描述、单个场景评估、场景交互、总体评估

4.ATAM:基于SAAM而来,关注架构的安全性、可用性、可修改性和性能。对多个质量属性进行评价和折中。包括4个主要的阶段:场景和需求收集、体系结构视图和场景实现、属性模型构造和分析、折中。整个评估过程强调以属性作为架构评估的核心概念。

5.CBAM:对架构设计的成本和收益进行建模和评估。

6.质量属性效用树:树根 》质量属性》 属性分类》质量属性场景

质量效应树将系统的质量属性逐步细化为具体的、可评估的、具有优先级的质量属性场景的树形结构。

7. 举例说明质量属性场景

刺激源:刺激发起的实体。(恶意攻击者)

刺激:刺激源产生的具体事件。(通过sql注入获取数据)

环境(刺激到达时,制品的状态):系统正常运作

制品(受刺激影响的系统部分):服务器、客户端

响应(系统部分对刺激做出的响应):鉴别恶意请求,拒绝访问并且告警

响应度量(响应量化):阻止成功率大于99%;告警延迟小于2s

质量属性

安全性:系统向合法用户提供服务的同时,拒绝向非法用户提供服务的能力。包括机密性(不泄漏给给非法用户)、完整性(防止被篡改)、抗抵赖、可控性(对信息的传播可控,防止被非法者使用)

用户认证、授权,追踪审计,限制访问

可用性

时间范围内,正常运行的时间占比或概率

心跳:应用层。节点主动向监控平台发送心跳信号。判断节点的健康度。信息丰富。而且将请求压力从主控节点分散到各个被控节点,避免集中式探测请求造成资源浪费。

ping/echo:网络层。监控平台向节点发送ICMP请求,节点收到请求后,返回ICMP响应。判断节点的连通性和响应速度。信息简单。

主动冗余,进程监控

可靠性:

规定时间内,指定条件下完成规定功能的能力,通常用失效率、平均失效等待时间、平均失效间隔时间、可靠度衡量

可修改性:信息隐藏,抽象,高内聚低耦合

性能:优先级队列,计算资源,并发机制,资源调度。

敏感点和权衡点

敏感点:为了实现某个质量属性,一个或者多个构件的特性。

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

架构风险

架构设计中由架构决策带来的潜在的问题。

数据库

元祖运算

三级模式

外模式:用户可以看到的局部的逻辑结构和特征描述。使用数据库语言修改数据实际是操作的外模式。

概念模式:全体数据的逻辑结构和特征描述。包括实体、属性、联系、完整性约束。

内模式:数据物理结构和存储模式的描述。包括存储结构、索引方式、压缩技术。

数据库设计4个阶段:

需求分析:明确用户针对系统的信息要求、处理要求、系统要求。使用自顶向下的方法将系统分为多层,使用数据流图和数据字典描述每一层。

概念设计:选择局部应用(选择层)、针对每一层设计分ER图、合并ER图

逻辑设计:确定数据模型、将ER图转换为指定的数据模型、确定完整性约束、确定用户视图、反规范化设计

物理设计:确定数据分布、确定数据存储结构、确定数据的访问方式

事务的特性:原子性,持久性,一致性,隔离性。

原子性:都成功才算成功,只要有一个失败就回滚操作。

持久性:事务提交后,对数据的更改永久生效,即使系统奔溃也不会丢失。通过先写日志,后写磁盘实现。

一致性:数据符合预定义的业务规则,满足客观事实依据,逻辑正确性。

隔离性:事务并发执行的时候,相互感受不到彼此对数据的更改。

NoSQL

场景:

存储海量数据

并发量大,对性能要求高;

数据一致性要求不高;

数据格式灵活、简单

分类

键值数据库:简单,易操作。适合缓存或者简单数据类型。不适合针对部分数据的查询或者更新。Redis、Oracle

列存储数据库: 存储和分析海量数据。HBase、Risk

文档型数据库:半结构化数据,JSON、BSON(二进制json)格式。MongoDB、Couchbase。

图形数据库:灵活的图形模型。适合分析数据之间的复杂关系。InfoGrid、Neo4j、ArangoDB

非关系型数据库

一类非关系型的、分布式的数据库管理系统,旨在解决大规模数据集合和用户并发操作带来的挑战。

特点:

1. 数据结构松散,数据存储形式自由。

2. 分布式部署,高可用,高可扩展。

3. 支持海量数据存储和搜索,性能高。

缺点:

1. 查询能力较弱,不支持很复杂的查询。

2. 数据一致性复杂。

各种键

候选码(超键):某一属性或者属性组能唯一标识元组。

超码:在候选码的基础上,包含其它属性

主码(主键):可以有多个候选码,选择一个候选码作为主键。

主属性:包含在任何候选码中的属性。

非主属性:不包含在任何候选码中的属性。

数据库设计范式

1. 1NF:属性具有原子性,即属性不可以再拆分。

2. 2NF:非主属性完全依赖主键,而不是部分函数依赖。比如主键为复合主键AB,函数依赖关系为A -> C,则C部分依赖了主键,则不满足2NF。

3. 3NF:消除非主属性对主属性的传递依赖。比如A为主键,依赖关系为A -> B -> C,C可以间接通过A被找到,即对主属性有传递依赖。必须是直接依赖

4. BCNF:消除属性对非主属性的函数依赖。即所有决定因素都是主键。比如,主键为AB,且 BD 能推导出C,则不满足BCNF。因为D不是主属性

5. 4NF: 消除多值依赖

数据库完整性

实体完整性:主键唯一且不为空

参照完整性:外键有效

域完整性:属性值合法

用户定义完整性:满足业务规则。eg:部门人数不能大于公司总人数。

反规范化

背景:在响应用户查询时,通常需要涉及多表的关联操作,导致查询性能下降。为此需要对关系模式进行修正,包括分解、合并、增加冗余列等。不过反规范化会带来数据不一致的问题。

方式

冗余列:多个表都保存了同一个列属性。

派生列:某个表的列可以通过其他列计算而来。

表重组:将多个表组合成一个表。

表分割:水平分割和垂直分割。

解决数据不一致性的手段

给表字段设置触发器:同步设置,高并发场景可能阻塞数据库

消息队列异步同步:定时任务异步修改,最终一致性。高吞吐量,可能引入延迟问题

业务逻辑保证:同步设置,采用事务修改数据,逻辑复杂,可能阻塞主逻辑。

分布透明性

分片透明性(透明性最高):用户无需关注具体分片逻辑。

位置透明性:用户需要关注分片逻辑,但无需关注各个分片具体的物理场地。

局部数据模型透明性:用户需要关注分片逻辑以及存储的物理位置,但不需要关心各个场地存储的数据模型或者数据库类型等具体细节。

无损连接:分解后的关系可以通过自然连接推到出原关系的所有属性,则称为无损连接;否则为有损连接。或者分解的交集能推导出分解的差集,则无损。比如R(a,b,c)分解为K(a,b)和N(a,c)则可以通过K自然连接N得道R的所有属性,则为无损连接。K交集N可以推导出k-n或者n-k,则无损。

给出关系R(U,F),U={A,B,C,D,E} ,F ={A→BC,B→D,D→E} 。若将关系R分解为ρ = {R1(U1,F1), R2(U2,F2)}, 其中:U1={A,B,C} 、U2 = {B,D,E} ,则分解 ρ(问题2)。

首先根据 U1,保留函数依赖 A→BC,然后根据 U2,保留函数依赖 B→D,D→E。因此该分解保持函数依赖。判断是否无损分解,就是利用公式法首先计算交集 U1∩U2=B,然后计算差集 U1-U2={A,C},U2-U1={D,E}。而 R 中存在函数依赖 B→D,B→E,所以该分解是无损分解。

保持函数依赖:分解后的关系的函数依赖集合可以推到出所有原关系的所有依赖集合,则为保持函数依赖,否则没有保持函数依赖。

数据库连接

表A为(a,b,c);表B为(a,b,d)

**自然连接:**对同名属性列取等值判断,然后去掉重名的属性列。对A.a = B.a and A.b = B.b。C(a,b,c,d)

数据库查询性能优化

1. 只返回需要的行,避免select *

2. 频繁查询列建立索引。

3. 避免notin、notexist、like、distinct进行全表查询。

4. 多表查询时避免子查询

缓存穿透

描述:缓存和数据库中都没有的数据,无法缓存,大量请求到达时都访问到数据库,导致数据库压力大

解决:空值设置;步隆过滤器

缓存击穿

描述:缓存中的数据过期,导致请求到数据库

解决:永不过期;查询分布式锁,使得同一时刻只有一个请求被处理

缓存雪崩

描述:大量数据同一时刻同时过期,导致请求到数据库

解决:给数据设置不同的过期时间

布隆过滤器

一种空间效率很高的概率型数据结构,用来判断一个数据可能存在或者一定不存在于一个集合中的概率。布隆过滤器的核心是一个很长的二进制向量(位数组)一系列随机映射函数(哈希函数)。位数组中0代表不存在,1代表存在。将数据进行hash处理后,分别去hash对应的索引处获取当前位的值,如果都是1则说明数据可能存在,如果都是0则说明数据一定不存在。优点是空间效率高,查询速度快;缺点是存在一定误判的概率。

我们

数据分片

将大的缓存空间按照某种策略切片,每个片由不同的节点存储和管理。

数据分布算法:如何将数据分配到不同的节点上。包括:哈希算法、一致性哈希、带虚拟节点的哈希、范围分片。

哈希算法是通过hash(key) % 节点个数之后,映射到不同的节点上。

一致性哈希算法将数据key和节点绑定到一个哈希环形空间中,解决了哈希算法中,如果节点个数增加和减少时,数据需要大范围迁移的问题,也就是算法的稳定性问题。但是也引入了当节点个数少的情况下,分布不均匀的问题。

范围分片是基于数据字段的值范围进行划分,比如将年龄在0-10岁的数据分在一个节点。便于扩展,但是可能引入热点数据负载不均衡的问题。

复合分片是基于多种分片策略进行划分,比如先根据地理位置水平划分,再根据时间进行划分子区间,设计复杂,支持快速的复杂查询。

垂直分片:将表不同的列进行划分,基于访问模式或者数据类型划分,减少数据查询的i/o开销

ORM

对象/关系映射,通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系型数据库相互映射;解决了数据库与程序之间的异构性,封装了数据库访问细节,将内存中的对象保存到数据库中的技术。

优点:

1. 上手简单,不需要关注太多数据库底层原理

2. 抹平不同数据库的差异。

3. 开发效率高。

4. 访问线程池,降低创建和销毁线程的成本。

5. 集成部分安全策略,如敏感字段过滤转换。

Redis持久化策略

RDB快照持久化:定期将内存中的数据保存为一个rdb压缩文件

特点:文件小、恢复快、易造成数据丢失。适合低频修改数据场景

AOF追加日志:将每一次操作命令以日志形式记录下来。记录策略有:每次alaways、每秒everysec、从不no

特点:文件大、恢复慢、数据安全。适合高频修改数据场景

Redis删除过期key策略

1. 定期删除:定期随机抽取若干key,检查是否过期,过期则删除

2. 惰性删除:请求某个key,检查该key是否过期,过期则删除

失效模式:当某个key在定期删除时,没有被删除;且后续没有被访问,则惰性删除也不触发,则导致策略失效。

Redis分布式存储方案

1. 主从模式:主数据库负责写操作,从数据库负责读操作。

2. 哨兵模式:增加独立的监控系统,监控数据库运行情况。主数据库崩溃后,自动选择一个从数据库升级为主数据库。

3. 集群模式:按照一定的切片逻辑,将数据分别存储到不同的节点上,所有节点组成一个集群。

分布式数据结构优化

1. 数据分片:按照分片算法将数据存储在不同的服务节点上,进行负载均衡。

2. 数据复制:数据副本,提高可用性。

3. 最终一致性:在一致性和性能方面权衡。

4. 异步写入:提高写入性能。

5.读写分离:写入由主节点操作,读操作由子节点操作,提高读取性能。

数据最终一致性

1. 缓存设置过期时间

2. 延时双删。(更新数据: 先删除缓存,再更新数据库;再删除一次缓存)

3. 更新缓存事件放消息队列。

4. 消息队列 + 监听数据库Binlog。

垂直分片

适合表字段较多,且表字段的查询频率差距较大。通常按照查询频率、字段存储大小拆分。

水平分片

适合表行数较大,表字段查询频率较一致,数据有天然的分片键(主键),数据写入并发量较大。

软件工程

软件工程过程包括四个步骤:计划(Plan),开发(Do),确认(Check),演进(Action)。

计划:规定软件的功能和运行时的限制。

开发(执行):开发出满足规格说明的软件。

确认(检查):确认开发的软件满足用户的需求。

演进(处理):软件运行时不断改进以满足客户的需求。

需求工程包括需求开发和需求管理两个模块。其中,需求开发包括:需求获取、需求分析、需求定义、需求验证;需求管理包括:变更控制、版本控制、需求跟踪、需求状态跟踪

系统工程:利用现代电子计算机,对系统的结构、要素、信息和反馈等进行分析,以达到最优规划、最优设计、最优管理和最优控制等目的。

CMMI软件能力成熟度模型

level1初始级: 没有流程和目标,整体流程混乱

level2己管理级:过程文档化,出现过程的概念

level3已定义级:过程标准化

level4量化管理级:过程性能的可预测,量化目标

level5优化级:通过增量式和创建式的过程与技术改进,改进过程性能

RUP(统一过程模型)

特点:用例驱动的、以体系结构为中心的、迭代和增量的软件开过程。

阶段:

初始阶段:为系统建立商业案例并确定项目的边界,关注整个项目进行中的业务和需求方面的主要风险。

细化阶段:分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰高风险的元素。

构造阶段:将构件开发出来并集成为产品,所有功能被详细测试。

交付阶段:确保软件对最终用户是可用的。

核心工作流:业务建模、需求分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。

4+1视图

用例视图:系统的行为。分析人员和测试人员

逻辑视图:系统的功能。用户

实现视图:系统的配置、装配等问题。程序员

进程视图:系统的性能、可伸缩性、吞吐率等问题。系统集成人员

部署视图:系统的发布、安装、拓扑结构等问题。系统工程师

系统分析

概念:使用系统思想和方法,把复杂的对象分解为简单的组成部分,找出这些组成部分的属性和彼此之间联系的过程。其目标是把对系统的理解表达为系统需求规格说明书

数据流图

概念:从应用系统的数据流着手图形的形式来表示具体业务系统中的数据处理过程和数据流

作用:描述系统中的业务流程和数据的流转、处理和存储过程。自顶向下对系统功能进行分解。在设计阶段为模块划分与模块之间接口设计提供依据。详细设计阶段为模块内部的数据模型设计提供依据

组成

数据流(箭头):传递中的数据。

处理(圆角矩形):对输入数据进行变换或加工。

数据存储(右开口矩形):代表数据静态存储位置。

外部项(矩形/平行四边形):系统外部与系统进行交互的实体或者组织。明确了系统边界。

常见异常

黑洞:只有输入没有输出的处理

白洞:只有输出没有输入的处理

灰洞:输入不足以产生输出的处理

数据流直接连接两个实体或者两个存储,中间没有经过处理

数据流无限循环

数据名称命名混乱

父图和子图中的输入输出逻辑不匹配

数据字典

概念:对数据流图中的元素的详细说明。

作用:统一数据流中涉及到的模型元素的概念描述,使得涉众对系统中模型元素有统一的理解。在设计阶段,用于描述系统中各类数据,为数据库概要设计和逻辑设计提供依据。

组成:数据项、数据结构、数据流、数据存储、处理过程。

流程图

通过图形和箭头的形式,描述任务执行的顺序、分支和循环等逻辑过程,强调任务执行的控制流

系统设计

概念:依据系统分析的结果,完成系统的构建过程。目的是绘制系统的蓝图,权衡和比较各种技术方案的利弊,合理分配资源,构建系统的详细设计方案和相关模型。主要内容包括概要设计详细设计

方法:根据数据流图将软件设计为由相对独立且功能单一的模块组成的结构概要设计主要任务是确定系统的组成的结构,对系统进行模块划分,确定每个模块的功能、接口和模块间的调用关系。详细设计是根据数据字典对每个模块设计实现的细节,建立数据库存储设计。

v模型

系统测试的依据是需求分析,集成测试的依据是概要设计,单元测试的依据是详细设计

具体架构风格

Lambda架构

lambda架构是为了解决大数据查询而产生的一种架构。通过批处理层和加速层的设计,解决和平衡了准确性、性能的需求。其核心思想是通过批处理保证数据的准确性,加速层保证了数据的性能,最终由服务层合并批处理层和加速层视图,提供统一的查询接口。计算层包括:实时计算、离线计算、合并计算。

批处理特点:高容错、高延迟、强一致性。

流处理:低延迟、弱一致性、临时性。

优点:容错性、可扩展性、最终一致性。

缺点:系统复杂性、运维开销

实现:Hadoop(HDFS)用于存储主数据集,Spark或者Storm构成加速层,HBase或者Cassandra作为服务层,Hive创建可查询视图。

嵌入式系统架构

1. 两个发展方向:面向端到端微型传感器设备、面向智能服务的设备。

2. 典型的嵌入式软件架构:层次式模式架构、递归式模式架构。

3. 架构特点:可裁剪性、可移植性、强实时性、强紧凑性、高质量代码、强定制性(专用性)、标准接口、强稳定性、弱交互性、强确定性、操作简单、方便快捷、可固化性、系统资源受限。

javaEE架构

经典的mvc架构。视图层可以用jsp技术展示页面。当请求到达服务后,首先会通过控制层,比如利用servlet接受请求,然后用javaBean进行业务处理。如果涉及到数据操作,会转发到model层,该层通过DAO等orm技术操作数据库。整理流程为:jsp -> servlet -> javaBean -> DAO -> 数据库等。

会话Bean:一次会话,有/无状态。

实体Bean:管理持久化数据的对象。

消息Bean:异步通信。

有状态Bean:修改bean实例的内部变量;多个会话结果会相互影响。登陆组件、购物车组件

无状态:不会修改内部实例变量;会话之间不会相互影响。文件索引组件、文件压缩组件

MVC架构风格

将应用程序分为视图、模型、控制器三个部分,实现关注点分离、独立运行开发、可重用性(一个模型可以用多种视图来表达,模型和视图可以独立变化)。模型层代表业务状态,实现业务逻辑,并且将业务状态的更新通知给视图层;视图层作为系统的入口,呈现模型层的业务状态,响应模型变化通知,更新呈现形式,并且接收用户的输入,将输入传输给控制层;控制层负责将视图层的用户动作映射为模型层的业务状态并且调用模型层更新状态,根据模型层更新的结果调用不同的视图进行显示。

计算机硬件

1. 存储器分层架构中,按照读取速度由快到慢分别是:寄存器、片外缓存、主存、外存。

寄存器:在中央处理器中直接集成的缓存。

片外缓存:中央处理器外的缓存。

主存:以独立的硬件存在。

外存:磁带,光盘这些外部介质。

2. 位是计算机中存储和计算数据的最小单位,存储0或者1。一个字节Byte是由 8个位 组成的一个固定长度的序列,它是计算机中用于寻址存储数据的基本单位。字是计算机在一次操作中能够同时处理的一串二进制位,它是CPU处理数据的天然单位。字长是一个字中所包含的二进制位数。64位计算机,代表这个计算机cpu一次性可以处理64个位。

设计模式

1. 创建型:对类的实例化过程进行了抽象,能够将软件模块中对象的创建和使用分离。

单例singleton、工厂模式factory、抽象工厂模式abstract factory、原型prototype、建造者模式builder。

2. 结构型:描述如何将简单的对象组合起来,组成一个新的复杂的对象。

适配器adapter、桥接bridge、组合composite、装饰器decorator、外观facade、享元flyweight、代理proxy

3. 行为型:是对在不同的对象之间划分责任和算法的抽象化。不仅关注类和对象的结构,而且重点关注它们之间的相互作用。

责任链chain of responsiblity、解释器interpreter、迭代器iterator、访问者visitor、观察者observer、中介者mediator、策略strategy、命令command、备忘录Memento。

策略模式

将一系列算法分别封装为单独的策略类,这些类继承自策略抽象类,他们拥有相同的操作方法名称,利于调用端对算法的替换。

桥接模式

**作用:**将抽象类和实现类分别设计,通过组合的方式来创建对象。解决了类继承中的类爆炸的问题。

**抽象类,实现类:**抽象类中维护了一个指向实现类的指针。

工厂模式

**作用:**解决对象创建过程中的灵活性问题,通过封装对象的创建过程,使得对象的创建和使用隔离,提高可扩展性和维护性。

分类:简单工厂模式,工厂方法模式,抽象工厂模式。

组合模式

作用:主要用在树形结构的场景,比如菜单,树状图等。使得用户对子节点和父节点的使用一致性。

组成部分:Component:定义了子类和父类的基础属性和操作;leaf:叶子节点,无子节点;

composite:父节点,有子节点。

命令模式

将请求封装成对象,从而可以用不同的请求对客户进行参数化,对请求排队或记录日志,支持撤销的操作。

组成部分:命令类command、实现命令类的具体命令concreteCommand、调用者invoker(持有命令对象触发命令执行,不直接处理请求)、接收者receiver(执行请求命令,真正执行命令的对象)

OSI 模型

应用层 提供用户接口 http,DNS,FTP 浏览器,邮件

传输层 端到端传输数据 tcp,udp

网络层 ip寻址,路由选择 ip 路由器

数据链路层 MAC寻址 交换机

物理层 传输比特流 网线,光纤,集线器

网络分层设计模型

**核心层:**高速数据转发和可靠性保障

**汇聚层:**将接入层的流量汇聚后转发给核心层、数据包过滤、路由策略、负债均衡

**接入层:**用户接入和端口扩展

测试

程序执行状态分类:静态测试、动态测试。

实现算法细节和系统内部结构的相关情况为根据分类:

黑盒测试:不了解系统内部实现逻辑,只关心输入和输出

白盒测试:依据系统内部运行的逻辑,设计测试用例。

灰盒测试:关心一部分内部逻辑,但测试只关注外部表现。

程序执行的方式:自动化测试、人工测试。

测试阶段:单元测试、集成测试、系统测试。

性能测试:包括负载测试压力测试。负载测试,确定系统的各种工作负载下的性能,系统各项性能指标的变化情况。压力测试是通过确定系统的一个瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

集成测试是将已通过单元测试的模块集成在一起,主要测试模块间的协调性。从组装策略而言,分为一次性组装和增量式组装。通常采用黑盒测试的方法。

黑盒测试:因果图、等价类划分、边界值分析法、错误推测

白盒测试(从弱到强):语句覆盖 、判定覆盖、条件覆盖、条件/判定覆盖、条件组合覆盖、路径覆盖

灰盒测试:集成测试、API测试、安全测试、性能测试

静态测试:桌面检查、代码走查、代码审查

信息系统

****企业信息化一定是建立在企业战略规划基础之上,以企业战略规划为基础建立的企业管理模式是建立企业战略数据模型的依据。

信息化需求包含三个层次:战略需求、运作需求、技术需求。

企业信息化对企业现有的管理流程整合,管理核心从财务、物料管理,转向技术、物资、人力资源的管理,并延伸到企业技术创新、工艺设计、产品设计、生产制造过程的管理,进而还要扩展到客户关系管理、供应链管理乃至发展到电子商务。

ERP

ERP是建立在信息技术基础上,利用现代企业的管理思想,对企业的物流资源、资金流资源和信息流资源进行集成管理的管理系统集合。为企业的决策、计划、控制和经营业绩评估的全方位的系统化的管理平台。其中,库存管理模块主要对企业物料的进、出、存进行管理。

法律法规

1. 没有约定的情况下,著作权归受委托人所有。

2. 如果是在公司上班开发的内容,属于公司。

计算题相关

扇区计算

总扇区数 = 盘面数 * 柱面数 * 每磁道扇区数

柱面:半径一致的磁道形成的面。逻辑概念

盘面:一个盘片分上下两个盘面

磁道:每个盘面由多个半径不同的同心圆磁道组成。

扇区:一个磁道分为多个扇区。扇区是磁盘的最小组成单元,通常大小为512字节。

文件系统索引法

直接地址索引:直接指向数据物理块的物理地址

一级间接索引地址:保存了直接索引地址,再通过直接索引地址访问物理块地址

二级间接索引地址:保存了一级间接索引地址,再通过一级间接索引地址访问直接索引地址,再通过直接索引地址访问物理块。

eg:假设索引块大小1kB,数据块大小2KB,一个地址项大小4Bit,若直接索引地址有5个,一级索引地址2个,三级索引地址3个,求一共能存多大文件。求各个等级索引对应的物理块范围

先求有几个物理块,再根据物理块数 * 数据块大小就是文件大小。

直接索引地址指向的物理块数:a = 5个。(0 ~ 4)

一级索引地址指向的物理块数:b = (1KB / 4Bit )* 2 = 256 * 2 (5 ~ 516)

二级索引地址指向的物理块数:c = (1KB / 4Bit )*(1KB / 4Bit )* 3 = 256 * 256 * 3 (517 ~197124)

文件大小 = 总物理块数(a + b + c)* 物理块大小(2KB)

流水线相关计算

1. 最大吞吐率:最耗时的操作段所需时间的倒数。

eg:某个流水线有5段操作,需要时间分别为1,2,3,4,6单位时间。那完成10次该流水线任务。

1. 最大吞吐率:1 / 6。

2. 一共需要的时间:T1 = (1 + 2 + 3 + 4 + 6) + (10 - 1 )* 6

3. 加速比:非流水线作业时间 / 流水线作业时间。

非流水线时间 T2 = 10 * (1+2+3+4+6)

加速比:T2 / T1

单双缓存区时间计算问题

从磁盘读取到缓存区时间为10,从缓冲区读取到用户区时间为5,处理时间为2。计算读取20个数据块单双缓存区分别使用的时间

单缓冲区中,这一次的处理数据的过程可以和下一次的磁盘读取过程同步进行。所以只有最后一次的数据处理花费时间,其他数据块的处理时间因为并行,所以可以忽略。所以时间为:

10+5+2+(10+5)*(20-1)

双缓区中,这一次的向用户区读取的过程和上一次向缓冲区读取的过程并行,所以只有最后一次的向缓冲区读取和处理时间需要花费时间,其它都被忽略。所以时间为:

10+5+2+  10 * (20-1)

某信道的带宽为3000Hz,编码采用32种不同的物理状态来表示数据,在无噪声环境下,该信道的最大数据传输速率是( )kbps。

C=2Blog2​(M)

c = 2 * 3000 * 5 = 30000bps = 30kbps

操作系统中有5个进程,若每个进程最多可同时访问2个资源,为了不发生死锁,至少需要提供( )个资源。

R≥n×(k−1)+1

n是进程数,k是每个进程最多的资源数。R ≥ 5 x (2 - 1) + 1 = 6

假如有 4 块 80T 的硬盘,采用 RAID6 的容量是( )。

RAID6的容量是(N-2)*最低容量:(4 - 2) * 80 = 160

假如有 4 块 80T 的硬盘,2块50T的硬盘,采用 RAID5 的容量是( )。

RAID5的容量是(N-1)*最低容量:(4+2-1)*50 = 250

某网络采用定长子网划分,子网掩码为255.255.255.248,则该网络可支持的主机数是( )

子网掩码转二进制:11111111.11111111.11111111.11111000。其中,1代表网络位,0代表主机位。最后八位中,前五位是网络位,后三位是主机位。所以可用主机数为2的3次方,又因为000代表网络地址,111代表广播地址,所以最终可支持的主机数为2的3次方减去2。

主频=外频 * 倍频

英语单词

architecture架构、technologies技术、systems系统、logical逻辑、techniques技术、distributed分布式、dictionary字典、structures结构

其它

安全审计四要素:控制目标、安全漏洞、控制措施、控制测试

领域驱动设计

以业务领域为中心,通过领域专家与开发人员共同建立统一语言,根据业务边界划分领域、构件领域模型,用模型驱动设计实现。

限界上下文

在特定边界内,一个领域模型及其术语、规则保持语义一致的区域,边界外可以有不同的定义。好吃:消除概念冲突、限制复杂度,支持团队拆分与独立演进。

having语句用来对group by语句分组后的数据进行筛选。

“可靠性”包括:无故障性(faultlessness), 可用性(availability), 容错性(fault tolerance), 可恢复性(recoverability)。

死锁

成因:两个线程互相阻塞等待;某个线程奔溃没有释放锁;长时间持有锁;

解决:约定访问数据表行的顺序规则,按照统一的顺序访问;避免长时间持有锁;超时自动释放锁;奔溃try catch释放锁

JWT组成

header:签名算法和类型

payload:用户信息等业务信息

签名:使用密钥和header+payload生成,用于验证JWT的完整性,防止被伪造或者修改

redis主从复制过程

 1. 从库向主库发送首次同步请求。从库向主库发送PSYNC命令,表明自己第一次同步数据。

2. 主库执行BGSAVE生成快照,生成当前数据库的RDB快找文件。

3. 由于BGSAVE执行期间主库还会继续对外服务,主库将该期间的请求命令追加到复制缓冲区,准备后续发送从库。

4. BGSAVE操作完成后,主库发送RDB快照文件给从库。从库收到RDB后,清空原有数据,并加载RDB文件,数据状态同步当前数据库。

5. RDB加载完成后,主库发送增量命令流,从库接收执行追加的命令。用于追平BGSAVE期间,主从之间产生的差异。

6. 同步完成后,主从进入命令传播阶段,即主库每次收到请求命令,都会实时同步给从库,从库保持实时追加主库的数据变更。 

面向构件的编程所需要的基本支持包括:多态性、封装性、后期绑定和装载、安全性

BLP模型 - 机密性模型 (向上不可读,向下不可写)

高可以读低,不能写低;低可以写高,但不能读高

Biba模型-完整性模型 (向上不可写,向下不可读)

高可以写低,不可以读低;低可以读高,不能写高;

信号量

互斥信号量:确保在任何时刻,只有一个进程/线程可以进入临界区,访问共享资源。它是一个二进制信号量,值只能是0或1。1代表锁是可用的。

同步信号量:协调多个线程的执行顺序,确保某些操作必须在其他操作之后执行。它也被称为条件信号量。通常初始值为0代表尚未发生,或者是N,代表由N个可用资源。

TOGAF开发式企业架构框架标准

组件:架构开发方法(核心)、ADM指南和技术、架构内容框架、企业连续体和工具、TOGAF参考模型、架构能力框架

核心思想:模块化架构、内容框架、扩展指南、架构风格

配置项的状态:草稿、正式发布、正在修改

信息物理系统CPS

总体技术:系统架构、异构系统集成、安全技术、试验验证技术。

支撑技术:智能感知、嵌入式软件、数据库、人机交互、中间件、SDN、物联网、大数据。

核心技术:虚实融合控制、智能设备、MBD、数字孪生技术、现场总线、工业以太网。

原有系统架构中的集成需求主要包括:应用程序集成、终端用户界面集成、流程集成和已有系统信息集成。

RESTFul风格

RESTful 是一种以“资源”为中心的架构风格,它将服务器视为资源的集合,使用统一资源路径URL来描述某个资源,通过标准的 HTTP 方法(GET/POST/PUT/DELETE)来表达操作这些资源。通信格式通常是JSON、XML格式。优点:无状态、标准化、松耦合、容易理解。

RPC风格

RPC 是一种以“过程/动作”为中心的调用模式,它让调用远程服务像调用本地函数一样简单直接。通信格式可以是二进制。优点:性能好、强类型,接口定义严格,减少错误、开发体验好(调用本地的方式调用远程服务)。

DAO:数据访问对象

封装了如何连接数据源以及获取数据的细节,上层应用只需要告诉DAO要什么数据,至于怎么连接数据和获取数据,由DAO负责处理。优点:高内聚低耦合;降低复杂度;提高灵活性;

DTO:数据传输对象

DTO就是数据映射过程完成后的“成果物”或“产出”,它承载了经过筛选、组合、格式化后的最终数据形态,完全符合调用方预期的格式要求。

MQTT(Message Queuing Telemetey Transport)协议

消息队列遥测传输。它是一种基于 发布/订阅 模式的 轻量级 消息传输协议。MQTT 协议建立在 TCP/IP 协议之上,主要由三个角色组成:订阅者、发布者、代理。特点:轻量化、高效。主要应用于物联网领域的通信协议。MQTT的Qos(消息服务质量等级)机制,保证消息至少一次或者至多一次或者保证一次触达,同时支持持久会话和遗嘱消息,提供可靠的消息传递服务。

OMT(对象模型技术)

使用一组互相关联的模型,从不同视角描述软件系统。模型类型包括:对象模型、动态模型、功能模型

AI芯片架构类型:GPU、FPGA、ASIC

软件可靠性设计:

容错技术:恢复块设计、N版本程序设计、冗余设计

检错技术:存在缺点是无法自动解决故障

降低复杂度设计

系统配置技术:双机热备技术、服务集群技术

云原生架构原则:1.服务化原则 2.弹性原则 3.可观测原则 4.韧性原则 5.所有过程自动化原则 6.零信任原则 7.架构持续演进原则。

信息安全包括5个基本要素:机密性、完整性、可用性、可控性与可审查性。

软件需求:业务需求、功能需求、用户需求

故障参数

平均故障检测时间MTTD(Mean Time to Detect)

平均故障修复时间MTTR(Mean Time to Repair)

平均故障间隔时间MTBF(Mean Time Between Failures)

平均修复间隔时间MTBR(Mean Time Between Repairs)

平均无故障时间MTTF

MTBF(上个无故障运行的开始时间到下个无故障运行的开始时间) = MTTF + MTTR

用例的三种关系

包含 include:

如果一个用例必须依赖另一个用例,则为包含。举例:炒菜前必须先切菜,则炒菜依赖切菜,所以炒菜包含切菜用例。

扩展 extend

如果一个用例可选依赖另一个用例,则为扩展。举例:下单前可选是否使用优惠券,所以使用优惠券是下单的扩展。

泛化

类似于继承。举例:支付宝支付和微信支付都归属于支付方式。所以支付宝支付和微信支付是支付方式的泛化。

用例图组成

**参与者:**系统外部与系统产生交互的任何事物或者角色。

**用例:**系统提供的能力或者服务。

**关联:**代表参与者与系统,用例与用例之间交互关系。箭头由消息发起者指向消息接收者。参与者之间的关系只有泛化(继承),用例之间的关系包括包含、扩展、泛化。

构建用例模型步骤:识别参与者、识别用例、细化输出用例图、调整用例模型。

M2M(Machine to Machine),也就是消息从一个终端传递到另一个终端,达到机器和机器对话的能力。M2M系统构成有智能化机器、M2M硬件、通信网络、中间件、应用。

邮件发送:SMTP/25

邮件接收:BPOP3/110

交互式邮件存取:IMAP/143

可靠性相关的质量属性:容错性和健壮性。

商业智能系统的处理过程包括:数据预处理、建立数据仓库、数据分析、数据展示。

数据分析一般采用OLAP(联机分析处理)和数据挖掘。前者不仅进行数据汇聚,同时提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便得对数据进行多维度分析;后者的目的是挖掘数据背后的隐藏知识,通过关联分析、分类建立分析模型,预测未来发展趋势和将要面临的问题。

供应链信息流包含需求信息和供应信息。需求信息是从需方向供方流动,包括:客户订单,生产计划,采购合同。供应信息是供方流向需方,包括:入库单,完工报告单,库存记录,可供销售量,提货发运单。

面向对象设计的基本任务,是将面向对象分析模型转换为面向对象设计模型。面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型组成。设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和描述流程化处理过程活动图等。

螺旋模型它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。螺旋模型沿着螺线进行若干次迭代,包括:制定计划、风险分析、实施工程、客户评估

API网关作用:路由、服务聚合、流量限流、负载均衡、服务降级和熔断、安全控制、性能监控。

**DDOS攻击:**包括带宽攻击和应用层攻击。攻击者通过控制计算机或者发包机向目标服务器发送大量恶意数据包,占用大量带宽,导致目标服务器无法对正常流量提供服务。或者发送恶意请求,导致目标服务器内存、cpu等资源耗尽,导致无法正常提供服务。预防手段包括:流量清洗、系统更新补丁、分布式部署、提升带宽、关闭不必要的服务。

遗产系统

高价值高水平:改造;高水平低价值:集成;低水平低价值:遗弃;高价值低水平:继承

开发环境

环境信息库、过程控制与消息服务器、环境用户界面

ER图合并冲突

属性冲突:相似定义的属性定义了不同的数据类型、取值范围或者单位

命名冲突:同名异意,异名同意

结构冲突:相似定义实体定义了不同的数据结构。

SOA

SOAP:xml协议,用于异构系统之间通过标准的协议进行通信交互。web上进行远程调用

UDDI:描述和发现服务

WSDL:服务描述语言,描述服务的功能和如何调用。

边缘计算

特点:数据第一入口、分布性、联接性、约束性

优势:

性能:数据无需传输到云端,在本地进行计算,速度更快;

实时: 边缘节点靠近数据源,传输效率更高,运算速度快;

安全:无需传输到云端,避免敏感数据传输过程中被泄露

高可用:弱网或者无网络情况也可以在本地运行。

可扩展:

信息化建设生命周期:系统规划、系统分析、系统设计、系统实施、系统维护和运行

构件组装成系统的三个层次

定制:根据需求,对构件进行定制开发和修改

集成:将多个构件组装成系统

扩展:在现有系统上增加新的功能和构件

构件的特点

可组装性:所有外部交互必须通过公开定义的接口进行。

独立性:无特殊情况下进行独立部署组装,如需要其他构件提供服务,应该显示声明

可部署性:作为一个独立实体在平台上运行。构件是二进制的,无需部署前编译。

标准化:符合某种标准化构件模型。

文档化:用户可以根据文档判断构件是否满足需求。

构件组装方式

顺序组装:按照顺序调用构件,上一个构件的输出与下一个构件的输入兼容

层次组装:上一个构件调用下一个构件的服务,被调用构件和调用构件接口需要兼容

叠加组装:多个构件合并成新构件,新构件整合构件功能,对外提供新的接口。组成新构件的构件之间相互独立,不需要相互调用。

构件组装常见错误

参数不兼容:两侧的接口拥有相同的名字,但是参数类型或者参数个数不一致。

接口不兼容:提供接口和调用接口的操作名不一致。

操作不完备:一个构件提供接口是另一个构件请求的接口的子集,或者相反。

 通信不兼容、依赖冲突、性能瓶颈、语义不一致

解决构件组装错误:编写适配器构件使得两个构件的接口一致。

UML顺序图(时序图/序列图)

**功能:**将某个功能或者用例的过程,按照时间顺序描述了多个参与者之间的消息通信过程。

包含的元素

对象:系统内部参与交互的元素

参与者:系统外部参与交互的元素

消息:参与者或者对象之间的通信,包括同步消息、异步消息、返回消息

生命线:代表某个参与者或者对象交互过程中的状态,包括挂起和激活

激活:代表参与者正在处于执行某个操作的状态

序列片段:可选片段opt、循环片段loop、条件片段alt、中断break、并发par、临界区(互斥)region

UML状态图:表示某个对象生命周期内动态行为,描述其经历的状态序列,以及引起状态变化的事件和伴随状态转移的动作。包括:状态、事件、动作。强调行为的结果。

UML活动图:表示业务的执行流程。强调活动的执行顺序、控制流等。包括:活动、决策节点、合并节点、控制流、甬道、对象等。强调行为的动作。

UML类图关系类型:继承/泛化、实现、聚合/聚集(可以分割)、组成/组合(不可分割)、关联/引用、依赖

依赖:是一种临时性的关系。如果一个类A的某个方法局部使用了另一个类B,那么A依赖于B。

关联:长期关系。它表示一个类“知道”另一个类,通常通过成员变量(属性)体现。

聚合:是一种整体与部分”的关系,但部分可以脱离整体而独立存在。是一种弱的拥有关系。

组合:是一种更强、更严格的“整体与部分” 关系。部分不能脱离整体而存在。是一种强的拥有关系

实现:一个类实现了另一个接口。

继承:一个类(子类)继承另一个类(父类)。并且子类可以扩展或者覆盖父类。

UML结构图(描述结构关系):类图、对象图、组件图、部署图

UML行为图(描述功能交互):用例图、时序图、状态图、活动图、通信图

FMEA故障模式和影响分析

步骤:

1. 分析可能存在的故障模式

2. 故障模式的风险量化评估

3. 故障机理分析,给出预防和改进措施。

类型:设计FMEA、过程FMEA、服务FMEA、使用FMEA

复杂度描述

扇入扇出:系统调用其他模块为扇出,模块被调用为扇入

耦合度:模块之间交互的频繁程度,模块之间相互依赖的程度

耦合类型(耦合度从高到低)

内容耦合:一个模块直接修改或依赖另一个模块的内部数据或实现细节。

公共耦合:多个模块都依赖于同一个全局数据结构(如全局变量)。 

外部耦合:模块依赖于同一个外部环境或协议。 

控制耦合:一个模块通过传递参数或控制信息(如标志、开关)来直接影响另一个模块的执行逻辑。 

标记耦合:模块之间通过传递复杂的数据结构(如对象、结构体)进行交互,但一个模块只使用该结构中的一部分数据。 

数据耦合:模块之间通过参数传递必需的基本数据类型(或简单对象)进行通信。 

消息耦合:模块之间通过异步消息进行通信,彼此不知道对方的存在。

类的类型分类:边界类、控制类、实体类

实体类:表示系统中的关键对象,通常与数据库表一一对应,例如用户类、订单类、商品类。

边界类:负责外部参与者与系统之间的交互,是系统的接口,处理输入输出。例如:展示信息的ui表单、api接口等。

控制类:封装了业务的处理逻辑,是边界类和实体类的桥梁。

以用户注册用户为例
边界类:注册表单ui;控制类:注册逻辑;实体类:用户

分布式系统BASE理论

BA:基本可用、S:软状态(数据中间状态)、E:最终一致性

企业数字化转型的阶段:初始发展阶段、单元级发展阶段、流程级发展阶段、网络级发展阶段、生态级发展阶段

ADL架构描述语言

构件:功能模块

连接件:功能模块如何交互。通信

架构配置(约束):构件和连接件如何组成整体

k8s自动扩缩容

包括水平、垂直、集群级扩缩容。k8s会监听创建的pod的cpu利用率、内存、自定义指标,当达到预设的阀值时,自动创建或者销毁pod实例,达到动态调整pod数量的目的。

k8s滚动更新

滚动更新时零停机更新策略,逐步用新pod替代旧的pod,保证服务实时可用。创建一个新的pod,pod实例准备就绪后,下掉一个旧的pod。最终用新的pod替换所有旧的pod。

serverLess

开发者无需关注服务器的管理运维,只需要关注业务逻辑的编写,云平台自动管理计算/存储资源的分配运行。

优点:无需关注基础设施、按时付费、弹性计算资源、运维简单、降低成本

缺点:冷启动延迟、测试复杂、供应商锁定、不适合长任务

服务网格服务发现

服务网格本身不负责服务注册的能力,基于底层平台的注册能力。服务网格的控制平台会监听底层平台的注册事件,拿到最新的服务注册表,然后将注册表下发到数据面sidebar,sidebar根据服务注册表,拿到服务对应的实例。

边云协同的优势和分类

优势:延迟低、带宽压力小、安全性、可靠性高

分类:

资源协同:边缘节点提供计算、存储等基础设施能力,具有本地资源调度能力,并且接受云端的资源调度管理策略。

数据协同:现场数据的采集,按照规则预先对数据进行处理分析,并且将结果上传至云端。云端对数据进行存储和进一步分析。

智能协同:边缘节点按照ai模型进行推理,实现分布式智能;云端负责ai集中式训练,并下发模型至边缘。

应用管理协同:边缘节点提供应用的部署和运行环境,对本节点的应用的生命周期进行管理;云端提供应用的开发、测试环境,以及应用生命周期管理能力。

服务协同:边缘节点按照云端策略实现部分业务服务。

业务管理协同:边缘节点提供模块化、微服务化的应用等应用实例;云端实现应用的业务编排能力。

软件设计包含:结构设计、数据设计、接口设计、过程设计

内聚程度从高到低:(记忆口诀:公孙铜锅涮罗欧)

功能内聚:完成单个功能,缺一不可

顺序内聚:上一个模块输出是下一个模块的输入

通信内聚:各处理模块都依赖输入的数据或者产生相同的输出数据,各模块处理同一份数据结构。比如根据员工生日计算年龄和退休时间。

过程内聚:特定顺序执行,模块间无数据传递关系

时间内聚:需要同时执行的任务放在一起。

逻辑内聚:将功能类似的模块放在一起,通过参数判断执行哪个模块。

偶然内聚:模块内的处理无任何联系。

微服务

将整个应用按照一定策略拆分成独立开发和部署运行的微小服务的架构风格。

优点:

1. 单个服务逻辑简单且高度内聚,易于维护。

2. 服务之间运行相互隔离,单点故障率低。

3. 基于云原生技术,实现自动扩缩容。

4. 不同服务之间可以选择不同的技术栈,选型灵活。

缺点:

服务之间通过远程调用通信,调试难度大。

分布式系统带来的运维复杂性和数据最终一致性难度大。

J2EE

**容器:**组件的运行环境和上下文。包括Applet Container、Application Container、Web Container、EJB Container。

组件

servlet: 控制器,接收请求,分发给逻辑层。

JSP:视图层,输出html

session bean:业务操作,报错有状态和无状态

Entity bean:持久层。

**服务:**容器为组件提供的公共能力

jdbc:数据持久层。

JTA: 事务管理。

JMS:消息管理

JPA:对象关系映射规范。

JavaMail:邮箱

芯片温度级别

民用:0 - 70

工业:-40 - 85

军事:-55 - 150

秘密时间

绝密:30年;机密:20年;秘密:10年

逆向工程抽象级别

实现级: 包括程序的抽象语法树、符号表等信息。

结构级: 包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图等。本题第一空描述的是结构级,选择B选项。

功能级: 包括反映程序段功能及程序段之间关系的信息。

领域级: 包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息。

用户指导下的搜索和变换方法主要导出实现级和结构级信息;变换式方法导出实现级、结构级、功能级信息;基于领域知识方法导出功能级、领域级;铅板恢复法导出实现级、结构级信息。

AI算法训练模式

**监督学习:**为算法提供带有标签的数据集,算法识别数据到标签的映射关系。算法得到映射关系后,为无标签的数据自动识别标签。优点包括:结果稳定,人工干预解释少,在拥有高质量数据的前提下,准确率高。缺点包括:提供高质量的带有标签的数据成本高,依赖数据和标签的准确性。

**无监督学习:**为算法提供无标签的数据集,算法自动识别数据内在的特征,关系,结构。优点包括:无需带有标签的数据集,成本低;能获取数据未知的关系模式。缺点包括:结果不稳定,通常需要人工介入解释。

**半监督学习:**提供少量带有标签的数据和大量无标签的数据。算法通过带有标签的数据学习映射关系,后续通过无标签的数据使得算法在学习的基础上更加成熟。

容器化技术

操作系统层面上虚拟出多个运行环境,容器技术的核心是容器引擎。容器引擎运行在单个linux内核之上。在单个linux内核之上通过命名空间、控制组的技术创建多个用户空间,从而实现对文件系统、网络配置、进程等操作系统资源的虚拟化。

优点

敏捷性:操作系统层虚拟化,在单个内核上进行隔离,不需要对整个操作系统虚拟化,只包含应用程序、依赖项等。

弹性:自动扩缩容进行增加减少容器实例。

一致性:在linux内核之上对所有依赖项的虚拟化,包括文件系统、网络配置、进程、环境变量,保证运行环境的一致性。

缺点

隔离性较差:共享单个操作系统内核

兼容性差:容器的应用需要与操作系统内核兼容。

虚拟机技术

物理硬件层面上虚拟出多个完整的操作系统。虚拟技术的核心是**虚拟机器监视器,**虚拟机器监视器运行在物理服务器上,将物理资源(CPU、存储、网络、内存)抽象和池化。在资源池上创建多个虚拟机。每个虚拟机拥有独立的操作系统、系统库、应用程序等。

优点

 强隔离性:每个虚拟机拥有独立的操作系统,单个奔溃不会影响到其它虚拟机的运行。

兼容性好:单个物理机上可以运行多个类型的操作系统的虚拟机

技术成熟

缺点

资源开销大、启动慢、性能损耗

工业大模型

基础设施层、基座层、模型层、交互层、应用层

开放系统互联安全体系五类安全服务

鉴别: 对通信实体申明对身份进行判断

访问控制: 防止对数据的无权限访问

数据机密性:防止未授权实体知悉数据

数据完整性:数据传输过程中不被修改、破坏丢失

扛抵赖:防止实体对自己操作记录的否认

可靠性包括:可用性、容错性、可恢复性

霍尔三维:时间维、逻辑维、知识维

数据库管理系统加密方式

**1. api加密:**DBMS 提供内置的加密函数,业务层在执行sql时通过调用加解密函数实现对数据加解密操作。

2. 透明加密:数据库内核实现的加密机制,加密解密完全由数据库实现和实施,加解密的过程对于应用层来说是透明的,无感知的。

负载均衡分类

1. 网络层负载均衡

原理:基于IP地址、端口号分发,不需要解析应用层数据,速度快。比如DNS查询的时候,为同一个域名设置多个ip地址,或者端口号;按照一定顺序返回对应的ip地址,将客户端请求引导到不同的ip服务器上。缺点是分发策略简单。比如LVS。linux虚拟服务

2. 应用层负载均衡

原理:基于http协议和重定向机制,分析http header、cookie等应用层数据,根据负载均衡策略,返回重定向的响应,客户端根据该响应,基于新的地址发起请求。特点:更加智能,但是性能开销和维护成本大于传输层负载均衡。比如nginx

虚拟IP

定义:是一个逻辑上指向某些服务器真实ip的ip地址。虚拟ip由哪些服务器持有是可变的。

作用:高可用性:多个服务器持有某个虚拟ip,当某个服务器宕机时,可由持有该虚拟ip的其他服务器提供服务;负载均衡:虚拟ip作为服务器集群的入口,负载均衡器根据算法将流量分发到不同的服务器上。

SDN(软件定义网络)

SDN将网络转发与网络控制分离开,使得网络变得灵活、集中化管理。包括三个层次:应用层、控制层、基础设施层(转发层)。基础设施层负责根据控制层下发的流表对数据包进行转发;控制层负责制定转发规则,对应用层提供抽象的网络视图;应用层对控制层下发网络需求,网络需求被控制层翻译成具体的网络配置。

ARP(Address Resolution Protocol)协议

地址解析协议,根据ip地址寻找对应的mac地址。

网络存储

通过网络为服务器或者计算机提供数据存储和访问的系统。优点:高可用、高可扩展、集中管理、成本低。包括NAS(**网络附加存储)、**SAN(存储区域网络)、OSS(对象存储)

TOGAF架构开发方法迭代级别

1. 基于ADM整体的迭代

2. 多个开发阶段间的迭代

3. 在一个阶段内部的迭代

软件需求规格说明书中的约束包括:设计约束和过程约束

**项目时间管理包括:**活动定义、活动排序、活动资源估算、活动历时估算、制定计划、进度控制。

软件确认测试是一种针对需求的测试,是用户参与的测试。它主要验证软件功能、性能及其他特性是否与用户需求一致。

安全网络架构安全服务:认证服务、控制访问服务、数据完整性服务、数据机密性服务、抗抵赖服务

数据持久层

根据分层思想,通过建立数据操作接口,对象/关系映射策略,隐藏数据操作细节,达到分离业务逻辑层与数据存储层的耦合,向业务逻辑层提供透明的数据操作机制的目的。

对称加密

使用一个密钥进行加密和解密,效率高,但是如何安全传递密钥是难题。常见算法:AES, DES, 3DES, ChaCha20

非对称加密

使用公私钥进行通信,通常用来加解密和数字签名(用来证明发送方拥有正确的私钥)。效率低,但是安全。通常通过非对称算法进行交换密钥,然后通过对称加密算法进行业务通信。常见算法:RSA, ECC, DSA

电子政务

(1)政府对政府(Government to Government,G2G)
(2)政府对企业(Government to Business,G2B)
(3)政府对公众(Government to Citizen,G2C)
(4)政府对公务员(Government to Employee,G2E)

容错设计

**冗余:**主从复制、多活部署、数据备份和恢复

**隔离:**熔断器、限流与服务降级、物理/逻辑隔离、线程隔离、故障转移

分布式事务方案

2PC:预处理、提交

3PC:

TCC:try、confirm、cancel

本地消息表

论文

关键主题

架构:架构风格、架构评估、ABSD、SOA、基于构件的开发方法 

 信息系统的安全性、保密性设计 

 信息系统可靠性中容错技术设计

 项目管理

结构组成

概要(300):项目背景、项目功能、岗位和职责、论文论点概览、项目成果和总结

正文

详细项目背景、功能(400)

相关子问题回应,非核心论点概述(300 - 400)

正文内容(1000 - 1500):总分模式。论点在实际项目的落地。思路:问题 -> 方案 -> 成果

总结(400 - 600):项目成果;总结不足;计划方案。

技术栈

分布式存储

MinIO、HDFS、Ceph

分布式事务

seaTa

数据分片中间件

shardingsphere、sharding-sideCar

大数据

Hadoop

微服务

Apache Dubbo、Spring Cloud、Tars

事件流(消息队列)

Kafka

数据持久层

mybatis: 半自动sql映射框架。复杂查询、灵活性高、性能调优。

Hibernate:全自动sql映射框架、简单查询、灵活性低、性能调优一般。

web框架

Struts2

监控系统

openTelemetry(遥测数据的生成、采集、输出)、 prometheus(指标数据和监控告警) 、grafana(指标可视化)

服务注册和发现

nacos

容器和容器编排

k8s、docker

CI/CD

gitlab+jenkins

日志服务

Elastic stack(elasticSearch(搜索)、logstash(日志清洗)、kibana(可视化))

service Mesh

istio、Envoy、Linkerd

数据库

openTSDB:时间序列数据库

HBase: 列数据库