一、[材料型]问答题
试题一(共25分)
阅读以下关于软件架构设计与评估的叙述,在答题纸上回答问题 1和问题 2。
【说明】
某公司拟开发一套机器学习应用开发平台,支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程,采用自助方式进行智能应用设计、实现与部署,并可以开发新算法组件加入平台中。在需求分析与架构设计阶段,公司提出的需求和质量属性描述如下:
(a) 平台用户分为算法工程师、软件工程师和管理员等三种角色,不同角色的功能界面有所不同:
(b)平台应该具备数据库保护措施,能够预防核心数据库被非授权用户访问:
(c)平台支持分布式部署,当主站点断电后,应在 20 秒内将请求重定向到备用站点;
(d)平台支持初学者和高级用户两种界面操作模式,用户可以根据自己的情况灵活选择合适的模式:
(e)平台主站点宕机后,需要在 15 秒内发现错误并启用备用系统;
(f)在正常负载情况下,机器学习流程从提交到开始执行,时间间隔不大于5秒;
(g)平台支持硬件扩容与升级,能够在3人天内完成所有部署与测试工作;
(h)平台需要对用户的所有操作过程进行详细记录,便于审计工作;
(i)平台部署后,针对界面风格的修改需要在 3 人天内完成:
(j)在正常负载情况下,平台应在 0.5 秒内对用户的界面操作请求进行响应;
(k)平台应该与目前国内外主流的机器学习应用开发平台的界面风格保持一致;
(l)平台提供机器学习算法的远程调试功能,支持算法工程师进行远程调试。
在对平台需求、质量属性描述和架构特性进行分析的基础上,公司的架构师给出了三种候选的架构设计方案,公司目前正在组织相关专家对平台架构进行评估。
1、【问题 1】(9分)
在架构评估过程中,质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。请将合适的质量属性名称域入图1-1中(1)、(2)空白处,并从题干中的(a)~(I)中选择合适的质量属性描述,填入(3)~(6)空白处,完成该平台的效用树。
参考答案:(1)性能
(2)可修改性
(3)e
(4)j
(5)h
(6)i
解析:
本题考查的是对软件架构设计与评估中质量属性的理解和应用。质量属性效用树是一个用于识别和确定系统质量属性优先级的重要工具。针对本题中给出的平台需求和场景,我们需要将合适的质量属性名称和描述填入效用树中。
对于本题中的机器学习应用开发平台,其关键的质量属性包括:(1)安全性:保证平台的数据安全和防止未经授权的访问,对应题干中的描述(b)。(2)可维护性:指平台在需要修改或升级时的便捷程度,对应题干中的描述(i)(关于界面风格的修改)和(g)(支持硬件扩容与升级)。因此,填入效用树空白处的质量属性名称应为“安全性”和“可维护性”。
至于效用树的第三到第六个空白处,我们需要从题干中的描述中选择对应的质量属性描述。描述(b)对应了效用树中的第一个空白处,即安全性;描述(j)对应了效用树中的第四个空白处,即性能;描述(h)对应了第五个空白处,即审计追踪能力;描述(i)对应了第六个空白处,即可维护性中关于界面风格修改的部分。
2、【问题2】(16分)
针对该系统的功能,赵工建议采用解释器(interpreter)架构风格,李工建议采用管道-过滤器(ppe-and-hlter)的架构风格,王工则建议采用隐式调用(implicit invocation)架构风格。请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析,并指出该平台更适合采用哪种架构风格。
参考答案:
管道-过滤器风格具备高内聚低耦合、支持软件重用、扩展性好、支持并发等优点,但它有编写复杂、不适合处理交互应用等缺点;
隐式调用基于事件触发思想,具备支持软件重用、改进系统方便等优点,但它有构件放弃了对系统计算的控制、事件传递中的数据交换存在问题、语义依赖于被触发事件的上下文约束等缺点。
解释器通常包括解释引擎、代码存储区、记录解释引擎当前工作状态的数据结构、记录源代码被解释执行进度的数据结构。它含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率比较低。优点:语法由很多类(每个规则对应一个类)表示, 容易改变及扩展;缺点:如果语法规则数量太多,会增加系统复杂度,性能下降。
本题中,由于需要交互操作,显然管道-过滤器风格不合适;基于事件触发的隐式调用风格也不合适;只有解释器风格通过灵活自定义规则,具备较强的灵活性和可扩展性,适合本题中的机器学习应用。
解析:
本题要求针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格进行对比与分析。管道-过滤器风格虽然扩展性好,但不适合处理交互应用;隐式调用风格在事件驱动下有其优点,但在系统计算和事件数据交换上存在一定问题;而解释器风格通过灵活自定义规则和扩展语法规则,既可以满足用户通过拖拽定义机器学习流程的需求,也可以方便地添加和修改算法组件。因此,综合考虑,解释器风格更适合该平台的核心应用场景。
试题二(共 25分)
阅读以下关于软件系统设计与建模的叙述,在答题纸上回答问题 1 至问题 3.
【说明】
某医院拟委托软件公司开发一套预约挂号管理系统,以便为患者提供更好的就医体验,为医院提供更加科学的预约管理。本系统的主要功能描述如下:(a)注册登录,(b)信息浏览,(c)账号管理,(d)预约挂号,(e)查询与取消预约,(F)号源管理,(g)报告查询,(h)预约管理,(i)报表管理和(j)信用管理等。
3、【问题 1】(6 分)
若采用面向对象方法对预约挂号管理系统进行分析,得到如图 2-1 所示的用例图。请将合适的参与者名称填入图 2-1中的(1)和(2)处,使用题干给出的功能描述(a)~(j),完善用例(3)~(12)的名称,将正确答案填在答题纸上。
参考答案:
(1)患者(预约人员),(2) 医院管理人员,(3) a
(4)--(8) b、c、d、e、g,顺序可变
,(9) --(12)f、h、i、j,顺序可变
解析:
分析题目中的用例图,该系统主要有两类使用者,一类是医院内部的操作人员,即医院管理人员,另一类是预约人员或患者。根据题干描述的功能介绍,可以分析得出两类人员所使用的功能模块。
对于医院管理人员,他们使用的功能主要包括账号管理、号源管理、预约管理、报表管理和信用管理。这些功能涉及到系统的核心操作和内部管理,因此应该属于系统操作者,即医院管理人员。
对于预约人员(患者),他们使用的功能包括注册登录、信息浏览、预约挂号、查询与取消预约和报告查询。这些功能主要是为患者提供服务的,让他们能够方便地进行预约和查询。
注意,注册登录功能是两个参与者都需要使用的,因此在填写用例图时,可以将其放在中间或者根据实际情况进行划分。最终填写的用例名称应该与题干给出的功能描述相对应,并且顺序可以根据实际情况进行调整。
4、【问题 2】(10分)
预约人员(患者)登录系统后发起预约挂号请求,进入预约界面。进行预约挂号时使用数据库访问类获取医生的相关信息,在数据库中调用医生列表,并调取医生出诊时段表,将医生出诊时段反馈到预的界面,并显示给预的人员;预约人员选择医生及就诊时间后确认预的,系统返网预约结果,并向用户显示是否预约成功。
采用面向对象方法对预约挂号过程进行分析,得到如图 2-2 所示的顺序图,使用题干中给出的描述,完善图 2-2 中对象(1),及消息(2)~(4)的名称,将正确答案填在普题纸上请简要说明在描述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。

