2024年5月
第一题 软件架构篇
1.1对比单体架构和微服务架构微服务架构的优缺点?
微服务项目的优点:
可扩展性:微服务架构允许你根据需要独立的扩展单个服务,不必扩展整个应用;
更高的扩展性灵活性和快速开发,微服务允许开发团队独立设计,开发和部署服务,提供了灵活性,允许团队更快的推出新功能;
故障隔离和容错性:单个微服务的故障不会影响其他服务,提高了应用程序的容错性;
能够更容易地部署和更新。
缺点:运维复杂、数据一致性管理困难以及潜在的性能问题。
复杂性:微服务架构涉及到分布式系统,需要处理分布式事务、服务发现、服务治理等复杂问题。
部署和测试:由于微服务的数量增加,部署和测试变得更加复杂。
运维成本:微服务架构需要更多的运维工作,包括监控、日志收集、故障排查等。
1.3用质量属性6要素描述e)和h)两条可用性的场景描述。
e) 可连续运行时间不少于240h,断电或故障后10s内应重启
刺激源:断电或故障
刺激:系统故障或断电
制品:系统
环境:运行环境
响应:重启
响应度量:10秒内
h) 网络失效后,10s内应发起重新连接
刺激源:网络失效
刺激:网络失效
制品:系统
环境:网络环境
响应:重新连接
响应度量:10秒内
第二题 软件工程篇
2.1在序列图存在哪三种消息?
1.同步消息:是一种阻塞调用,发送方必须等待接收方处理完成并返回结果才能继续执行。
2.异步返回:发送方发出消息后不等待接收方处理完成,直接继续执行
3.消息返回:表示同步或异步调用的返回数据或确认信号
2.3系统分析设计过程中两种交互图的选取原则。
在UML中,交互图主要用来描述系统中对象的交互情况,他们可以在分析和设计阶段使用。
交互图主要包括两种类型:顺序图(序列图)和通信图(协作图)
序列图:强调的是对象间交互的时间顺序,注重的对象间消息序列
通信图:强调的是对象间的上下级关系,或是对象间的组织结构,静态关系
分析阶段:创建序列图来捕捉对象之间的动态合作,能够清晰展示时序和并发
设计阶段:通过协作图来定义交互模式,清晰的展示对象间的静态关系和关联
2.4序列图表示条件分支序列片段有哪些
Opt:表示 可选分支(类似 if 无 else)
alt :表示 互斥条件分支(类似 if-else 或 switch-case)
loop :表示 循环执行(类似 for/while)
break :满足条件时中断当前交互,跳出序列
Par:表示 并行分支(多个分支同时执行)
第四题 数据库篇
4.1基于数据库实现分布式锁的缺点
- 性能问题:单点瓶颈: 数据库成为获取和释放锁的瓶颈,高并发场景下性能会受到严重影响数据库压力: 频繁的加锁、释放锁操作会增加数据库的负担,尤其是在高并发情况下。
(2)可靠性问题:死锁风险: 如果没有妥善处理异常情况(例如进程崩溃),可能会导致死锁,需要额外机制解决。锁超时问题: 需要设置合理的锁超时时间,避免资源长时间被占用,但超时时间难以确定,过短会导致业务失败,过长会导致性能下降。
(3)实现复杂性:需要自行实现锁的续期机制: 为了避免锁超时,需要实现心跳机制或其他方式来续期,增加了实现的复杂度。需要处理各种异常情况: 例如数据库连接失败、事务异常等,需要额外的代码逻辑来处理。
4.2举一个产生Redis分布式锁死锁的场景
当用 redis 做分布式锁时,当 A 用户竞争锁成功,A 用户所在的主机挂了,这时候还没有来得及释放锁,且设置的过期时间较长,还未到期,那么其他用户去用 setnx 指令去竞争锁时发现 redis 有这个锁的 key,所以就导致其他用户永远都竞争不成功。
4.3 填写Redis命令,基于ZSet。
存入秒杀的分数命令:ZADD
获取分数范围的命令:ZRANGE
获取分数:ZSCORE
扩展:Redis几种类型
String :字符串 set、get、GETRANGE、SETEX、SETNX
List:列表 LPUSH、LRANGE、LPOP、RPOP 、Lindex
Hash:哈希 hset 、hget 、hgetall 、hdel 、HEXISTS 、hkeys 、hvals
Set:无序集合 sadd、SMemberS 、SISMember 、SRandMember
ZSet:有序集合 zadd 、 ZRange 、ZSCORE
GeoSpatial 地理位置
Hypeloglog 统计基数
Bitmaps 位存储
第五题 数据库篇
5.2 MongoDB如何存储非结构性数据的,MongoDB 矢量化存储的优点
MongoDB是一种NoSQL数据库,专用于存储和管理非结构化数据。
MongoDB采用灵活的文档模型,数据以BSON(类似JSON)的格式存储。文档存储允许复杂的数据结构,如嵌套文档和数组,这使得MongoDB能够高效的处理和查询非结构化数据。
与传统关系型数据库不同,MongDB不需要预定义的模式,支持动态架构,允许数据随时间变化,便于应用程序开发和数据模型的演变。
高效存储高维数据,图像,文本和其他多维数据。
允许数据水平扩展,高负载仍然保持高性能。
MongoDB的文档模型能够自然地存储和处理多种数据格式,为机器学习和数据科学应用提供了良好的支持。
5.3该系统中 HDFS 使用热数据、温数据和冷数据存储的原因
HDFS 采用热数据、温数据和冷数据存储策略主要是为了优化存储效率和成本。
热数据是指:访问频率高的,需要快速响应的数据。通常存储在高性能硬件上,如固态硬盘(SSD);
温数据指访问频率较低,响应时间要求相对宽松,通常存储在性能和成本平衡较好的存储介质上,如SATA硬盘;
冷数据则是很少访问的历史数据或备份数据,通常存储在成本最低的存储介质上,如磁带或云存储,节省存储成本。
此外,分级存储还可以根据数据访问的实际需求灵活调整存储策略,使得系统在处理大规模数据时更加高效和经济。这种方法不仅能优化资源,还能提升整体系统的可靠性和可扩展性。
2022年11月
第二题
1.2针对该系统的功能,李工建议采用面向对象的架构风格,将折扣力度计算和用户筛选分别封装为独立对象,通过对象调用实现对应的功能;王工则建议采用解释器(interpreters)架构风格,将折扣力度计算和用户筛选条件封装为独立的规则,通过解释规则实现对应的功能。请针对系统的主要功能,从折扣规则的可修改性、个性化折扣定义灵活性和系统性能三个方面对这两种架构风格进行比较与分析,并指出该系统更适合采用哪种架构风格。
系统更适合解释器架构风格。
从可修改性:解释器架构风格比面向对象实现强,因为解释器可以通过自定义流程规则及配套的流程解释引擎,做到用户的完全自定义流程,折扣是独立的语法规则,解释器对可变化的规则进行解析,修改更容易。而面向对象是相对固定,变化需要改具体的类。
灵活性:解释器强,解释器可以很具用户灵活性解释执行规则,做到千人千面。
系统性能:面向对象优于解释器,面向对象实现是固定,而解释器是运行时期动态绑定执行的。
2.3在结构化分析和设计过程中,数据流图和数据字典是常用的技术手段,请用200字以内的文字简要说明它们在软件需求分析和设计阶段的作用。
数据字典:在需求分析阶段还是设计过程中,数据字典都是用于规范系统中的属性,数据流图的实体及属性都是来源于数据字典。数据字典是基础
数据流图:
在软件需求分析阶段,可以通过数据流图分析并展示系统的功能,从而完成需求分析;
在软件设计阶段,通过数据流图可以确认设计的功能是否满足,为模块划分与模块之间接口设计提供依据。
第四题
4.1设计团队在讨论缓存和数据库的数据一致性问题时,李工建议采取数据实时同步更新方案,而张工则建议采用数据异步准实时更新方案。请用200字以内的文字,简要介绍两种方案的基本思路,说明全国仓储货物管理系统应该采用哪种方案,并说明采取该方案的原因。
实时方案:当数据库更新时,同事更新缓存数据;
异步准实时更新方案:当数据库更新,不立即更新缓存,将需要更新的操作记录成日志,在逐步排队完成更新。
采用准实时方案,性能要求高,1s内完成。实时同步方案最大问题在于同步并发时性能不可控。无法保证。
4.2随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。
哈希算法将缓存数据的键通过哈希函数映射到不同的缓存节点上,每个键对应一个固定的节点。这种方法简单高效,但在节点动态变化时会导致大量数据迁移。
一致性哈希算法引入虚拟节点,将节点和数据映射到一个环形空间,当节点增减时只需要迁移少量数据,保持负载均衡。
选择一致性哈希算法是因为其动态扩展和收缩节点时数据迁移量小,适应业务动态变化,同时保持高效的缓存访问速度,提高系统的可伸缩性和稳定性。
4.3全国仓储货物管理系统开发完成,在运营一段时间后,系统维护人员发现大量黑客故意发起非法的商品送达时间查询请求,造成了缓存穿透。张工建议尽快采用布隆过滤器方法解决。请用200字以内的文字解释布隆过滤器的工作原理和优缺点。
布隆过滤器可以快速判断一个元素是否在列表中。它通过多个哈希函数将元素映射到一个为数组中,并在查询时检查对应位的状态,如果存在一位为0,则一定不存在;如果所有哈希函数映射的位都为1,则可能存在。
优点:快速查询和低内存占用,适用于处理大规模数据
缺点:存在误判率,即可能不存在的元素误判为存在,且无法删除已添加的元素。
可以快速过滤掉大量无效请求,减轻系统负担。
第五题
5.1(5分)MQTT 协议在工业物联网中得到广泛的应用,请用300字以内的文字简要说明 MQTT 协议。
MQTT(消息队列遥测传输)是一个基于发布/订阅模式的消息协议。它在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。MQTT时轻量,简单,开放,易于实现。
5.3请用300字以内的文字,从数据通信、数据安全和系统性能等方面简要分析在传统云计算模型中引入边缘计算模型的优势。
数据通信:通信更快捷,数据量更少。因为数据处理对比在边缘计算完成,通信更多时候只传输匹配与结果指令。
数据安全:数据以加密方式存储在需要用到的边缘设备上,本地化处理比对,减少原始信息在网络上传递带来的安全隐患。黑客也无法通过攻破一个结点使整个系统瘫痪。
系统性能:性能更高,以人脸识别为例,在进行识别时,只在本地进行比对,不用把人脸数据传递到远程服务器对比。
2021年11月
第一题
1.2请针对平台的核心应用场景,从机器学习流程定义的灵活性和学习算法的可扩展性两个方面对三种架构风格(解释器,管道过滤器,隐式调用)进行对比与分析,并指出该平台更适合采用哪种架构风格。
解释器:机器学习流程的灵活性更高,可扩展能力强,因为解释器风格可以通过自定义流程规则及配套的流程解释引擎开发,做到用户层面的流程完全自定,而不需要修改代码,所以无论是修改已有的业务流程,还是扩展不同的角色,创建新角色的流程都非常便利。
管道过滤器:机器学习流程定义的灵活性较低,可扩展能力较弱,因为管道过滤器把数据的处理职能做成过滤器,把数据传递做成管道,此时如果流程不发生变化,可以通过这种方式实现,但一旦流程变化,或是扩展功能,需要对过滤器进行修改调整,或是流程在程序层面重建,此时必须修改代码
隐式调用:灵活性一般,扩展能力一般。隐式调用强调的是通过间接的方式进行调用,如采用事件机制,要完成某个动作时先触发事件,事件与相关动作相关联,提高灵活度可把角色执行业务的流程用事件触发。这种做法比管道过滤器强,但弱于完全自定义的解释器。
该系统更适合使用解释器风格。
第二题
2.1请简要说明在描述对象之间的动态交互关系时,协作图与顺序图存在哪些区别。
顺序图和协作图都是可以用来描述对象之间的交互关系。
顺序图强调的是时间次序,描述的是对象消息传递次序。
通信图强调的是对象之间的组织结构或上下级关系。
2.3用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型,请分别介绍这3种模型,并详细说明它们之间的关联关系,针对上述模型,说明哪些模型可用于软件的需求分析?
对象模型用于描述系统数据结构,数据对象。描述了系统的静态结构,是整个体系最基础最核心的部分。一般用对象图建模。
动态模型用于描述系统控制结构。描述了系统的交互次序,一般用状态图建模。
功能模型用于描述系统功能。描述系统的数据变化,一般用数据流图来建模。
对象模型定义了做事情的实体;动态模型明确规定了什么时候做;功能模型明了了系统应该做什么。
第四题
4.1请用200字以内的文字说明常见的反规范化设计方法,并说明用户查询商品信息应该采用哪种反规范化设计方法。
- 增加冗余列:指多个表中有相同的列,用来在查询时避免连接操作
- 增加派生列:指增加的列可以通过表中的其他数据计算生成,作用时查询时减少计算,提升速度
- 重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把两个表重新组成一个表减少连接提升性能
- 分割表:对表做分割提升性能
应该采用增加冗余列。
4.2用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。
- 定期同步更新:定期将冗余数据与原始数据进行同步更新,确保数据一致性
- 使用触发器:在数据更新时自动触发相关操作保持数据一致性
- 应用程序级别的数据校验:通过应用程序逻辑验证数据一致性
因为数据更新频繁,采用触发器和应用程序校验合适。因为它能在数据更新瞬间自动维护一致性,无需应用程序过多干预,也避免了定时器的延迟性,可实时保证数据一致性。
4.3(1)Redis的数据类型包括String、 Hash、 List、 Set和ZSet等,请说明实现当前热销药品排名的功能应该选择使用哪种数据类型。
(2)请用200字以内的文字解释说明解决Redis和MySQL数据实时同步问题的常见方案。
热销药品排行适用:ZSet,有序集合类型。
基于Binlog异步同步:用Canal等工具监听MySQL的BinLog日志,解析数据变更事件并推送到Redis.使用高频写且要求最终一致性场景
应用层双写:业务代码中同步MySQL和Redis,靠十五保证原子性。强一致性,低延迟,双写增加好事,事务处理复杂。适用于低频写,强一致性场景。
消息队列解耦:写MySQL后发送消息到队列,消费者异步更新Redis.允许短暂不一致场景
延迟双删:更新MYSQL前后各删一次Redis极端情况可能有脏数据。一致性要求不苛刻场景。
结合数据库触发器:在MySQL设触发器,监听数据变更并调用外部程序更新Redis。会增加数据库负载,维护困难。适用于遗留改造系统。
第五题
5.1请用400字以内的文字简要描述基于家庭网关的传统智能家居管理系统和基于云平台的智能家居管理系统在网关管理、数据处理和系统性能等方面的特点,以说明项目组选择李工设计思路的原因。
基于家庭网关的传统智能家居关系系统
在网关管理上:家庭网关作为中心控制设备,负责连接和管理各种智能设备,功能受限于硬件性能和扩展性上
数据处理:数据处理主要在本地进行,对于大规模数据处理和存储能力有限,难以实现复杂的智能算法和数据分析
系统性能:受限于网关硬件性能,系统响应速度和处理能力有限,难以支持大规模智能家居设备的管理和控制
基于云平台的智能家居管理系统
网关管理:云平台作为中心控制设备,可实现远程管理和监控,支持多设备连接和管理
数据处理:数据处理和存储都在云端,具有强大的计算和存储能力,支持复杂智能算法和大规模数据处理。
系统性能:云平台具有高性能和可扩展性,能够快速响应和稳定服务,支持大规模智能家居设备的管理和控制
5.3该系统需实现用户终端与服务端的双向可靠通信,请用300字以内的文字从数据传输可靠性的角度对比分析TCP和UDP通信协议的不同,并说明该系统应采用哪种通信协议。
系统应该采用TCP通信协议。
TCP和UDP都属于数据传输层的通信协议,但TCP数据传输是可靠的,UDP是不可靠的。
TCP提供可靠的,面向连接的数据传输服务,具有数据完整性校验,流量控制和拥塞控制等机制,确保数据的可靠传输,这些机制增加通信开销,导致传输速度相对较慢。基于字节流的传输层协议
UDP是一种无链接的传输协议,不提供数据完整性校验,流量控制和拥塞控制,传输速度较快,可靠性较差,可能会丢失数据包或乱序传输。
选择TCP通信协议,系统需要保证数据传输的可靠性,数据的完整性和顺序性。采用TCP协议能够提供可靠的传输服务,保证数据的准确传输,同时TCP的流量控制和拥塞控制机制也有助于通信的稳定性。

3738

被折叠的 条评论
为什么被折叠?



