2020年上半年系统分析师考试下午真题(专业解析+参考答案)

第 1 题

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某软件企业拟采用面向对象方法开发一套体育用品在线销售系统,在系统分析阶段,“提交订单”用例详细描述如表1—1所示。

【问题1】 (9分)
面向对象系统开发中,实体对象、控制对象和接口对象的含义是什么?
【问题2】 (10分)
面向对象系统分析与建模中,从潜在候选对象中筛选系统业务对象的原则有哪些?
【问题3】 (6分)
根据题目所示“提交订单”用例详细描述,可以识别出哪些业务对象?


答案与解析

  • 试题难度:一般
  • 知识点:案例分析>系统分析
  • 试题答案:

    【问题1】
    (1)实体对象:用来表示业务域的事实数据并需要持久化存储的对象类型;
    (2)控制对象:用来表示业务系统中应用逻辑和业务规则的对象类型;
    (3)接口对象:用来表示用户与系统之间交互方式的对象类型。
    【问题2】
    (1)去除具有相同含义的对象;
    (2)去除不属于本系统范围内的对象;
    (3)去除没有特定独立行为的对象;
    (4)去除含义解释不清楚的对象;
    (5)去除属于另一个对象属性或行为的对象。
    【问题3】
    会员、商品、购物车、订单、配送信息、支付记录。

  • 试题解析:

    本题考查的是面向对象分析与建模相关知识及应用。

    【问题1】
    面向对象系统开发过程中,按照对象所承担的职责不同,可以将对象分为实体对象、控制对象和接口对象。其中实体对象是用来表示业务域的事实数据并需要持久化存储的对象类型;控制对象是用来表示业务系统中应用逻辑和业务规则的对象类型;接口对象是用来表示用户与系统之间交互方式的对象类型。
    面向对象系统设计的一般步骤1、对实体对象进行增、并、改,并识别接口对象和控制对象。2、确定实体对象、接口对象和控制对象之间的各种关系。3、完善对象类结构图,组织系统的体系结构。
    【问题2】
    在面向对象分析中,并不是所有的名词都表示了问题域内有用的业务对象,通过删除对象的同义词、系统范围之外的名词、不具有独特行为的名词、不清楚的名词和另一个对象的行动或属性的名词来最终清理候选对象列表。
    【问题3】
    业务对象是指对数据进行检索和处理的组件。是简单的真实世界的软件抽象。
    业务对象的必要条件:
    1、由状态和行为组成
    2、表达了来自业务域的一个人,地点,事物或概念
    3、可以重用
    业务对象的分类:
    1.实体业务对象:
    表达了一个人,地点,事物或者概念,根据业务中的名词从业务域中提取的,如客户,订单,物品等。在EJB应用程序中,一般为实体Bean;在传统的web应用程序中,可能是包含业务应用的状态和行为的普通JavaBean。
    2.过程业务对象:
    表达应用程序中业务处理过程或者工作流程任务,通常依赖于实体业务对象,是业务的动词。在EJB应用程序中,通常是模型的会话Bean,或者消息驱动Bean;在非EJB应用中,可能是JavaBean,包含特定的行为,作为应用程序的管理者或者控制者。
    3.事件业务对象:
    表达应用程序中由于系统的一些操作造成或产生的一些事件。

    商家、仓库、支付系统、快递公司属于系统外部数据项,商品列表和商品重复,价格、支付、密码和配送地址等都属于其他数据项的属性或行为,无需独立作为候选对象。最后可以筛选出候选对象,包括会员、商品、购物车、订单、配送信息、支付记录。

第 2 题

