软考系列(系统架构师)- 2020年系统架构师软考案例分析考点

试题一 软件架构(架构风格、质量属性)

阅读以下关于软件架构设计与评估的叙述,回答 问题  1问题  2
【说明】
某公司拟开发一套在线软件开发系统,支持用户通过浏览器在线进行软件开发活动。该系统的重要功能包括代码编辑、语法高亮显示、代码编译、系统调试、代码仓库管理等,在需求分析与架构设计阶段,公司提出的需求和质量属性描述如下:

a)根据用户的付费情况对用户进行分类,并根据类别提供相应的开发功能;
b)在正常负载情况下,系统应该在 0.2s 内对用户的界面操作请求进行响应;
c)系统应该具备完善的安全防护措措施,能够对黑客的攻击行为进行检测和防御;
d)系统主站点断电后应在 3s 内将请求重定向到备用站点;
e)系统支持中文昵称,但用户名必须以字母开头,长度不少于 8 个字符;
f)系统宕机后,需要在 15s 内发现错误,并启用备用系统;
g)在正常负载情况下,户的代码提交请求应在 0.5s 内完成;
h)系统支持硬件设备灵活扩容,应保证在 2人・天内完成;
i)系统需要针对代码仓库的所有操作进行详细记录,便于后期查阅与审计;
j)更改系统 web 界面风格需要在  4人・天内完成;
k)系统本身需要提供远程调试接口,支持开发团队进行远程排错;

在对系统需求质量属性和架构特性进行分析的基础上,该公司的系统架构师给出了两种方案,分别是管道-过滤器和仓库风格。

【问题 1】(13分)
请问该需求应该采用哪一种风格。表  1-1 是对这两种风格分别从数据处理方式、系统拓展方式和处理性能三个方面进行了比较,请填写 表  1-1 中(1)~(4)处的空白。

【问题 2】(12分)
1、请分析题干中的需求描述,填写 图  1-2 中  (1)~(6) 处的空白。

答案与解析
  • 试题难度:一般
  • 知识点:案例分析>软件架构风格与架构设计
  • 试题答案:

    【问题 1】(13分)
    1.该系统更适合采用仓库架构风格。(5分)
    2.表(1)-(4)空的空白分别为:(8分)
    (1)数据存储在中心仓库,处理流程独立,支持交互式处理。
    (2)数据与处理紧密关联,调整处理流程需要系统重新启动。
    (3)数据与处理分离,需要加载数据,性能降低。
    (4)数据处理组件之间一般无依赖关系,可并发调用,提高性能。
    【问题 2】(12分)
    (1)安全性
    (2)可修改性
    (3)g
    (4)i
    (5)f
    (6)j

试题解析:

本题考查的是架构设计过程中涉及到的一些质量属性,以及架构风格的对比。
【问题 1】(13分)
在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,数据输入构件,经过内部处理,然后产生数据输出。因此,这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
在仓库(repository)风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。一方面,若构件控制共享数据,则仓库是一传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。
通过交互方式、数据结构、控制结构和扩展方法分别对仓库风格和管道过滤器风格进行对比,如下所示:
交互方式:管理过滤器很明显是顺序结构或循环结构,数据在管理中进行传递。而仓库结构是数据在中心位置,所有的处理均是中心结点与周边结点之间的交互,从形态来看,是星型的。
数据结构:从数据结构来看,仓库风格会使用一个文件将数据保存起来,所有的操作围绕这个文件进行。而管道过滤器则是在过滤器之间传递数据流。
控制结构:从控制结构来说仓库风格是业务功能驱动,而管道过滤器是由数据流驱动的。
扩展方法:从扩展方法来讲,管道过滤器是通过过滤器提供标准接口与其它过滤器对接,而数据仓库风格,要共享数据,扩展功能,只要功能的操作与数据模型本身是匹配的就行了,就像我们要共享一个数据库做系统集成,此时共享同一数据库的多个应用系统所用的数据模型一定会是一致的,否则无法去共享。
【问题 2】(12分)
本题主要考查考生对于软件质量属性的理解、掌握和应用。
本题考查的是架构设计过程中涉及到的一些质量属性,以及架构风格的对比。常用的质量属性包括:
1、性能
性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
2、可靠性
可靠性(reliability)是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。
3、可用性
可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
4、安全性
安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。
5、可修改性
可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。
6、易用性
软件开发工具应有十分友好的用户界面,用户乐于使用;工具应能剪裁和定制,以适应特定用户的需要;工具应能提示用户的交互操作,提供简单有效的执行方式;工具还应能检查用户的操作错误,尽可能自动改正错误。
识别软件架构质量属性是进行架构设计的重要步骤。根据对相关质量属性的定义和含义,其中:“c)系统应该具备完善的安全防护措措施,能够对黑客的攻击行为进行检测和防御”、“i)系统需要针对代码仓库的所有操作进行详细记录;便于后期查阅与审计”属于安全性;“h)系统支持硬件设备灵活扩容,应保证在2人天内完成”、“j)更改系统web界面风格需要在4人天内完成”这描述的是系统的可修改性;“g)在正常负载情况下,户的代码提交请求应在0.5s内完成”描述的是性能属性。

试题二 数据库(规范化)

阅读下列说明,回答 问题 1问题 3 ,将解答填入对应栏内。
【说明】
某企业委托软件公司开发一套包裹信息管理系统,以便于对该企业通过快递收发的包裹信息进行统一管理,在系统设计阶段,需要对不同快递信息的包裹单信息进行建模,其中,邮政包裹单如 图  2-1 所示:

图2-1 包裹详情单
图 2-1 包裹详情单

【问题  1】(13分)
请说明关系型数据库开发中,逻辑数据模型设计过程包含哪些任务?根据 图  2-1 包裹详情单应该设计出哪些关系模式的名称,并指出每个关系模式的主键属性。
【问题  2】(6分)
请说明什么是超类实体?结合图中包裹单信息,试设计一种超类实体,给出完整的属性列表。
【问题  3】(6分)
请说明什么是派生属性?结合图中包裹单信息说明哪个属性是派生属性。

答案与解析

  • 试题难度:一般
  • 知识点:
  • 试题答案:

    【问题 1】(13分)
    逻辑结构设计包含的任务主要有:
    (1)把概念结构设计阶段设计好的基本E-R图转换为关系数据库的关系模式;(2)对关系模式进行优化;(3)设计用户视图。
    设计的关系模式主要有:
    收件人信息。主键:证件号
    寄件人信息。主键:用户代码
    包裹单信息。主键:包裹单编号
    快递员信息。主键:员工编号
    邮局站点信息。主键:邮局编号
    【问题 2】(6分)
    将一些子实体所共有的属性抽象为一个单独的新实体,这个新的实体就是超类实体。
    比如根据这个包裹单信息可以设计一个 “人员信息”的超类:人员信息(姓名,电话,单位名称,详细地址,邮政编码)。
    【问题 3】(6分)
    可以从其它属性得来的属性就叫派生属性。包裹图中的“总计”属性是派生属性。

  • 试题解析:

    【问题 1】(13分)
    数据库设计分为概念结构设计、逻辑结构设计、物理结构设计:
    概念设计也称为概念结构设计,其任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何DBMS的数据模型,即概念模型。概念模型的表现形式即ER模型。
    逻辑设计也称为逻辑结构设计,其主要任务是将概念设计阶段设计好的E-R图转换为与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构(如:关系模式)。
    物理设计也称为物理结构设计,其任务是对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的物理结构,主要是指数据库在物理设备上的存储结构和存取方法。
    【问题 2】(6分)
    当较低层次上实体类型表达了与之联系的较高层次上的实体类型的特殊情况时,就称较高层次上实体类型为超类型,反之为子类型。子类到超类的过程为概化,超类到子类的过程为特化。
    ①子类与超类之间具有继承特点,即子类包含了超类的所有属性,并且可以比超类拥有更多的属性。
    ②这种继承性是通过子类实体和超类实体有相同的实体标识符实现的。
    【问题 3】(6分)
    可以从其它属性得来的属性就叫派生属性。包裹图中的“总计”属性是派生属性。可以从资费、挂号费、保价费、回执费累加计算出来。

