2026年騰訊技術(shù)專家面試題集及解答要點_第1頁
2026年騰訊技術(shù)專家面試題集及解答要點_第2頁
2026年騰訊技術(shù)專家面試題集及解答要點_第3頁
2026年騰訊技術(shù)專家面試題集及解答要點_第4頁
2026年騰訊技術(shù)專家面試題集及解答要點_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年騰訊技術(shù)專家面試題集及解答要點一、編程基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)(5題,每題20分,共100分)題目1(20分)實現(xiàn)一個LRU(LeastRecentlyUsed)緩存機制,要求:1.支持自定義緩存大小2.提供get和put操作3.使用鏈表和哈希表實現(xiàn),分析時間復雜度答案要點:javaclassLRUCache<K,V>{privateintcapacity;privateMap<K,Node>map;privateNodehead,tail;staticclassNode<K,V>{Kkey;Vvalue;Node<K,V>prev,next;Node(Kkey,Vvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode<>(null,null);tail=newNode<>(null,null);head.next=tail;tail.prev=head;}publicVget(Kkey){Node<K,V>node=map.get(key);if(node==null)returnnull;moveToHead(node);returnnode.value;}publicvoidput(Kkey,Vvalue){Node<K,V>node=map.get(key);if(node==null){Node<K,V>newNode=newNode<>(key,value);map.put(key,newNode);addNode(newNode);if(map.size()>capacity){Node<K,V>tailNode=removeTail();map.remove(tailNode.key);}}else{node.value=value;moveToHead(node);}}privatevoidaddNode(Node<K,V>node){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Node<K,V>node){node.prev.next=node.next;node.next.prev=node.prev;}privatevoidmoveToHead(Node<K,V>node){removeNode(node);addNode(node);}privateNode<K,V>removeTail(){Node<K,V>res=tail.prev;removeNode(res);returnres;}}解析:-使用雙向鏈表維護訪問順序,頭節(jié)點為最近訪問,尾節(jié)點為最久未訪問-使用HashMap實現(xiàn)O(1)時間復雜度的get操作-put操作時,如果緩存已滿,則移除鏈表尾部節(jié)點(最久未使用)-時間復雜度:get和put均為O(1)題目2(20分)給定一個整數(shù)數(shù)組,設計算法找出數(shù)組中未出現(xiàn)的最小正整數(shù)。要求:1.不使用額外空間2.時間復雜度優(yōu)于O(n2)答案要點:javapublicintfirstMissingPositive(int[]nums){intn=nums.length;//Step1:Placeeachnumberinitsrightpositionfor(inti=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){swap(nums,i,nums[i]-1);}}//Step2:Findthefirstindexwherethenumberdoesn'tmatchfor(inti=0;i<n;i++){if(nums[i]!=i+1){returni+1;}}returnn+1;}privatevoidswap(int[]nums,inti,intj){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}解析:-第一步將每個數(shù)放到其應該的位置(如數(shù)字1應該放在索引0)-第二步遍歷數(shù)組,第一個不滿足nums[i]==i+1的索引i,則結(jié)果為i+1-如果所有位置都正確,則結(jié)果為n+1-時間復雜度:O(n),空間復雜度:O(1)題目3(20分)實現(xiàn)二叉樹的層序遍歷(BFS),要求:1.使用隊列實現(xiàn)2.返回遍歷結(jié)果的列表,每個列表元素為該層節(jié)點值答案要點:javaimportjava.util.;publicclassBinaryTreeLevelOrderTraversal{publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<>();if(root==null)returnresult;Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);while(!queue.isEmpty()){intlevelSize=queue.size();List<Integer>currentLevel=newArrayList<>();for(inti=0;i<levelSize;i++){TreeNodenode=queue.poll();currentLevel.add(node.val);if(node.left!=null)queue.offer(node.left);if(node.right!=null)queue.offer(node.right);}result.add(currentLevel);}returnresult;}staticclassTreeNode{intval;TreeNodeleft,right;TreeNode(intx){val=x;}}}解析:-使用隊列先進先出特性實現(xiàn)BFS-每次處理當前層的所有節(jié)點,然后處理下一層-時間復雜度:O(n),空間復雜度:O(n)題目4(20分)設計一個數(shù)據(jù)結(jié)構(gòu)支持以下操作:1.addWord(word):添加單詞2.search(word):搜索單詞,支持通配符''(匹配任意字符序列)3.要求search操作時間復雜度盡可能低答案要點:pythonclassTrieNode:def__init__(self):self.children={}self.is_end=FalseclassWordDictionary:def__init__(self):self.root=TrieNode()defaddWord(self,word:str)->None:node=self.rootforcharinword:ifcharnotinnode.children:node.children[char]=TrieNode()node=node.children[char]node.is_end=Truedefsearch(self,word:str)->bool:defdfs(j,node):ifj==len(word):returnnode.is_endchar=word[j]ifchar=='':Tryallpossiblepathsforchildinnode.children.values():ifdfs(j+1,child):returnTruereturnFalseelse:ifcharnotinnode.children:returnFalsereturndfs(j+1,node.children[char])returndfs(0,self.root)解析:-使用前綴樹(Trie)存儲單詞-addWord操作直接添加單詞-search操作使用DFS處理通配符'':-當遇到''時,嘗試所有子節(jié)點-其他字符直接匹配-時間復雜度:最壞情況下O(mn),m為單詞長度,n為前綴樹節(jié)點數(shù)題目5(20分)實現(xiàn)一個函數(shù),判斷二叉樹是否是完全二叉樹。要求:1.完全二叉樹定義:除最后一層外,每一層節(jié)點都填滿,且最后一層從左到右連續(xù)排列答案要點:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefisCompleteTree(root):ifnotroot:returnTruequeue=[root]end=Falsewhilequeue:node=queue.pop(0)ifnotnode:end=Trueelse:ifend:Afteranemptynode,allnodesmustbeemptyreturnFalsequeue.append(node.left)queue.append(node.right)returnTrue解析:-使用層序遍歷-標記是否遇到空節(jié)點-遇到第一個空節(jié)點后,后續(xù)所有節(jié)點都必須為空-時間復雜度:O(n),空間復雜度:O(n)二、系統(tǒng)設計(3題,每題30分,共90分)題目6(30分)設計一個高并發(fā)的短URL生成系統(tǒng)。要求:1.支持高并發(fā)訪問2.生成短URL與原始URL一一對應3.描述系統(tǒng)架構(gòu)和核心模塊答案要點:系統(tǒng)架構(gòu):++++++|LoadBalancer||URLShortener||Database||(Nginx/Apache)|->|(APIGateway)|->|(Redis/Mongo)|++++++||||||VVV++++++|CacheLayer||HashFunction||StorageLayer||(RedisCluster)||(Base62)||(ShardedDB)|++++++核心模塊:1.APIGateway:-處理HTTP請求-負載均衡分發(fā)請求-緩存策略管理2.URLShortener:-使用Base62編碼(a-z、A-Z、0-9)將ID轉(zhuǎn)換為短URL-生成唯一ID(可使用Snowflake算法)-管理URL映射關(guān)系3.Database:-存儲URL映射關(guān)系-支持分片和索引優(yōu)化查詢-使用Redis緩存熱點數(shù)據(jù)4.CacheLayer:-使用RedisCluster實現(xiàn)高可用緩存-設置合理的過期時間-使用LRU策略淘汰舊數(shù)據(jù)關(guān)鍵考慮:-使用分布式緩存減少數(shù)據(jù)庫壓力-異步處理URL解析請求-設置合理的緩存過期時間-考慮跨區(qū)域部署方案題目7(30分)設計一個微博系統(tǒng)用戶關(guān)注/取關(guān)功能。要求:1.支持萬人關(guān)注動態(tài)2.支持實時更新關(guān)注列表3.描述數(shù)據(jù)模型和算法答案要點:數(shù)據(jù)模型:sqlCREATETABLEusers(user_idBIGINTPRIMARYKEY,usernameVARCHAR(50),followers_countBIGINT,following_countBIGINT);CREATETABLEfollowships(follower_idBIGINT,followee_idBIGINT,created_atTIMESTAMP,PRIMARYKEY(follower_id,followee_id),FOREIGNKEY(follower_id)REFERENCESusers(user_id),FOREIGNKEY(followee_id)REFERENCESusers(user_id));CREATETABLEposts(post_idBIGINTPRIMARYKEY,user_idBIGINT,contentTEXT,created_atTIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(user_id));CREATETABLEpost_feeds(post_idBIGINT,user_idBIGINT,created_atTIMESTAMP,FOREIGNKEY(post_id)REFERENCESposts(post_id),FOREIGNKEY(user_id)REFERENCESusers(user_id));算法:1.關(guān)注操作:sqlINSERTINTOfollowships(follower_id,followee_id)VALUES(?,?)UPDATEusersSETfollowing_count=following_count+1WHEREuser_id=?2.取關(guān)操作:sqlDELETEFROMfollowshipsWHEREfollower_id=?ANDfollowee_id=?UPDATEusersSETfollowing_count=following_count-1WHEREuser_id=?3.獲取關(guān)注動態(tài):-使用MaterializedView緩存關(guān)注列表sqlCREATEMATERIALIZEDVIEWfeed_viewASSELECTp.post_id,p.user_id,p.content,p.created_atFROMpostspINNERJOINfollowshipsfONp.user_id=f.followee_idWHEREf.follower_id=?ORDERBYp.created_atDESC-實時更新策略:-關(guān)注/取關(guān)操作觸發(fā)RedisPub/Sub通知-客戶端訂閱通知并重新拉取關(guān)注列表-使用WebSocket實現(xiàn)實時推送題目8(30分)設計一個分布式消息隊列(如Kafka),要求:1.支持高吞吐量2.處理消息丟失場景3.描述核心組件和工作流程答案要點:系統(tǒng)架構(gòu):++++++|Producers|>|Brokers|>|Consumers||(Application)|++++++|(Zookeeper)|++|(Cluster)|++||||VV++++|TopicPartition||OffsetManager|++++核心組件:1.Producer:-消息序列化-靈活的分區(qū)策略-重試機制和超時處理2.Broker:-存儲消息分區(qū)-處理Producer和Consumer請求-使用Zookeeper管理集群元數(shù)據(jù)3.TopicPartition:-將消息分片存儲-負載均衡策略-消息順序保證4.OffsetManager:-管理消費進度-支持手動和自動提交-保證冪等性工作流程:1.消息發(fā)送:-Producer選擇Topic-Broker分配Partition-消息寫入Partition-確認寫入成功2.消息消費:-Consumer訂閱Topic-OffsetManager記錄消費位置-Broker按順序發(fā)送消息-Consumer確認消息處理完成消息丟失處理:-生產(chǎn)者確認機制:-同步確認(SyncAck)-異步確認(AsyncAck)-重試策略-消費者冪等性:-使用唯一消息ID-消息處理前檢查狀態(tài)-可靠存儲:-持久化消息到磁盤-設置合適的副本因子三、數(shù)據(jù)庫與存儲(2題,每題20分,共40分)題目9(20分)設計一個高并發(fā)的訂單數(shù)據(jù)庫表。要求:1.支持高并發(fā)寫入2.保證訂單唯一性3.描述表結(jié)構(gòu)和索引設計答案要點:表結(jié)構(gòu):sqlCREATETABLEorders(order_idBIGINTNOTNULLAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,quantityINTNOTNULL,priceDECIMAL(10,2)NOTNULL,statusVARCHAR(20)NOTNULLDEFAULT'pending',created_atTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(user_id),FOREIGNKEY(product_id)REFERENCESproducts(product_id),UNIQUEKEY(user_id,product_id,status))ENGINE=InnoDB;索引設計:1.主鍵索引:order_id(聚簇索引)2.外鍵索引:user_id,product_id3.復合唯一索引:user_id,product_id,status(防止同一用戶同一商品多次下單)4.查詢優(yōu)化索引:-user_id+status(查詢用戶待處理訂單)-product_id+created_at(查詢商品銷售排行)-status+created_at(查詢訂單處理流程)高并發(fā)優(yōu)化:-使用MySQLCluster或ShardingSphere實現(xiàn)讀寫分離-設置合適的binlog格式和大小-使用Redi

溫馨提示

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

評論

0/150

提交評論