阅读以下关于软件系统分析与设计的叙述,在答题纸上回答问题1至问题3。
【说明】
某企业拟开发一套数据处理系统,在系统分析阶段,系统分析师整理的核心业务流程与需求如下:
(a)系统分为管理员和用户两类角色,其中管理员主要进行用户注册与权限设置,用户主要完成业务功能;
(b)系统支持用户上传多种类型的数据,主要包括图像、文本和二维曲线等;
(c)数据上传完成后,用户需要对数据进行预处理操作,预处理操作包括图像增强、文本摘要,曲线平滑等; .
(d)预处理操作完成后,需要进一步对数据进行智能分析,智能分析操作包括图像分类、文本情感分析、曲线未来走势预测等;
(e)上述预处理和智能分析操作的中间结果均需要进行保存;
(f)用户可以将数据分析结果以图片、文本、二维图表等多种方式进行展示,并支持结果汇总,最终导出为符合某种格式的报告。
【问题1】 (9分)
数据流图(Data Flow Diagram, DFD) 是一种重要的结构化系统分析方法,重点表达系统内数据的传递关系,并通过数据流描述系统功能。请用300字以内的文字说明DFD在进行系统需求分析过程中的主要作用。
【问题2】 (10分)
顶层图(也称作上下文数据流图)是描述系统最高层结构的DFD,它的特点是将整个待开发的系统表示为一个加工,将所有的外部实体和进出系统的数据流都画在一张图中。请参考题干描述,将合适的内容填入图2—1中(1) ~ (5)空白处,完成该系统的顶层图。

【问题3】 (6分)
在结构化设计方法中,通常采用流程图表示某一处理过程,这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。而在面向对象的设计方法中,则主要采用活动图表示某个用例的工作流程。请用300字以内的文字说明流程图和活动图在表达业务流程时的三个主要不同点。


答案与解析

  • 试题难度:一般
  • 知识点:案例分析>系统分析
  • 试题答案:

    【问题1】
    DFD的主要作用如下:
    (1) DFD是理解和表达用户需求的工具,是需求分析的手段。
    (2) DFD概括地描述了系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点。
    (3) DFD作为一个存档的文字材料,是进一步修改和充实开发计划的依据。
    【问题2】
    (1)管理员
    (2)用户权限信息
    (3)用户
    (4)多种类型数据
    (5)导出报告/展示结果
    【问题3】
    流程图和活动图有如下三个主要区别:
    (1)流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系。而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
    (2)流程图只能表达顺序执行过程,活动图则可以表达并发执行过程。
    (3)活动图可以有多个结束状态,而流程图只能有一个结束状态。

  • 试题解析:

    本题考查的是结构化分析工具-数据流图DFD的分析与应用。

    【问题1】
    DFD是SA方法中的重要工具,是表达系统内数据的流动并通过数据流描述系统功能的一种方法。DFD还可被认为是一个系统模型,在信息系统开发中,如果采用结构化方法,则一般将DFD作为需求规格说明书的一个组成部分。
    DFD从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系统所完成的功能。具体来说,DFD的主要作用如下:
    (1)DFD是理解和表达用户需求的工具,是需求分析的手段。由于DFD简明易懂,不需要任何计算机专业知识就可以理解它,因此,系统分析师可以通过DFD与用户进行交流。
    (2)DFD概括地描述了系统的内部逻辑过程,是需求分析结果的表达工具,也是系统设计的重要参考资料,是系统设计的起点。
    (3)DFD作为一个存档的文字材料,是进一步修改和充实开发计划的依据。
    【问题2】
    在DFD中,通常会出现4种基本符号,分别是数据流、加工、数据存储和外部实体(数据源及数据终点)。数据流是具有名字和流向的数据,在DFD中用标有名字的箭头表示。加工是对数据流的变换,一般用圆圈表示。数据存储是可访问的存储信息,一般用直线段表示。外部实体是位于被建模的系统之外的信息生产者或消费者,是不能由计算机处理的成分,它们分别表明数据处理过程的数据来源及数据去向,用标有名字的方框表示。
    所以(1)(3)应填入外部实体名,(2)(3)(4)应填入加工名,根据(a)系统分为管理员和用户两类角色,其中管理员主要进行用户注册与权限设置,用户主要完成业务功能,可以得出(1)为管理员(2)为用户权限信息。根据(b)系统支持用户上传多种类型的数据,主要包括图像、文本和二维曲线等,可以得出(4)为多种类型数据。根据(c)数据上传完成后,用户需要对数据进行预处理操作,预处理操作包括图像增强、文本摘要,曲线平滑等,可以得出(3)为用户。根据(f)用户可以将数据分析结果以图片、文本、二维图表等多种方式进行展示,并支持结果汇总,最终导出为符合某种格式的报告,可以得出(5)为导出报告/展示结果。
    【问题3】
    流程图是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。有时候也被称之为输入-输出图。顾名思义,就是用来直观地描述一个工作过程的具体步骤。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务所必需的管理过程。
    活动图是由活动节点和转换流程构成的图。它描述系统或业务的一系列活动构成的控制流,描述系统从一种活动转换到另一种活动的整个过程。

    流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系。而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程;活动图能够表示并发活动的情形,而流程图不行;活动图是面向对象的,而流程图是面向过程的;活动图可以有多个结束状态,而流程图只能有一个结束状态。

