架构师-2021真题-架构师案例

问题1(16分)

针对该系统功能,赵工建议解释器架构风格,李工建议管道过滤架构风格,王工则建议饮食调用,该系统从灵活性和可扩展性考虑,应采用哪种?

解析:

管道-过滤器:过滤器就是构件,管道就是连接件,每一个构件都是有输入和输出,经过构件内部处理,前一个构件的输出时候一个构件的输入,前后数据流相关联。

解释器:可以构建解释器引擎,定义一套规则给使用者使用。

隐式调用:通过触发或广播一个事件或多个事件,当某事件被触发,系统直接隐式调用其他模块的过程。

答案:

灵活性方面,解释器可以灵活组装各个规则,来实现同的功能,灵活性最好。管道-过滤器可以通过管道来灵活组装每个流程的过滤器,灵活性次之,隐式调用是通过一个事件触发另一个事件,或者通过广播一个或多个事件,在灵活方面则差一点。

学习算法可扩展性,解释器可以直接配置新的规则,扩展性是最好的。管道-过滤器可以组装管道和过滤器,或者新增过滤器来实现,扩展性次之。隐式调用则扩展性差点,每次需要新增新的事件来触发。

考虑到该平台灵活定义机器学习流程需求和开发新算法组件加入平台,提高扩展性和灵活性建议选择解释器。

问题2(9分)

在系统初步运行后,发现系统数据访问性能较差。经过分析,刘工认为原来数据库规范化设计后,关系〕于细分,造成了大量的多表关联查洵,影响了性能。例如当用户吉洵商品信息时,需要同时显示该药品的信息、供应商的信息、当前库存等信息。为此,刘工认为可以采用反规范化设计来改造药品关系的结构,以提高查讠旬性能。修改后的药品关系结构为:药品(药品ID,药品名称,药品型号药品价格,供应商ID,供应商名称,当前库存数。

请用200字以内的文字说明常见的反规范化设计方法,并说班用户查洵商品信息应该采用哪种反规范化设计方法。

解析:

增加冗余列:多个相同列字段在不同表新增。
增加派生列:需要聚合的数据新增一个字段存储。
合并表:多个表需要查询的字段合并成一个表。
拆分表:拆分又分为水平拆分和垂直拆分。水平拆分则是把表拆分成多个,所有表字段都一致。垂直拆分则是把表常用字段和不常用字段,拆分成两个表,富文本字段也可以拆分成单独的表。
该项目应采用增加冗余列方法。

问题3(9分)

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

解析:

数据不一致解决方案 :

同步实时更新,每次更新冗余字段,冗余表都放在一个事务里,事务的原子性保证要么同时成功,要么同时失败。
异步更新,读取bin log日志,更新其他冗余数据。
异步更新,通过消息队列消费,如Kafka,Rocket等,通知其他冗余数据更新。
该项目对实时性要求不高,可以考虑异步更新,通过读取mysql 的binlog来解决。

问题4(7分)

该系统采厍了Redis来现某些特定功能呶当前热药品排名等),同时将药品关系数据放到内存以提高商品查讠旬的性能,但必然会造成Redis和MySQL的数据实时同步问题。

()Redis的数据类型包括String、Hash、List、set和zset等,清说班实现当前热药品排名的功能应该使用哪种数据类型。

()清用200字以内的文字解说班解决Redis和MySQL数啹实时同步问题的常见方案。

解析:

Zset来实现当前热药品排名。

被动一致性:Redis和MySQL数据同步可以采用延迟双删来解决,先删除Redis缓存数据,再更新MySQL数据,sleep一段时间(为了保证数据库已持久化),再次删除Redis缓存数据。

主动一致性:开启额外服务去读取BinLog日志,来更新到Redis缓存。

问题5(9分)

采用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这三种模型,针对上述模型,说明那些模型可以软件的需求分析?

解析:

对象模型 描述了系统的静态结构,对象图建模,描述了现实对象到系统数据结构的转换。

动态模型 描述了时间和操作顺序有关的特征。主要状态图表示。

功能摸索 描述了数据的输入值和输出值,主要DFD来实现。

对象模型是动态模型和功能模型的基础数据,对象模型确定发生的对象,动态模型确定什么时候发生,功能模型则是发生了什么。

问题6(8分)

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

解析:

网关管理方面基于云平台的可以统一在云平台管理,更方便远程管理。

数据处理方面基于云平台的数据都存储在云上,一起处理方便,冗余备份。

性能方面基于云平台的性能和安全性更好。

问题7(5分)

