版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2026年字節(jié)跳動(dòng)工程師面試題及答案一、編程能力測(cè)試(5題,每題20分,共100分)1.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)非負(fù)整數(shù)`n`,返回其二進(jìn)制表示中`1`的個(gè)數(shù)。例如,輸入`n=11`(二進(jìn)制為`1011`),返回`3`。答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:使用位運(yùn)算技巧,每次將`n`右移一位,并統(tǒng)計(jì)最低位的`1`的個(gè)數(shù)。`n&1`判斷當(dāng)前最低位是否為`1`,`n>>=1`將`n`右移一位。時(shí)間復(fù)雜度為`O(logn)`。2.題目:給定一個(gè)字符串`s`,請(qǐng)找到其中不重復(fù)的最長(zhǎng)子串的長(zhǎng)度。例如,輸入`s="abcabcbb"`,返回`3`(最長(zhǎng)子串為`abc`)。答案:pythondeflength_of_longest_substring(s):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,right-left+1)returnmax_len解析:使用滑動(dòng)窗口技術(shù),`left`和`right`分別表示窗口的左右邊界。遍歷字符串時(shí),如果遇到重復(fù)字符,則移動(dòng)`left`并刪除窗口中的字符,直到不重復(fù)為止。時(shí)間復(fù)雜度為`O(n)`。3.題目:請(qǐng)實(shí)現(xiàn)一個(gè)`LRU緩存`(LeastRecentlyUsedCache),支持`get`和`put`操作。例如:pythonclassLRUCache:def__init__(self,capacity:int):初始化雙向鏈表和哈希表passdefget(self,key:int)->int:返回key對(duì)應(yīng)的值,如果不存在返回-1passdefput(self,key:int,value:int)->None:插入或更新key值,如果超出容量則刪除最久未使用的pass答案:pythonclassNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=Node()self.tail=Node()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnode:node.value=valueself._move_to_head(node)else:newNode=Node(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]解析:使用雙向鏈表和哈希表實(shí)現(xiàn)LRU緩存。雙向鏈表維護(hù)訪問(wèn)順序,哈希表實(shí)現(xiàn)`O(1)`的查詢。當(dāng)超出容量時(shí),刪除鏈表尾部節(jié)點(diǎn)(最久未使用)。4.題目:給定一個(gè)`mxn`的矩陣,請(qǐng)將其旋轉(zhuǎn)90度(順時(shí)針)。例如:輸入:[[1,2,3],[4,5,6],[7,8,9]]輸出:[[7,4,1],[8,5,2],[9,6,3]]答案:pythondefrotate(matrix):n=len(matrix)foriinrange(n//2):forjinrange(i,n-i-1):temp=matrix[i][j]matrix[i][j]=matrix[n-j-1][i]matrix[n-j-1][i]=matrix[n-i-1][n-j-1]matrix[n-i-1][n-j-1]=matrix[j][n-i-1]matrix[j][n-i-1]=temp解析:先按層旋轉(zhuǎn)(從外到內(nèi)),每層使用4個(gè)位置的交換。時(shí)間復(fù)雜度為`O(n^2)`。5.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),判斷一個(gè)字符串是否是回文串(忽略大小寫和非字母字符)。例如,輸入`"Aman,aplan,acanal:Panama"`,返回`True`。答案:pythondefis_palindrome(s:str)->bool:left,right=0,len(s)-1whileleft<right:whileleft<rightandnots[left].isalnum():left+=1whileleft<rightandnots[right].isalnum():right-=1ifs[left].lower()!=s[right].lower():returnFalseleft,right=left+1,right-1returnTrue解析:雙指針?lè)?,跳過(guò)非字母數(shù)字字符,并比較對(duì)稱位置的字符是否相同。忽略大小寫。二、系統(tǒng)設(shè)計(jì)測(cè)試(3題,每題30分,共90分)1.題目:設(shè)計(jì)一個(gè)高并發(fā)的短鏈接系統(tǒng)。例如,輸入長(zhǎng)鏈接`/long-url`,返回一個(gè)短鏈接`/abc123`,并支持訪問(wèn)統(tǒng)計(jì)。答案:1.短鏈接生成:使用哈希算法(如MD5或Base62編碼)將長(zhǎng)鏈接映射為短字符串。2.存儲(chǔ):使用Redis存儲(chǔ)短鏈接與長(zhǎng)鏈接的映射,并設(shè)置過(guò)期時(shí)間。3.高并發(fā)處理:使用消息隊(duì)列(如Kafka)異步處理請(qǐng)求,避免直接阻塞。4.訪問(wèn)統(tǒng)計(jì):每次訪問(wèn)時(shí),在Redis中增加計(jì)數(shù)器。解析:短鏈接系統(tǒng)需要高效映射、存儲(chǔ)和統(tǒng)計(jì)。Redis支持高并發(fā)讀寫,消息隊(duì)列保證系統(tǒng)穩(wěn)定性。2.題目:設(shè)計(jì)一個(gè)實(shí)時(shí)消息推送系統(tǒng)(如抖音動(dòng)態(tài)刷新)。要求支持百萬(wàn)級(jí)用戶,消息延遲控制在100ms以內(nèi)。答案:1.消息分發(fā):使用WebSocket長(zhǎng)連接,服務(wù)器主動(dòng)推送消息。2.消息隊(duì)列:使用Kafka或RabbitMQ緩存消息,防止單點(diǎn)故障。3.負(fù)載均衡:多個(gè)服務(wù)器節(jié)點(diǎn)通過(guò)Nginx分發(fā)請(qǐng)求。4.緩存優(yōu)化:對(duì)熱點(diǎn)消息使用Redis緩存,減少數(shù)據(jù)庫(kù)壓力。解析:實(shí)時(shí)消息系統(tǒng)需要低延遲和高吞吐量。WebSocket保證實(shí)時(shí)性,消息隊(duì)列解耦系統(tǒng)。3.題目:設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng)。例如,1000個(gè)商品,每秒有10000人搶購(gòu),如何防止超賣?答案:1.分布式鎖:使用Redis或ZooKeeper實(shí)現(xiàn)分布式鎖,控制并發(fā)訪問(wèn)。2.庫(kù)存預(yù)熱:每秒提前扣減1個(gè)庫(kù)存,預(yù)留秒殺名額。3.秒殺排隊(duì):使用消息隊(duì)列控制用戶請(qǐng)求,按順序處理。4.超賣補(bǔ)償:若庫(kù)存不足,通過(guò)短信或郵件補(bǔ)償用戶。解析:秒殺系統(tǒng)需要防止超賣和超并發(fā),分布式鎖和消息隊(duì)列是關(guān)鍵。三、數(shù)據(jù)庫(kù)與分布式系統(tǒng)(2題,每題35分,共70分)1.題目:數(shù)據(jù)庫(kù)事務(wù)的ACID特性是什么?如何實(shí)現(xiàn)持久化?答案:-ACID:-原子性(Atomicity):事務(wù)不可分割,要么全部成功,要么全部失敗。-一致性(Consistency):事務(wù)執(zhí)行后數(shù)據(jù)庫(kù)狀態(tài)一致。-隔離性(Isolation):并發(fā)事務(wù)互不干擾。-持久性(Durability):事務(wù)提交后永久保存。-持久化實(shí)現(xiàn):-寫前日志(WAL):MySQL的InnoDB使用日志記錄,確保持久性。-內(nèi)存緩存+磁盤同步:Redis使用RDB和AOF實(shí)現(xiàn)持久化。解析:ACID是數(shù)據(jù)庫(kù)事務(wù)的核心特性,持久化通過(guò)日志或緩存實(shí)現(xiàn)。2.題目:設(shè)計(jì)一個(gè)分布式數(shù)據(jù)庫(kù)集群,如何解決數(shù)據(jù)一致性問(wèn)題?答案:1.主從復(fù)制:一個(gè)主節(jié)點(diǎn)處理寫請(qǐng)求,多個(gè)從節(jié)點(diǎn)異步復(fù)制數(shù)據(jù)。2.分布式事務(wù):使用2PC或3PC協(xié)議保證跨節(jié)點(diǎn)事務(wù)一致性。3.最終一致性:使用Redis或消息隊(duì)列實(shí)現(xiàn)異步更新。4.分片路由:根據(jù)ID哈希路由到不同節(jié)點(diǎn),避免熱點(diǎn)問(wèn)題。解析:分布式系統(tǒng)通過(guò)復(fù)制、事務(wù)或最終一致性解決數(shù)據(jù)一致性問(wèn)題。四、算法與數(shù)據(jù)結(jié)構(gòu)(2題,每題35分,共70分)1.題目:給定一個(gè)數(shù)組,找出其中第K大的元素。例如,`[3,2,1,5,6,4]`,`k=2`,返回`5`。答案:pythondeffind_kth_largest(nums,k):defquickselect(left,right,k_smallest):pivot_index=partition(nums,left,right)ifk_smallest==pivot_index:returnnums[k_smallest]elifk_smallest<pivot_index:returnquickselect(left,pivot_index-1,k_smallest)else:returnquickselect(pivot_index+1,right,k_smallest)defpartition(nums,left,right):pivot=nums[right]i=leftforjinrange(left,right):ifnums[j]<pivot:nums[i],nums[j]=nums[j],nums[i]i+=1nums[i],nums[right]=nums[right],nums[i]returnireturnquickselect(0,len(nums)-1,k-1)解析:快速選擇算法,時(shí)間復(fù)雜度`O(n)`。2.題目:給定一個(gè)無(wú)向圖,判斷是否存在環(huán)。答案:pythondefhas_cycle(n,edges):parent=list
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濰坊市2025-2026學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)模擬試卷2(含答案)
- 湖南省岳陽(yáng)市汨羅市第二中學(xué)2025-2026學(xué)年高一上學(xué)期1月月考語(yǔ)文試題(含答案)
- 廣東省東莞市2025-2026學(xué)年上學(xué)期期末高三物理試卷(含答案)
- 鋼結(jié)構(gòu)深化設(shè)計(jì)技術(shù)要點(diǎn)
- 飛機(jī)維修培訓(xùn)
- 2026山東事業(yè)單位統(tǒng)考聊城市東阿縣初級(jí)綜合類招聘37人參考考試題庫(kù)及答案解析
- 2026年度德州市事業(yè)單位公開(kāi)招聘初級(jí)綜合類崗位人員(526人)參考考試題庫(kù)及答案解析
- 2026國(guó)家統(tǒng)計(jì)局官渡調(diào)查隊(duì)招聘1人(云南)考試備考試題及答案解析
- 中學(xué)實(shí)施的課程管理制度(3篇)
- 溶洞景點(diǎn)活動(dòng)策劃方案(3篇)
- 湖南省2025-2026學(xué)年七年級(jí)歷史上學(xué)期期末復(fù)習(xí)試卷(含答案)
- 2026年中國(guó)熱帶農(nóng)業(yè)科學(xué)院南亞熱帶作物研究所第一批招聘23人備考題庫(kù)完美版
- 2026新疆阿合奇縣公益性崗位(鄉(xiāng)村振興專干)招聘44人考試參考試題及答案解析
- 2026年上海高考英語(yǔ)真題試卷+解析及答案
- 紡織倉(cāng)庫(kù)消防安全培訓(xùn)
- 護(hù)坡施工安全專項(xiàng)方案
- 2025年國(guó)網(wǎng)冀北電力有限公司招聘530人高校畢業(yè)生(第一批)筆試參考題庫(kù)附帶答案詳解(3卷)
- 中國(guó)腎移植排斥反應(yīng)臨床診療指南(2025版)
- 核心素養(yǎng)視域下高中歷史圖表教學(xué)的應(yīng)用研究答辯
- 2025 膜性腎病診斷與治療策略課件
- 地推銷售話術(shù)
評(píng)論
0/150
提交評(píng)論