试题三 嵌入式

阅读以下关于开放式嵌入式软件架构设计的相关描述,回答 问题 1问题 3
【说明】
某公司一直从事宇航系统研制任务,随着宇航产品综合化、网络化技术发展的需要,公司的业务量急剧增加,研制新的软件架构已迫在眉睫。公司架构师王工广泛调研了多种现代架构的基础,建议采用基于FACE (Future Airborne Capability Environment)的字航系统开放式软件架构,以实现字航系统的跨平台复用,实现字航软件高质量、低成本的开发。公司领导肯定了王工的提案,并指出公司要全面实施基于FACE的开放式软件架构,应注意每个具体项目在实施中如何有效实现从需求到架构设计的关系,掌握基于软件需求的软件架构设计方法,并做好开放式软件架构中各段间的接口标准化设计工作。
【问题  1】(9分)
王工指出,软件开发中需求分析是根本,架构设计是核心,不考虑软件需求便进行软件架构设计很可能导致架构设计的失败,因此,如何把软件需求映射到软件架构至关重要。请从描述语言、非功能性需求描述、需求和架构的一致性等三个方面, 用300字以内的文字说明软件需求到架构的映射存在哪些难点。
【问题 2】(10分)
图3-1是王工给出的FACE架构布局,包括操作系统、I/O 服务、平台服务、传输服务和可移植组件等5个段;操作系统、I0和传输等3个标准接口。请分析图3-1给出的FACE架构的相关信息,用300字以内的文字简要说明FACE 5个段的含义。

【问题  3】(6分)
FACE架构的核心能力是可支持应用程序的跨平台执行和可移植性,要达到可移植能力,必须解决应用程序的紧耦合和封装的障碍。请用200字以内的文字简要说明在可移植性上,应用程序的紧耦合和封装问题的主要表现分别是什么,并给出解决方案。

答案与解析

  • 试题难度:一般
  • 知识点:案例分析>嵌入式系统设计
  • 试题答案:

    【问题 1】(9分)
    (1)需求和架构描述语言存在差异:软件需求是频繁获取的非正规的自然语言,而软件架构常用的是一种正式语言。
    (2)非功能属性难于在架构中描述:系统属性中描述的非功能性需求通常很难在架构模型中形成规约。
    (3)需求和架构的一致性难以保障:从软件需求映射到软件架构的过程中,保持一致性和可追溯性很难,且复杂程度很高,因为单- -的软件需求可能定位到多个软件架构的关注点。反之,架构元素也可能有多个软件需求。
    【问题 2】(10分)
    操作系统服务段:为FACE架构其他段提供操作系统、运行时和操作系统级健康监控等服务。通过开放式OSGi框架为上层功能提供OS标准接口,并可实现上层组件的即插即用能力。
    I/O服务段:主要针对专用IO设备进行抽象,屏蔽平台服务段软件与硬件设备的关系。由于图形服务软件和GPU处理器紧密相关,因此I/0服务段不对GPU驱动进行抽象。
    平台服务段:主要是指用户需要的共性软件,如:系统级健康监控(HM).配置、日志和流媒体等服务。本段可包括平台公共服务、平台设备服务和平台图像服务等三类。
    传输服务段:主要为上层可移植组件段提供平台性的数据交换服务。可移植组件将通过传输服务段提供的服务实现交换,禁止组件间直接调用。
    可移植组件段: 提供了多组件使用能力和功能服务。主要包括公共服务和可移植组件两类。
    【问题 3】(6分)
    紧耦合问题主要表现在:I/O问题、业务逻辑问题和表现问题。
    解决方案:可采用分离原则,通过隔离实现硬件特定信息和少数模块的代码,减少耦合性。
    封装问题主要表现在: ICD硬编码问题、组件的紧耦合问题、直接调用问题。
    解决方案:可以通过提供数据源或槽的软件服务的方法,将紧耦合组件分解出应用程序,并将平台相关部分加入计算环境中,在计算平台内提供数据源或槽的软件服务,并实现接口标准化。

  • 试题解析:【问题 1】
    软件需求是指为用户解决某一问题或达到某一目标所需的软件功能;系统或系统构件为了满足合同、规约、标准或其他正式实行的文档而必须满足或具备的软件功能。
    软件需求包括三个不同的层次:业务需求、用户需求和功能需求;软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等。它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性。
    架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
    通常在软件开发过程中,需求会随着开发深入而有所变化,而架构又不能完全地将需求全部反映出来,因此,如何把软件需求映射到软件架构是至关重要一个问题。
    (1)从描述语言方面来讲:软件需求是频繁获取的非正规的自然语言,而软件架构常用的是一种正式语言。
    (2)从非功能性需求描述方面来讲:系统属性中描述的非功能性需求通常很难在架构模型中形成规约。
    (3)从需求和架构的一致性方面来讲:从软件需求映射到软件架构的过程中,保持一致性和可追溯性很难,且复杂程度很高,因为单一的软件需求可能定位到多个软件架构的关注点。反之,架构元素也可能有多个软件需求。

    【问题 2】
    FACE软件架构是建立在操作系统上的一个三维架构,该架构由操作系统、I/O服务、平台服务(PSS)、传输服务(TSS)、可移植组件五部分组成。该软件架构能够更好的将关注点分离,软件功能能够重用,旨在实现FACE的目标——降低研发和集成的成本。
    (1)操作系统服务段:为FACE架构其他段提供操作系统、运行时和操作系统级健康监控等服务。通过开放式OSGi框架为上层功能提供OS标准接口,并可实现上层组件的即插即用能力。本段是FACE架构的基本服务段。
    (2)I/O服务段:主要针对专用I/O设备进行抽象,屏蔽平台服务段软件与硬件设备的关系,形成一种虚拟设备,这里隐含着对系统中的所有硬件I/O的虚拟化。由于图形服务软件和GPU处理器紧密相关,因此I/O服务段不对GPU驱动进行抽象。
    (3)平台服务段:主要是指平台/用户需要的共性服务软件,主要涵盖跨平台的系统管理、共享设备服务,以及健康管理等。如:系统级健康监控(HM)、配置、日志和流媒体等服务。本段主要包括平台公共服务、平台设备服务和平台图像服务等三类。
    (4)传输服务段:通过使用传统跨平台中间件软件(如CORBA、DDA等),为平台上层可移植组件段提供平台性的数据交换服务,可移植组件将通过传输服务段提供的服务实现交换,禁止组件间直接调用。本段应具备QoS质量特征服务、配置能力服务以及分布式传输服务等。
    (5)可移植组件段:为用户软件段,提供了多组件使用能力和功能服务。主要包括公共服务和可移植组件两类。

    【问题 3】
    可移植性是软件质量之一,良好的可移植性可以提高软件的生命周期。可移植性是指软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。
    紧耦合就是模块或者系统之间关系太紧密,存在相互调用。紧耦合系统的缺点在于更新一个模块的结果导致其它模块的结果变化,难以重用特定的关联模块。
    封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
    紧耦合问题主要表现在:I/O问题、业务逻辑问题和表现问题。
    解决方案:可采用分离原则,通过隔离实现硬件特定信息和少数模块的代码,减少耦合性。
    封装问题主要表现在: ICD硬编码问题、组件的紧耦合问题、直接调用问题。
    解决方案:可以通过提供数据源或槽的软件服务的方法,将紧耦合组件分解出应用程序,并将平台相关部分加入计算环境中,在计算平台内提供数据源或槽的软件服务,并实现接口标准化。