第 3 题

阅读以下关于嵌入式实时系统设计的相关技术的描述,回答问题1至问题3。
【说明】
某公司长期从事嵌入式系统研制任务,面对机器人市场的蓬勃发展,公司领导决定自主研制一款通用的工业机器人。王工承担了此工作,他在泛调研的基础上提出:公司要成功地完成工业机器人项目的研制,应采用实时结构化分析和设计(RTSAD)方法,该方法已被广泛应用于机器人顶层分析和设计中。
【问题1】 (9分)
实时结构化分析和设计(RTSAD)方法分为分析和设计两个阶段。分析阶段要开发个基本模型,即需求模型,基本模型中包含一个环境模型和一个行为模型:设计阶段是一种程序设计方法,该方法在转换分析和事务分析策略中结合使用了模块耦合和内聚标准,用于开发从结构化分析规范开始的设计方案。请用300字以内文字说明环境模型、行为模型、模块耦合和内聚的含义;并从模块独立性的角度,说明模块设计的基本原则。
【问题2】 (9分)
图31给出了机器人控制器的状态转换图,其中T1T6表示了状态转换过程中的触发事件,请将T1T6填到图31中的空(1) ~ (6)处,完善机器人控制器的状态转换图,并将正确答案填写在答题纸上。
【问题3】 (7分)
参考机器人控制器状态转换图(图31)和机器人控制器环境图(图32),完善机器人控制器命令的数据流程图(图33)中的空(1) ~ (7)处,并将正确答案填写在答题纸上。





