版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2026年軟件工程師技術(shù)崗位面試題解一、編程實現(xiàn)題(共3題,每題20分)1.(20分)題目:編寫一個函數(shù)`merge_sorted_lists`,實現(xiàn)將兩個已排序的鏈表合并為一個新鏈表,且新鏈表依然保持排序。鏈表節(jié)點定義如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next要求:-輸入:兩個頭節(jié)點`l1`和`l2`,分別指向兩個排序鏈表。-輸出:合并后的新鏈表頭節(jié)點。-示例:輸入:l1=[1,2,4],l2=[1,3,4]輸出:[1,1,2,3,4,4]答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmerge_sorted_lists(l1:ListNode,l2:ListNode)->ListNode:dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<=l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextifl1:current.next=l1ifl2:current.next=l2returndummy.next解析:-使用虛擬頭節(jié)點`dummy`簡化邊界處理。-雙指針遍歷兩個鏈表,每次選擇較小的節(jié)點接入新鏈表。-時間復(fù)雜度:O(m+n),m和n分別為兩個鏈表的長度。-空間復(fù)雜度:O(1),僅使用常數(shù)額外空間。2.(20分)題目:實現(xiàn)一個函數(shù)`topKFrequent`,統(tǒng)計數(shù)組中頻率最高的`k`個元素。要求:-輸入:數(shù)組`nums`和整數(shù)`k`。-輸出:一個包含頻率最高的`k`個元素的數(shù)組。-示例:輸入:nums=[1,1,1,2,2,3],k=2輸出:[1,2]答案:pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):count=Counter(nums)按頻率降序排序,取前k個return[numfornum,freqincount.most_common(k)]解析:-使用`Counter`統(tǒng)計頻率。-`most_common(k)`返回頻率最高的`k`個元素。-時間復(fù)雜度:O(nlogn),排序消耗主導(dǎo)。-空間復(fù)雜度:O(n),存儲頻率計數(shù)。3.(20分)題目:實現(xiàn)一個函數(shù)`isValid`,判斷一個字符串是否為有效的括號組合。要求:-輸入:字符串`s`,包含`'('`,`')'`,`{'}`,`'}'`,`'['`,`']'`。-輸出:布爾值,表示是否有效。-示例:輸入:s="{[]}"輸出:True輸入:s="(]"輸出:False答案:pythondefisValid(s:str)->bool:stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top=stack.pop()ifstackelse'#'ifmapping[char]!=top:returnFalseelse:stack.append(char)returnnotstack解析:-使用棧匹配括號。-遇到右括號時,檢查棧頂是否為對應(yīng)左括號。-時間復(fù)雜度:O(n),遍歷一次字符串。-空間復(fù)雜度:O(n),棧最大深度為字符串長度。二、系統(tǒng)設(shè)計題(共2題,每題30分)1.(30分)題目:設(shè)計一個高并發(fā)的短鏈接系統(tǒng)(如tinyURL)。要求:-用戶輸入長鏈接,系統(tǒng)返回短鏈接。-短鏈接應(yīng)具備唯一性和可訪問性。-支持高并發(fā)訪問。答案:核心方案:1.短鏈接生成:-使用自增ID或UUID生成唯一標(biāo)識,如`62`進制編碼(a-z,A-Z,0-9)。-示例:`1`轉(zhuǎn)為`zY`。2.存儲映射:-使用Redis或內(nèi)存緩存存儲`短鏈接<->長鏈接`映射,支持高并發(fā)讀寫。-若ID自增,可使用Redis的`INCR`命令原子操作。3.分布式部署:-通過負載均衡(如Nginx)分發(fā)請求。-使用分布式ID生成器(如Snowflake)避免沖突。4.訪問穿透:-短鏈接訪問時,先查緩存,若未命中則查數(shù)據(jù)庫。-數(shù)據(jù)庫使用分片或索引優(yōu)化查詢。偽代碼示例:pythondefshorten(url):id=generate_unique_id()#如UUID或自增IDshort_code=encode62(id)store.set(short_code,url)return"/"+short_codedefredirect(short_code):url=cache.get(short_code)ifnoturl:url=db.query(short_code)cache.set(short_code,url)returnurl解析:-關(guān)鍵點:唯一性、高并發(fā)、可擴展性。-緩存可顯著提升訪問速度。-分區(qū)或分布式存儲解決大數(shù)據(jù)量問題。2.(30分)題目:設(shè)計一個實時消息推送系統(tǒng)(如微信消息)。要求:-支持多客戶端實時接收消息。-保證消息不丟失。-支持離線推送。答案:核心方案:1.消息隊列:-使用Kafka或RabbitMQ存儲待推送消息,保證順序性和可靠性。2.客戶端管理:-客戶端登錄時,服務(wù)器記錄其WebSocket連接或長連接ID。-維護`用戶ID<->連接ID`映射。3.實時推送:-推送時直接通過WebSocket或WebSocket協(xié)議發(fā)送。-若客戶端離線,消息存入Redis或數(shù)據(jù)庫,待客戶端上線時補發(fā)。4.離線處理:-客戶端定期心跳,服務(wù)器檢測超時則標(biāo)記為離線。-使用定時任務(wù)(如Cron)清理過期離線消息。偽代碼示例:pythondefsend_message(user_id,message):conn_id=user_to_conn.get(user_id)ifconn_id:websocket.send(conn_id,message)else:queue.push((user_id,message))#存入消息隊列defoffline_push():messages=db.query_expired_messages()foruser_id,msginmessages:send_message(user_id,msg)解析:-關(guān)鍵點:消息可靠性、低延遲、離線支持。-WebSocket保證實時性,隊列防消息丟失。三、數(shù)據(jù)庫與SQL題(共2題,每題25分)1.(25分)題目:假設(shè)有一個訂單表`orders`:sqlCREATETABLEorders(idINTPRIMARYKEY,user_idINT,product_idINT,amountDECIMAL,order_timeTIMESTAMP);要求:-查詢每個用戶的訂單總金額,按金額降序排列。答案:sqlSELECTuser_id,SUM(amount)AStotal_amountFROMordersGROUPBYuser_idORDERBYtotal_amountDESC;解析:-`SUM`計算總金額,`GROUPBY`按用戶分組。-`ORDERBY`實現(xiàn)降序。2.(25分)題目:假設(shè)有一個用戶表`users`:sqlCREATETABLEusers(idINTPRIMARYKEY,usernameVARCHAR(50),reg_timeTIMESTAMP);要求:-查詢注冊時間在2023年的用戶數(shù)量,按月份降序排列。答案:sqlSELECTEXTRACT(MONTHFROMreg_time)ASmonth,COUNT()ASuser_countFROMusersWHEREEXTRACT(YEARFROMreg_time)=2023GROUPBYmonthORDERBYmonthDESC;解析:-`EXTRACT`提取年月,`WHERE`篩選2023年。-`GROUPBY`按月份分組統(tǒng)計。四、算法與數(shù)據(jù)結(jié)構(gòu)題(共2題,每題25分)1.(25分)題目:給定一個整數(shù)數(shù)組,返回其中和為特定值`target`的“連續(xù)子數(shù)組”的個數(shù)。要求:-輸入:數(shù)組`nums`和`target`。-輸出:滿足條件的子數(shù)組數(shù)量。-示例:輸入:nums=[1,2,3],target=3輸出:2([1,2]和[3])答案:pythondefsubarraySum(nums,target):count=0current_sum=0prefix_sums={0:1}#初始化fornuminnums:current_sum+=numifcurrent_sum-targetinprefix_sums:count+=prefix_sums[current_sum-target]prefix_sums[current_sum]=prefix_sums.get(current_sum,0)+1returncount解析:-前綴和+哈希表優(yōu)化。-時間復(fù)雜度:O(n),只需遍歷一次數(shù)組。2.(25分)題目:實現(xiàn)一個函數(shù)`maxProfit`,計算買賣股票的最佳時機。要求:-輸入:價格數(shù)組`prices`(第i個元素代表第i天的價格)。-輸出:最大利潤。-示例:輸入:prices=[7,1,5,3,6,4]輸出:5(買入1,賣出6)答案:pythondefmaxProfit(prices):min_price=float('inf')max_profit
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025秋蘇少版(2024)初中美術(shù)七年級上冊知識點及期末測試卷及答案
- 護理課件:皮膚護理的未來趨勢
- (新教材)2026年滬科版八年級下冊數(shù)學(xué) 17.5 一元二次方程的應(yīng)用 課件
- 2025年辦公樓宇安防合作合同
- 設(shè)備安全防護裝置配置規(guī)范
- 基于知識圖譜的資源關(guān)聯(lián)挖掘方法
- 人工智能在智能投顧中的應(yīng)用-第4篇
- 2026 年中職救援技術(shù)(救援技能)技能測試題
- 英語第二單元試題及答案
- 網(wǎng)紅經(jīng)濟對大學(xué)生從眾消費行為的扎根理論研究
- 上海財經(jīng)大學(xué)2026年輔導(dǎo)員及其他非教學(xué)科研崗位人員招聘備考題庫帶答案詳解
- 2026湖北恩施州建始縣教育局所屬事業(yè)單位專項招聘高中教師28人備考筆試試題及答案解析
- 心肺康復(fù)課件
- 2025人民法院出版社社會招聘8人(公共基礎(chǔ)知識)測試題附答案解析
- 上海市奉賢區(qū)2026屆高三一模英語試題
- 2025年山東省夏季普通高中學(xué)業(yè)水平合格考試物理試題(解析版)
- 科室質(zhì)控小組活動內(nèi)容及要求
- 圖形創(chuàng)意應(yīng)用課件
- 北京師范大學(xué)珠海校區(qū)
- 豎窯控制系統(tǒng)手冊
- 煤礦投資可行性研究分析報告
評論
0/150
提交評論