2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案_第1頁
2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案_第2頁
2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案_第3頁
2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案_第4頁
2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2026年軟件工程師技術(shù)面試題及系統(tǒng)設(shè)計(jì)能力評估含答案一、編程題(共5題,每題20分,總分100分)1.題目:給定一個(gè)包含重復(fù)數(shù)字的數(shù)組,請編寫一個(gè)函數(shù),返回所有不重復(fù)的子集。例如,輸入`[1,2,2]`,輸出`[[],[1],[1,2],[1,2,2],[2],[2,2]]`。要求:-時(shí)間復(fù)雜度O(N2^N)-空間復(fù)雜度O(N2^N)-不能使用內(nèi)置集合去重2.題目:實(shí)現(xiàn)一個(gè)LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。緩存容量為`capacity`,超出容量時(shí)需刪除最久未使用的頁。要求:-`get(key)`返回鍵對應(yīng)的值,若不存在返回`-1`-`put(key,value)`插入或更新鍵值對,若超出容量則刪除最久未使用的頁-使用哈希表和雙向鏈表實(shí)現(xiàn)3.題目:編寫一個(gè)函數(shù),將一個(gè)32位無符號整數(shù)(二進(jìn)制表示)的反轉(zhuǎn)。例如,輸入`123`,輸出`321`;輸入`120`,輸出`21`。要求:-不能使用庫函數(shù)-不能使用字符串轉(zhuǎn)換-處理邊緣情況(如輸入`0`或`INT_MAX`)4.題目:給定一個(gè)二叉樹,判斷其是否為平衡二叉樹(左右子樹高度差不超過1)。要求:-時(shí)間復(fù)雜度O(N)-遞歸實(shí)現(xiàn)5.題目:實(shí)現(xiàn)一個(gè)Trie(前綴樹),支持`insert`、`search`和`startsWith`操作。要求:-`insert(word)`插入一個(gè)單詞-`search(word)`完全匹配單詞-`startsWith(prefix)`檢查是否有以prefix開頭的單詞二、系統(tǒng)設(shè)計(jì)題(共3題,每題50分,總分150分)1.題目:設(shè)計(jì)一個(gè)高并發(fā)的短鏈接系統(tǒng)(如`tinyurl`)。要求:-輸入任意長鏈接,輸出6位短鏈接(如`aBcDeF`)-支持高并發(fā)訪問(百萬級QPS)-短鏈接唯一且可逆(通過短鏈接找回原鏈接)-需考慮分布式部署、緩存、數(shù)據(jù)庫設(shè)計(jì)2.題目:設(shè)計(jì)一個(gè)實(shí)時(shí)消息推送系統(tǒng)(如微信、抖音的動(dòng)態(tài)刷新)。要求:-支持用戶訂閱和取消訂閱主題-新消息實(shí)時(shí)推送給所有訂閱者-支持離線消息緩存-需考慮高可用、可擴(kuò)展性3.題目:設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng)(如雙十一搶購)。要求:-支持10萬用戶秒殺1000件商品-防止超賣、重復(fù)下單-需考慮限流、分布式鎖、數(shù)據(jù)庫優(yōu)化三、數(shù)據(jù)庫設(shè)計(jì)題(共2題,每題25分,總分50分)1.題目:設(shè)計(jì)一個(gè)電商平臺(tái)的訂單表(`orders`),包含以下字段:-`order_id`(主鍵)-`user_id`(用戶ID)-`product_id`(商品ID)-`quantity`(數(shù)量)-`price`(單價(jià))-`order_time`(下單時(shí)間)-`status`(訂單狀態(tài),如待支付、已支付、已發(fā)貨等)要求:-考慮索引設(shè)計(jì)(哪些字段需要索引?為什么?)-處理高并發(fā)寫入場景2.題目:設(shè)計(jì)一個(gè)社交平臺(tái)的用戶關(guān)系表(`relations`),支持添加關(guān)注、取消關(guān)注、查看粉絲列表等功能。要求:-表結(jié)構(gòu)設(shè)計(jì)-關(guān)系類型(單向/雙向)-查詢性能優(yōu)化四、算法題(共3題,每題25分,總分75分)1.題目:給定一個(gè)字符串,找到其中不重復(fù)的最長子串長度。例如,輸入`"abcabcbb"`,輸出`3`(子串`"abc"`)。要求:-時(shí)間復(fù)雜度O(N)-使用滑動(dòng)窗口方法2.題目:設(shè)計(jì)一個(gè)算法,判斷一個(gè)數(shù)是否為素?cái)?shù)。要求:-處理大數(shù)(如`10^18`)-優(yōu)化時(shí)間復(fù)雜度3.題目:實(shí)現(xiàn)快速排序算法,并分析其平均時(shí)間復(fù)雜度和最壞時(shí)間復(fù)雜度。要求:-手寫代碼-解釋隨機(jī)化如何優(yōu)化答案及解析一、編程題1.子集問題答案:pythondefsubsetsWithDup(nums):res=[]nums.sort()#排序去重subset=[]defbacktrack(index):res.append(subset.copy())foriinrange(index,len(nums)):ifi>indexandnums[i]==nums[i-1]:continue#跳過重復(fù)元素subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnres解析:-排序后通過`i>index`跳過重復(fù)元素-遞歸時(shí)`backtrack(i+1)`確保不重復(fù)使用同一元素-時(shí)間復(fù)雜度O(N2^N),空間復(fù)雜度O(N2^N)2.LRU緩存答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head,self.tail=Node(0,0),Node(0,0)self.head.next=self.tailself.tail.prev=self.headclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev=Noneself.next=Nonedefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key]self._remove(node)self._add(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:self._remove(self.cache[key])node=Node(key,value)self.cache[key]=nodeself._add(node)iflen(self.cache)>self.capacity:lru=self.tail.prevself._remove(lru)delself.cache[lru.key]def_remove(self,node):delself.cache[node.key]node.prev.next=node.nextnode.next.prev=node.prevdef_add(self,node):node.next=self.head.nextnode.next.prev=nodeself.head.next=nodenode.prev=self.head解析:-使用雙向鏈表維護(hù)訪問順序,頭為最近使用,尾為最久未使用-哈希表實(shí)現(xiàn)O(1)訪問-超出容量時(shí)刪除鏈表尾部節(jié)點(diǎn)3.整數(shù)反轉(zhuǎn)答案:pythondefreverse(x:int)->int:INT_MAX=231-1INT_MIN=-231res=0whilex!=0:pop=x%10x//=10ifres>INT_MAX//10or(res==INT_MAX//10andpop>7):return0#溢出ifres<INT_MIN//10or(res==INT_MIN//10andpop<-8):return0#溢出res=res10+popreturnres解析:-逐位取出數(shù)字,構(gòu)建反轉(zhuǎn)結(jié)果-檢查32位整數(shù)溢出情況4.平衡二叉樹答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefisBalanced(root:TreeNode)->bool:defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:-遞歸計(jì)算左右子樹高度,若差值超過1則不平衡-時(shí)間復(fù)雜度O(N),空間復(fù)雜度O(N)5.Trie答案:pythonclassTrie:def__init__(self):self.root={}definsert(self,word:str)->None:node=self.rootforcharinword:ifcharnotinnode:node[char]={}node=node[char]node['#']=True#標(biāo)記結(jié)束defsearch(self,word:str)->bool:node=self._find(word)returnnodeisnotNoneand'#'innodedefstartsWith(self,prefix:str)->bool:returnself._find(prefix)isnotNonedef_find(self,word):node=self.rootforcharinword:ifcharnotinnode:returnNonenode=node[char]returnnode解析:-使用字典存儲(chǔ)節(jié)點(diǎn),`#`表示單詞結(jié)束-時(shí)間復(fù)雜度O(L),L為單詞長度二、系統(tǒng)設(shè)計(jì)題1.短鏈接系統(tǒng)設(shè)計(jì):核心思路:-使用Base62編碼(a-z,A-Z,0-9)將ID映射為短鏈接-分布式ID生成器(如Snowflake算法)-緩存層(Redis)加速短鏈接解析數(shù)據(jù)庫設(shè)計(jì):sqlCREATETABLEshort_links(idBIGINTPRIMARYKEYAUTO_INCREMENT,original_urlVARCHAR(2048)NOTNULL,short_codeCHAR(6)NOTNULLUNIQUE,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);流程:1.輸入長鏈接,生成唯一ID(Snowflake)2.ID轉(zhuǎn)為Base62編碼(如`aBcDeF`)3.存儲(chǔ)`(ID,original_url,short_code)`到數(shù)據(jù)庫4.緩存`short_code->original_url`到Redis2.實(shí)時(shí)消息推送系統(tǒng)設(shè)計(jì):核心思路:-發(fā)布訂閱模式(如Kafka、RabbitMQ)-WebSocket或長輪詢實(shí)現(xiàn)實(shí)時(shí)性-離線消息隊(duì)列(Redis)架構(gòu):1.用戶訂閱主題(存儲(chǔ)到數(shù)據(jù)庫/Redis)2.消息生產(chǎn)者發(fā)布消息到Kafka/RabbitMQ3.消息消費(fèi)者(服務(wù)端)訂閱隊(duì)列,推送給客戶端4.離線消息存儲(chǔ)Redis,客戶端上線后補(bǔ)發(fā)3.秒殺系統(tǒng)設(shè)計(jì):核心思路:-分布式鎖(Redis或ZooKeeper)-數(shù)據(jù)庫樂觀鎖(版本號)-流量控制(熔斷限流)數(shù)據(jù)庫設(shè)計(jì):sqlCREATETABLEproducts(idINTPRIMARYKEY,stockINTNOTNULL,versionINTNOTNULL);流程:1.用戶請求時(shí),檢查`stock>0`2.獲取分布式鎖,更新`stock`和`version`3.校驗(yàn)`version`未被修改,確認(rèn)秒殺成功4.釋放鎖,返回結(jié)果三、數(shù)據(jù)庫設(shè)計(jì)題1.電商訂單表設(shè)計(jì):索引設(shè)計(jì):-`order_id`(主鍵,自增)-`user_id`(索引,用于查詢用戶訂單)-`(status,order_time)`(復(fù)合索引,用于查詢某狀態(tài)訂單按時(shí)間排序)高并發(fā)寫入:-分庫分表(按`user_id`或`order_id`碎片化)-使用MVCC隔離級別2.社交關(guān)系表設(shè)計(jì):表結(jié)構(gòu):sqlCREATETABLErelations(user_idINTNOTNULL,target_idINTNOTNULL,typeENUM('follow','follower')NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(user_id,target_id,type),FOREIGNKEY(user_id)REFERENCESusers(id),FOREIGNKEY(target_id)REFERENCESusers(id));查詢優(yōu)化:-使用覆蓋索引`(user_id,type)`查詢粉絲-分頁時(shí)使用`LIMIToffset,count`四、算法題1.滑動(dòng)窗口子串問題:pythondeflengthOfLongestSubstring(s:str)->int:char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,

溫馨提示

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

最新文檔

評論

0/150

提交評論