试题四 数据缓存(Redis)

阅读以下关于数据库缓存的叙述,回答 问题 1问题 3
【说明】
某互联网文化发展公司因业务发展,需要建立网上社区平台,为用户提供一个对网络文化产品(如互联网小说、电影、漫画等)进行评论、交流的平台。该平台的部分功能如下:
(a)用户帖子的评论计数器;
(b)支持粉丝列表功能;
(c)支持标签管理;
(d)支持共同好友功能等;
(e)提供排名功能,如当天最热前 10 名帖子排名、热搜榜前 5 排名等;
(f)用户信息的结构化存储;
(g)提供好友信息的发布/订阅功能。
该系统在性能上需要考虑高性能、高并发,以支持大量用户的同时访问。开发团队经过综合考虑,在数据管理上决定采用 Redis +数据库(缓存+数据库)的解决方案。

【问题  1】(10分)
Redis支持丰富的数据类型,并能够提供一些常见功能需求的解决方案。请选择题干描述的  (a) ~ (g)  功能选项,填入 表  4-1 中 (1) ~ (5) 的空白处。

表 4-1 Redis 数据类型与业务功能对照表

【问题  2】(7分)
该网上社区平台需要为用户提供  7×24 小时的不间断服务。同时在系统出现宕机等故障时,能在最短时间内通过重启等方式重新建立服务。为此,开发团队选择了  Redis 持久化支持。Redis 有两种持久化方式,分别是  RDB(Redis DataBase) 持久化方式和  AOF (Append OnlyFile)  持久化方式。开发团队最终选择了  RDB 方式。请用  200 字以内的文字,从磁盘更新频率、数据安全、数据一致性、 重启性能和数据文件大小五个方面比较两种方式,并简要说明开发团队选择  RDB 的原因。
【问题  3】(8分)
缓存中存储当前的热点数据,Redis 为每个 KEY 值都设置了过期时间,以提高缓存命中率。为了清除非热点数据,Redis 选择 “定期删除+惰性删除” 策略。如果该策略失效,Redis 内存使用率会越来越高,一般应采用内存淘汰机制来解决。请用  100 字以内的文字简要描述该策略的失效场景,并给出三种内存淘汰机制。

答案与解析

  • 试题难度:一般
  • 知识点:
  • 试题答案:

    【问题 1】(10分)
    (1)a
    (2)b,g
    (3)c,d
    (4)f
    (5)e
    【问题 2】(7分)
    (1)磁盘更新频率:AOF 比 RDB 文件更新频率高;
    (2)数据安全:AOF 比 RDB 更安全;
    (3)数据一致性:RDB 间隔一段时间存储,可能发生数据丢失和不一致;AOF 通过 append 模式写文件,即使发生服务器宕机,也可通过 redis-check-aop 工具解决数据一致性问题;
    (4)重启性能:RDB 性能比 AOF 好;
    (5)数据文件大小:AOF 文件比 RDB 文件大。
    综合上述五个方面的比较。考虑在系统出现宕机等故障时,需要在最短时间内通过重启等方式重新建立服务,因此开发团队最终选择了 RDB 方式。
    【问题 3】(8分)
    由于 Redis 定期删除是随机抽取检查,不可能扫描清除掉所有过期的 key 并删除,然后一些 key 由于未被请求,惰性删除也未触发。这样 Redis 的内存占用会越来越高。此时就需要内存淘汰机制。
    常用的内存淘汰机制是六种(volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random、no-enviction)。注:任选其中三种都可得分。

  • 试题解析:

    【问题 1】(10分)

    【问题 2】(7分)
    本问题考察 Redis 持久化存储的基本概念及应用。
    Redis 提供了两种持久化存储的机制,分别是 RDB(Redis DataBase)持久化方式和 AOF(Append Only File)持久化方式。RDB 持久化方式是指在指定的时间间隔内将内存中的数据集快照写入磁盘,是 Redis 默认的持久化方式。AOF 方式是指 Redis 会将每一个收到的写命令都通过 write 函数追加到日志文件中。

    【问题 3】(8分)
    过期策略:即 Redis 针对过期的key使用的清除策略,策略为:定期删除+惰性删除。
    1、定期删除:
    Redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定期遍历这个字典来删除到期的 key。Redis默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?你想一想假如 Redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载。
    2、惰性删除:
    所谓惰性策略就是在客户端访问这个 key 的时候,Redis 对 key 的过期时间进行检查,如果过期了就立即删除,不会给你返回任何东西。
    定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 key,才会被 Redis 给删除掉。这就是所谓的惰性删除,即当你主动去查过期的key时,如果发现key过期了,就立即进行删除,不返回任何东西.
    由于 Redis 定期删除是随机抽取检查,不可能扫描清除掉所有过期的key并删除,然后一些key由于未被请求,惰性删除也未触发。这样 Redis 的内存占用会越来越高。此时就需要内存淘汰机制。
    主要有如下一些策略:
    1、volatile-lru:从设置过期时间的数据集中挑选出最近最少使用的数据淘汰。没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失。
    2、volatile-ttl:除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。
    3、volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。当内存达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。
    4、allkeys-lru:从数据集中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。
    5、allkeys-random:从数据集中选择任意数据淘汰。
    6、no-enviction:禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失,这也是系统默认的一种淘汰策略。

试题五 Web应用(质量属性)

阅读以下关于 Web 系统架构设计的叙述, 在答题纸上回答 问题 1问题 3
【说明】
开发基于 Web 的基业设备检测系统,以实现对多种工业数据的分类采集,运行状态检测以及相关信息的管理该系统应具备以下功能:

现场设备状态采集功能,根据数据类型对设备检测指标状态信号进行分类采集,设备采集数据传输功能;
9-11个月可靠的传输技术,实现将设备数据从制造现场传输到系统后台设备检测显示功能;
对设备的运行状态工作以及报警状态进行检测并提供相应的图形化界面设备信息管理功能;
支持设备运行历史状态,报警记录参数信息的查询。

同时,该系统还需满足以下非功能性需求:

(a)系统应支持大于  100 个工业设备的运行检测;
(b)设备数据以制造现场传输到系统后台传输时间小于 1s;
(c)系统应在 7*24 小时工作;
(d)可抵御 XSS 攻击;
(e)系统在故障情况下,应在 0.5 小时内恢复;
(f)支持数据审计。

面对系统需求,公司召开项目讨论会议,制定系统设计方案,最终决定使用三层拓补结构,即现场设备数据采集层、Web检测服务层和前端Web显示层。

【问题  1】(6分)
请按照性能、安全性和可用性三种非功能需求分类将题干的(a)~(f)填入 (1)~(3)  空白处。非功能性需求归类表:

【问题  2】(14分)

该系统 Web 检测服务层拟采用 SSM 框架进行系统研发,SSM 工作流程图如下 图 5-1 所示,请从下面给出的 (a) ~ (k) 中进行选择,补充完善 图 5-1 中 (1) ~(7) 处空白的内容:

(a) Connection pool
(b) Struts2
(c) Persistent Layer
(d) Mybatis
(e) HTTP
(f) MVC
(g) Kafka
(h) View Layer
(i)  Jsp
(j)  Conrtoller Layer
(k) Spring

【问题  3】(5分)
该工业设备检测系统拟采用工业控制领域中统一的数据访问机制,实现与各种不同设备的数据交互,请用 100 以内的文字说明采用标准的数据访问机制的原因。