该系统实现用户终端与服务端的双向可靠性通信,请用300字以内的文字从数据传说可靠性对比TCP和UDP通信协议的不同,并且说明该系统用哪种协议?

解析:

TCP是在IP协议提供的不可靠基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、双全工传输服务。TCP协议适用输出数据量少,且对可靠性要求高的场景。

UDP是不可靠传输协议,无连接传输协议,可以保证应用程序的通信,但是错误检测功能弱很多。

 

1.文件存储系统与关系数据库在设计难度、数据冗余程度、数据架构、应用扩展性方面的差异?
1. 设计难度:文件系统针对特定应用系统设计,难度较小;关系数据库数据结构需要符合关系模式,设计难度较大。
2. 冗余程度:文件系统数据冗余较大,可能在多个文件中复制相同的数据属性;关系数据库遵循数据库范式,数据冗余较少。
3. 数据架构:文件系统以应用系统要求为中心组织和管理数据;关系数据库以数据库为中心组织和管理数据。
4. 应用扩展性:文件系统符合特定应用系统要求的文件数据很难在不同应用系统之间共享数据。关系数据库数据独立于应用系统,很容易在不同的应用系统之间共享数据。
       2.内存数据库与关系型数据库在数据模型、读写性能、存储容量、可靠性方面的差异?
1. 数据模型:内存数据库使用Key-Value键值对模式;关系数据库使用关系模式。
2. 读写性能:内存数据库直接读写内存,性能较高;关系数据库读写外存,性能较低。
3. 存储容量:内存数据库基于内存存储,容量受限;关系数据库基于磁盘存储,容量大。
4. 可靠性:  内存数据库恢复机制复杂,可靠性低;关系数据库内建恢复机制,可靠性高。
        3.关系型数据库开发的阶段包括哪些?其中逻辑数据模型设计包含哪些任务?什么是超类实体?什么是派生属性?

数据库开发包括:需求分析,概念设计,逻辑设计,物理设计,实施阶段,运行维护。
其中逻辑设计阶段包括:
1. 确定数据模型。
2. 将ER图转换成表,将ER模型转换成关系模型。
3. 确定完整性约束。
4. 确定用户视图。
超类实体:将一些子实体所共有的属性抽象为一个单独的新实体,这个新的实体就是超类实体。
派生属性:根据其他属性计算得出的属性就是派生属性。如快递包裹费用中的总计就是派生属性。
        4.什么是SQL注入攻击,并列举出两种抵御SQL注入攻击的方式?

SQL注入攻击就是把SQL命令插入到web表单,输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意攻击的目的。
抵御SQL注入攻击方式:
1. 使用正则表达式;
2. 使用参数化过滤性语句;
3. 检查用户输入合法性;
4. 用户相关数据加密处理;
5. 使用专业的漏洞扫描工具;
          5.数据库引入主从复制机制,能带来哪些好处?

1. 可扩展性更优。采用单台数据库服务器,随着访问量增加,必然会产生访问瓶颈,而主从结构大大方便服务器扩容,不影响系统使用。
2. 性能大大提升。商务平台用户量大,并发访问高,主从方式采用一主多从,满足不同用户可以从不同数据库读取数据,提高访问速度。
3. 负载均衡功能。一主多从相当于分担了主机任务,做了负载均衡。
4. 保证数据安全。主从方式实现了数据冗余,不会因为某台机器硬件故障而引起数据丢失。
          6.关系数据库中实体完整性、参照完整性、用户定义完整性是什么?
 
实体完整性:保证关系中的每个元组都是可识别和唯一的。指关系数据库中所有表都必须有主键,不允许表中存在无主键值的记录,不允许存在主键值相同的记录。
参照完整性:是指多个实体或关系之间的关联关系,就是定义外键与被参照的主键之间的引用规则。外键一般要求为空或者等于其所参照的关系中的某个元组的主键值。
用户定义完整性:指关系中属性的取值范围,防止属性的值与应用语义矛盾。
             7.什么是数据持久层?使用数据持久层能为项目开发带来哪些好处?

数据持久层是一组软件服务,将应用程序与该程序使用的数据源分离,为整个项目提供一个统一、安全、并发的数据持久机制。
使用数据持久层好处有:
1. 程序代码重用性强,即使更换数据库,只需要更改配置文件,不必重写代码。
2. 业务逻辑代码可读性强,在代码中不会有大量的SQL语句,提高程序的可读性。
3. 持久化技术可以自动优化,以减少对数据库的访问量,提高程序的运行效率。
4. 简化开发工作,让开发人员更关注于业务逻辑的开发。
5. 通过ORM对象关系映射向业务逻辑提供面向对象的数据访问。

              8.什么是ORM?请用300以内文字说明数据库程序访问方式与采用ORM方式的优缺点?
 ORM即对象关系映射Object-Relational Mapping,它在关系型数据库和对象之间建立一个映射,这样我们在操作数据库的时候,就不需再和复杂的SQL语句打交道,只要像平时操作对象一样即可。
