版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2026年騰訊技術(shù)崗位面試全解析及答案一、編程基礎(chǔ)與算法(共5題,每題10分)1.題目:給定一個無重復(fù)元素的整數(shù)數(shù)組,返回所有可能的子集。示例輸入:`[1,2,3]`示例輸出:`[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`答案:cppinclude<vector>usingnamespacestd;classSolution{public:vector<vector<int>>subsets(vector<int>&nums){vector<vector<int>>res;vector<int>path;backtrack(nums,0,path,res);returnres;}voidbacktrack(vector<int>&nums,intstart,vector<int>&path,vector<vector<int>>&res){res.push_back(path);for(inti=start;i<nums.size();++i){path.push_back(nums[i]);backtrack(nums,i+1,path,res);path.pop_back();}}};解析:采用回溯算法,通過遞歸遍歷所有可能的子集。每次選擇當(dāng)前元素加入路徑,并繼續(xù)遞歸;不選擇時直接進(jìn)入下一層遞歸。時間復(fù)雜度為O(2^n),空間復(fù)雜度為O(n)。2.題目:實現(xiàn)一個LRU(最近最少使用)緩存,支持get和put操作。示例輸入:cppLRUCachecache=newLRUCache(2);cache.put(1,1);cache.put(2,2);//緩存是{1=1,2=2}cache.get(1);//返回1cache.put(3,3);//去除鍵2//緩存是{1=1,3=3}cache.get(2);//返回-1(未找到)cache.put(4,4);//去除鍵1//緩存是{4=4,3=3}cache.get(3);//返回3cache.get(4);//返回4答案:cppinclude<unordered_map>include<list>classLRUCache{private:intcapacity;std::list<int>keys;std::unordered_map<int,int>cache;public:LRUCache(intcapacity_):capacity(capacity_){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;keys.remove(key);keys.push_front(key);returnit->second;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){keys.remove(key);keys.push_front(key);cache[key]=value;}else{if(cache.size()==capacity){intoldest=keys.back();keys.pop_back();cache.erase(oldest);}keys.push_front(key);cache[key]=value;}}};解析:使用雙向鏈表和哈希表實現(xiàn)。雙向鏈表存儲鍵的順序,哈希表實現(xiàn)O(1)時間復(fù)雜度的查找。get操作將鍵移動到鏈表頭部;put操作在鏈表頭部插入新鍵,若超出容量則刪除鏈表尾部元素。3.題目:給定一個二叉樹,判斷其是否是完全二叉樹。示例輸入:1/\23/\\456示例輸出:`true`答案:cppinclude<queue>usingnamespacestd;structTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};classSolution{public:boolisCompleteTree(TreeNoderoot){if(!root)returntrue;queue<TreeNode>q;q.push(root);boolend=false;while(!q.empty()){TreeNodenode=q.front();q.pop();if(!node){end=true;}else{if(end)returnfalse;q.push(node->left);q.push(node->right);}}returntrue;}};解析:層次遍歷二叉樹。若在遇到空節(jié)點之前存在空節(jié)點,則不是完全二叉樹。遍歷過程中,一旦遇到空節(jié)點,后續(xù)所有節(jié)點必須為空。4.題目:實現(xiàn)快速排序算法。示例輸入:`[4,1,3,9,7]`示例輸出:`[1,3,4,7,9]`答案:cppinclude<vector>usingnamespacestd;classSolution{public:voidquickSort(vector<int>&arr,intleft,intright){if(left>=right)return;intpivot=partition(arr,left,right);quickSort(arr,left,pivot-1);quickSort(arr,pivot+1,right);}intpartition(vector<int>&arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;++j){if(arr[j]<=pivot){i++;swap(arr[i],arr[j]);}}swap(arr[i+1],arr[right]);returni+1;}};解析:選擇最后一個元素作為基準(zhǔn),將小于基準(zhǔn)的元素放到基準(zhǔn)左邊,大于基準(zhǔn)的元素放到右邊。遞歸對左右子數(shù)組進(jìn)行排序。平均時間復(fù)雜度為O(nlogn)。5.題目:給定一個字符串,找到最長回文子串的長度。示例輸入:`"babad"`示例輸出:`3`("bab"或"aba")答案:cppinclude<string>usingnamespacestd;classSolution{public:intlongestPalindrome(strings){if(s.empty())return0;intn=s.size();vector<vector<bool>>dp(n,vector<bool>(n,false));intmaxLen=1;for(inti=0;i<n;++i){dp[i][i]=true;}for(inti=n-2;i>=0;--i){for(intj=i+1;j<n;++j){if(s[i]==s[j]){if(j-i==1||dp[i+1][j-1]){dp[i][j]=true;maxLen=max(maxLen,j-i+1);}}}}returnmaxLen;}};解析:動態(tài)規(guī)劃解法。dp[i][j]表示s[i..j]是否為回文。初始化對角線為true,然后遍歷所有子串,若s[i]==s[j]且子串s[i+1..j-1]為回文,則s[i..j]為回文。二、系統(tǒng)設(shè)計(共3題,每題15分)1.題目:設(shè)計一個短URL生成系統(tǒng)(如tinyURL)。要求:-支持將任意長度的URL映射為固定長度的短URL。-支持通過短URL反查原始URL。-高并發(fā)場景下保證性能。答案:方案:1.URL編碼:將原始URL通過哈希算法(如SHA-256)生成固定長度的哈希值,再通過Base62(a-z,A-Z,0-9)進(jìn)行編碼,縮短長度。2.分布式存儲:使用Redis或Memcached存儲短URL與原始URL的映射關(guān)系,支持高并發(fā)讀寫。3.數(shù)據(jù)庫備份:若Redis/Memcached失效,可通過數(shù)據(jù)庫(如MySQL)恢復(fù)映射關(guān)系。偽代碼:cpp//生成短URLstringshortenURL(stringlongURL){stringhash=SHA256(longURL);stringshortCode=encodeBase62(hash);stringshortURL="/"+shortCode;cache.set(shortCode,longURL);returnshortURL;}//反查原始URLstringgetOriginalURL(stringshortCode){returncache.get(shortCode)?:db.get(shortCode);}解析:-哈希編碼保證唯一性,Base62縮短長度。-分布式緩存提升性能,數(shù)據(jù)庫備份保證可用性。-可擴展性:通過分布式部署Redis集群,支持海量請求。2.題目:設(shè)計一個高并發(fā)的微博Feed流系統(tǒng)。要求:-用戶可獲取包含關(guān)注用戶、熱門推薦、最新動態(tài)的Feed。-支持實時更新(如發(fā)布新動態(tài)時快速推送給用戶)。答案:架構(gòu):1.數(shù)據(jù)存儲:-用戶關(guān)注關(guān)系:Redis哈希表(user_id->followers)。-動態(tài):MySQL(id,user_id,content,created_at,likes等)。-實時更新:Kafka消息隊列(動態(tài)發(fā)布時推送)。2.Feed生成:-用戶請求時,按權(quán)重計算Feed順序(如:關(guān)注用戶50%、熱門推薦30%、最新動態(tài)20%)。-緩存用戶Feed(Redis,過期時間5分鐘)。3.實時推送:-用戶訂閱WebSocket,動態(tài)發(fā)布時通過Kafka推送至客戶端。偽代碼:cpp//用戶請求Feedvector<Tweet>getFeed(intuserId){stringkey="feed:"+to_string(userId);if(cache.exists(key)){returncache.get(key);}vector<Tweet>feed=calculateFeed(userId);cache.set(key,feed,300);//5分鐘過期returnfeed;}//動態(tài)發(fā)布voidpublishTweet(intuserId,stringcontent){//保存動態(tài)到MySQL//推送到Kafkakafka.publish("tweets",{userId,content});}解析:-權(quán)重算法平衡個性化與熱門推薦。-緩存減少數(shù)據(jù)庫壓力,WebSocket保證實時性。-Kafka解耦發(fā)布與消費,支持彈性擴展。3.題目:設(shè)計一個分布式限流系統(tǒng)(如微博登錄接口)。要求:-單機QPS限制(如每個IP每秒不超過10次請求)。-支持動態(tài)調(diào)整限流閾值。答案:方案:1.Redis滑動窗口:-使用Redis的有序集合(ZSET)記錄每個IP的請求時間戳。-每次請求時,移除過期時間戳,添加當(dāng)前時間戳。-判斷窗口內(nèi)元素數(shù)量是否超過閾值。2.動態(tài)限流:-通過配置中心(如Apollo)動態(tài)更新限流閾值。-監(jiān)控系統(tǒng)負(fù)載時自動降級。偽代碼:cppboolisLimited(stringip){stringkey="rate_limit:"+ip;intlimit=config.get("limit");//動態(tài)獲取閾值intnow=timestamp();redis.zremrangebyscore(key,0,now-1000);redis.zadd(key,now,"1");longcount=redis.zcard(key);returncount>limit;}解析:-滑動窗口避免固定窗口的冷啟動問題。-Redis保證高并發(fā)性能,配置中心支持動態(tài)調(diào)整。-可擴展性:通過Redis集群支持海量IP限流。三、數(shù)據(jù)庫與存儲(共3題,每題15分)1.題目:解釋MySQL事務(wù)的ACID特性,并說明如何實現(xiàn)。答案:ACID特性:-原子性(Atomicity):使用事務(wù)日志(RedoLog)保證事務(wù)要么完全執(zhí)行,要么完全回滾。-一致性(Consistency):通過鎖機制(行鎖/表鎖)和MVCC(多版本并發(fā)控制)保證數(shù)據(jù)一致性。-隔離性(Isolation):可通過事務(wù)隔離級別(READCOMMITTED,REPEATABLEREAD等)控制。-持久性(Durability):通過RedoLog和Checkpoint機制保證數(shù)據(jù)不丟失。實現(xiàn)方式:sqlSTARTTRANSACTION;UPDATEaccountsSETbalance=balance-100WHEREid=1;UPDATEaccountsSETbalance=balance+100WHEREid=2;COMMIT;解析:-事務(wù)日志保證原子性,鎖機制保證一致性。-隔離級別通過MVCC實現(xiàn),RedoLog保證持久性。-騰訊業(yè)務(wù)中常用REPEATABLEREAD(如訂單系統(tǒng))。2.題目:設(shè)計一個高并發(fā)的訂單表,支持高并發(fā)寫操作。要求:-訂單ID全局唯一。-支持事務(wù)性插入。-優(yōu)化查詢性能。答案:方案:1.訂單ID生成:-使用Redis實現(xiàn)分布式ID生成器(如Snowflake算法)。2.表結(jié)構(gòu):sqlCREATETABLEorders(idBIGINTAUTO_INCREMENT,user_idBIGINT,product_idBIGINT,amountDECIMAL(10,2),statusVARCHAR(10),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,INDEX(user_id),INDEX(product_id));3.事務(wù)優(yōu)化:-使用InnoDB引擎(行鎖+MVCC)。-批量插入時開啟事務(wù)。偽代碼:cpp//生成訂單IDlonggenerateOrderId(){returnredis.incr("order_id");}//插入訂單voidinsertOrder(intuserId,intproductId,doubleamount){longorderId=generateOrderId();STARTTRANSACTION;INSERTINTOorders(id,user_id,product_id,amount)VALUES(orderId,userId,productId,amount);COMMIT;}解析:-Redis保證ID全局唯一,InnoDB支持高并發(fā)寫。-索引優(yōu)化查詢性能,批量事務(wù)減少鎖競爭。-可擴展性:通過分庫分表(如ShardingSphere)支持海量訂單。3.題目:解釋MySQL索引的類型及適用場景。答案:索引類型:1.B-Tree索引:-適用于范圍查詢(如`priceBETWEEN10AND20`)。-常用于主鍵、普通索引。2.哈希索引:-適用于精確查詢(如`WHEREid=100`)。-不支持范圍查詢。3.全文索引:-適用于文本搜索(如`WHEREcontentLIKE'%蘋果%'`)。-使用InnoDB引擎支持。4.空間索引:-適用于GIS數(shù)據(jù)。適用場景:-主鍵:使用自增B-Tree索引。-頻繁查詢:建立B-Tree索引(如`user_id`)。-全文搜索:使用Ngram分詞。解析:-B-Tree通用性高,哈希查詢快但范圍查詢受限。-全文索引適用于搜索引擎場景。-注意:冗余索引(如`a,b`聯(lián)合索引包含`a`單索引)會降低寫入性能。四、網(wǎng)絡(luò)與分布式(共3題,每題15分)1.題目:解釋TCP的三次握手過程,并說明為何不能重放。答案:三次握手:1.SYN:客戶端發(fā)送SYN=1,隨機初始化seq=x。2.SYN+ACK:服務(wù)器回復(fù)SYN=1,ACK=1,seq=y,ack=x+1。3.ACK:客戶端回復(fù)ACK=1,ack=y+1。不能重放的原因:-序列號單調(diào)遞增:TCP保證seq唯一,重放時seq已失效。-ACK確認(rèn):每次ACK都會更新ack值,重放會因ack不匹配被丟棄。解析:-seq/ack防止重放,時間戳防止超時重傳。-騰訊業(yè)務(wù)中常用TCPKeepalive檢測連接活性。2.題目:設(shè)計一個高并發(fā)的分布式計數(shù)器。要求:-支持全局原子遞增。-節(jié)點重啟后能恢復(fù)數(shù)據(jù)。答案:方案:1.Redis原子操作:redisINCRcounter2.數(shù)據(jù)庫方案:sqlUPDATEcountersSETvalue=value+1WHEREname='counter';3.分布式鎖方案(備選):cpplock->lock();value++;lock->unlock();解析:-Redis保證原子性,RDB/AOF持久化數(shù)據(jù)。-數(shù)據(jù)庫支持事務(wù),但寫入性能較低。-可擴展性:通過Redis集群支持海量計數(shù)器。3.題目:解釋CAP理論,并說明如何在高可用系統(tǒng)中取舍。答案:CAP理論:-一致性(Consistency):所有節(jié)點訪問數(shù)據(jù)一致。-可用性(Availability):節(jié)點總響應(yīng)請求。-分區(qū)容錯性(PartitionTolerance):網(wǎng)絡(luò)分區(qū)時仍能運行。取舍策略:-讀多寫少場景(如微博緩存):-使用最終一致性(如Redis+TSO)。-寫多場景(如訂單系統(tǒng)):-優(yōu)先一致性(如Raft協(xié)議)。解析:-分布式系統(tǒng)必犧牲至少一項CAP。-騰訊業(yè)務(wù)中常用Paxos/Raft保證一致性,Redis實現(xiàn)高可用。-FIFO隊列解決最終一致性場景。五、項目與系統(tǒng)(共2題,每題20分)1.題目:描述你參與過的一個高并發(fā)項目,并說明如何解決性能瓶頸。示例:微博動態(tài)發(fā)布系統(tǒng)答案:項目:微博動態(tài)發(fā)布系統(tǒng)性能瓶頸:-數(shù)據(jù)庫瓶頸:動態(tài)發(fā)布時主表寫入壓力大。-緩存失效:用戶Feed查詢頻繁,緩存命中率低。解決方案:1.數(shù)據(jù)庫優(yōu)化:-使用Redis異步寫入(發(fā)布時先入隊列,后臺批量寫入MySQL)。-動態(tài)表分區(qū)(按時間切分訂單表)。2.緩存優(yōu)化:-Feed預(yù)加載(用戶登錄時提前加載Feed)。-使用本地緩存(CPU緩存)加速熱點數(shù)據(jù)。解析:-異步寫入分散壓力,分表提升寫入性能。-預(yù)加載+本地緩存減少遠(yuǎn)程請求。-可擴展性:通過消息隊列(Kafka)解耦業(yè)務(wù)。2.題目:設(shè)計一個分布式文件存儲系統(tǒng)(如騰訊云COS)。要求:-支持海量文件存儲。-支持高并發(fā)讀寫。-支持文件分片。答案:架構(gòu):1.分片存儲:-文件切分為固定大小分片(如4MB)。-每個分片存儲到不同節(jié)點(如H
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年四川大學(xué)華西廈門醫(yī)院康復(fù)醫(yī)學(xué)科招聘備考題庫及1套完整答案詳解
- 2026年南京大學(xué)招聘南京赫爾辛基大氣與地球系統(tǒng)科學(xué)學(xué)院助理備考題庫及一套參考答案詳解
- 2026年中共舟山市岱山縣委老干部局公開招聘編外聘用人員備考題庫及答案詳解1套
- 線下安全培訓(xùn)代掃課件
- 2025年巨野縣高鐵北站公開招聘客運服務(wù)人員備考題庫及答案詳解一套
- 線上端口培訓(xùn)課件
- 2026年中國能源建設(shè)集團(tuán)華東區(qū)域總部(中國能源建設(shè)集團(tuán)華東建設(shè)投資有限公司)招聘備考題庫及1套完整答案詳解
- 餐飲安全培訓(xùn)計劃課件
- 餐飲安全培訓(xùn)考核時間課件
- 2026年東營經(jīng)濟(jì)技術(shù)開發(fā)區(qū)東城某公立小學(xué)公開招聘勞務(wù)派遣教師備考題庫含答案詳解
- (高清版)DBJ∕T 13-91-2025 《福建省房屋市政工程安全風(fēng)險分級管控與隱患排查治理標(biāo)準(zhǔn)》
- 2023年西藏中考數(shù)學(xué)真題試卷及答案
- 1春《寒假新啟航五年級》參考答案
- 豬肉配送投標(biāo)方案(完整技術(shù)標(biāo))
- GM公司過程控制計劃審核表
- MSA-測量系統(tǒng)分析模板
- 《國共合作與北伐戰(zhàn)爭》優(yōu)課一等獎?wù)n件
- YY/T 0729.3-2009組織粘合劑粘接性能試驗方法第3部分:拉伸強度
- GB/T 5187-2008銅及銅合金箔材
- GB/T 26218.1-2010污穢條件下使用的高壓絕緣子的選擇和尺寸確定第1部分:定義、信息和一般原則
- 農(nóng)民工討薪突發(fā)事件應(yīng)急預(yù)案
評論
0/150
提交評論