答案与解析

  • 试题难度:一般
  • 知识点:
  • 试题答案:

    【问题 1】(6分)
    (1)a、b
    (2)d、f
    (3)c、e
    【问题2】(14分)
    (1)a
    (2)c
    (3)d
    (4)k
    (5)j
    (6)h
    (7)i
    【问题 3】(5分)
    通过采用标准的数据访问机制,可以屏蔽不同设备之间数据交互的差异,解决了系统使用数据不一致性,又在一定程度上减低了数据结构与应用系统的耦合度,减少了应用系统的维护的工作量。

  • 试题解析:

    【问题 1】(6分)
    本题考查的是架构设计过程中涉及到的一些质量属性。常用的质量属性包括:
    1、性能
    性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
    2、可靠性
    可靠性(reliability)是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。
    3、可用性
    可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
    4、安全性
    安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可划分为机密性、完整性、不可否认性及可控性等特性。
    5、可修改性
    可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。
    6、易用性
    软件开发工具应有十分友好的用户界面,用户乐于使用;工具应能剪裁和定制,以适应特定用户的需要;工具应能提示用户的交互操作,提供简单有效的执行方式;工具还应能检查用户的操作错误,尽可能自动改正错误。
    【问题 2】(14分)
    Spring 是一个轻量级的企业级应用开发框架,于2004年由 Rod Johnson 发布了1.0 版本,经过多年的更新迭代,已经逐渐成为 Java 开源世界的第一框架,Spring 框架号称 Java EE 应用的一站式解决方案,与各个优秀的 MVC 框架如 SpringMVC、Struts2、JSF 等可以无缝整合,与各个 ORM 框架如 Hibernate、MyBatis、JPA 等也可以无缝衔接,其他各种技术也因为 Spring 的存在而被很容易地整合进项目开发之中,如 Redis 整合、Log4J 整合等等
    SpringMVC 是 Spring 框架体系中的全功能 MVC 模块。SpringMVC 是基于 Java 语言实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架,目的是将 Web 开发模块化及代码简化。其提供了 DispatcherServlet 前端控制器分派请求,同时提供灵活的配置处理程序映射、视图解析,并支持文件上传,目前已经是众多 MVC 框架中的佼佼者。
    MyBatis 的前身是 Apache 社区的一个开源项目 iBatis,于2010年更名为 MyBatis。MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,使得开发人员更加关注 SQL 本身和业务逻辑,不用再去花费时间关注整个复杂的 JDBC 操作过程。
    Spring+spring mvc+mybatis整合的框架组件图如下所示:

参考链接


米家石墨烯智能电暖器电源开关维修

天气渐凉,翻出以前购买的小米 “米家石墨烯智能电暖器”,如下图:

通电测试功能,结果发现开关只能处于导通状态,无法关闭。关机需要直接拔掉插头,安全性没有保障。以前曾经闻到过烧糊的气味,但是功能正常,于是就没有太在意。

今天拆开发现开关的 1号管脚 烧糊了,如下图:

开关烧糊的另一面,如下图:

出问题的原因是 1号管脚 的接头没有卡紧,导致虚接发热,开关过热损坏,绝缘热缩管也都烤糊了,部分导线需要更换。

这部分的问题还是蛮严重的,可能诱发着火问题。小米的品控持续堪忧。

解决方法比较简单,更换一个新的开关模块,并且需要清理烧糊的插头,重新压线。不要复用原来的插头,原来的插头已经受热氧化,即使勉强能用也会由于电阻升高,依旧诱发接头过热。

开关的原始安装位置,开关的灯是向上的,后面安装的时候参考下图即可:

淘宝搜索 “HS9 智米小米取暖器二挡电源开关艾美特电暖器开关大电流船型开关”/ “智米小米1S取暖器开关”/“HUACONN 3脚2挡”,可以找到替代开关。参考商家链接 东莞蓝浩电子

至于已经烧的发黑的连接线,可以在淘宝搜索  “6.3 双头 高温编织线” ,线号选择 1.5平编织线,购买合适颜色的,我这边是白色的,原来的线接头是旗形的,其实内部安装空间足够,非旗型也是可以的。 参考商家链接 东莞市悦泰电子

其他符合如下尺寸的开关也可以进行替换安装:

注意,拆螺丝的时候,有一颗三角形的特殊螺丝,可以使用 2.3MM 的螺丝刀/批头拆卸。恰好家里以前买过一套 “米家精修螺丝刀套装” ,里面的三角批头刚刚合适。

套装如下图: 

没有这个套装的话,可以淘宝搜索 “2.3mm三角螺丝刀”,购买一把即可。

RAV4 2016款 前拖车环(牵引环)锐博软胶前杠配件

最近发现家里的 2016 RAV4 在当时买车时候安装的 WINBO锐搏软胶前杠,驾驶侧的螺栓没有安装,只安装了副驾驶一侧的。副驾驶一侧的前保险杠支架断掉了。

前保险杠如下:

上述的保险杠使用原车的拖车孔位置安装固定螺丝。

首次安装螺丝的时候,可能会由于螺孔脏污,生锈等原因,导致螺丝非常难以拧紧,一般建议先喷一些润滑油,比如 WD40 之类的。再使用原车拖车环拧进去,疏通一下油污,然后拧下拖车环后安装固定螺丝。

断掉的前保险杠支架可以单独在淘宝购买,搜索 “荣放16RAV4前杠支架”,可找到如下图所示的支架:

至于前保险杠支架的安装螺丝,可找使用到如下图所示的直径 24MM 内六角 螺距 2MM 全螺纹 50MM长螺丝替代,如下图:

这颗螺丝使用 19MM 的内六角扳手进行安装。

VNC Viewer记住密码功能失效的解决办法

使用 VNC Viewer 的时候可能会遇到记住密码功能失效的问题,每次登录都需要重新输入密码,该怎么解决呢?

这个问题发生的原因是由于系统升级/新旧电脑数据迁移之后,  VNC Viewer 存储在本地的密码密钥丢失。没办法在进行加解密,而以前残存的损坏的密码文件,又恰好阻挡了新密码的写入。

这个问题在 macOS 系统上更加严重,密钥是不允许跨设备传输的,导致迁移的时候,加密文件能迁移成功,但是数据解密不出来。

最简单的办法就是直接删除之前的密码存储文件,对于 macOS 来说,可以执行:

对于 Windows 来说

当然也可以参考官网提供的解决方法:

两者的方案原理是一致的,都是强制重建已经存在的密码存储文件。

翻译过来就是:

在 VNC 查看器 > 首选项 > 隐私中,请勾选“使用主密码保护 VNC 查看器”,设置密码,然后单击应用,确定。

完成此操作后,重新打开首选项并取消选中“使用主密码保护 VNC 查看器”并重试连接。

继续阅读VNC Viewer记住密码功能失效的解决办法

如何修复 Ubuntu 上的 Busybox Initramfs 错误

本简短指南介绍了如何修复 Ubuntu Linux 上的 Busybox Initramfs 错误。我使用 Ubuntu 24.04 LTS 作为我的 Dell Inspiron 笔记本电脑上的日常驱动程序。今天我将其打开,启动过程将我带到 BusyBox shell,最后出现 initramfs 提示符。

据我所知,我没有做错任何事。我没有强行关闭系统电源。昨天还运行得很好!然而,今天当我开机时,在启动过程中遇到了意想不到的问题。我发现自己没有正常加载,而是重定向到 BusyBox shell,并最终到达 initramfs 提示符。

我无法跳过这个屏幕。而且它也没有显示问题到底是什么。我所看到的只是一个空白的 Busybox shell

我此时不知道该怎么办。所以我只是通过 exit 命令来看看会发生什么。

然后我看到了实际的错误:

Ubuntu 上的 Busybox Initramfs 错误
Ubuntu 上的 Busybox Initramfs 错误

正如您在上面的输出中看到的,/dev/sda1 分区已损坏。该分区中的文件系统有一些错误。

