2025年下半年软件设计师下午真题及参考答案.docxVIP

  • 1
  • 0
  • 约6.04千字
  • 约 15页
  • 2026-02-02 发布于四川
  • 举报

2025年下半年软件设计师下午真题及参考答案.docx

2025年下半年软件设计师下午练习题及参考答案

一、数据流图与数据字典

【试题1】阅读下列说明与图示,回答问题1至问题4。

【说明】

某市“智慧停车”平台拟升级,新增“错峰共享”功能:私人车位业主可在平台发布空闲时段,周边车主可预约并驶入。平台需验证业主身份、车位产权、车辆牌照,完成在线支付后生成动态二维码,道闸扫码抬杆。支付中心与银行采用HTTPS双向证书校验;道闸厂商提供SDK,接口以JSON形式返回0/1表示抬杆成功/失败。平台还需向市交通局实时上传停车记录,交通局只接收Kafka消息,格式为Avro模式。

【图示】

图11顶层数据流图(未给出,考生需自行补全0层、1层)

外部实体:E1业主、E2车主、E3支付中心、E4道闸厂商、E5市交通局

主要加工:P1身份验证、P2车位发布、P3预约管理、P4订单管理、P5支付校验、P6二维码生成、P7抬杆控制、P8数据上报

【问题1】(4分)

根据说明,将图11中缺失的0层数据流补充完整,要求给出数据流名称、起点、终点,至少写出4条。

【答案】

1.车位空闲时段→E1→P2

2.预约请求→E2→P3

3.支付结果→P5→E3

4.抬杆指令→P7→E4

【问题2】(3分)

数据字典中“动态二维码”条目包含哪些数据项?写出3项即可。

【答案】

二维码编号、有效截止Unix时间戳、车位编号哈希(SHA256前8字节)

【问题3】(4分)

P7抬杆控制加工内部出现“接口返回1但道闸未抬”异常,请用50字以内说明在数据流图中如何增加异常数据流,并给出该数据流名称。

【答案】

增加“抬杆异常通知”数据流,起点P7,终点E4,用于触发SDK重试或人工干预。

【问题4】(4分)

市交通局要求Kafka消息在500ms内送达,若网络抖动导致重试,请说明在数据字典中应对哪个数据项设置约束,并给出约束表达式。

【答案】

对“消息发送时间戳”设置约束:current_timestamp–msg_timestamp≤500ms。

二、数据库设计

【试题2】阅读下列说明,回答问题1至问题3。

【说明】

某电商“秒杀”系统采用MySQL8.0,商品表items(item_id,stock,…),订单表orders(order_id,user_id,item_id,quantity,status,create_time,…)。高并发下需保证库存扣减与订单写入原子性,且不允许超卖。

【问题1】(5分)

给出一种基于乐观锁的库存扣减SQL,要求单行更新且返回受影响行数,若更新失败则重试,写出完整语句。

【答案】

UPDATEitemsSETstock=stock–?WHEREitem_id=?ANDstock–?=0;

【问题2】(4分)

若采用Redis+Lua脚本预扣库存,再异步落库,请写出Lua脚本核心片段(仅含库存判断与扣减)。

【答案】

localkey=KEYS[1]

localqty=tonumber(ARGV[1])

localcurr=tonumber(redis.call(GET,key)or0)

ifcurrqtythenreturn1end

redis.call(DECRBY,key,qty)

returncurr–qty

【问题3】(6分)

orders表数据量10亿行,需按user_id分库分表,采用雪花算法生成order_id。请说明:

(1)order_id哪些位段用于分片路由;

(2)若扩容至32库×32表,如何平滑迁移,给出2步关键操作。

【答案】

(1)取雪花算法41位时间戳后的10位作为分库键,再取随后5位作为分表键。

(2)步骤1:在线双写,新数据同时写入旧节点与影子节点;步骤2:对比校验后切换读流量,再下线旧节点。

三、UML建模

【试题3】阅读下列说明与图,回答问题1至问题3。

【说明】

某跨境支付系统支持“收单”“退款”“结算”三类业务。系统采用领域驱动设计,识别出聚合根:Transaction、SettlementBatch、Refund。

【图示】

图31类图(节选)

文档评论(0)

1亿VIP精品文档

相关文档