2025上半年軟件設計師《應用技術》考試真題及答案_第1頁
2025上半年軟件設計師《應用技術》考試真題及答案_第2頁
2025上半年軟件設計師《應用技術》考試真題及答案_第3頁
2025上半年軟件設計師《應用技術》考試真題及答案_第4頁
2025上半年軟件設計師《應用技術》考試真題及答案_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2025上半年軟件設計師《應用技術》考試練習題及答案一、數據流圖與數據字典【試題1】閱讀下列說明和圖示,回答問題1至問題3。某市“智慧停車”平臺擬升級,新增“錯峰共享”功能:白天寫字樓車位空閑時,可向周邊居民開放;夜間小區(qū)車位空閑時,可向寫字樓車主開放。平臺需記錄共享時段、價格策略、訂單、支付、信用評分及違約記錄。圖11為0層數據流圖,圖12為1層“訂單處理”細化圖。圖110層數據流圖(頂層)外部實體:E1車主、E2業(yè)主、E3支付網關、E4征信中心主要加工:P0智慧停車平臺數據存儲:D1車位目錄、D2賬戶、D3訂單庫、D4價格策略、D5信用庫圖121層“訂單處理”細化加工:P1.1預約申請、P1.2沖突檢測、P1.3價格計算、P1.4生成訂單、P1.5支付、P1.6確認、P1.7違約判定數據流:F1預約請求(車主→P1.1)F2可用車位列表(P1.1→車主)F3沖突查詢(P1.2→D1)F4價格查詢(P1.3→D4)F5待支付訂單(P1.4→P1.5)F6支付結果(P1.5→P1.6)F7違約記錄(P1.7→D5)【問題1】(4分)圖11中缺少一條外部實體與加工之間的數據流,請指出起點、終點并命名該數據流?!敬鸢浮科瘘c:E4征信中心,終點:P0智慧停車平臺,數據流名稱:信用查詢請求?!締栴}2】(6分)圖12中P1.2“沖突檢測”需要讀取D1車位目錄,但圖中未畫出,請補充該數據流方向及名稱;同時指出P1.7“違約判定”向D5寫入的數據流名稱?!敬鸢浮垦a充數據流:D1→P1.2,名稱:車位占用時段讀??;P1.7→D5,名稱:違約記錄寫入?!締栴}3】(5分)數據字典節(jié)選:“預約請求”=車主ID+車位ID+起始時間+結束時間+共享類型“價格策略”=策略ID+時段類型+計價單位+單價+封頂價請用結構化語言寫出P1.3“價格計算”的加工邏輯,要求體現(xiàn)“共享類型=‘日間’且停車時長≤2小時按單價7折,其余按原價;夜間一律原價”?!敬鸢浮縄F共享類型=‘日間’THEN?IF停車時長≤2小時THEN??費用=單價0.7停車時長?ELSE??費用=單價停車時長?ENDIFELSE?費用=單價停車時長ENDIFIF費用>封頂價THEN費用=封頂價ENDIF二、數據庫設計【試題2】閱讀下列說明,回答問題1至問題3?!板e峰共享”平臺需建立數據庫,核心實體如下:Owner(業(yè)主):owner_id,name,phone,addrCarPort(車位):port_id,owner_id,addr,lng,lat,share_type(枚舉:day,night,both)Strategy(價格策略):strategy_id,port_id,day_type,start_time,end_time,unit_price,max_priceOrder(訂單):order_id,car_id,port_id,start_time,end_time,fee,status(枚舉:reserved,parked,finished,default)Car(車輛):car_id,owner_id,plate,modelPayment(支付):pay_id,order_id,amount,pay_time,channel【問題1】(4分)指出各關系模式的主鍵與外鍵?!敬鸢浮縊wner:主鍵owner_idCarPort:主鍵port_id,外鍵owner_id引用OwnerStrategy:主鍵strategy_id,外鍵port_id引用CarPortCar:主鍵car_id,外鍵owner_id引用OwnerOrder:主鍵order_id,外鍵car_id引用Car,port_id引用CarPortPayment:主鍵pay_id,外鍵order_id引用Order【問題2】(6分)某業(yè)主同一路段有多個車位,要求“同一車位在同一時刻只能有一個‘reserved’或‘parked’狀態(tài)的訂單”,請用SQL完成如下約束:(1)在Order表上創(chuàng)建復合唯一約束;(2)創(chuàng)建觸發(fā)器,當插入或更新Order時,若沖突則拋出錯誤?!敬鸢浮浚?)ALTERTABLE"Order"ADDCONSTRAINTuk_port_timeUNIQUE(port_id,status)WHEREstatusIN('reserved','parked');(注:MySQL8.0不支持WHERE,需改用函數索引或觸發(fā)器,此處以PostgreSQL語法示例)(2)CREATEORREPLACEFUNCTIONchk_port_time()RETURNSTRIGGERAS$$BEGIN?IFEXISTS(SELECT1FROM"Order"??WHEREport_id=NEW.port_id??ANDstatusIN('reserved','parked')??ANDtsrange(start_time,end_time)&&tsrange(NEW.start_time,NEW.end_time)??ANDorder_id<>NEW.order_id)THEN??RAISEEXCEPTION'車位時段沖突';?ENDIF;?RETURNNEW;END;$$LANGUAGEplpgsql;CREATETRIGGERtrg_chk_port_timeBEFOREINSERTORUPDATEON"Order"FOREACHROWEXECUTEFUNCTIONchk_port_time();【問題3】(5分)為支持“信用分”功能,新增表Credit(owner_id,score,update_time),要求:①score在0~1000之間;②每次Order.status變?yōu)椤甦efault’時,score減50,但最低不低于0;③當score<600時,該業(yè)主所有Strategy失效,即unit_price置為0(不允許共享)。請寫出觸發(fā)器實現(xiàn)②③?!敬鸢浮緾REATEORREPLACEFUNCTIONpenalize_owner()RETURNSTRIGGERAS$$DECLAREv_scoreint;BEGIN?IFNEW.status='default'ANDOLD.status<>'default'THEN??UPDATECreditSETscore=GREATEST(score50,0),update_time=now()??WHEREowner_id=(SELECTowner_idFROMCarPortWHEREport_id=NEW.port_id);??SELECTscoreINTOv_scoreFROMCreditWHEREowner_id=(SELECTowner_idFROMCarPortWHEREport_id=NEW.port_id);??IFv_score<600THEN???UPDATEStrategySETunit_price=0WHEREport_idIN(SELECTport_idFROMCarPortWHEREowner_id=(SELECTowner_idFROMCarPortWHEREport_id=NEW.port_id));??ENDIF;?ENDIF;?RETURNNEW;END;$$LANGUAGEplpgsql;CREATETRIGGERtrg_penalizeAFTERUPDATEOFstatusON"Order"FOREACHROWEXECUTEFUNCTIONpenalize_owner();三、UML建?!驹囶}3】閱讀下列說明和圖,回答問題1至問題3。采用領域驅動設計,圖31為類圖,圖32為狀態(tài)機圖。圖31類圖(節(jié)選)類Owner+ownerId:UUID+name:String+register()+disableShare()類CarPort+portId:UUID+owner:Owner+location:Location+shareType:ShareType+strategy:Strategy+checkAvailable(start,end):Boolean類TimeSegment+start:Instant+end:Instant+overlaps(other:TimeSegment):Boolean類Order+orderId:UUID+car:Car+port:CarPort+timeSegment:TimeSegment+status:OrderStatus+create()+pay()+complete()+default()類Strategy+strategyId:UUID+port:CarPort+priceOf(seg:TimeSegment):Money圖32狀態(tài)機圖(Order)[Reserved]─pay()─→[Paid]─enter()─→[Parked]─exit()─→[Finished][Parked]─timeout()─→[Default]【問題1】(4分)類圖中CarPort與Strategy為一對多,Order與Car為多對一,請指出關聯(lián)的多重性并補全:CarPort1─StrategyCar1─Order【答案】CarPort1─StrategyCar1─Order【問題2】(6分)狀態(tài)機圖中,若車輛在[Parked]狀態(tài)停留超過訂單結束時間30分鐘,則觸發(fā)timeout()遷移到[Default],請用OCL寫出守衛(wèi)條件?!敬鸢浮縞ontextOrder::timeout()pre:self.status=OrderStatus::Parkedand??now()>self.timeSegment.end.plusMinutes(30)【問題3】(5分】采用策略模式實現(xiàn)“價格計算”,要求支持“工作日日間7折、夜間原價、節(jié)假日原價”策略,請給出類圖補充,并寫出Java代碼片段(接口+兩個實現(xiàn)類)?!敬鸢浮拷涌冢簆ublicinterfacePriceStrategy{?Moneycalculate(TimeSegmentseg,MoneyunitPrice);}實現(xiàn)類1:publicclassWeekdayDiscountStrategyimplementsPriceStrategy{?publicMoneycalculate(TimeSegmentseg,MoneyunitPrice){??DayOfWeekdow=seg.getStart().atZone(ZoneId.systemDefault()).getDayOfWeek();??if(dow==SATURDAY||dow==SUNDAY)returnunitPrice.multiply(seg.durationHours());??inth=seg.getStart().getHour();??if(h>=8&&h<18)returnunitPrice.multiply(seg.durationHours()).multiply(0.7);??elsereturnunitPrice.multiply(seg.durationHours());?}}實現(xiàn)類2:publicclassHolidayNoDiscountStrategyimplementsPriceStrategy{?privatefinalList<LocalDate>holidays;?publicMoneycalculate(TimeSegmentseg,MoneyunitPrice){??LocalDatedate=seg.getStart().atZone(ZoneId.systemDefault()).toLocalDate();??if(holidays.contains(date))returnunitPrice.multiply(seg.durationHours());??returnunitPrice.multiply(seg.durationHours());?}}四、數據結構與算法【試題4】問題1至問題3。智慧停車平臺每晚需做“收益清算”:給定n個訂單,每個訂單有start_i、end_i、fee_i,若任意兩個訂單時間重疊,則稱它們屬于同一“批次”,批次收益為批次內所有fee之和。求最大批次收益?!締栴}1】(4分】證明該問題等價于求“最大權區(qū)間重疊團”?!敬鸢浮繉⒚總€訂單視為區(qū)間[start_i,end_i],權值為fee_i。批次即重疊團,收益即團權值和,故等價。【問題2】(6分】設計O(nlogn)算法并給出偽代碼?!敬鸢浮渴录c掃描:1.創(chuàng)建事件數組,每個訂單拆成(start_i,+1,fee_i)和(end_i,1,fee_i)2.按時間排序,時間相同則先處理1事件3.掃描,維護當前權值S,記錄S_max偽代碼:events=[]foreachorder:?events.add((start_i,1,fee_i))?events.add((end_i,1,fee_i))sorteventsbytime,thenbytypedescS=0,S_max=0for(t,type,f)inevents:?S+=typef?S_max=max(S_max,S)returnS_max【問題3】(5分】若n=1e6,fee_i≤10000,內存限制256MB,請優(yōu)化空間并給出C++核心代碼。【答案】無需存儲所有事件,可邊讀邊排序:使用優(yōu)先隊列或外部排序,但n=1e6已可全部讀入。核心代碼:include<bits/stdc++.h>usingnamespacestd;structEvent{?longlongt;inttype,f;?booloperator<(constEvent&r)const{??if(t!=r.t)returnt<r.t;??returntype>r.type;?}};intmain(){?ios::sync_with_stdio(false);?cin.tie(nullptr);?intn;cin>>n;?vector<Event>ev(2n);?for(inti=0;i<n;++i){??longlongs,e,f;cin>>s>>e>>f;??ev[2i]={s,1,f};??ev[2i+1]={e,1,f};?}?sort(ev.begin(),ev.end());?longlongS=0,S_max=0;?for(auto&e:ev){??S+=e.typee.f;??S_max=max(S_max,S);?}?cout<<S_max;}五、面向對象程序設計【試題5】閱讀下列說明,回答問題1至問題3。某項目采用SpringBoot+MyBatis,需實現(xiàn)“信用分扣減”業(yè)務,要求:①支持多種規(guī)則(違約扣50、投訴扣20、好評加10);②規(guī)則可熱部署;③同一事務內先扣減后寫流水。【問題1】(4分】設計模式選型并說明理由。【答案】采用策略模式+責任鏈模式:策略封裝不同規(guī)則,責任鏈支持疊加校驗,滿足開閉原則與熱部署?!締栴}2】(6分】給出核心類圖與Spring配置(JavaConfig)。【答案】接口:publicinterfaceCreditRule{?intscore();?Stringreason();?booleansupport(Stringevent);}實現(xiàn):@Component@Order(1)publicclassDefaultRuleimplementsCreditRule{?publicintscore(){return50;}?publicStringreason(){return"違約";}?publicbooleansupport(Stringevent){return"default".equals(event);}}配置:@ConfigurationpublicclassRuleConfig{?@Bean?publicList<CreditRule>rules(){??returnArrays.asList(newDefaultRule(),newComplaintRule(),newPraiseRule());?}}【問題3】(5分】寫出Service層事務控制代碼,確?!翱蹨p與流水”同事務?!敬鸢浮緻ServicepublicclassCreditService{?@Autowired?privateList<CreditRule>rules;?@Autowired?privateCreditMappermapper;?@Transactional?publicvoidchange(StringownerId,Stringevent){??CreditRulerule=rules.stream().filter(r>r.support(event)).findFirst().orElseThrow();??intdelta=rule.score();??mapper.updateScore(ownerId,delta);??mapper.insertLog(ownerId,delta,rule.reason(),LocalDateTime.now());?}}六、軟件架構設計【試題6】問題1至問題3。平臺擬采用“事件溯源”架構,將訂單狀態(tài)變化存儲為事件流,事件存儲在Kafka,投影庫采用MongoDB。【問題1】(4分】給出事件體JSONSchema,字段須包含事件ID、訂單ID、事件類型、時間戳、操作人、payload?!敬鸢浮縶?"$schema":"/draft07/schema",?"type":"object",?"required":["eventId","orderId","eventType","timestamp","operator","payload"],?"properties":{??"eventId":{"type":"string","format":"uuid"},??"orderId":{"type":"string","format":"uuid"},??"eventType":{"enum":["Reserved","Paid","Parked","Finished","Default"]},??"timestamp":{"type":"string","format":"datetime"},??"operator":{"type":"string"},??"payload":{???"type":"object",???"properties":{????"startTime":{"type":"string","format":"datetime"},????"endTime":{"type":"string","format":"datetime"},????"fee":{"type":"number"}???}??}?}}【問題2】(6分】設計投影服務,實現(xiàn)“訂單當前狀態(tài)”查詢,要求:①冪等消費;②支持重放;③延遲<1s。請給出架構圖與關鍵配置?!敬鸢浮考軜嫞篕afka→(FaustApp)→MongoDBFaust配置:processing_guarantee='exactly_once'topic_partitions=12consumer_session_timeout_ms=30000MongoDB冪等寫入:以eventId為唯一索引,upsert?!締栴}3】(5分】若MongoDB投影庫故障,需快速重建,請寫出重建流程與命令?!敬鸢浮?.啟動新消費組‘replaygroup’,指定auto.offset.reset='earliest'2.faustAprojection_appwor

溫馨提示

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

評論

0/150

提交評論