答案与解析

  • 试题难度:一般
  • 知识点:案例分析>嵌入式方向
  • 试题答案:

    【问题1】
    环境模型描述的是系统运行时所处的环境,也就是系统要连接的外部实体,以及发送给系统的输入和来自系统的输出。
    行为模型描述的是行为,也就是系统对从外部环境中接收到的输入信息的反应,在实时系统中,这些反应一般都是依赖于状态的。
    模块耦合在模块分解过程中作为种标准来使用,用于判断模块间连接性的程度。
    模块内聚在模块分解过程中作为 种标准来使用,用于确定模块内部的强度或统一性。
    模块设计在模块独立性上的基本原则:高内聚低耦合。
    【问题2】
    (1) T1
    (2) T4
    (3) T2
    (4) T3
    (5) T6
    (6) T5
    【问题3】
    (1)控制机器人
    (2)修改程序
    (3)启动程序
    (4)结束程序
    (5)处理程序结束
    (6)停止程序
    (7)继续执行程序

  • 试题解析:

    本题是对嵌入式结构化分析与设计相关内容的考查。

    RTSAD(Real-Time Structured Analysis and Design)方法是对传统的结构化分析和设计方法的补充扩展,专门用于开发实时系统。

    【问题1】
    实时结构化分析和设计(RTSAD)方法主要包含分析和设计两个阶段,其中分析阶段要求开发一个基础模型,这个基础模型称为需求模型。通常基本模型中应包含一个环境模型和一个行为模型。
    环境模型描述的是系统运行时所处的环境,也就是系统要连接的外部实体,以及发送给系统的输入和来自系统的输出。
    行为模型描述的是行为,也就是系统对从外部环境中接收到的输入信息的反应,在实时系统中,这些反应一般都是依赖于状态的。
    其中行为模型常用状态转换图(简称状态图)来描述,它又称为状态机模型。行为模型通过描述系统的状态以及引起系统状态转换的事件来表示系统的行为。状态图中的基本元素有事件、状态和行为等。
    内聚是指模块内各元素之间的关联交互。耦合是指模块间的依赖关联、交互关系。模块耦合在模块分解过程中作为种标准来使用,用于判断模块间连接性的程度。模块内聚在模块分解过程中作为 种标准来使用,用于确定模块内部的强度或统一性。从模块设计角度看,模块独立性应遵守“高内聚低耦合”的基本原则。
    【问题2】
    状态转换图,即STD图(State Transform Diagram),表示行为模型。STD通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为,指出作为特定事件的结果将执行哪些动作(例如处理数据等)。STD描述系统对外部事件如何响应,如何动作。在状态转换图中,每一个节点代表一个状态。
    机器人控制器设定了6种状态,即已关闭、增加动力、手动、运行、终止和已挂起,在6个状态相互转换时,设计了6个触发事件(T1~T6)。
    当按下启动按键时,系统就会进入增加动力状态。在成功地完成了增加动力的过程之后,系统就会进入手动状态。
    系统手动状态时操作员按下运行按钮,就会启动当前选择程序的执行过程,然后系统就会过渡到运行状态,所以第三空应该为T2:触发【开始程序】。
    系统运行状态时操作员可以通过按下停止按钮来挂起程序的执行过程,然后系统就会进入已挂起状态,所以第六空应该为T5:触发【停止程序】。
    系统已挂起状态时操作员可以按下运行按钮来继续执行程序,系统则返回到运行状态,所以第五空应该为T6:触发【恢复程序】。
    系统运行状态时操作员可以按下结束按钮,系统进入终止状态,所以第四空应该为T3:触发【结束程序】。
    当程序终止执行时要想返回手动状态,就需要触发【处理程序已结束】,从而回到手动状态。所以所以第二空应该为T4:触发【处理程序已结束】。
    系统手动状态时操作员现在可以使用程序选择旋钮开关来选择程序,所以应该触发【改变程序】,第一空应该为T1:触发【改变程序】。
    【问题3】
    数据流程图(Data Flow Diagram,DFD/Data Flow Chart), 是一种描述系统数据流程的主要工具,它用一组符号来描述整个系统中信息的全貌,综合地反映出信息在系统中的流动、处理和存储情况。
    数据流程图有两个特征: 抽象性和概括性。抽象性指的是数据流程图把具体的组织机构、工作场所、物质流都去掉,只剩下信息和数据存储、流动、使用以及加工情况。概括性则是指数据流程图把系统对各种业务的处理过程联系起来考虑,形成一个总体。
    图3-3为机器人控制器命令的数据流程图。读取控制面板输入转换可以从控制面板接收输入。这些输入要作为事件流发送给控制机器人,所以(1)答案为控制机器人。
    控制机器人转换要在系统当前状态下检查输入是否有效,如果有效,那么控制机器人转换就可以从状态转换图中判断新的状态和所需操作,然后该转换就会触发相应的数据转换来实现操作。
    因此,根据问题2中状态转换图,T1触发了【修改程序】转换,所以(2)答案为修改程序。
    T2触发了【启动程序】转换,所以(3)答案为启动程序。
    T3触发了【结束程序】转换,所以(4)答案为结束程序。
    T4触发了【处理程序结束】转换,所以(5)答案为处理程序结束。
    T5触发了【停止程序】转换,所以(6)答案为停止程序。
    T6触发了【继续执行程序】转换,所以(7)答案为继续执行程序。

第 4 题

阅读以下关于数据管理的叙述,在答题纸上回答问题1至问题3。
【说明】
某全国连锁药店企业在新冠肺炎疫情期间,紧急推出在线口罩预约业务系统。该业务系统为普通用户提供口罩商品查询、购买、订单查询等业务,为后台管理人员提供订单查询、订单地点分布汇总、物流调度等功能。该系统核心的关系模式为预约订单信息表。
推出业务系统后,几天内业务迅速增长到每日10万多笔预约订单,系统数据库服务器压力剧增,导致该业务交易响应速度迅速降低,甚至出现部分用户页面无法刷新、预约订单服务无响应的情况。为此,该企业紧急成立技术团队,由张工负责,以期尽快解决该问题。
【问题1】 (9分)
经过分析,张工认为当前预约订单信息表存储了所有订单信息,记录已达到了百万级别。系统主要的核心功能均涉及对订单信息表的操作,应首先优化预约订单信息表的读写性能,建议针对系统中的SQL语句,建立相应索引,并进行适当的索引优化。
针对张工的方案,其他设计人员提出了一些异议,认为索引过多有很多副作用。请用100字以内的文字简要说明索引|过多的副作用。
【问题2】 (10分)
作为团队成员之一 ,李工认为增加索引并进行优化并不能解决当前问题,建议采用物理分区策略,可以根据预约订单信息表中“所在城市”属性进行表分区,并将每个分区分布到独立的物理磁盘上,以提高读写性能。常见的物理分区特征如表41所示。李工建议选择物理分区中的列表分区模式。

