2025年上半年軟件設(shè)計(jì)師下午試題及答案_第1頁
2025年上半年軟件設(shè)計(jì)師下午試題及答案_第2頁
2025年上半年軟件設(shè)計(jì)師下午試題及答案_第3頁
2025年上半年軟件設(shè)計(jì)師下午試題及答案_第4頁
2025年上半年軟件設(shè)計(jì)師下午試題及答案_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2025年上半年軟件設(shè)計(jì)師下午試題及答案一、數(shù)據(jù)流圖與數(shù)據(jù)字典1.閱讀下列說明,回答問題1至問題3?!菊f明】某市“智慧停車”平臺擬升級,新增“錯峰共享”功能:白天寫字樓車位緊張時,由附近小區(qū)釋放閑置車位;夜間小區(qū)車位緊張時,由寫字樓釋放車位。平臺需記錄車位狀態(tài)、共享合約、計(jì)費(fèi)規(guī)則及信用分?!緮?shù)據(jù)流圖頂層圖】外部實(shí)體:車主(E1)、物業(yè)(E2)、支付網(wǎng)關(guān)(E3)、征信中心(E4)。頂層加工:P0智慧停車平臺。數(shù)據(jù)存儲:D1車位目錄、D2共享合約、D3計(jì)費(fèi)規(guī)則、D4信用分?!?層圖關(guān)鍵數(shù)據(jù)流】1)E1→P0:預(yù)約請求(車牌,目標(biāo)區(qū)域,起止時間)。2)P0→E3:扣款指令(訂單號,金額,回調(diào)URL)。3)P0→E4:信用查詢(身份證號,業(yè)務(wù)號)。4)P0→D1:更新車位狀態(tài)(車位ID,狀態(tài),時間戳)?!締栴}1】(4分)頂層圖缺少一條外部實(shí)體與P0之間的數(shù)據(jù)流,該數(shù)據(jù)流用于物業(yè)批量導(dǎo)入“車位目錄”。請給出該數(shù)據(jù)流的名稱、方向,并說明數(shù)據(jù)項(xiàng)至少包含哪些內(nèi)容?!敬鸢浮繑?shù)據(jù)流名稱:車位目錄導(dǎo)入;方向:E2→P0;數(shù)據(jù)項(xiàng):物業(yè)ID、車位ID列表、車位類型(地上/地下)、共享時段、收費(fèi)標(biāo)準(zhǔn)、最大可預(yù)約時長。【問題2】(6分)0層圖中加工P1“生成共享合約”需要讀取D1、D3,寫入D2。請用結(jié)構(gòu)化語言描述P1的加工邏輯,要求包含異常處理:若信用分低于閾值(60分)或車位狀態(tài)為“已預(yù)約”則拒絕。【答案】```PROCESSP1:生成共享合約READ預(yù)約請求(車牌,目標(biāo)區(qū)域,起止時間)CALL征信中心獲取信用分(身份證號)→creditIFcredit<60THEN返回錯誤碼1001:“信用分不足”ENDIFLOCKD1車位目錄FOREACH車位IDIN目標(biāo)區(qū)域IF狀態(tài)==“已預(yù)約”THENCONTINUEENDIFREADD3計(jì)費(fèi)規(guī)則(區(qū)域,車位類型,時段)→ruleCALC預(yù)計(jì)費(fèi)用(rule,起止時間)→feeWRITED2共享合約(合約號,車牌,車位ID,起止時間,fee,狀態(tài)=“待確認(rèn)”)UPDATED1車位狀態(tài)(車位ID,狀態(tài)=“已鎖定”)BREAKENDFORIF無可用車位THEN返回錯誤碼1002:“該區(qū)域暫無可共享車位”ENDIFUNLOCKD1ENDPROCESS```【問題3】(5分)數(shù)據(jù)字典中“共享合約”條目如下,請指出其中三處不一致或缺失,并給出修正。共享合約=合約號+車牌+車主姓名+車位ID+起止時間+預(yù)計(jì)費(fèi)用+實(shí)際費(fèi)用+狀態(tài)狀態(tài)=待確認(rèn)|已確認(rèn)|已取消|已完成【答案】1)車主姓名未在0層圖數(shù)據(jù)流中出現(xiàn),應(yīng)刪除或改為“車主ID”;2)實(shí)際費(fèi)用在P1加工時尚未產(chǎn)生,應(yīng)標(biāo)記為“可選”;3)缺少“物業(yè)ID”字段,導(dǎo)致無法分賬,應(yīng)增加。修正后:共享合約=合約號+車牌+車主ID+車位ID+物業(yè)ID+起止時間+預(yù)計(jì)費(fèi)用+實(shí)際費(fèi)用(可選)+狀態(tài)二、數(shù)據(jù)庫設(shè)計(jì)2.閱讀下列說明,回答問題1至問題3。【說明】智慧停車平臺需支持“車位共享”“電子發(fā)票”“信用分”三大主題。初步抽象出以下實(shí)體:1)車位(車位ID、地址、類型、產(chǎn)權(quán)方、狀態(tài));2)車主(車主ID、姓名、身份證號、手機(jī)號、信用分);3)共享合約(合約號、車位ID、車主ID、起止時間、費(fèi)用、狀態(tài));4)支付記錄(支付ID、合約號、支付時間、金額、渠道、發(fā)票狀態(tài));5)發(fā)票(發(fā)票ID、支付ID、發(fā)票代碼、發(fā)票號碼、開票時間、PDF路徑)。【問題1】(4分)將上述實(shí)體轉(zhuǎn)化為3NF關(guān)系模式,并標(biāo)出主鍵和外鍵?!敬鸢浮寇囄?車位IDPK,地址,類型,產(chǎn)權(quán)方FK→物業(yè).物業(yè)ID,狀態(tài))車主(車主IDPK,姓名,身份證號UK,手機(jī)號,信用分)共享合約(合約號PK,車位IDFK→車位.車位ID,車主IDFK→車主.車主ID,起止時間,費(fèi)用,狀態(tài))支付記錄(支付IDPK,合約號FK→共享合約.合約號,支付時間,金額,渠道,發(fā)票狀態(tài))發(fā)票(發(fā)票IDPK,支付IDFK→支付記錄.支付ID,發(fā)票代碼,發(fā)票號碼,開票時間,PDF路徑)【問題2】(6分】平臺要求“同一車位在同一時刻只能有一個已確認(rèn)合約”。請?jiān)跀?shù)據(jù)庫層用“組合觸發(fā)器+唯一索引”實(shí)現(xiàn)該約束,給出關(guān)鍵SQL(MySQL8.0語法)?!敬鸢浮縛``sql1.增加軟刪除標(biāo)記ALTERTABLE共享合約ADDCOLUMN是否失效TINYINT(1)DEFAULT0;2.創(chuàng)建生成列,僅對未失效且已確認(rèn)的合約計(jì)算重疊標(biāo)識ALTERTABLE共享合約ADDCOLUMN重疊鍵VARCHAR(200)AS(CASEWHEN狀態(tài)='已確認(rèn)'AND是否失效=0THENCONCAT(車位ID,'|',起止時間)ELSENULLEND)STORED,ADDUNIQUEKEYuk_重疊鍵(重疊鍵);3.觸發(fā)器:插入前檢查時間重疊DELIMITER$$CREATETRIGGERtri_共享合約_時間重疊BEFOREINSERTON共享合約FOREACHROWBEGINIFNEW.狀態(tài)='已確認(rèn)'THENIFEXISTS(SELECT1FROM共享合約WHERE車位ID=NEW.車位IDAND狀態(tài)='已確認(rèn)'AND是否失效=0AND(起止時間>>'$.start')<(NEW.起止時間>>'$.end')AND(起止時間>>'$.end')>(NEW.起止時間>>'$.start'))THENSIGNALSQLSTATE'45000'SETMESSAGE_TEXT='時間重疊';ENDIF;ENDIF;END$$DELIMITER;```【問題3】(5分】信用分采用“滑動窗口”模型:過去365天內(nèi),每發(fā)生一次違約扣10分,每完成一次共享加1分,每日0點(diǎn)批量更新。信用分計(jì)算需掃描大表,性能敏感。請給出兩種異構(gòu)優(yōu)化方案,并比較優(yōu)劣?!敬鸢浮糠桨窤:增量快照表建表信用分快照(車主IDPK,日期PK,當(dāng)前分,違約次數(shù),完成次數(shù))每日0點(diǎn)跑批:INSERT…SELECT只計(jì)算昨日增量,JOIN快照取昨日當(dāng)前分,再±分?jǐn)?shù)。優(yōu)點(diǎn):查詢當(dāng)日信用分走索引,毫秒級;缺點(diǎn):需額外存儲365天快照,約1億行。方案B:Redis滑動窗口+事件溯源用RedisZset,key=車主ID,score=事件時間戳,value=事件類型(違約/完成)。每日0點(diǎn)用ZREMRANGEBYSCORE剔除365天前事件,再ZRANGE統(tǒng)計(jì)違約次數(shù)。優(yōu)點(diǎn):內(nèi)存級,實(shí)時更新;缺點(diǎn):Redis宕機(jī)可能丟失窗口數(shù)據(jù),需寫回MySQL做冷備。綜合:讀多寫少走A,寫多讀少走B;平臺采用“雙寫”混合,核心服務(wù)讀Redis,后臺批核對MySQL。三、UML建模與面向?qū)ο笤O(shè)計(jì)3.閱讀下列說明,回答問題1至問題3。【說明】“錯峰共享”涉及自動匹配算法:當(dāng)車主提交預(yù)約請求后,系統(tǒng)要在指定區(qū)域內(nèi)找到“可共享車位”,并生成候選列表。候選排序策略包括:距離最近、價(jià)格最低、信用優(yōu)先。策略可熱插拔。【問題1】(4分】識別候選類:從說明中提取名詞,篩選出4個候選類,并給出職責(zé)。【答案】1)預(yù)約請求:封裝車牌、區(qū)域、時間、策略標(biāo)識;2)可共享車位:封裝車位ID、坐標(biāo)、價(jià)格、產(chǎn)權(quán)方、狀態(tài);3)排序策略:接口,方法sort(List<可共享車位>);4)匹配引擎:協(xié)調(diào)類,加載策略、執(zhí)行過濾、返回候選列表?!締栴}2】(6分】畫出匹配引擎的類圖,要求體現(xiàn)策略模式、依賴注入,并標(biāo)注多重度。【答案】```++++|匹配引擎|<>1|排序策略接口|++++|strategy||<<interface>>||+execute()||+sort(List)|++++|1△|||||1++|<>|距離最近策略||++|<>|價(jià)格最低策略||++|<>|信用優(yōu)先策略||++|1++|可共享車位|++|車位ID||坐標(biāo)||價(jià)格|++```多重度:匹配引擎與策略接口為1..1,匹配引擎與可共享車位為1..?!締栴}3】(5分】給出匹配引擎核心Java代碼片段,要求使用Spring@Component注入策略,并支持運(yùn)行時動態(tài)切換?!敬鸢浮縛``java@Componentpublicclass匹配引擎{privatefinalMap<String,排序策略接口>策略池;public匹配引擎(Map<String,排序策略接口>策略池){this.策略池=策略池;}publicList<可共享車位>執(zhí)行匹配(預(yù)約請求req){排序策略接口strategy=策略池.get(req.get策略標(biāo)識());if(strategy==null)thrownewIllegalArgumentException("策略不存在");List<可共享車位>candidates=加載候選(req);strategy.sort(candidates);returncandidates.stream().limit(5).collect(Collectors.toList());}}```運(yùn)行時切換:前端傳入策略標(biāo)識字符串,如“distanceLowest”,Spring自動查找對應(yīng)Bean。四、算法與數(shù)據(jù)結(jié)構(gòu)4.閱讀下列說明,回答問題1至問題3?!菊f明】“車位占用預(yù)測”需基于歷史出入場記錄,預(yù)測未來1小時各車位是否空閑。歷史數(shù)據(jù)為流式事件:{車位ID,事件類型(進(jìn)/出),時間戳},每秒約5k條,存儲于Kafka?!締栴}1】(4分】給出一種“滑動窗口+布隆過濾器”去重方案,防止同一事件被重復(fù)計(jì)算,說明誤判影響及容忍度?!敬鸢浮坎悸∵^濾器位數(shù)組長度2^24(16Mb),哈希函數(shù)7個,誤判率≈0.8%。對每條事件取hash(車位ID+時間戳/300秒)作為key,300秒一個桶。誤判影響:極少數(shù)事件被誤判為“已處理”而丟棄,導(dǎo)致預(yù)測準(zhǔn)確率下降<0.1%,業(yè)務(wù)可容忍。【問題2】(6分】采用“離散小波變換+DCT”壓縮一周歷史數(shù)據(jù),再輸入LSTM預(yù)測。請給出壓縮流程,并證明誤差上限?!敬鸢浮苛鞒蹋?)按車位聚合,生成14407=10080點(diǎn)時間序列(每分鐘采樣,1表示占用,0表示空閑);2)做三級Haar小波,保留最大k=256系數(shù);3)對殘差做8×8塊DCT,量化步長q=2,zigzag取前10系數(shù);4)反變換重建序列x?。誤差上限:小波部分能量保留率≥95%,DCT部分最大單點(diǎn)誤差≤q√2=2.8,故整體序列平均絕對誤差≤0.15,滿足預(yù)測模型輸入敏感度要求?!締栴}3】(5分】若采用“多任務(wù)學(xué)習(xí)”同時預(yù)測1000個車位的占用,請?jiān)O(shè)計(jì)共享私有網(wǎng)絡(luò)結(jié)構(gòu),并給出參數(shù)共享比例?!敬鸢浮抗蚕韺樱?層TCN(時序卷積)+Attention,輸出64維隱向量,參數(shù)量0.8M;私有層:每層車位一個MLP(64→32→1),參數(shù)量1000×(64×32+32×1)=2.08M;共享比例=0.8/(0.8+2.08)=27.7%,既避免過擬合,又保留車位特異性。五、軟件架構(gòu)設(shè)計(jì)5.閱讀下列說明,回答問題1至問題3?!菊f明】平臺采用“微服務(wù)+事件驅(qū)動”架構(gòu):訂單、支付、信用、通知四個服務(wù)。事件總線使用Kafka,要求“無業(yè)務(wù)侵入”的分布式事務(wù),即不依賴Seata等框架?!締栴}1】(4分】給出“Saga編排型”事務(wù)定義,并寫出“預(yù)約支付信用”三步的流程圖節(jié)點(diǎn)。【答案】Saga:把長事務(wù)拆為若干本地事務(wù),每個本地事務(wù)發(fā)布事件,下游消費(fèi)并執(zhí)行本地事務(wù),失敗時補(bǔ)償。節(jié)點(diǎn):1)訂單服務(wù):創(chuàng)建訂單(本地事務(wù))→發(fā)布“訂單已創(chuàng)建”;2)支付服務(wù):監(jiān)聽“訂單已創(chuàng)建”→扣款→發(fā)布“支付成功”;3)信用服務(wù):監(jiān)聽“支付成功”→加信用分→發(fā)布“信用已更新”;補(bǔ)償:3′)信用服務(wù)失敗→發(fā)布“信用更新失敗”;2′)支付服務(wù)監(jiān)聽“信用更新失敗”→退款→發(fā)布“支付已退款”;1′)訂單服務(wù)監(jiān)聽“支付已退款”→關(guān)閉訂單?!締栴}2】(6分】為防止“重復(fù)消費(fèi)”導(dǎo)致扣款多次,支付服務(wù)需實(shí)現(xiàn)冪等。請給出“數(shù)據(jù)庫唯一索引+狀態(tài)機(jī)”雙保險(xiǎn)方案的關(guān)鍵SQL與Java偽代碼?!敬鸢浮勘恚褐Ц队涗?支付IDPK,訂單號UK,狀態(tài),金額,創(chuàng)建時間,更新時間)狀態(tài):INIT|SUCCESS|FAILSQL:```sqlINSERTINTO支付記錄(支付ID,訂單號,狀態(tài),金額)VALUES({支付ID},{訂單號},'INIT',{金額})ONDUPLICATEKEYUPDATE狀態(tài)=狀態(tài);```Java:```java@Transactionalpublicvoid處理支付(String訂單號,BigDecimal金額){String支付ID=MD5(訂單號);dao.insertIgnore(支付ID,訂單號,金額);//利用UK沖突則返回0introw=dao.updateStateFromInitToSuccess(支付ID);//where狀態(tài)='INIT'if(row==0){//已消費(fèi)過log.warn("重復(fù)消費(fèi),支付ID={}",支付ID);return;}真正扣款(訂單號,金額);}```雙保險(xiǎn):即使Kafka重試,同一支付ID只能由INIT→SUCCESS一次。【問題3】(5分】信用服務(wù)每日需對賬“加分明細(xì)”與“支付成功”事件,發(fā)現(xiàn)漏加即補(bǔ)償。請給出“批流一體”對賬架構(gòu),并說明如何做到“秒級延遲+日級校正”?!敬鸢浮考軜?gòu):1)FlinkCEP實(shí)時消費(fèi)“支付成功”流,在5秒窗口內(nèi)關(guān)聯(lián)“加分明細(xì)”流,未匹配輸出到sideoutput;2)sideoutput寫入Kafkatopic:delay,延遲檢查30分鐘,再次關(guān)聯(lián);3)每日0點(diǎn)Spark批任務(wù)掃描T1“支付成功”表與“加分明細(xì)”表全量leftjoin,發(fā)現(xiàn)漏加調(diào)用補(bǔ)償接口。秒級延遲由Flink保證,日級校正由Spark保證,二者共用相同業(yè)務(wù)時間分區(qū),避免口徑差異。六、測試與質(zhì)量保證6.閱讀下列說明,回答問題1至問題3。【說明】“錯峰共享”上線前需驗(yàn)證“高并發(fā)下不超賣”與“低信用用戶被拒絕”兩個場景。【問題1】(4分】給出“超賣”形式化定義,并設(shè)計(jì)一種“確定性”測試用例,使得在10萬并發(fā)下必現(xiàn)超賣(若缺陷存在)。【答案】超賣定義:同一車位在同一分鐘被兩個及以上已確認(rèn)合約引用。用例:1)初始化車位A狀態(tài)=空閑;2)構(gòu)造10萬線程,同時提交預(yù)約A的請求,參數(shù)時間均為T~T+1h;3)使用原子計(jì)數(shù)器記錄“已確認(rèn)”合約數(shù);4)斷言計(jì)數(shù)器≤1,否則超賣。通過JMeter+KubernetesHPA彈性擴(kuò)容,壓測集群100Pod,每Pod1k線程,RTT<50ms,必現(xiàn)缺陷。【問題2】(6分】低信用場景需Mock征信中心,但真實(shí)環(huán)境網(wǎng)絡(luò)延遲≥200ms。請給出“契約測試+TestDouble”方案,并寫出Pact契約片段。【答案】契約測試:信用服務(wù)作為消費(fèi)者,征信中心作為提供者。Pact片段:```json{"consumer":{"name":"creditservice"},"provider":{"name":"creditcenter"},"interaction

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論