2026年IT大廠面試秘籍軟件工程師面試題集_第1頁
2026年IT大廠面試秘籍軟件工程師面試題集_第2頁
2026年IT大廠面試秘籍軟件工程師面試題集_第3頁
2026年IT大廠面試秘籍軟件工程師面試題集_第4頁
2026年IT大廠面試秘籍軟件工程師面試題集_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2026年IT大廠面試秘籍:軟件工程師面試題集一、編程基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)(5題,每題10分)1.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)正整數(shù)`n`,返回`n`的階乘。要求:-不能使用遞歸。-時(shí)間復(fù)雜度盡可能低。-處理大數(shù)時(shí)考慮內(nèi)存優(yōu)化。2.題目:給定一個(gè)無重復(fù)元素的數(shù)組`nums`和一個(gè)目標(biāo)值`target`,請(qǐng)找出所有相加等于`target`的不重復(fù)三元組。要求:-不能使用重復(fù)的元素。-返回所有三元組的列表。-示例:`nums=[-1,0,1,2],target=0`→`[-1,0,1]`3.題目:請(qǐng)實(shí)現(xiàn)一個(gè)LRU(LeastRecentlyUsed)緩存機(jī)制,支持`get`和`put`操作。要求:-使用哈希表和雙向鏈表實(shí)現(xiàn)。-`get(key)`返回鍵對(duì)應(yīng)的值,若不存在返回-1。-`put(key,value)`將鍵值對(duì)插入緩存,如果鍵已存在則更新值,如果緩存已滿則刪除最久未使用的元素。4.題目:請(qǐng)判斷一個(gè)二叉樹是否是平衡二叉樹(即任意節(jié)點(diǎn)的左右子樹高度差不超過1)。要求:-返回布爾值,并盡可能減少遞歸次數(shù)。-示例:`[3,9,20,null,null,15,7]`→`true`5.題目:請(qǐng)實(shí)現(xiàn)一個(gè)字符串的壓縮算法,將連續(xù)的相同字符合并并計(jì)數(shù)。要求:-壓縮后的字符串長(zhǎng)度小于原字符串時(shí)返回原字符串。-示例:`"aabcccccaaa"`→`"a2b1c5a3"`二、算法與動(dòng)態(tài)規(guī)劃(4題,每題12分)1.題目:給定一個(gè)字符串`s`,請(qǐng)判斷它是否可以由所有可能的子串重復(fù)多次連接而成。要求:-示例:`"abab"`→`true`,`"abcabcabc"`→`true`,`"abcabcab"`→`false`2.題目:給定一個(gè)非負(fù)整數(shù)數(shù)組`nums`,請(qǐng)將數(shù)組中的元素向右旋轉(zhuǎn)`k`次。要求:-不能使用額外空間,原地旋轉(zhuǎn)。-示例:`nums=[1,2,3,4,5],k=2`→`[4,5,1,2,3]`3.題目:給定一個(gè)正整數(shù)`n`,請(qǐng)計(jì)算1到`n`的所有整數(shù)中數(shù)字`2`出現(xiàn)的次數(shù)。要求:-示例:`n=23`→`12`(即`2`出現(xiàn)在`2,12,20-29`)4.題目:給定一個(gè)二維網(wǎng)格`grid`,其中`1`表示陸地,`0`表示水域,請(qǐng)計(jì)算島嶼的數(shù)量。要求:-島嶼上下左右相連。-示例:`grid=[[1,1,0,0,0],[1,1,0,0,0],[0,0,1,0,0],[0,0,0,1,1]]`→`3`三、系統(tǒng)設(shè)計(jì)(2題,每題20分)1.題目:設(shè)計(jì)一個(gè)微博系統(tǒng),要求:-用戶可以發(fā)布、轉(zhuǎn)發(fā)、點(diǎn)贊微博。-微博按時(shí)間倒序顯示,最新發(fā)布在前。-支持關(guān)注/取消關(guān)注功能。-寫出核心數(shù)據(jù)結(jié)構(gòu)和主要接口設(shè)計(jì)。2.題目:設(shè)計(jì)一個(gè)短鏈接生成系統(tǒng),要求:-輸入長(zhǎng)鏈接,返回固定長(zhǎng)度的短鏈接。-支持短鏈接跳轉(zhuǎn)回長(zhǎng)鏈接。-高并發(fā)場(chǎng)景下保證唯一性和快速響應(yīng)。-寫出主要實(shí)現(xiàn)思路和數(shù)據(jù)庫設(shè)計(jì)。四、數(shù)據(jù)庫與分布式(3題,每題15分)1.題目:解釋數(shù)據(jù)庫事務(wù)的ACID特性,并舉例說明為什么需要隔離性。-示例:銀行轉(zhuǎn)賬場(chǎng)景。2.題目:如何解決分布式數(shù)據(jù)庫中的數(shù)據(jù)一致性問題?請(qǐng)比較強(qiáng)一致性和最終一致性。-示例:CAP理論的應(yīng)用場(chǎng)景。3.題目:設(shè)計(jì)一個(gè)分布式緩存系統(tǒng),要求:-支持高可用和水平擴(kuò)展。-處理緩存失效和熱點(diǎn)數(shù)據(jù)問題。-寫出主要架構(gòu)和優(yōu)化策略。五、網(wǎng)絡(luò)與系統(tǒng)編程(3題,每題15分)1.題目:解釋TCP三次握手和四次揮手的過程,并說明為什么需要TIME_WAIT狀態(tài)。2.題目:比較HTTP/1.1和HTTP/2的主要區(qū)別,并說明HTTP/3的改進(jìn)。3.題目:設(shè)計(jì)一個(gè)秒殺系統(tǒng),要求:-防止超賣和并發(fā)問題。-寫出主要技術(shù)選型和實(shí)現(xiàn)思路。答案與解析一、編程基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)1.答案:pythondeffactorial(n):result=1foriinrange(1,n+1):result=i處理大數(shù)內(nèi)存優(yōu)化:可以使用列表存儲(chǔ)每一位returnresult解析:-非遞歸實(shí)現(xiàn)階乘可以通過循環(huán)完成。-大數(shù)優(yōu)化:Python原生支持大整數(shù),但若內(nèi)存受限,可使用列表存儲(chǔ)每一位(如模擬大數(shù)乘法)。2.答案:pythondefthree_sum(nums,target):nums.sort()res=[]foriinrange(len(nums)-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:res.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnres解析:-排序后雙指針遍歷,避免重復(fù)三元組。-跳過重復(fù)元素,提高效率。3.答案: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:ifkeyinself.cache:node=self.cache[key]self._move_to_head(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:self._remove_tail()new_node=self.Node(key,value)self.cache[key]=new_nodeself._add_to_head(new_node)def_move_to_head(self,node):self._remove_node(node)self._add_to_head(node)def_remove_node(self,node):node.prev.next=node.nextnode.next.prev=node.prevdef_add_to_head(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_tail(self):tail=self.tail.prevself._remove_node(tail)delself.cache[tail.key]解析:-雙向鏈表維護(hù)LRU順序,哈希表快速查找。-頭部為最近使用,尾部為最久未使用。4.答案:pythondefis_balanced(root):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ì)算高度,同時(shí)判斷平衡性。-遞歸時(shí)合并高度和平衡性判斷,減少重復(fù)計(jì)算。5.答案:pythondefcompress(s:str)->str:ifnots:return""count=1result=[]foriinrange(1,len(s)):ifs[i]==s[i-1]:count+=1else:result.append(s[i-1]+str(count))count=1result.append(s[-1]+str(count))return''.join(result)iflen(''.join(result))<len(s)elses解析:-遍歷字符串,統(tǒng)計(jì)連續(xù)字符數(shù)量。-壓縮后長(zhǎng)度小于原字符串則返回壓縮結(jié)果。二、算法與動(dòng)態(tài)規(guī)劃1.答案:pythondefrepeated_substring_pattern(s:str)->bool:n=len(s)foriinrange(1,n//2+1):ifn%i==0:ifs[:i](n//i)==s:returnTruereturnFalse解析:-檢查所有可能的子串長(zhǎng)度,判斷能否重復(fù)拼接成原字符串。2.答案:pythondefrotate(nums,k):n=len(nums)k%=nnums[:]=nums[-k:]+nums[:-k]解析:-原地旋轉(zhuǎn):先反轉(zhuǎn)后反轉(zhuǎn)。-優(yōu)化:直接拼接切片。3.答案:pythondefcount_digit_two(n):count=0foriinrange(1,n+1):count+=str(i).count('2')returncount解析:-遍歷所有數(shù)字,統(tǒng)計(jì)'2'的出現(xiàn)次數(shù)。-優(yōu)化:按位統(tǒng)計(jì)(如`n=23`,分別統(tǒng)計(jì)10-19和20-29的'2')。4.答案:pythondefnum_islands(grid):ifnotgrid:return0rows,cols=len(grid),len(grid[0])count=0defdfs(r,c):ifr<0orc<0orr>=rowsorc>=colsorgrid[r][c]=='0':returngrid[r][c]='0'dfs(r+1,c)dfs(r-1,c)dfs(r,c+1)dfs(r,c-1)forrinrange(rows):forcinrange(cols):ifgrid[r][c]=='1':count+=1dfs(r,c)returncount解析:-深度優(yōu)先遍歷標(biāo)記已訪問陸地。-每次遇到陸地則島嶼數(shù)量加1。三、系統(tǒng)設(shè)計(jì)1.答案:-數(shù)據(jù)結(jié)構(gòu):-用戶表(`users`):`id`,`name`,`follows`(關(guān)注列表)。-微博表(`tweets`):`id`,`user_id`,`content`,`timestamp`,`likes`。-點(diǎn)贊表(`likes`):`user_id`,`tweet_id`。-主要接口:-`POST/tweets`(發(fā)布微博)。-`GET/users/{user_id}/timeline`(獲取用戶時(shí)間線)。-`POST/users/{user_id}/follow`(關(guān)注用戶)。解析:-微博按時(shí)間倒序顯示,可通過`timestamp`排序。-關(guān)注列表存儲(chǔ)關(guān)注用戶的`id`,時(shí)間線通過SQLJOIN查詢。2.答案:-實(shí)現(xiàn)思路:-使用哈希函數(shù)將長(zhǎng)鏈接映射為短鏈接(如`hash(long_url)`)。-存儲(chǔ)映射關(guān)系(數(shù)據(jù)庫或Redis)。-短鏈接訪問時(shí)反向解析回長(zhǎng)鏈接。-數(shù)據(jù)庫設(shè)計(jì):-`short_links`:`id`(自增),`short_code`(短碼),`long_url`。解析:-高并發(fā)下使用Redis緩存熱點(diǎn)短鏈接。-短碼可使用62進(jìn)制編碼(如`a-zA-Z0-9`)減少長(zhǎng)度。四、數(shù)據(jù)庫與分布式1.答案:-ACID特性:-原子性(Atomicity):事務(wù)要么全部成功,要么全部失敗。-一致性(Consistency):事務(wù)執(zhí)行后數(shù)據(jù)庫狀態(tài)一致。-隔離性(Isolation):并發(fā)事務(wù)互不干擾。-持久性(Durability):事務(wù)提交后永久保存。-隔離性舉例:-臟讀:事務(wù)A讀取事務(wù)B未提交的數(shù)據(jù),B回滾后A讀取到無效數(shù)據(jù)。-不可重復(fù)讀:事務(wù)A兩次讀取同一數(shù)據(jù),B在兩次讀取間修改數(shù)據(jù)。-幻讀:事務(wù)A兩次掃描查詢范圍,B插入新數(shù)據(jù)使查詢結(jié)果不同。2.答案:-強(qiáng)一致性:-任何讀操作都能獲取到最新寫入的數(shù)據(jù)(如分布式鎖)。-適用于金融交易等場(chǎng)景。-最終一致性:-允許短暫的不一致,但最終會(huì)收斂(如Redis緩存)。-適用于社交、新聞等場(chǎng)景。-CAP理論:-分布式系統(tǒng)無法同時(shí)滿足C(一致性)、A(可用性)、P(分區(qū)容錯(cuò)性)。3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論