请填补表4-1中的空(a) ~ (d)处,并用100字以内的文字解释说明李工选择该方案的原因。
【问题3】 (6分)
在系统运行过程中,李工发现后台管理人员执行的订单地址信息汇总等操作,经常出现与普通用户的预约订单操作形成读写冲突,影响系统的性能。因此李工建议采用读写分离模式,采用两台数据库服务器,并采用主从复制的方式进行数据同步。请用100字以内的文字简要说明主从复制的基本步骤。


答案与解析

  • 试题难度:一般
  • 知识点:案例分析>数据库方向
  • 试题答案:

    【问题1】
    索引过多的副作用有:
    (1)过多的索引会占用大量的存储空间;
    (2)更新开销,更新语句会引起相应的索引更新;
    (3)过多索引会导致查询优化器需要评估的组合增多;
    (4)每个索引都有对应的统计信息,索引越多则需要的统计信息越多;
    (5)聚集索引的变化会导致非聚集索引的同步变化。
    【问题2】
    (a)属性的离散值
    (b)周期性数据/周期数据
    (c)能力强
    (d)均匀
    李工建议根据预约订单所在城市进行表分区,而所在城市属性为离散值,根据所在城市属性建立列表分区,也方便不同城市处理自己的数据,方便数据管理。
    【问题3】
    主从复制的基本步骤:
    (1)主服务器将所做修改通过自己的IO线程,保存在本地二进制日志中;
    (2)从服务器上的1/0线程读取主服务器上面的二进制日志,然后写入从服务器本地的中继日志;
    (3)从服务器上同时开启一个SQL thread,定时检查中继日志,如果发现有更新则立即把更新的内容在本机的数据库上面执行一遍。

  • 试题解析:

    本题考查的是数据库相关知识内容及应用。

    【问题1】
    索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
    索引的优点:
    (1)加快了数据的检索速度;
    (2)创建唯一性索引,保证数据库表中每一行数据的唯一性;
    (3)加速表和表之间的连接;
    (4)在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间;
    (5)建立索引之后,在信息查询过程中可以使用优化隐藏器,提高整个信息检索系统的性能。
    索引过多的缺点:
    (1)过多的索引会占用大量的存储空间;
    (2)更新开销,更新语句会引起相应的索引更新;
    (3)过多索引会导致查询优化器需要评估的组合增多;
    (4)每个索引都有对应的统计信息,索引越多则需要的统计信息越多;
    (5)聚集索引的变化会导致非聚集索引的同步变化。
    【问题2】
    范围分区:Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。如按照时间划分,2010年1月的数据放到a分区,2月的数据放到b分区,在创建的时候,需要指定基于的列,以及分区的范围值。
    列表分区:List分区也需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像range或者hash分区那样同时指定多个列做为分区依赖列,但它的单个分区对应值可以是多个。在根据某字段,如城市代码分区时,可以指定default,把非分区规则的数据,全部放到这个default分区。
    组合分区:如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。
    Hash分区(散列分区):对于那些无法有效划分范围的表,可以使用hash分区,这样对于提高性能还是会有一定的帮助。hash分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的hash值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash分区也可以支持多个依赖列。
    李工建议根据预约订单所在城市进行表分区,而所在城市属性为离散值,根据所在城市属性建立列表分区,也方便不同城市处理自己的数据,方便数据管理。
    【问题3】
    主从复制的定义:
    主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新。
    主从复制的原理:
    1.数据库有个bin-log二进制文件,记录了所有sql语句。
    2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
    3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
    主从复制的基本步骤:
    (1)主服务器将所做修改通过自己的IO线程,保存在本地二进制日志中;
    (2)从服务器上的1/0线程读取主服务器上面的二进制日志,然后写入从服务器本地的中继日志;
    (3)从服务器上同时开启一个SQL thread,定时检查中继日志,如果发现有更新则立即把更新的内容在本机的数据库上面执行一遍。

第 5 题