如果您遇到过此类问题,则需要使用 fsck 命令检查并修复有问题的 Linux 文件系统。

请注意,有时输入 exit 命令后您不会看到任何错误。在这种情况下,请尝试在所有文件系统上运行 fsck

什么是 Busybox 和 Initramfs?

对于那些想知道的人来说,BusyBox 是一个软件套件,它在一个小型可执行文件中提供了许多常见的 UNIX 实用程序。它提供了您通常在 GNU fileutilsshellutils 等中找到的大多数实用程序的替代品。

Initramfs是一个基于 tmpfs 的初始ram文件系统。它包含在调用实际根文件系统上的 init 二进制文件之前挂载文件系统所需的工具和脚本。

修复 Ubuntu Linux 上的 Busybox Initramfs 错误

1. 要解决 Ubuntu Linux 上的 initramfs 错误,您需要使用 fsck 修复损坏分区中的文件系统 命令如下:

将 /dev/sda1 替换为您的分区名称。在您的系统中,它可能是 /dev/sdb1/dev/sdc1 等。您可以使用 cat /proc/partitions 或 blkid 或 lsblk 命令来获取 Busybox 中的 Linux 分区详细信息。请参阅本指南列出 Linux 中的磁盘分区。不要忘记传递 -y 标志。否则,您应该手动键入 -y 并每次按 ENTER 键来修复错误。

2. 现在,fsck 命令将开始自动修复文件系统中的所有坏块。

几分钟后,您将看到如下输出:

3. 接下来,输入 reboot 并按 ENTER 重新启动系统!

修复 Ubuntu Linux 上的 Busybox Initramfs 错误
修复 Ubuntu Linux 上的 Busybox Initramfs 错误

如果 reboot 命令不起作用,请输入 exit 并按 ENTER

交叉手指并等待系统重新启动!如果一切顺利,您的系统将正常启动,没有任何问题。

这些步骤帮助我和其他许多人解决了 Ubuntu Linux 操作系统上的 Busybox Initramfs 错误。如果您陷入 initramfs 提示符,本指南肯定会帮助您修复 Ubuntu 中的 initramfs 错误。

注意:如果您经常收到此错误,则可能是您的硬盘变得越来越弱。遇到这种情况,建议尽快备份数据并更换硬盘。

这不仅仅适用于 Ubuntu 操作系统。 initramfs 错误可能发生在 Debian 和其他 Ubuntu 衍生产品(例如 Pop OS、Linux mint 等)上。为了修复基于 Debian 的系统中的 initramfs 错误,只需按照上述步骤操作即可。

参考链接


如何修复 Ubuntu 上的 Busybox Initramfs 错误

實測 Raspberry Pi 5 上的 SD 卡效能

在 Raspberry Pi 5 使用高速的 SD 卡有用嗎? 我們實測 Raspberry Pi 5 上的 SD 卡效能,發現使用同一張 SD 卡可以在 Raspberry Pi 5 有更高的效能,可實際發揮 UHS-I SDR104 的速度。

要順暢的使用 Raspberry Pi,SD 卡(或稱 microSD 卡)是重要的組件。因為 SD 卡的速度會直接影響 Raspberry Pi 的運作速度,就像硬碟的速度影響傳統桌上型電腦的運作速度一樣。從 SD 卡中讀取資料的速度越快,Raspberry Pi 的啟動速度就越快,程式的載入速度就越快。同樣,寫入速度也會影響保存大量資料的程式的運作效果,因此使用高速的 SD 卡非常重要。

SD 卡科普

SD 卡的速度等級會印在卡片本身或包裝上。下圖所示的 32GB 卡屬於 Class 4,以字母 C 內的 4 表示——這表示它的寫入速度為 4MB/s。

圖片來源:Raspberry Pi SD Card Speed Test
圖片來源:Raspberry Pi SD Card Speed Test

下面顯示的 64GB 卡屬於 Class 10,因此可以用 10MB/s 的速度寫入。上頭顯示的 UHS(Ultra High Speed) Class 1 的標誌,字母 U 裡面的 1,對應著相同的速度。

圖片來源:Raspberry Pi SD Card Speed Test
圖片來源:Raspberry Pi SD Card Speed Test

效能標示

表格來源:SD卡
表格來源:SD卡

A2 等級 SD 卡,最低隨機讀取(Random Read Speed)要達到 4000 IOPS,最低隨機寫入(Random Write Speed)要達到 2000 IOPS

速度標示

表格來源: SD卡
表格來源:SD卡

例如標示 UHS-I SDR104 要能達到 104MB/s 的總線速度(Bus speed)。

表格來源:SD卡
表格來源:SD卡

而最低寫入速度為 30 MB/s 的話,可以在 UHS Speed Class 標示為 Class 3 (U3),在 Video Speed Class 標示為 Class 30 (V30),表示可以順暢的播放 4K 影片 60/120 fps (UHS)。

因為 Raspberry Pi 5 升級了 SD Controller,因此可支援 SD 卡 的 SDR104 高速模式。

Raspberry Pi 上的 SD 卡效能測試工具

自從 2020-05-27 Raspberry Pi OS 釋出後就新增了多種應用程式,例如內建 Raspberry Pi Diagnostics 功能可以診斷各種硬體資源,第一個工具就是 SD 卡效能檢測(SD Card Speed Test)。

SD Card Speed Test 操作方法

SD Card Speed Test 解讀

  • 操作過程將每秒隨機寫入操作 500 次,每秒隨機讀取操作 1500 次。
  • IOPS(Input/Output Operations Per Second)是一個用於電腦儲存裝置效能測試的量測方式,表示每寫寫入/讀取次數。
  • 如果將 IOPS 乘以 Transfer Size in Bytes 可計算出每秒可讀寫的頻寬(單位 MB/s)
  • 本例的循序寫入速度(Sequential Write Speed)為 42390 KB/sec,超過 12MB/s 標準。
  • 本例的隨機寫入速度(Random Write Speed)為 2109 IOPS,超過 2000 IOPS 標準。
  • 本例的隨機讀取速度(Random Read Speed)為 4755 IOPS,超過 4000 IOPS 標準。
  • 日誌檔預設會用 rpdiags.txt 檔名存放在家目錄。

實測 Raspberry Pi 5 上的 SD 卡效能

測試環境
測試結果