参考答案:(1) 预约人员 (2) 预约挂号 (3) 显示医生可预约时段 (4) 显示预约结果
顺序图是显示对象之间交互的图,这些对象是按时间顺序排列的,其着重描述对象按时间顺序的消息交换。
协作图用于描述系统的行为是如何由系统的成分协作实现的图,着重描述系统成分如何协同工作。
解析:
题目要求完善顺序图中对象及消息的名称。根据题目描述,分析如下:
- 对象(1)应该是预约人员,他们是系统的用户,发起预约挂号请求。
- 消息(2)应该是预约挂号请求,这是预约人员登录系统后的主要操作。
- 消息(3)应该是获取医生信息,预约人员在预约挂号时,需要获取医生的相关信息,以便选择医生及就诊时间。
- 消息(4)应该是显示预约结果,系统需要向用户显示是否预约成功。
关于顺序图和协作图的区别:
- 顺序图主要描述对象之间按时间顺序的消息交换,能够清晰地展示系统操作的流程。
- 协作图则侧重于描述系统的行为是如何由系统的各个成分协作实现的,它更多地关注系统结构的层面,展示系统成分如何协同工作。
在系统设计过程中,顺序图和协作图经常一起使用,以全面地描述系统的动态行为和结构关系。
5、【问题 3】(9分)
采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?
参考答案:
对象模型用于描述系统数据结构:动态模型用于描述系统控制结构:功能模型用于描述系统功能。
这3种模型都涉及数据、控制和操作等共同的概念,但侧重点不同,从不同侧面反映了系统的实质性内容,综合起来全面地反映了对目标系统的需求。
功能模型指明了系统应该“做什么”;
动态模型明确规定了什么时候做;
对象模型则定义了做事情的实体。
对象模型、动态模型和功能模型均可用于软件的需求分析。
解析:
面向对象方法开发软件时,建立对象模型、动态模型和功能模型是非常重要的。其中,对象模型主要关注系统中的实体以及实体间的关系,描述系统的数据结构;动态模型关注系统的控制结构,即描述系统行为的顺序和流程;功能模型则侧重于描述系统应该提供的功能或服务。
这三种模型之间相互关联,共同构成软件系统的整体描述。在进行软件需求分析时,需要同时考虑这三种模型。功能模型定义了系统需要实现的功能,是需求分析的基础;动态模型描述了系统内部的控制流程,帮助分析人员理解功能如何实现;对象模型则提供了系统的数据结构,为动态模型和功能模型的实现提供了基础数据。因此,这三种模型在软件需求分析中都有重要作用。
试题四(共25分)
阅读以下关于数据库设计的叙述,在答题纸上回答问题1至问题3。
【说明】
某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。
通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis)的混合架构实现。
经过规范化设计之后,该系统的部分数据库表结构如下所示。
供应商(供应商ID,供应商名称,联系方式,供应商地址);
药品(药品ID,药品名称,药品型号,药品价格,供应商ID);
药品库存(药品ID,当前库存数量);
订单(订单号码,药品ID,供应商ID,药品数量,订单金额);
6、【问题1】(9分)
在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系表过于细分,造成了大量的多表关联查询,影响了性能。例如当用户查询商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。
为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查询性能。修改后的药品关系结构为:
药品(药品ID,药品名称,药品型号,药品价格,供应商ID,供应商名称,当前库存数量);
请用200字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信息应该采用哪种反规范化设计方法。
参考答案:
增加冗余列冗余列:指在多个表中具有相同的属性列,常用来在查询时避免连接操作。
增加派生列/派生列:指增加的列可以通过表中其他属性列加工计算生成,作用是查询时减少计算量。
表重组/重新组表:如果需要经常查询两个表连接之后的数据,则把这两个表重新组成一个表来减少连接而提高性能。
表分割/分割表:通过将较大的表分割为多个较小的表来提高查询性能,包括水平分割和垂直分割。
该系统适合采用增加冗余列冗余列方法。
解析:
反规范化设计是为了提高查询性能而降低数据库规范化的设计方法。在关系数据库中,规范化是为了减少数据冗余和依赖异常,但过高的规范化可能导致过多的表连接查询,影响性能。因此,反规范化通过增加数据冗余和优化表结构来提高查询效率。对于用户查询商品信息的情况,采用增加冗余列的反规范化设计方法是最直接的解决方案。在药品表中直接包含供应商名称和当前库存数量等信息,可以避免多表关联查询,从而提高查询性能。
7、【问题2】(9分)
王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。
参考答案:
应用程序同步、批处理同步、触发器同步。
该系统适合采用触发器同步,因为该方法在解决查询性能的同时一致性最高。
解析:
反规范化设计通过增加数据冗余来提高查询效率,但可能导致数据不一致。为解决这一问题,有三种常见方法:应用程序同步、触发器同步和批处理同步。对于医药销售系统,因其需要实时性和高一致性,触发器同步是最合适的方法。因为触发器是与表事件相关的存储过程,可在后台自动执行,确保在更新数据时,冗余数据也能同步更新,从而保持数据的一致性。
8、【问题3】(7分)
该系统采用了Redis来实现某些特定功能(如当前热销药品排名等),同时将药品关系数据放到内存以提高商品查询的性能,但必然会造成Redis和MySQL的数据实时同步问题。
(1)Redis的数据类型包括String、Hash、List、Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。
参考答案:
(1)ZSet
(2)读数据时先读取Redis中的key,如读到且未失效则返回key对应的数据:如读不到或key失效,则读取数据库,并同步Redis;写数据时先写数据库,并设置内存对应的key失效。
解析:
(1)当前热销药品排名功能需要实时更新和排序,而Redis的ZSet(有序集合)类型能够按照score进行有序排列,适合用于记录药品的热销程度(如根据销售数量或金额等)并进行排序,因此选择ZSet数据类型。
(2)解决Redis和MySQL数据实时同步问题的常见方案是采用读写分离的策略。读数据时,优先从Redis中读取,因为Redis的读取速度远高于MySQL,这样可以大大提高查询性能。如果Redis中的数据不完整或已过期,则再从MySQL数据库中读取数据,并同步到Redis。写数据时,先写入MySQL数据库以保证数据的持久性,然后设置Redis中对应的key失效,这样在下一次读取时可以从MySQL中获取最新的数据并同步到Redis。这种方案可以确保数据的实时性和一致性。
试题五(共25分)
阅读以下关于Web系统架构设计的教述,在答题纸上回答问题1至问题3。
【说明】
某公司拟开发一个智能家居管理系统,该系统的主要功能需求如下:1)用户可使用该系统客户端实现对家居设备的控制,且家居设备可向客户端反馈实时状态;2)支持家居设备数据的实时存储和查询;3)基于用户数据,挖掘用户生活习惯,向用户提供家居设备智能化使用建议。
基于上述需求,该公司组建了项目组,在项目会议上,张工给出了基于家庭网关的传统智能家居管理系统的设计思路,李工给出了基于云平台的智能家居系统的设计思路。经过深入讨论,公司决定采用李工的设计思路。
9、【问题1】(8分)
请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。
参考答案:
在网关管理方面,基于云平台的智能家居管理系统可以将分散的智能家居网关数据集中起来,实现对智能家居网关的远程高效管理。
在数据处理方面,云端服务器对智能家居网数据进行备份存储,当家庭网关由于故障等原因导致数据丢失时,可以通过云端管理系统对网关数据进行恢复,从而提高数据的容灾性。
在系统性能方面,基于云服务平台的智能家居管理系统将数据信息存储在云端,减少了数据请求时间,提高了通信效率。
解析:
本题要求描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,并说明项目组选择李工设计思路的原因。答案中详细描述了两种系统的特点,并分析了基于云平台的系统的优势,如远程管理、数据备份恢复、通信效率高等,最后得出了项目组选择李工设计思路的原因。
10、【问题2】(12分)
请从下面给出的(a)~(j)中进行选择,补充完善图5-1中空(1)~(6)处的内容,协助李工完成该系统的架构设计方案。
(a)Wi-FI
(b)蓝牙
(c)驱动程序
(d)数据库
(e)家庭网关
(f)云平台
(g)微服务
(h)用户终端
(i)鸿蒙
(j)TCP/IP
参考答案:(1) h 用户终端 (2) i 鸿蒙 (3) f 云平台 (4) d 数据库 (5) e 家庭网关(6) c 驱动程序
解析:
根据题目描述,该智能家居管理系统需要支持用户通过客户端控制家居设备,并接收设备的实时状态反馈。因此,系统架构中需要包含用户终端(选项h),以便用户与系统进行交互。鸿蒙(选项i)作为一种操作系统,可以为用户提供良好的客户端体验。
云平台(选项f)是存储和处理家居设备数据的关键部分,它支持实时数据存储和查询,并基于用户数据进行生活习惯的挖掘和智能建议的提供。数据库(选项d)是云平台内部用于存储数据的关键组件。
家庭网关(选项e)是连接智能家居设备和外部网络的桥梁,它负责设备之间的通信和与外部云平台的交互。驱动程序(选项c)则是家庭网关与家居设备进行通信的必备软件。
这样,通过完善图5-1中的空(1)~(6)处内容,协助李工完成了该系统的架构设计方案。
11、【问题3】(5分)
该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。
参考答案:
TCP在IP协议提供的不可靠数据服务的基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。TCP协议一般用于传输数据量比较少,且对可靠性要求高的场合。
UDP是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信,与TCP相比,UDP是一种无连接的协议,它的错误检测功能要弱得多。
该系统应采用TCP协议
解析:
本题主要考查了TCP和UDP通信协议的区别以及在实际应用中的选择。答题需要理解两种协议的特点并根据实际场景进行分析。TCP协议保证数据的可靠性,适用于需要高可靠性的场景,而UDP协议则注重数据传输的效率。在智能家居管理系统中,确保控制指令的准确传输和反馈的可靠性是至关重要的,因此选择TCP协议是更为合适的。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!