1. 程序访问方式:
优点:性能比直接使用SQL好;可以处理复杂查询语句。
缺点:要求程序员懂SQL语句;修改与维护相对困难。
2. ORM方式:
优点:程序员不用再写SQL来进行数据库操作,大大降低学习和开发成本;减少代码量,降低由于SQL代码质量差而带来的影响。
缺点:性能比直接使用SQL差;不太容易处理复杂查询语句。
                9.什么是Redis?什么是MemCache?它们两者之间的差异是什么?

Redis是一个开源的使用C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value型数据库,并提供多种语言的API。
MemCache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它在内存中维护一个巨大的Hash表,能够存储各种格式数据,包括图片,视频,文件等。
Redis和MemCache的差异:
1. Redis和Memcache都是内存数据库,都支持Key-Value数据类型。MemCache可以缓存其它东西,如图片,视频等。Redis支持string、list、set、zset、hash等数据结构的存储。
2. Redis支持数据的持久化,可以将内存中的数据保存到磁盘中,重启时可以再次加载进行使用。而MemCache挂掉后数据会丢失。
3. 灾难恢复方面,MemCache挂掉后数据不可恢复。Redis数据丢失后可以恢复。
4. Redis并不是所有数据都一直存储在内存中,当物理内存快用完时,会将一些很久未使用的value值交换到磁盘。这是和MemCache相比一个最大的区别。
5. Redis在很多方面支持数据库的特性,可以说它就是一个数据库系统。而MemCache只是简单的Key-Value缓存。
               10.解决Redis和MySQL数据实时同步的常见方案有哪些?

     1. 实时同步方案。读时先查缓存,查不到再从DB查询,并保存到缓存;写时先写数据库,成功后,再更新或失效掉缓存。
    2. 异步队列方式同步,可采用kafka等消息中间件处理。
    3. 通过数据库插件,基于binlog来完成数据同步。
    4. 利用触发器进行缓存同步。
                11.什么是数据库建模中的反规范化技术,指出采用反规范化技术能获得哪些益处,可能带来哪些问题?

规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种规范化设计的回退方法就叫做反规范化技术。 
优点:降低了连接操作的需求,降低了外码和索引的数目,还可能减少关系表的数目,提高查询的效率。
缺点:数据重复存储,浪费了存储空间,可能出现数据库完整性的问题。为了保障数据库的一致性,增加了数据维护的复杂性,会降低修改的速度。
              12.常见的反规范化设计方法?

1.增加冗余列;  2.增加派生列;  3.重新组表;  4.水平分割表;  5.垂直分割表;
 
             13.在反规范化设计中,解决数据不一致性问题的三种常见方法?

1.触发器数据同步;  2.应用程序数据同步;  3.物化视图;  4.批处理维护;

 

系统架构师2021年下午真题包含一系列与系统架构相关的问题和案例。这些问题和案例旨在考察考生对系统架构设计的理解和能力。 2021年下午真题的主要内容包括以下几个方面: 1. 系统架构设计基础知识:问题可能涉及系统设计的基本原则、设计模式、架构层次、架构风格等基础知识。考生需要熟悉各种架构体系,并能根据应用场景选择合适的架构风格。 2. 分布式系统设计:问题可能涉及分布式系统设计的关键问题,如数据一致性、负载均衡、服务发现、容错处理等。考生需要熟悉分布式系统设计的原理和方法,能够根据需求设计可靠、高效、可扩展的分布式系统架构。 3. 大规模系统设计:问题可能涉及大规模系统设计中的挑战和解决方案,如性能优化、容量规划、弹性设计等。考生需要具备设计高性能、高可用、可扩展的大规模系统的能力,并能够根据实际情况提出有效的解决方案。 4. 微服务架构设计:问题可能涉及微服务架构设计的原则、组件划分、通信机制等。考生需要熟悉微服务架构的设计模式,能够合理规划微服务的边界和接口,保证系统的高内聚、低耦合,提高系统的可维护性和扩展性。 总的来说,系统架构师2021年下午真题是一项对考生系统架构设计能力的考察。通过解答这些问题和案例,考生可以展示自己的架构设计思维以及解决实际问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值