從左上、右上、左下、右下依序為 Raspberry Pi 5、Pi 4、Pi 3B+、Pi 3B(圖片來源:PiePie 台灣樹莓派)
從左上、右上、左下、右下依序為 Raspberry Pi 5、Pi 4Pi 3B+Pi 3B(圖片來源:PiePie 台灣樹莓派

上圖是使用同一張 microSDXC UHS-I(V30)(A2) 64GB 記憶卡使用 SD Card Speed Test 在 Raspberry Pi 不同主板上的執行結果。下方圖表可清楚看到在 Raspberry Pi 5Pi 4Pi 3B+Pi 3BZero 2 上執行,Raspberry Pi 5 上的 SD 卡效能 可以發揮的更好!

SD Card Speed Test 在不同 Raspberry Pi 主板上的執行結果(表格來源:PiePie 台灣樹莓派)
SD Card Speed Test 在不同 Raspberry Pi 主板上的執行結果(表格來源:PiePie 台灣樹莓派

備註:64-bit OS 只支援 Pi 3B 和 Zero 2 以上版本。

参考链接


【教學/基礎】實測 Raspberry Pi 5 上的 SD 卡效能

Raspberry Pi 携手江波龙,推出自有品牌 A2 认证 MicroSD 存储卡

Raspberry Pi 当地时间昨日(2024/10/08)新闻博客,树莓派官方宣布推出自有品牌 MicroSD 存储卡,包含 32GB、64GB 和 128GB 三种容量,旨在 Raspberry Pi 生态用户提供高性价比选择

Raspberry Pi 携手江波龙,推出自有品牌 A2 认证 microSD 存储卡

Raspberry Pi SD Card 符合 SD 6.1 规范,可在 -25℃~+85℃ 下工作,拥有 C10、U3、V30 速度等级认证,在搭配 Raspberry Pi 5、使用 SDR104 总线速度模式时随机 4K 读写性能分别可达 5000 \ 2000 IOPS。

Raspberry Pi 官方表示,其在对可提升随机 I/O 吞吐性能的 SD 存储卡命令队列(CQ)模式进行兼容性验证时发现,部分第三方 A2 应用程序性能等级存储卡并未良好实现 CQ 模式,这成为 Raspberry Pi 推出第一方 A2 速度等级存储卡的动机。

Raspberry Pi 最终选择江波龙为第一方“经济高效”存储卡的 OEM 合伙伙伴。江波龙生产的这批存储卡通过了在重 I/O 负载下意外断电 1 万次的稳健性测试,并针对 Raspberry Pi 5 进行了优化。

Raspberry Pi SD Card 存储卡 32GB 款在合作伙伴处售价 9.95 美元(备注:当前约 70.1 元人民币),64GB 款则为 11.95 美元(当前约 84.2 元人民币)。

Raspberry Pi 本次还为 Raspberry Pi 5 推出了定价 3 美元(当前约 21.1 元人民币)的 Bumper 卡扣式硅胶底座,可保护单板计算机的底部和边缘。

参考链接


软考系列(系统架构师)- 2021年系统架构师软考案例分析考点

试题一 软件架构(架构风格、质量属性)

阅读以下关于软件架构设计与评估的叙述,在答题纸上回答问题1 和问题2。

【说明】

某公司拟开发-套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。
该评台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程,采用自助方式进行智能应用设计、实现与部署,并可以开发新算法组件加入平台中。在需求分析与架构设计阶段,公司提出的需求和质量属性描述如下:

  1. 平台用户分为算法工程师、软件工程师和管理员等三种角色,不同角色的功能界面有所不同;
  2. 平台应该具备数据库保护措施,能够预防核心数据库被非授权用户访问;
  3. 平台支持分布式部署,当主站点断电后,应在20 秒内将请求重定向到备用站点;
  4. 平台支持初学者和高级用户两种界面操作模式,用户可以根据自己的情况灵活选择合适的模式;
  5. 平台主站点宕机后,需要在15 秒内发现错误并启用备用系统;
  6. 在正常负载情况下,机器学习流程从提交到开始执行,时间间隔不大于5 秒;
  7. 平台支持硬件扩容与升级,能够在3 人天内完成所有部署与测试工作;
  8. 平台需要对用户的所有操作过程进行详细记录,便于审计工作;
  9. 平台部署后,针对界面风格的修改需要在3 人天内完成;
  10. 在正常负载情况下,平台应在0.5 秒内对用户的界面操作请求进行响应;
  11. 平台应该与目前国内外主流的机器学习应用开发平台的界面风格保持一致;
  12. 平台提供机器学习算法的远程调试功能,支持算法工程师进行远程调试。

在对平台需求、质量属性描述和架构特性进行分析的基础上,公司的架构师给出了三种候选的架构设计方案,公司目前正在组织相关专家对平台架构进行评估。

问题:1.1    (9分)
在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。 请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题干中的(a)-(i)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台的效用树。

图1-1 质量属性效用树
图1-1


问题:1.2    (16分)
针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道过滤器(pipe-and-filter)的架构风格,王工则建议采用隐式调用(implicit invocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适合采用哪种架构风格。

【问题1】(9分)

在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。 请将合适的质量属性名称填入图1-1中(1)、(2)空白处,并从题干中的(a)-(i)中选择合适的质量属性描述,填入(3)-(6)空白处,完成该平台的效用树。

图1-1
图1-1

【问题2】(16分)
针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道过滤器(pipe-and-filter)的架构风格,王工则建议采用隐式调用(implicit invocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适合采用哪种架构风格。

试题二 系统开发(用例图、顺序图填空、模型对比)

某医院拟委托软件公司开发一套预约挂号管理系统,以便为患者提供更好的就医体验,为医院提供更加科学的预约管理。本系统的主要功能描述如下:
(a)注册登录,(b)信息浏览,(c)账号管理,(d)预约挂号,(e)查询与取消预约,(f)号源管理,(g)报告查询,(h)预约管理,(i)报表管理和(j)信用管理等。

问题:3.1    (6 分)
若采用面向对象方法对预约挂号管理系统进行分析,得到如图2-1所示的用例图。请将合适的参与者名称填入图2-1中的(1)和(2)处,使用题干给出的功能描述(a)~(j),完善用例(3)~(12)的名称,将正确答案填在答题纸上。

图2-1 用例图
图2-1


问题:3.2    (10分)
预约人员(患者)登录系统后发起预约挂号请求,进入预约界面。进行预约挂号时使用数据库访问类获取医生的相关信息,在数据库中调用医生列表,并调取医生出诊时段表,将医生出诊时段反馈到预约界面,并显示给预约人员;预约人员选择医生及就诊时间后确认预约,系统反馈预约结果,并向用户显示是否预约成功。
采用面向对象方法对预约挂号过程进行分析,得到如图2-2所示的顺序图,使用题干中给出的描述,完善图2-2中对象(1),及消息(2)~(4)的名称,将正确答案填在答题纸上,请简要说明在描述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。
图2-2 顺序图
图2-2


问题:3.3   (9分)
采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

(1)系统管理员 (2)患者 (3)(a)注册登录 (4)(c)账号管理 (5)(f)号源管理 (6)(h)预约管理 (7)(i)报表管理 (8)(j)信用管理号(4)~(8)答案可以互换 (9)(b)信息浏览 (10)(d)预约挂号 (11)(e)查询与取消预约 (12)(g)报告查询(9)~(12)答案可以互换

(1)预约人员(患者) (2)预约挂号请求 (3)显示医生可预约时段 (4)显示预约是否成功

顺序图强调的是消息的时间次序。
协作图强调的是发送和接收消息的对象之间的组织结构。

【问题3】(9分)
采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?

试题三 嵌入式

阅读以下关于嵌入式数据架构设计的相关描述,回答问题1至问题3。
【说明】
数据架构(Data architecture)是系统架构设计的主要工作之一。它主要用于描述业务数据以及数据间的关系。数据架构着重考虑“数据需求”,关注的是持久化数据的组织。数据架构的设计过程主要包括:数据定义、数据分布与数据管理。某公司为了适应宇航装备的持续发展,提升本公司的核心竞争力,改变原来事件驱动的架构设计模式。公司领导将新产品架构规划工作交给张工。张工经过分析、调研给出了本企业宇航产品的未来架构规划方案。

【问题1】(9分)
张工在规划方案中指出:宇航装备要实现以数据为中心的架构设计模式,就应改变传统的各个子系统独立的设计方式,打破原宇航装备的生产关系。为了达到这个目标,我们首先要解决装备数据的共享、管理和存储等问题,做好顶层的数据架构规划工作。请用 300 字以内的文字说明数据定义、数据分布与数据管理的具体内涵。
【问题2】(7分)
张工在规划方案中提出公司未来产品设计要遵从一种开放式的架构体系,并在此基础上完善数据架构的设计工作,形成一套规格化的数据模型语言。张工给出了基于 FACE(Future Airborne Capability Environment) 架构的新产品架构,其中,图 3-1 说明了数据模型语言在架构模型中的作用。

图3-1 数据模型语言在架构模型中的作用

请根据你所掌握的数据架构的相关知识,从以下a~g中进行选择,填充完善 图 3-1 中的(1)~(7)空。
a.数据模型定义
b.平台数据模型(PDM)
c.UoP(Unit of Portability)数据模型(UM)
d.提炼
e.传输定义
f.代码和配置
g.概念数据模型(CDM)
【问题3】(9分)
“数据需求”是数据架构设计中需要着重考虑的问题。在张工给出的基于FACE架构的新产品架构中,分别就架构中的各个部分逐条给出了需求项。请判断 表3-1 给出的 9 项需求是否属于数据需求。

表 3-1 张工给出的需求项

试题四 数据库(反规范化设计方法、数据不一致、Redis 同步)

某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis)的混合架构实现。
经过规范化设计之后,该系统的部分数据库表结构如下所示。

供应商(供应商ID,供应商名称,联系方式,供应商地址);
药品(药品ID,药品名称,药品型号,药品价格,供应商ID);
药品库存(药品ID,当前库存数量);
订单(订单号码,药品ID,供应商ID,药品数量,订单金额)。

问题:2.1    (9分)
在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系表过于细分,造成了大量的多表关联查询,影响了性能。例如当用户查询商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。
为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查询性能。修改后的药品关系结构为:
药品(药品ID,药品名称,药品型号,药品价格,供应商ID,供应商名称,当前库存数量);
请用 200 字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信息应该采用哪种反规范化设计方法。

问题:2.2    (9分)
王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用 200 字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。

问题:2.3    (7分)
该系统采用了 Redis 来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成 Redis 和 MySQL 的数据实时同步问题。
(1) Redis的数据类型包括 String、 Hash、 List、 Set和 ZSet 等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。


【问题2】(9分)
王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。

【问题3】(7分)
该系统采用了Redis来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成Redis和MySQL的数据实时同步问题。
(1) Redis的数据类型包括String、 Hash、 List、 Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。

试题五 Web应用(云平台智能家居,看图填空,TCP/UDP 区别)

某公司拟开发一个智能家居管理系统,该系统的主要功能需求如下:

1)用户可使用该系统客户端实现对家居设备的控制,且家居设备可向客户端反馈实时状态;
2)支持家居设备数据的实时存储和查询;
3)基于用户数据,挖掘用户生活习惯,向用户提供家居设备智能化使用建议。

