- 1
- 0
- 约6.04千字
- 约 15页
- 2026-02-02 发布于四川
- 举报
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)