2026年騰訊Java開發(fā)工程師面試題及答案_第1頁
2026年騰訊Java開發(fā)工程師面試題及答案_第2頁
2026年騰訊Java開發(fā)工程師面試題及答案_第3頁
2026年騰訊Java開發(fā)工程師面試題及答案_第4頁
2026年騰訊Java開發(fā)工程師面試題及答案_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年騰訊Java開發(fā)工程師面試題及答案一、編程題(共3題,每題20分,總計60分)題目1(20分):編寫一個Java方法,實現(xiàn)快速排序算法,對整數(shù)數(shù)組進行升序排序。要求:1.不能使用Java自帶的`Arrays.sort()`方法;2.使用遞歸實現(xiàn)快速排序;3.輸出排序后的數(shù)組。答案:javapublicclassQuickSort{publicstaticvoidquickSort(int[]arr,intlow,inthigh){if(low<high){intpivotIndex=partition(arr,low,high);quickSort(arr,low,pivotIndex-1);quickSort(arr,pivotIndex+1,high);}}privatestaticintpartition(int[]arr,intlow,inthigh){intpivot=arr[high];inti=low-1;for(intj=low;j<high;j++){if(arr[j]<=pivot){i++;swap(arr,i,j);}}swap(arr,i+1,high);returni+1;}privatestaticvoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}publicstaticvoidmain(String[]args){int[]arr={34,7,23,32,5,62};quickSort(arr,0,arr.length-1);System.out.println("Sortedarray:"+Arrays.toString(arr));}}解析:快速排序的核心是分治思想,通過選擇一個基準值(pivot)將數(shù)組劃分為兩部分,左邊的元素都小于基準值,右邊的元素都大于基準值。遞歸地對左右兩部分進行排序,最終實現(xiàn)整個數(shù)組的排序。時間復雜度平均為O(nlogn),最壞情況為O(n2)(當數(shù)組已經(jīng)有序時)。題目2(20分):設計一個線程安全的計數(shù)器類`ThreadSafeCounter`,要求:1.支持多線程并發(fā)自增;2.使用`synchronized`關鍵字或`Lock`接口實現(xiàn);3.提供獲取當前計數(shù)值的方法。答案:javaimportjava.util.concurrent.atomic.AtomicInteger;publicclassThreadSafeCounter{privateAtomicIntegercount=newAtomicInteger(0);publicvoidincrement(){count.incrementAndGet();}publicintgetCount(){returncount.get();}publicstaticvoidmain(String[]args)throwsInterruptedException{ThreadSafeCountercounter=newThreadSafeCounter();intthreadNum=1000;Thread[]threads=newThread[threadNum];for(inti=0;i<threadNum;i++){threads[i]=newThread(counter::increment);threads[i].start();}for(inti=0;i<threadNum;i++){threads[i].join();}System.out.println("Finalcount:"+counter.getCount());}}解析:使用`AtomicInteger`實現(xiàn)線程安全是最簡單高效的方式,內(nèi)部使用CAS(Compare-And-Swap)操作保證原子性。如果需要使用`synchronized`,可以定義一個`synchronized`方法:javapublicsynchronizedvoidincrement(){count++;}但`AtomicInteger`的性能通常優(yōu)于`synchronized`,因為它避免了線程阻塞。題目3(20分):編寫一個Java方法,實現(xiàn)LRU(LeastRecentlyUsed)緩存淘汰算法。要求:1.緩存容量為3;2.使用雙向鏈表和哈希表實現(xiàn);3.支持get和put操作。答案:javaimportjava.util.HashMap;publicclassLRUCache<K,V>{privateintcapacity;privateHashMap<K,Node>map;privateNodehead,tail;publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();}publicVget(Kkey){if(map.containsKey(key)){Nodenode=map.get(key);moveToHead(node);returnnode.value;}returnnull;}publicvoidput(Kkey,Vvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.value=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.key);removeNode(tail);}NodenewNode=newNode(key,value);map.put(key,newNode);addNode(newNode);}}privatevoidmoveToHead(Nodenode){removeNode(node);addNode(node);}privatevoidaddNode(Nodenode){node.next=head;node.prev=null;if(head!=null){head.prev=node;}head=node;if(tail==null){tail=node;}}privatevoidremoveNode(Nodenode){if(node.prev!=null){node.prev.next=node.next;}else{head=node.next;}if(node.next!=null){node.next.prev=node.prev;}else{tail=node.prev;}}privatestaticclassNode{Kkey;Vvalue;Nodeprev,next;Node(Kkey,Vvalue){this.key=key;this.value=value;}}publicstaticvoidmain(String[]args){LRUCache<Integer,String>cache=newLRUCache<>(3);cache.put(1,"A");cache.put(2,"B");cache.put(3,"C");System.out.println(cache.get(1));//Acache.put(4,"D");//Evictskey2System.out.println(cache.get(2));//null}}解析:LRU緩存的核心是記錄元素的最近使用順序,當緩存滿時,淘汰最久未使用的元素。使用雙向鏈表維護使用順序,哈希表實現(xiàn)O(1)時間復雜度的查找。`get`操作將元素移動到鏈表頭部,`put`操作先檢查元素是否存在,如果存在則更新并移動到頭部;如果不存在且緩存已滿,則移除鏈表尾部元素(最久未使用)。二、算法題(共3題,每題20分,總計60分)題目1(20分):給定一個字符串`s`,其中包含數(shù)字和字母,返回其中最長的回文子串的長度。例如:輸入:`"babad"`,輸出:`3`("bab"或"aba")。答案:javapublicclassLongestPalindrome{publicintlongestPalindrome(Strings){if(s==null||s.length()<1)return0;intstart=0,end=0;for(inti=0;i<s.length();i++){intlen1=expandAroundCenter(s,i,i);intlen2=expandAroundCenter(s,i,i+1);intlen=Math.max(len1,len2);if(len>end-start){start=i-(len-1)/2;end=i+len/2;}}returnend-start+1;}privateintexpandAroundCenter(Strings,intleft,intright){while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){left--;right++;}returnright-left-1;}publicstaticvoidmain(String[]args){LongestPalindromesolution=newLongestPalindrome();System.out.println(solution.longestPalindrome("babad"));//3}}解析:通過遍歷每個字符,以該字符為中心向兩邊擴展,分別考慮奇數(shù)長度和偶數(shù)長度的回文。時間復雜度為O(n2),空間復雜度為O(1)。更高效的Manacher算法可以達到O(n)復雜度,但在此題中不需要。題目2(20分):給定一個二叉樹,判斷其是否是平衡二叉樹(即任意節(jié)點的左右子樹高度差不超過1)。答案:javapublicclassTreeNode{intval;TreeNodeleft,right;TreeNode(intx){val=x;}}publicclassSolution{publicbooleanisBalanced(TreeNoderoot){returncheckHeight(root)!=-1;}privateintcheckHeight(TreeNodenode){if(node==null)return0;intleftHeight=checkHeight(node.left);if(leftHeight==-1)return-1;intrightHeight=checkHeight(node.right);if(rightHeight==-1||Math.abs(leftHeight-rightHeight)>1)return-1;returnMath.max(leftHeight,rightHeight)+1;}publicstaticvoidmain(String[]args){TreeNoderoot=newTreeNode(3);root.left=newTreeNode(9);root.right=newTreeNode(20);root.right.left=newTreeNode(15);root.right.right=newTreeNode(7);Solutionsolution=newSolution();System.out.println(solution.isBalanced(root));//true}}解析:通過后序遍歷計算每個節(jié)點的高度,如果發(fā)現(xiàn)左右子樹高度差超過1或子樹本身不平衡(返回-1),則整棵樹不平衡。時間復雜度為O(n),空間復雜度為O(h)(h為樹的高度)。題目3(20分):設計一個算法,找出數(shù)組中不重復的數(shù)字,并返回它們的數(shù)量。例如:輸入:`[4,3,2,7,8,2,3,1]`,輸出:`5`(不重復數(shù)字為4,7,8,1,0)。答案:javaimportjava.util.HashSet;importjava.util.Set;publicclassUniqueNumbers{publicintfindNonDuplicateCount(int[]nums){Set<Integer>set=newHashSet<>();for(intnum:nums){if(!set.add(num)){//如果添加失敗,說明已存在set.remove(num);}}returnset.size();}publicstaticvoidmain(String[]args){UniqueNumberssolution=newUniqueNumbers();int[]nums={4,3,2,7,8,2,3,1};System.out.println(solution.findNonDuplicateCount(nums));//5}}解析:使用`HashSet`記錄數(shù)字,如果添加失?。磾?shù)字已存在),則刪除該數(shù)字。最終`HashSet`中剩余的數(shù)字即為不重復的數(shù)字。時間復雜度為O(n),空間復雜度為O(n)。三、系統(tǒng)設計題(共3題,每題20分,總計60分)題目1(20分):設計一個簡單的微博系統(tǒng),要求:1.支持用戶發(fā)布、評論、點贊;2.用戶信息包括ID、昵稱、粉絲列表;3.微博信息包括ID、用戶ID、內(nèi)容、時間戳。答案:數(shù)據(jù)模型:sqlCREATETABLEusers(user_idINTPRIMARYKEY,nicknameVARCHAR(50),follower_countINTDEFAULT0);CREATETABLEtweets(tweet_idINTPRIMARYKEY,user_idINT,contentTEXT,timestampDATETIME,FOREIGNKEY(user_id)REFERENCESusers(user_id));CREATETABLEcomments(comment_idINTPRIMARYKEY,tweet_idINT,user_idINT,contentTEXT,timestampDATETIME,FOREIGNKEY(tweet_id)REFERENCEStweets(tweet_id),FOREIGNKEY(user_id)REFERENCESusers(user_id));CREATETABLElikes(like_idINTPRIMARYKEY,tweet_idINT,user_idINT,timestampDATETIME,FOREIGNKEY(tweet_id)REFERENCEStweets(tweet_id),FOREIGNKEY(user_id)REFERENCESusers(user_id),UNIQUE(tweet_id,user_id));核心流程:1.發(fā)布微博:用戶向`tweets`表插入一條記錄。2.評論微博:用戶向`comments`表插入一條記錄,關聯(lián)`tweets`和`users`。3.點贊微博:用戶向`likes`表插入一條記錄,使用唯一約束防止重復點贊。4.獲取粉絲列表:通過`users`表的`follower_count`字段和關聯(lián)關系查詢。解析:該設計采用關系型數(shù)據(jù)庫,通過外鍵關聯(lián)用戶、微博和評論。點贊操作使用唯一約束避免重復,提高查詢效率。如果需要支持高并發(fā),可考慮使用Redis緩存熱點數(shù)據(jù)。題目2(20分):設計一個短鏈接生成系統(tǒng),要求:1.輸入長鏈接,輸出6位短鏈接;2.支持自定義前綴;3.需要防止沖突。答案:核心思路:1.使用62進制字符(a-z,A-Z,0-9)映射為短鏈接;2.使用自增ID或哈希算法生成唯一標識;3.自定義前綴可通過參數(shù)傳遞。偽代碼:javapublicStringgenerateShortLink(StringlongUrl,Stringprefix){StringuniqueId=generateUniqueId();//使用UUID或自增IDStringencoded=encode(uniqueId);returnprefix+encoded;}privateStringgenerateUniqueId(){returnUUID.randomUUID().toString().replaceAll("-","");}privateStringencode(Stringid){StringBuildersb=newStringBuilder();longnum=Long.parseLong(id);while(num>0){sb.append(charPool[(int)(num%62)]);num/=62;}returnsb.reverse().toString();}privatechar[]charPool="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL

溫馨提示

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

最新文檔

評論

0/150

提交評論