基于上述需求,该公司组建了项目组,在项目会议上,张工给出了基于家庭网关的传统智能家居管理系统的设计思路,李工给出了基于云平台的智能家居系统的设计思路。经过深入讨论,公司决定采用李工的设计思路。

问题:4.1    (8分)
请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。

问题:4.2    (12分)
请从下面给出的(a) ~ (j) 中进行选择,补充完善 图  5-1 中空 (1) ~ (6) 处的内容,协助李工完成该系统的架构设计方案。

(a) Wi-Fi
(b) 蓝牙
(c)驱动程序
(d)数据库
(e)家庭网关
(f)云平台
(g)微服务
(h)用户终端
(i)鸿蒙
(j)TCP/IP

图5-1 系统架构设计方案
图 5-1

问题:4.3    (5分)
该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。

【问题1】(8分)
请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。

【问题3】(5分)
该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。

参考链接


Raspberry Pi 配置成不间断电源 UPS 服务器

UPS (Uninterruptible Power Supply),是一种含有储能装置的不间断电源。主要用于给部分对电源稳定性要求较高的设备,提供不间断的电源。

一般的 UPS 都支持通过 USB 连接到电脑或者 NAS 等设备上,Linux/Mac/Windows 均支持使用 UPS。

因为电路不稳定,存在偶尔断电的情况,因此希望通过 UPS 保护树莓派、路由器、光猫、硬盘录像机等设备;将 UPS 通过 USB 接口连接到树莓派,由树莓派控制其他设备在断电时关机。

当前主要有两个方案,一个是 NUT(Network UPS Tools)  另一个是使用 apcupsd (Apcupsd UPS control software),两者二选一即可。

如果是群晖,可能只有使用 NUT(Network UPS Tools)  ,如果使用 U-NAS 可能只能使用  apcupsd (Apcupsd UPS control software)。

从配置简便性上,推荐  apcupsd (Apcupsd UPS control software)。

apcupsd 配置

图 1 施奈德后备式UPS电源APC BK650M2。
图 1 施奈德后备式UPS电源APC BK650M2。

虽然施奈德官方提供的 PowerChute 软件只支持 Windows 系统,但 Linux 下亦有 apcupsd 可以使用。该软件以守护进程的方式运行,通过串行数据通信的方式(串口或 USB )实时获取 UPS 电源信息,包括当前外部输入电压、负载功率、电池电量等。当电池电量低于指定值时,会自动运行脚本程序 /etc/apcupsd/apccontrol ,以实现电脑系统的自动关闭或任何用户指定的操作。

把 UPS 电源与电脑连好后,根据 apcupsd说明文档,我们首先使用 lsusb 命令检查 Linux 系统是否能检测到已连接的 UPS 电源。

确认能够找到设备后。

安装:

编辑 apcupsd 的配置文件 /etc/apcupsd/apcupsd.conf,将其中 UPSCABLEUPSTYPE 两项均设为 usb

因为台式机与 UPS 电源之间是通过 USB 通讯的,所以需要注释掉配置文件中的串口设置部分:

将 NISIP 值设为 0.0.0.0 或你想绑定的指定主机 IP

其余保持默认即可。

至此,可以启动 apcupsd 系统服务了。

该服务启动后,除了正常的 UPS 电源实时监测外,还会在本机的端口上开启一个服务器。我们可以在命令行终端使用apcaccess命令来获得电源的运行状态。其中的主要参数为:

  • LINEV:线电压

  • LOADPCT:负载占比

  • TIMELEFT:电池剩余维持时间

  • LOTRANS:最低容许输入电压

  • HITRANS:最高容许输入电压

  • BATTV:电池输出电压

  • NOMPOWER:额定功率

客户端配置:

安装:

打开 apcupsd 配置文件 /etc/apcupsd/apcupsd.conf

  • 将 UPSCABLE 值设为 ether
  • 将 UPSTYPE 值设为 net
  • 将 DEVICE 值设为你的 apcupsd 服务端地址和端口(也就是和 UPS 以 USB 相连接的主机)

