版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年上半年软件设计师下午试题及答案一、数据流图与数据字典1.阅读下列说明,回答问题1至问题3。【说明】某市“智慧停车”平台拟升级,新增“错峰共享”功能:白天写字楼车位紧张时,由附近小区释放闲置车位;夜间小区车位紧张时,由写字楼释放车位。平台需记录车位状态、共享合约、计费规则及信用分。【数据流图顶层图】外部实体:车主(E1)、物业(E2)、支付网关(E3)、征信中心(E4)。顶层加工:P0智慧停车平台。数据存储:D1车位目录、D2共享合约、D3计费规则、D4信用分。【0层图关键数据流】1)E1→P0:预约请求(车牌,目标区域,起止时间)。2)P0→E3:扣款指令(订单号,金额,回调URL)。3)P0→E4:信用查询(身份证号,业务号)。4)P0→D1:更新车位状态(车位ID,状态,时间戳)。【问题1】(4分)顶层图缺少一条外部实体与P0之间的数据流,该数据流用于物业批量导入“车位目录”。请给出该数据流的名称、方向,并说明数据项至少包含哪些内容。【答案】数据流名称:车位目录导入;方向:E2→P0;数据项:物业ID、车位ID列表、车位类型(地上/地下)、共享时段、收费标准、最大可预约时长。【问题2】(6分)0层图中加工P1“生成共享合约”需要读取D1、D3,写入D2。请用结构化语言描述P1的加工逻辑,要求包含异常处理:若信用分低于阈值(60分)或车位状态为“已预约”则拒绝。【答案】```PROCESSP1:生成共享合约READ预约请求(车牌,目标区域,起止时间)CALL征信中心获取信用分(身份证号)→creditIFcredit<60THEN返回错误码1001:“信用分不足”ENDIFLOCKD1车位目录FOREACH车位IDIN目标区域IF状态==“已预约”THENCONTINUEENDIFREADD3计费规则(区域,车位类型,时段)→ruleCALC预计费用(rule,起止时间)→feeWRITED2共享合约(合约号,车牌,车位ID,起止时间,fee,状态=“待确认”)UPDATED1车位状态(车位ID,状态=“已锁定”)BREAKENDFORIF无可用车位THEN返回错误码1002:“该区域暂无可共享车位”ENDIFUNLOCKD1ENDPROCESS```【问题3】(5分)数据字典中“共享合约”条目如下,请指出其中三处不一致或缺失,并给出修正。共享合约=合约号+车牌+车主姓名+车位ID+起止时间+预计费用+实际费用+状态状态=待确认|已确认|已取消|已完成【答案】1)车主姓名未在0层图数据流中出现,应删除或改为“车主ID”;2)实际费用在P1加工时尚未产生,应标记为“可选”;3)缺少“物业ID”字段,导致无法分账,应增加。修正后:共享合约=合约号+车牌+车主ID+车位ID+物业ID+起止时间+预计费用+实际费用(可选)+状态二、数据库设计2.阅读下列说明,回答问题1至问题3。【说明】智慧停车平台需支持“车位共享”“电子发票”“信用分”三大主题。初步抽象出以下实体:1)车位(车位ID、地址、类型、产权方、状态);2)车主(车主ID、姓名、身份证号、手机号、信用分);3)共享合约(合约号、车位ID、车主ID、起止时间、费用、状态);4)支付记录(支付ID、合约号、支付时间、金额、渠道、发票状态);5)发票(发票ID、支付ID、发票代码、发票号码、开票时间、PDF路径)。【问题1】(4分)将上述实体转化为3NF关系模式,并标出主键和外键。【答案】车位(车位IDPK,地址,类型,产权方FK→物业.物业ID,状态)车主(车主IDPK,姓名,身份证号UK,手机号,信用分)共享合约(合约号PK,车位IDFK→车位.车位ID,车主IDFK→车主.车主ID,起止时间,费用,状态)支付记录(支付IDPK,合约号FK→共享合约.合约号,支付时间,金额,渠道,发票状态)发票(发票IDPK,支付IDFK→支付记录.支付ID,发票代码,发票号码,开票时间,PDF路径)【问题2】(6分】平台要求“同一车位在同一时刻只能有一个已确认合约”。请在数据库层用“组合触发器+唯一索引”实现该约束,给出关键SQL(MySQL8.0语法)。【答案】```sql1.增加软删除标记ALTERTABLE共享合约ADDCOLUMN是否失效TINYINT(1)DEFAULT0;2.创建生成列,仅对未失效且已确认的合约计算重叠标识ALTERTABLE共享合约ADDCOLUMN重叠键VARCHAR(200)AS(CASEWHEN状态='已确认'AND是否失效=0THENCONCAT(车位ID,'|',起止时间)ELSENULLEND)STORED,ADDUNIQUEKEYuk_重叠键(重叠键);3.触发器:插入前检查时间重叠DELIMITER$$CREATETRIGGERtri_共享合约_时间重叠BEFOREINSERTON共享合约FOREACHROWBEGINIFNEW.状态='已确认'THENIFEXISTS(SELECT1FROM共享合约WHERE车位ID=NEW.车位IDAND状态='已确认'AND是否失效=0AND(起止时间>>'$.start')<(NEW.起止时间>>'$.end')AND(起止时间>>'$.end')>(NEW.起止时间>>'$.start'))THENSIGNALSQLSTATE'45000'SETMESSAGE_TEXT='时间重叠';ENDIF;ENDIF;END$$DELIMITER;```【问题3】(5分】信用分采用“滑动窗口”模型:过去365天内,每发生一次违约扣10分,每完成一次共享加1分,每日0点批量更新。信用分计算需扫描大表,性能敏感。请给出两种异构优化方案,并比较优劣。【答案】方案A:增量快照表建表信用分快照(车主IDPK,日期PK,当前分,违约次数,完成次数)每日0点跑批:INSERT…SELECT只计算昨日增量,JOIN快照取昨日当前分,再±分数。优点:查询当日信用分走索引,毫秒级;缺点:需额外存储365天快照,约1亿行。方案B:Redis滑动窗口+事件溯源用RedisZset,key=车主ID,score=事件时间戳,value=事件类型(违约/完成)。每日0点用ZREMRANGEBYSCORE剔除365天前事件,再ZRANGE统计违约次数。优点:内存级,实时更新;缺点:Redis宕机可能丢失窗口数据,需写回MySQL做冷备。综合:读多写少走A,写多读少走B;平台采用“双写”混合,核心服务读Redis,后台批核对MySQL。三、UML建模与面向对象设计3.阅读下列说明,回答问题1至问题3。【说明】“错峰共享”涉及自动匹配算法:当车主提交预约请求后,系统要在指定区域内找到“可共享车位”,并生成候选列表。候选排序策略包括:距离最近、价格最低、信用优先。策略可热插拔。【问题1】(4分】识别候选类:从说明中提取名词,筛选出4个候选类,并给出职责。【答案】1)预约请求:封装车牌、区域、时间、策略标识;2)可共享车位:封装车位ID、坐标、价格、产权方、状态;3)排序策略:接口,方法sort(List<可共享车位>);4)匹配引擎:协调类,加载策略、执行过滤、返回候选列表。【问题2】(6分】画出匹配引擎的类图,要求体现策略模式、依赖注入,并标注多重度。【答案】```++++|匹配引擎|<>1|排序策略接口|++++|strategy||<<interface>>||+execute()||+sort(List)|++++|1△|||||1++|<>|距离最近策略||++|<>|价格最低策略||++|<>|信用优先策略||++|1++|可共享车位|++|车位ID||坐标||价格|++```多重度:匹配引擎与策略接口为1..1,匹配引擎与可共享车位为1..。【问题3】(5分】给出匹配引擎核心Java代码片段,要求使用Spring@Component注入策略,并支持运行时动态切换。【答案】```java@Componentpublicclass匹配引擎{privatefinalMap<String,排序策略接口>策略池;public匹配引擎(Map<String,排序策略接口>策略池){this.策略池=策略池;}publicList<可共享车位>执行匹配(预约请求req){排序策略接口strategy=策略池.get(req.get策略标识());if(strategy==null)thrownewIllegalArgumentException("策略不存在");List<可共享车位>candidates=加载候选(req);strategy.sort(candidates);returncandidates.stream().limit(5).collect(Collectors.toList());}}```运行时切换:前端传入策略标识字符串,如“distanceLowest”,Spring自动查找对应Bean。四、算法与数据结构4.阅读下列说明,回答问题1至问题3。【说明】“车位占用预测”需基于历史出入场记录,预测未来1小时各车位是否空闲。历史数据为流式事件:{车位ID,事件类型(进/出),时间戳},每秒约5k条,存储于Kafka。【问题1】(4分】给出一种“滑动窗口+布隆过滤器”去重方案,防止同一事件被重复计算,说明误判影响及容忍度。【答案】布隆过滤器位数组长度2^24(16Mb),哈希函数7个,误判率≈0.8%。对每条事件取hash(车位ID+时间戳/300秒)作为key,300秒一个桶。误判影响:极少数事件被误判为“已处理”而丢弃,导致预测准确率下降<0.1%,业务可容忍。【问题2】(6分】采用“离散小波变换+DCT”压缩一周历史数据,再输入LSTM预测。请给出压缩流程,并证明误差上限。【答案】流程:1)按车位聚合,生成14407=10080点时间序列(每分钟采样,1表示占用,0表示空闲);2)做三级Haar小波,保留最大k=256系数;3)对残差做8×8块DCT,量化步长q=2,zigzag取前10系数;4)反变换重建序列x̂。误差上限:小波部分能量保留率≥95%,DCT部分最大单点误差≤q√2=2.8,故整体序列平均绝对误差≤0.15,满足预测模型输入敏感度要求。【问题3】(5分】若采用“多任务学习”同时预测1000个车位的占用,请设计共享私有网络结构,并给出参数共享比例。【答案】共享层:3层TCN(时序卷积)+Attention,输出64维隐向量,参数量0.8M;私有层:每层车位一个MLP(64→32→1),参数量1000×(64×32+32×1)=2.08M;共享比例=0.8/(0.8+2.08)=27.7%,既避免过拟合,又保留车位特异性。五、软件架构设计5.阅读下列说明,回答问题1至问题3。【说明】平台采用“微服务+事件驱动”架构:订单、支付、信用、通知四个服务。事件总线使用Kafka,要求“无业务侵入”的分布式事务,即不依赖Seata等框架。【问题1】(4分】给出“Saga编排型”事务定义,并写出“预约支付信用”三步的流程图节点。【答案】Saga:把长事务拆为若干本地事务,每个本地事务发布事件,下游消费并执行本地事务,失败时补偿。节点:1)订单服务:创建订单(本地事务)→发布“订单已创建”;2)支付服务:监听“订单已创建”→扣款→发布“支付成功”;3)信用服务:监听“支付成功”→加信用分→发布“信用已更新”;补偿:3′)信用服务失败→发布“信用更新失败”;2′)支付服务监听“信用更新失败”→退款→发布“支付已退款”;1′)订单服务监听“支付已退款”→关闭订单。【问题2】(6分】为防止“重复消费”导致扣款多次,支付服务需实现幂等。请给出“数据库唯一索引+状态机”双保险方案的关键SQL与Java伪代码。【答案】表:支付记录(支付IDPK,订单号UK,状态,金额,创建时间,更新时间)状态:INIT|SUCCESS|FAILSQL:```sqlINSERTINTO支付记录(支付ID,订单号,状态,金额)VALUES({支付ID},{订单号},'INIT',{金额})ONDUPLICATEKEYUPDATE状态=状态;```Java:```java@Transactionalpublicvoid处理支付(String订单号,BigDecimal金额){String支付ID=MD5(订单号);dao.insertIgnore(支付ID,订单号,金额);//利用UK冲突则返回0introw=dao.updateStateFromInitToSuccess(支付ID);//where状态='INIT'if(row==0){//已消费过log.warn("重复消费,支付ID={}",支付ID);return;}真正扣款(订单号,金额);}```双保险:即使Kafka重试,同一支付ID只能由INIT→SUCCESS一次。【问题3】(5分】信用服务每日需对账“加分明细”与“支付成功”事件,发现漏加即补偿。请给出“批流一体”对账架构,并说明如何做到“秒级延迟+日级校正”。【答案】架构:1)FlinkCEP实时消费“支付成功”流,在5秒窗口内关联“加分明细”流,未匹配输出到sideoutput;2)sideoutput写入Kafkatopic:delay,延迟检查30分钟,再次关联;3)每日0点Spark批任务扫描T1“支付成功”表与“加分明细”表全量leftjoin,发现漏加调用补偿接口。秒级延迟由Flink保证,日级校正由Spark保证,二者共用相同业务时间分区,避免口径差异。六、测试与质量保证6.阅读下列说明,回答问题1至问题3。【说明】“错峰共享”上线前需验证“高并发下不超卖”与“低信用用户被拒绝”两个场景。【问题1】(4分】给出“超卖”形式化定义,并设计一种“确定性”测试用例,使得在10万并发下必现超卖(若缺陷存在)。【答案】超卖定义:同一车位在同一分钟被两个及以上已确认合约引用。用例:1)初始化车位A状态=空闲;2)构造10万线程,同时提交预约A的请求,参数时间均为T~T+1h;3)使用原子计数器记录“已确认”合约数;4)断言计数器≤1,否则超卖。通过JMeter+KubernetesHPA弹性扩容,压测集群100Pod,每Pod1k线程,RTT<50ms,必现缺陷。【问题2】(6分】低信用场景需Mock征信中心,但真实环境网络延迟≥200ms。请给出“契约测试+TestDouble”方案,并写出Pact契约片段。【答案】契约测试:信用服务作为消费者,征信中心作为提供者。Pact片段:```json{"consumer":{"name":"creditservice"},"provider":{"name":"creditcenter"},"interaction
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物材料编程调控肿瘤血管生成的策略
- 生物打印技术在神经干细胞移植中的应用
- 生物化学虚拟实验与交叉学科融合
- 生物制品稳定性试验强制降解试验设计
- 生物制剂联合免疫抑制剂治疗的MDT协同方案
- 生物制剂失应答的炎症性肠病免疫调节治疗
- 生物3D打印:器官移植长期功能维持方案设计
- 数据面试题及业务理解能力含答案
- 图书出版采购编辑面试题及答案
- 深度解析(2026)《GBT 19396-2025铽镝铁磁致伸缩材料》
- 【MOOC答案】《电子线路设计、测试与实验(二)》(华中科技大学)章节作业慕课答案
- 2025年高考数学立体几何检测卷(立体几何中的三角函数应用)
- 2025年综合类-卫生系统招聘考试-护士招聘考试历年真题摘选带答案(5卷100题)
- 驻外销售人员管理办法
- 医疗反歧视培训
- GB/T 45701-2025校园配餐服务企业管理指南
- 2025-2030中国高效节能电机行业竞争力优势与发展行情监测研究报告
- 健身房合伙协议书
- 美甲师聘用合同协议
- 《储能电站技术监督导则》2580
- 保安人员安全知识培训内容
评论
0/150
提交评论