版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2026年美團(tuán)高級工程師面試題及答案一、編程能力(5題,每題20分,共100分)1.題目(20分):實現(xiàn)一個LRU(LeastRecentlyUsed)緩存,支持get和put操作。緩存容量為固定值,當(dāng)訪問或插入元素導(dǎo)致緩存已滿時,需要淘汰最久未使用的元素。請用Python或Java實現(xiàn),并說明時間復(fù)雜度。答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)==self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)解析:-使用哈希表`cache`存儲鍵值對,實現(xiàn)O(1)的get和put操作。-使用列表`order`記錄訪問順序,淘汰最久未使用的元素。-時間復(fù)雜度:get和put均為O(1)。2.題目(20分):給定一個字符串,請找到其中最長的無重復(fù)字符的子串長度。例如,輸入"abcabcbb",輸出3("abc")。請用Python或Java實現(xiàn),并說明時間復(fù)雜度。答案:pythondeflength_of_longest_substring(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,right-left+1)returnmax_len解析:-使用滑動窗口技術(shù),左指針`left`和右指針`right`分別表示子串的起始和結(jié)束。-使用集合`char_set`記錄當(dāng)前窗口的字符,避免重復(fù)。-時間復(fù)雜度:O(n),每個字符最多被訪問兩次。3.題目(20分):實現(xiàn)一個函數(shù),檢查一個二叉樹是否是平衡的。平衡的定義是:對于任意節(jié)點,其左右子樹的高度差不超過1。請用Python或Java實現(xiàn),并說明時間復(fù)雜度。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool:defcheck(node:TreeNode)->int:ifnotnode:return0left_height=check(node.left)right_height=check(node.right)ifleft_height==-1orright_height==-1orabs(left_height-right_height)>1:return-1returnmax(left_height,right_height)+1returncheck(root)!=-1解析:-使用遞歸計算每個節(jié)點的高度,若發(fā)現(xiàn)不平衡則提前返回。-時間復(fù)雜度:O(n),每個節(jié)點被訪問一次。4.題目(20分):實現(xiàn)一個函數(shù),將一個非負(fù)整數(shù)轉(zhuǎn)換為羅馬數(shù)字。例如,輸入3,輸出"III";輸入4,輸出"IV"。請用Python或Java實現(xiàn)。答案:pythondefint_to_roman(num:int)->str:val=[1000,900,500,400,100,90,50,40,10,9,5,4,1]syms=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]roman=""foriinrange(len(val)):whilenum>=val[i]:roman+=syms[i]num-=val[i]returnroman解析:-使用兩個列表`val`和`syms`分別存儲數(shù)值和對應(yīng)的羅馬符號。-從大到小匹配數(shù)值,直到全部轉(zhuǎn)換完成。-時間復(fù)雜度:O(1),因為羅馬數(shù)字的符號數(shù)量有限。5.題目(20分):給定一個包含n個整數(shù)的數(shù)組,判斷該數(shù)組是否可以劃分為至少k個連續(xù)的子數(shù)組,且每個子數(shù)組的和相等。請用Python或Java實現(xiàn),并說明時間復(fù)雜度。答案:pythondefcan_partition(nums:list,k:int)->bool:total_sum=sum(nums)iftotal_sum%k!=0:returnFalsetarget=total_sum//knums.sort(reverse=True)ifnums[0]>target:returnFalsecounts=[0]kfornuminnums:foriinrange(k):ifcounts[i]<targetandcounts[i]+num<=target:counts[i]+=numbreakelifcounts[i]+num==target:counts[i]=0breakreturnall(c==0forcincounts)解析:-首先計算總和,若不能被k整除則直接返回False。-使用貪心算法,從大到小排序數(shù)組,優(yōu)先填充能湊成target的子數(shù)組。-時間復(fù)雜度:O(nlogn),主要由排序決定。二、系統(tǒng)設(shè)計(3題,每題30分,共90分)1.題目(30分):設(shè)計一個高并發(fā)的短鏈接系統(tǒng)。要求:-輸入任意長度的URL,輸出固定長度的短鏈接。-支持高并發(fā)訪問和快速跳轉(zhuǎn)。-提供簡單的統(tǒng)計功能(如訪問次數(shù))。請說明設(shè)計思路、數(shù)據(jù)結(jié)構(gòu)和關(guān)鍵技術(shù)。答案:設(shè)計思路:1.短鏈接生成:使用Base62編碼(a-z、A-Z、0-9)將長URL映射為固定長度的短鏈接。2.數(shù)據(jù)存儲:使用Redis或Memcached存儲短鏈接與長URL的映射,支持高并發(fā)讀寫。3.跳轉(zhuǎn)邏輯:用戶訪問短鏈接時,系統(tǒng)解析映射關(guān)系,返回長URL。4.統(tǒng)計功能:使用Redis的計數(shù)器或MongoDB存儲訪問次數(shù)。數(shù)據(jù)結(jié)構(gòu):-Redis:`short_link:hash`(key:短鏈接,value:長URL和訪問次數(shù))-數(shù)據(jù)庫:`links`表(`short_id`,`long_url`,`count`)關(guān)鍵技術(shù):-Base62編碼:將數(shù)字轉(zhuǎn)換為固定長度的字符串。-緩存穿透:使用布隆過濾器預(yù)判短鏈接是否存在。-高可用:使用Redis集群或分布式數(shù)據(jù)庫。2.題目(30分):設(shè)計一個實時消息推送系統(tǒng)(如微信、抖音的推送通知)。要求:-支持大規(guī)模用戶實時接收消息。-保證消息的可靠性和順序性。-提供低延遲的推送服務(wù)。請說明設(shè)計思路、關(guān)鍵技術(shù)選型和架構(gòu)圖。答案:設(shè)計思路:1.消息隊列:使用Kafka或RabbitMQ處理高并發(fā)消息,確??煽啃浴?.用戶訂閱:用戶設(shè)備綁定Token,存儲到Redis或數(shù)據(jù)庫,支持動態(tài)更新。3.推送服務(wù):根據(jù)用戶Token推送消息,支持離線緩存和重試機(jī)制。4.消息分發(fā):使用Goroutine或線程池異步處理推送,降低延遲。關(guān)鍵技術(shù)選型:-消息隊列:Kafka(高吞吐、持久化)-緩存:Redis(快速存取Token)-推送協(xié)議:WebSocket或MQTT架構(gòu)圖:1.用戶請求訂閱→存儲Token2.消息產(chǎn)生→進(jìn)入Kafka隊列3.推送服務(wù)消費消息→根據(jù)Token推送3.題目(30分):設(shè)計一個高并發(fā)的秒殺系統(tǒng)。要求:-支持每秒數(shù)千次請求。-防止超賣和惡意刷單。-提供秒殺成功后的訂單處理邏輯。請說明設(shè)計思路、數(shù)據(jù)結(jié)構(gòu)和防作弊措施。答案:設(shè)計思路:1.流量控制:使用Nginx限流,防止突發(fā)流量。2.庫存鎖定:使用Redis的SETNX命令鎖定庫存,避免超賣。3.訂單生成:秒殺成功后生成訂單,并異步支付。4.防作弊:使用驗證碼、手機(jī)號驗證和IP限制。數(shù)據(jù)結(jié)構(gòu):-Redis:`stock:key`(庫存數(shù)量)-數(shù)據(jù)庫:`orders`表(`user_id`,`item_id`,`status`)防作弊措施:-驗證碼:限制每次請求的驗證碼使用次數(shù)。-手機(jī)號驗證:確保用戶真實身份。-IP限制:同一IP超過一定請求次數(shù)則封禁。三、數(shù)據(jù)庫與存儲(2題,每題20分,共40分)1.題目(20分):設(shè)計一個電商平臺的商品表,包含以下字段:-商品ID(自增)-商品名稱(可重復(fù))-商品分類(如手機(jī)、家電)-庫存數(shù)量-價格-創(chuàng)建時間請說明數(shù)據(jù)庫選型、索引設(shè)計和SQL優(yōu)化建議。答案:數(shù)據(jù)庫選型:-MySQL(支持事務(wù)、高并發(fā)讀寫)索引設(shè)計:-主鍵索引:`product_id`(自增)-聚合索引:`category`,`price`(用于快速按分類和價格查詢)-查詢優(yōu)化:為`product_name`建立全文索引(若商品名稱查詢頻繁)。SQL優(yōu)化建議:-避免SELECT,指定字段。-使用JOIN時先過濾小表。-對庫存數(shù)量使用樂觀鎖(如版本號)。2.題目(20分):解釋數(shù)據(jù)庫的ACID特性,并說明如何在分布式數(shù)據(jù)庫中實現(xiàn)事務(wù)一致性。請用MySQL或TiDB舉例。答案:ACID特性:-原子性(Atomicity):事務(wù)不可分割,要么全部成功要么全部失敗。-一致性(Consistency):事務(wù)執(zhí)行后數(shù)據(jù)庫狀態(tài)保持一致。-隔離性(Isolation):并發(fā)事務(wù)互不干擾。-持久性(Durability):事務(wù)提交后永久保存。分布式事務(wù)實現(xiàn):-2PC(兩階段提交):-階段一:協(xié)調(diào)者詢問所有參與者是否可以提交。-階段二:若全部同意則提交,否則回滾。-本地消息表:-事務(wù)中先寫入本地表,成功后發(fā)送消息到MQ。-消息消費端處理事務(wù)。MySQLvsTiDB:-MySQL:單機(jī)事務(wù)依賴鎖,擴(kuò)展性有限。-TiDB:分布式事務(wù)支持Raft協(xié)議,水平擴(kuò)展。四、網(wǎng)絡(luò)與分布式(2題,每題20分,共40分)1.題目(20分):解釋TCP的三次握手和四次揮手過程,并說明為什么不能出現(xiàn)超時重傳和重復(fù)數(shù)據(jù)包。請結(jié)合TCP狀態(tài)機(jī)說明。答案:三次握手:1.客戶端發(fā)送SYN=1,seq=x→服務(wù)器2.服務(wù)器回復(fù)SYN=1,ACK=1,seq=y→客戶端3.客戶端回復(fù)ACK=1,seq=z→服務(wù)器四次揮手:1.客戶端發(fā)送FIN=1→服務(wù)器2.服務(wù)器回復(fù)ACK=1→客戶端3.服務(wù)器發(fā)送FIN=1→客戶端4.客戶端回復(fù)ACK=1→服務(wù)器超時重傳和重復(fù)數(shù)據(jù)包:-超時重傳:TCP通過seq和ack確保順序,若未收到ack則重傳。-重復(fù)數(shù)據(jù)包:TCP使用確認(rèn)號和重復(fù)數(shù)據(jù)包抑制(DuplicateACK)避免重傳。狀態(tài)機(jī):-握手:SYN_SENT→SYN_RCVD→ESTABLISHED-揮手:FIN_WAIT_1→FIN_WAIT_2→TIME_WAIT→CLOSED2.題目(20分):設(shè)計一個高可用的分布式緩存系統(tǒng)(如Redis集群)。要求:-支持讀寫分離。-提供數(shù)據(jù)備份和容災(zāi)。-說明Redis集群的槽(Slot)分配機(jī)制。答案:設(shè)計思路:1.讀寫分離:-主庫負(fù)責(zé)寫操作,從庫負(fù)責(zé)讀操作。-使用Keepalived或HAProxy實現(xiàn)主從切換。2.數(shù)據(jù)備份:-RedisRDB快照或AOF日志。-使用RedisSentinel或集群自動分片。Redis集群槽分配:-16384個槽,每個節(jié)點負(fù)責(zé)一部分槽。-節(jié)點故障時自動遷移槽到其他節(jié)點。架構(gòu)圖:1.客戶端連接主庫寫數(shù)據(jù)。2.從庫異步同步數(shù)據(jù)。3.讀請求可分散到從庫。五、綜合能力(1題,30分)1.題目(30分):美團(tuán)外賣系統(tǒng)需要處理每日千萬級訂單,高峰期訂單量可能達(dá)到每秒數(shù)千筆。請設(shè)計一個高可用的訂單處理系統(tǒng),包括:-訂單生成、存儲和查詢。-高并發(fā)優(yōu)化方案。-異常處理和容災(zāi)措施。答案:設(shè)計思路:1.訂單生成:-使用分布式ID生成器(如Twi
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國人工智能芯片市場運行分析及投資戰(zhàn)略研究報告
- 2025-2030中國直驅(qū)電機(jī)行業(yè)經(jīng)營狀況與未來發(fā)展趨勢預(yù)判研究報告
- 2025至2030中國高端裝備制造業(yè)技術(shù)突破及市場前景分析報告
- 2025至2030中國冷鏈物流市場供需分析與投資價值評估報告
- 2026江蘇銀行秋招試題及答案
- 2026華夏銀行招聘題庫及答案
- 2026華潤微電子秋招真題及答案
- 2026年綠色礦山建設(shè)項目可行性研究報告
- AI繪畫輔助系統(tǒng)在高中美術(shù)設(shè)計教學(xué)中的創(chuàng)新實踐課題報告教學(xué)研究課題報告
- 2026年智慧城市交通系統(tǒng)智能化創(chuàng)新報告
- 2026秋招:澳森特鋼集團(tuán)試題及答案
- 哲學(xué)史重要名詞解析大全
- 2026年寧夏黃河農(nóng)村商業(yè)銀行科技人員社會招聘備考題庫及答案詳解(易錯題)
- 銀行借款抵押合同范本
- DB37-T4975-2025分布式光伏直采直控技術(shù)規(guī)范
- 兒童糖尿病的發(fā)病機(jī)制與個體化治療策略
- 脫硫廢水零排放項目施工方案
- 2026年海南衛(wèi)生健康職業(yè)學(xué)院單招綜合素質(zhì)考試題庫參考答案詳解
- 水泥產(chǎn)品生產(chǎn)許可證實施細(xì)則2025
- 急性心梗合并急性心衰護(hù)理
- 專業(yè)技術(shù)人員繼續(xù)教育學(xué)時認(rèn)定登記匯總表
評論
0/150
提交評論