阅读以下关于Web应用系统的叙述,在答题纸上回答问题1至问题3。
【说明】
某公司拟开发个基于020 (Onine To Ofline)外卖配送模式的外卖平台。该外卖平台采用自行建立的配送体系承接餐饮商家配送订单,收取费用,提供配送服务。餐饮商家在该020外卖平台发布配送订单后,根据餐饮商家、订餐用户、外卖配送员位置等信息,以骑手抢单、平台派单等多种方式为订单找到匹配的外卖配送员,完成配送环节,形成线上线下的020闭环。
基于项目需求,该公司多次召开项目研发讨论会。会议上,张工分析了020外卖平台配送服务的业务流程,提出应采用事件系统架构风格实现订单配送,并建议采用基于消息队列的点对点模式的事件派遣机制。
【问题1】 (10分)
基于对020外卖平台配送服务的业务流程分析,在图51的空(1) ~ (5)处完善020外卖平台配送的服务流程。

【问题2】 (9分)
根据张工的建议,该系统采用事件系统架构风格实现订单配送服务。请基于对事件系统架构风格的了解,补充图52的空(1) ~ (3) 处,完成事件系统的工作原理图。

【问题3】 (6分)
请用200字以内的文字说明基于消息队列的点对点模式的定义,并简要分析张工建议该系统采用基于消息队列的点对点模式的事件派遣机制的原因。


答案与解析

  • 试题难度:一般
  • 知识点:案例分析>Web技术
  • 试题答案:

    【问题1】
    (1)提交订单
    (2)发布订单
    (3)外卖平台
    (4)交付餐品
    (5)配送员
    【问题2】
    (1)事件源
    (2)事件管理器
    (3)事件处理器
    【问题3】
    在基于消息队列的点对点模式中,消息生产者生产消息并发送到消息队列(Queue)中,然后消息消费者从Queue中取出并且消费消息。消息被消费以后,Queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue 支持存在多个消费者,但是对一个消息而言,只有一个消费者可以消费。
    如需求描述,任何 一个外卖配送订单(消息)都只能被一个配送员(消费者)接单,所以,应该采用基于消息队列的点对点模式。

  • 试题解析:

    【问题1

    根据题干“餐饮商家在该O2O外卖平台发布配送订单后,根据餐饮商家、订餐用户、外卖配送员位置等信息,以骑手抢单、平台派单等多种方式为订单找到匹配的外卖配送员,完成配送环节,形成线上线下的 O2O 闭环。”可知第二空应该为(2)发布订单,第五空应该为(5)配送员,第三空应该为(3)外卖平台。订餐用户应该先提交订单给外卖平台,外卖平台才能发布配送订单,所以第一空应该为(1)提交订单。配送员配送外卖到送餐地址之后应该通知用户取餐并把餐品交付给用户,所以第四空应该为(4)交付餐品。

    【问题2

    事件:能够激活对象功能的动作,当发生动作后会给所涉及对象发送一条消息,对象便可执行相应的功能。事件源负责广播一些事件,系统中的其他处理器在事件管理器中注册自己感兴趣的事件,并将自己的过程与某个事件相关联,事件管理器通过注册调用相关的处理器。

    事件驱动过程:事件源,事件管理器,事件处理器,由事件源发表事件,由事件管理器来决定分派事件给事件处理器来处理。所以1)应该为事件源,事件源发表事件。2)(3)应该分别为事件管理器和事件处理器,由事件管理器来决定分派事件给事件处理器来处理。

    【问题3

    消息队列包括两种模式,点对点模式(point to point queue)和发布/订阅模式(publish/subscribetopic

  • </span>点对点模式
    点对点模式下包括三个角色:
    消息队列
    发送者 (生产者)
    接收者(消费者)</o:p></p>


    消息发送者生产消息发送到 queue 中,然后消息接收者从 queue 中取出并且消费消息。消息被消费以后,queue 中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

    点对点模式特点:
    1)每个消息只有一个接收者(Consumer(即一旦被消费,消息就不再在消息队列中)
    2)送者和接发收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
    3)接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

    2. 发布/订阅模式
    发布/订阅模式下包括三个角色:
    角色主题(Topic
    发布者(Publisher)
    订阅者(Subscriber)


    发布者将消息发送到 Topic,系统将这些消息传递给多个订阅者。
    发布/订阅模式特点:
    1)每个消息可以有多个订阅者;
    2)发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
    3)为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

    因为任何一个外卖配送订单(消息)都只能被一个配送员(消费者)接单,而不是每个消息可以有多个订阅者,所以,应该采用基于消息队列的点对点模式。

results matching ""

    No results matching ""