与 NIS 相关的设置保持默认(也就是保持 NETSERVER 为 on

启动 apcupsd 服务,输入 apcaccess 命令,你应该能看到 apcupsd 输出电源信息。

NUT 配置

安装 NUT

NUT (Network UPS Tools) 是一种开源软件工具,其主要功能特点是实时监控与管理不间断电源(UPS)设备,支持多种通信协议,自动执行操作以应对电力故障,适用于多平台,并允许集中管理多个UPS设备,以确保与这些设备连接的计算机和设备在电力问题发生时能够继续正常运行或安全关闭。

NUT中的主要软件组件和功能:

  • Driver(驱动程序):NUT包括各种不同制造商的UPS设备的驱动程序,使NUT能够与多种型号的UPS设备通信。这些驱动程序负责与UPS设备建立连接,并获取有关电源状态、电池状态和其他参数的信息。

  • upsd(UPS守护进程):upsd是NUT的核心守护进程,负责与UPS设备通信,并将UPS状态信息提供给其他NUT组件和客户端。它可以通过网络协议(如SNMP、HTTP、XML-RPC等)向其他计算机提供UPS状态信息。

  • upsmon(UPS监控守护进程):upsmon监控守护进程用于监视UPS状态,并在检测到电力问题时执行操作。它可以配置为执行自定义脚本、关闭计算机或发送警报通知,以确保系统的连续性和数据完整性。

  • upslog(UPS事件记录器):upslog用于记录UPS事件和状态信息,以便后续分析和故障排除。它可以生成日志文件,其中包含UPS的运行历史和电力事件。

  • nutclient(NUT客户端工具):NUT提供了一些用于监控和管理UPS的命令行工具,例如upsc用于查询UPS状态,upscmd用于发送命令到UPS,以及upsrw用于修改UPS配置。

  • 安装

通过 USB 连接 UPS

在将 UPS 通过 USB 连接到树莓派后,可以通过查看 USB 设备进行检查

  • 检查 USB 连接

其中的 Device 003 就是 UPS,说明 USB 连接正常

  • 通过 nut-scanner 检查 UPS 设备

正确识别到连接的 UPS 设备,驱动为 usbhid-ups,产品为 SANTAK TG-BOX

或者如下:

配置 UPS

###配置 UPS 驱动

驱动程序负责与UPS设备建立连接,并获取有关电源状态、电池状态和其他参数的信息

  • 将 UPS 设备添加到 NUT

使用 nut-scanner 将连接的 UPS 信息追加到 /etc/nut/ups.conf 配置中,其中的 nutdev1 是设备的名称,可以自定义

  • 启动 NUT

使用 upsdrvctl 命令启动 NUT

配置 UPS 守护进程

upsd 负责与UPS设备通信,并将UPS状态信息提供给其他NUT组件和客户端

  • 启动 upsd

查看 UPS 状态

使用 upsc 命令查看 UPS 设备的状态;其中的 nutdev1 是 /etc/nut/ups.conf 中配置的名称

该命令会返回 UPS 设备的所有信息

也可以指定名称查看 UPS 状态

配置关机策略

配置 upsd 用户

upsd 用户对应的配置文件是 /etc/nut/upsd.users,配置用户用于读取 UPS的信息;在以下配置中,用户名是 upsmon,密码是 123456,运行模式是 master,即该设备为主节点(如果有同时使用其他 UPS则可以是 slave

  • 重启 upsd

配置关机策略

关机策略使用的是 upsmon,upsmon 监控守护进程用于监视UPS状态,并在检测到电力问题时执行操作,它可以配置为执行自定义脚本、关闭计算机或发送警报通知

  • 配置关机策略

修改 /etc/nut/upsmon.conf,添加如下配置,使用的是刚才创建的用户信息,这样,当设备监听到 UPS 发出的 LOWBATT 命令后,就会执行关闭系统

这个命令告诉NUT要监控名为 “ups” 的UPS设备,该设备位于本地主机上。监控用户 “monuser”,可以使用密码 “123456” 连接到NUT,并具有 “master” 角色的权限。这允许用户通过NUT连接来监视和管理UPS设备

  • 启动 upsmon

执行自定义动作

NUT 通过 upssched 支持监听 UPS 事件并执行指定脚本,因此可以用于执行一些自定义的动作,如发送通知等

配置 upsmon

修改 /etc/nut/upsmon.conf 文件,添加如下配置

  • 指定运行命令

该配置用于在发生事件时运行 /sbin/upssched 服务

  • 配置触发条件

这里监听了 ONLINEONBATT, 和 LOWBATT三个事件,分别是电源供电、电池供电和低电量事件;SYSLOG声明记录事件日志到系统中,WALL声明通知所有在线用户,EXEC 声明需要执行命令

配置 upssched

配置好 upsmon 后,还需要配置 upssched 执行相关的命令,需要将以下内容添加到 /etc/nut/upssched.conf 中

  • 配置 upsmon

CMDSCRIPT 指定了监听到事件后需要执行的脚本 PIPEFNLOCKFN指定了监听事件的管道并加锁,避免被修改 AT 和 EXECUTE 指定了监听的事件并执行相关的脚本;当监听到 ONBATTONLINE 和 LOWBATT 时执行 CMDSCRIPT指定的脚本,并将 battery_onpower_online 和 low_battery作为参数 AT 和 START-TIMER 启动了一个计时器,在 60s 后执行 AT 和 CANCEL-TIMER 指定如果在启动计时器60s 内发生了 ONLINE事件,则取消计时器

  • 配置 upssched-script.sh

这段脚本用于接收事件,并执行动作;这里通过 Bark 发送了通知

记录 UPS 日志

ups 支持通过 upslog 记录 UPS 日志

这段命令中,通过 -l指定了输出文件为 /var/log/ups.log-i 1 表示1s输出一次,-s ups@localhost指定了 UPS 位置,-f 指定了日志输出格式

输出日志参考:

配置 UPS 监控

NUT 支持通过 HTTP 接口对外提供 UPS 的信息,因此可以用于监控 UPS; https://github.com/helloworlde/nut_exporter 提供了 Prometheus Exporter,可以使用 Prometheus 和 Grafana 对 UPS 进行监控

修改 NUT 运行模式

配置文件是 /etc/nut/nut.conf;将模式修改为 netserver的目的是允许通过局域网访问 UPS 的设备信息,用于其他设备监控、监听 UPS 的状态;如果不需要监听则不需要配置

配置 upsd

修改 upsd 对应的配置文件 /etc/nut/upsd.conf,添加监听的地址和端口;添加局域网 IP 是用于局域网内其他设备进行监控,否则可能会拒绝连接

  • 重启 upsd

配置 NUT Exporter
  • 配置 docker-compose.yaml

  • 配置 .env

Server 的地址即为树莓派局域网的IP地址,用户名和密码是 upsd 的用户和密码;NUT_EXPORTER_VARIABLES是需要抓取的监控指标类型,不同的设备可能指标不一样;可以通过 upsc ups@localhost 获取所有的指标名称进行替换

  • 配置 Prometheus

  • 配置 Grafana 面板

导入 https://github.com/helloworlde/nut_exporter/blob/master/dashboard/dashboard.json 即可

参考链接


ZipCrypto算法回顾

ZipCrypto,也称为 PKZIP Stream Cipher,是一种弱加密手段,在1994年就已经被攻破,该加密方式不能经受已知明文攻击(Known Plaintext Attack,KPA)。

明文攻击主要利用大于 12 字节的一段已知明文数据进行攻击,从而获取整个加密文档的数据。也就是说,如果手里有一个未知密码的压缩包和压缩包内某个文件的一部分明文(不一定非要从头开始,能确定偏移就行),那么就可以通过这种攻击来解开整个压缩包。比如压缩包里有一个常见的 license 文件,或者是某个常用的 dll 库,或者是带有固定头部的文件(比如 xml、exe、png 等容易推导出原始内容的文件),那么就可以运用这种攻击。

Biham和Kocher文中回顾了PKZIP Stream Cipher加密解密过程。

原始论文链接: A Known Plaintext Attack on the PKZIP Stream Cipher

本站链接: A Known Plaintext Attack on the PKZIP Stream Cipher

首先,文件压缩后形成压缩包,PKZIP在压缩包中每个文件头部加上12字节的文件头,用于随机化,也用于在解密时识别错误的密钥,然后该文件头和文件内容一起进行加密。

加密过程如下:

  • 首先初始化,key为用户输入的二进制的密钥序列。key0,key1,key2为三个全局变量,在加/解密每个字节时都会用到。小写L表示第L个字节

Update_keys()函数定义如下,输入为一个字节。

  • 然后就是加文件头,开始加密。Pi代表明文第i字节

解密过程如下:

  • 首先初始化,和加密过程初始化完全相同
  • 然后解密,Ci代表加密的内容。解密后P1-P12是文件头,仅留作校验,解密后不再需要

附上一段代码,实现PKZIP解密,加密类似。

总结:PKZIP Stream Cipher是一种按照文件顺序、逐个字节进行加密/解密的算法。实际使用中,还需要注意到每遇到一个压缩包内的文件,就会从头进行一遍加密/解密过程。实现一个已知密钥zip archive的解密还需要了解ZIP格式等问题,这里就不再赘述了。

参考链接