程序員代碼面試題及答案詳解_第1頁
程序員代碼面試題及答案詳解_第2頁
程序員代碼面試題及答案詳解_第3頁
程序員代碼面試題及答案詳解_第4頁
程序員代碼面試題及答案詳解_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年程序員代碼面試題及答案詳解一、編程語言基礎(5題,每題10分)1.題目(10分):給定一個字符串`s`,其中包含數(shù)字和字母,請編寫函數(shù)`extractDigits(s)`,返回字符串中所有數(shù)字字符組成的字符串。例如:輸入`"a1b2c3"`,輸出`"123"`。2.題目(10分):在Python中,編寫一個類`Counter`,實現(xiàn)以下功能:-初始化時接受一個整數(shù)`value`,初始計數(shù)為`value`。-提供`increment()`方法,每次調用時`value`加1。-提供`decrement()`方法,每次調用時`value`減1。-提供`reset()`方法,將`value`重置為初始值。示例:pythonc=Counter(5)c.increment()print(c.value)#輸出6c.decrement()print(c.value)#輸出5c.reset()print(c.value)#輸出53.題目(10分):在Java中,編寫一個方法`isPalindrome(Strings)`,判斷字符串`s`是否為回文(忽略大小寫和空格)。例如:輸入`"Aman,aplan,acanal:Panama"`,輸出`true`。4.題目(10分):在JavaScript中,編寫一個函數(shù)`removeDuplicates(arr)`,刪除數(shù)組`arr`中的重復元素,保持原有順序。例如:輸入`[1,2,2,3,4,4,5]`,輸出`[1,2,3,4,5]`。5.題目(10分):在C++中,編寫一個函數(shù)`reverseWords(strings)`,將字符串`s`中的單詞順序反轉。例如:輸入`"helloworld"`,輸出`"worldhello"`。二、數(shù)據(jù)結構與算法(10題,每題10分)6.題目(10分):實現(xiàn)一個`LRU緩存`(LeastRecentlyUsedCache),支持`get(key)`和`put(key,value)`操作。使用雙向鏈表和哈希表實現(xiàn),要求`O(1)`時間復雜度。7.題目(10分):給定一個數(shù)組`nums`和一個目標值`target`,請編寫函數(shù)`twoSum(nums,target)`,返回所有和為`target`的數(shù)對索引。例如:輸入`nums=[2,7,11,15],target=9`,輸出`[[0,1]]`。8.題目(10分):編寫一個函數(shù)`mergeSortedArrays(int[]arr1,int[]arr2)`,合并兩個已排序的數(shù)組,返回合并后的已排序數(shù)組。例如:輸入`arr1=[1,3,5],arr2=[2,4,6]`,輸出`[1,2,3,4,5,6]`。9.題目(10分):給定一個二叉樹,編寫函數(shù)`inorderTraversal(TreeNoderoot)`,返回中序遍歷的結果。例如:輸入:[1,null,2,3]1\2/3輸出:[1,3,2]10.題目(10分):編寫一個函數(shù)`maxProfit(int[]prices)`,計算給定股票價格數(shù)組`prices`的最大利潤。例如:輸入`prices=[7,1,5,3,6,4]`,輸出`5`(在價格為1時買入,價格為5時賣出)。11.題目(10分):給定一個字符串`s`,請編寫函數(shù)`lengthOfLongestSubstring(s)`,返回不重復字符的最長子串長度。例如:輸入`"abcabcbb"`,輸出`3`("abc")。12.題目(10分):編寫一個函數(shù)`rotate(matrix)`,原地旋轉二維矩陣`matrix`90度。例如:輸入:[[1,2,3],[4,5,6],[7,8,9]]輸出:[[7,4,1],[8,5,2],[9,6,3]]13.題目(10分):編寫一個函數(shù)`countAndSay(n)`,實現(xiàn)“計數(shù)排序”序列的第`n`項。例如:輸入`n=4`,輸出`"1211"`(解釋:`1`讀作`one`->`11`,`11`讀作`twoones`->`21`,`21`讀作`onetwo`->`1211`)。14.題目(10分):給定一個字符串`s`,編寫函數(shù)`minWindow(s,t)`,返回`s`中包含`t`所有字符的最小窗口子串。例如:輸入`s="ADOBECODEBANC",t="ABC"`,輸出`"BANC"`。15.題目(10分):編寫一個函數(shù)`isBalanced(TreeNoderoot)`,判斷二叉樹是否平衡(任意節(jié)點的左右子樹高度差不超過1)。例如:輸入:3/\920/\157輸出:true三、系統(tǒng)設計(3題,每題20分)16.題目(20分):設計一個簡單的微博系統(tǒng),要求:1.支持用戶注冊、登錄(使用JWT)。2.支持發(fā)布微博(最多280字符)。3.支持關注/取消關注用戶。4.支持查看用戶的微博時間線(最新20條)。請簡述數(shù)據(jù)庫表設計、核心API接口及主要技術選型(如:后端語言、數(shù)據(jù)庫、緩存等)。17.題目(20分):設計一個高并發(fā)的短鏈接系統(tǒng),要求:1.輸入任意長URL,返回固定長度(如6位)短鏈接。2.訪問短鏈接時,能自動解析為原始URL。3.支持高并發(fā)訪問(每秒百萬級請求)。請簡述技術方案(如:數(shù)據(jù)庫設計、分布式緩存、負載均衡等)。18.題目(20分):設計一個實時聊天系統(tǒng),要求:1.支持一對一聊天和群聊。2.支持消息已讀/未讀狀態(tài)。3.支持離線消息推送(使用WebSocket或長輪詢)。請簡述核心架構(如:消息存儲、同步機制、推送方案等)。答案與解析1.答案(Python):pythondefextractDigits(s):return''.join([cforcinsifc.isdigit()])解析:-使用列表推導式遍歷字符串`s`,篩選出所有數(shù)字字符(`c.isdigit()`為`True`),然后用`''.join()`拼接成字符串。-時間復雜度:`O(n)`,`n`為字符串長度。2.答案(Python):pythonclassCounter:def__init__(self,value):self._value=valueself._initial=valuedefincrement(self):self._value+=1defdecrement(self):self._value-=1@propertydefvalue(self):returnself._valuedefreset(self):self._value=self._initial解析:-使用`_value`存儲當前值,`_initial`存儲初始值。-`increment()`和`decrement()`分別加1或減1。-`reset()`將`_value`恢復為`_initial`。-使用`@property`使`value`可讀。3.答案(Java):javapublicbooleanisPalindrome(Strings){s=s.replaceAll("[^a-zA-Z0-9]","").toLowerCase();intleft=0,right=s.length()-1;while(left<right){if(s.charAt(left)!=s.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:-使用正則表達式去除非字母數(shù)字字符,并轉換為小寫。-雙指針法從兩端向中間遍歷,比較字符是否相等。-時間復雜度:`O(n)`,`n`為字符串長度。4.答案(JavaScript):javascriptfunctionremoveDuplicates(arr){constseen=newSet();returnarr.filter(item=>{if(seen.has(item)){returnfalse;}seen.add(item);returntrue;});}解析:-使用`Set`記錄已出現(xiàn)元素。-`filter`過濾掉重復元素。-時間復雜度:`O(n)`。5.答案(C++):cppinclude<sstream>include<vector>usingnamespacestd;stringreverseWords(strings){vector<string>words;stringword;istringstreamiss(s);while(iss>>word){words.push_back(word);}reverse(words.begin(),words.end());stringresult;for(conststring&w:words){result+=w+"";}returnresult.empty()?"":result.substr(0,result.size()-1);}解析:-使用`istringstream`分割字符串。-將單詞存入`vector`,反轉后拼接。-時間復雜度:`O(n)`。6.答案(Java):javaclassLRUCache{privateMap<Integer,Node>map;privateNodehead,tail;privateintcapacity;classNode{intkey,value;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){if(map.containsKey(key)){Nodenode=map.get(key);moveToHead(node);returnnode.value;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.value=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}Nodenode=newNode(key,value);map.put(key,node);addToHead(node);}}privatevoidaddToHead(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}}解析:-使用雙向鏈表和哈希表實現(xiàn)。-`get`時將節(jié)點移動到頭部。-`put`時若已存在則更新,否則刪除最久未使用節(jié)點。-時間復雜度:`O(1)`。7.答案(Python):pythondeftwoSum(nums,target):num_map={}result=[]fori,numinenumerate(nums):complement=target-numifcomplementinnum_map:result.append([num_map[complement],i])num_map[num]=ireturnresult解析:-使用哈希表記錄數(shù)字及其索引。-遍歷時檢查`target-num`是否已存在。-時間復雜度:`O(n)`。8.答案(Java):javapublicint[]mergeSortedArrays(int[]arr1,int[]arr2){int[]merged=newint[arr1.length+arr2.length];inti=0,j=0,k=0;while(i<arr1.length&&j<arr2.length){if(arr1[i]<arr2[j]){merged[k++]=arr1[i++];}else{merged[k++]=arr2[j++];}}while(i<arr1.length){merged[k++]=arr1[i++];}while(j<arr2.length){merged[k++]=arr2[j++];}returnmerged;}解析:-雙指針法合并兩個有序數(shù)組。-時間復雜度:`O(n+m)`,`n`和`m`分別為兩個數(shù)組長度。9.答案(Python):pythondefinorderTraversal(root):stack,result=[],[]whilerootorstack:whileroot:stack.append(root)root=root.leftroot=stack.pop()result.append(root.val)root=root.rightreturnresult解析:-使用棧實現(xiàn)中序遍歷。-先遍歷左子樹,再訪問節(jié)點,最后遍歷右子樹。-時間復雜度:`O(n)`。10.答案(Python):pythondefmaxProfit(prices):min_price=float('inf')max_profit=0forpriceinprices:ifprice<min_price:min_price=priceelifprice-min_price>max_profit:max_profit=price-min_pricereturnmax_profit解析:-維護最低價格和最大利潤。-遍歷數(shù)組,更新最低價格和利潤。-時間復雜度:`O(n)`。11.答案(JavaScript):javascriptfunctionlengthOfLongestSubstring(s){letleft=0,maxLen=0;constcharIndex={};for(letright=0;right<s.length;right++){if(s[right]incharIndex&&charIndex[s[right]]>=left){left=charIndex[s[right]]+1;}charIndex[s[right]]=right;maxLen=Math.max(maxLen,right-left+1);}returnmaxLen;}解析:-使用滑動窗口和哈希表記錄字符上一次出現(xiàn)的位置。-時間復雜度:`O(n)`。12.答案(JavaScript):javascriptfunctionrotate(matrix){constn=matrix.length;for(leti=0;i<Math.floor(n/2);i++){for(letj=0;j<Math.floor((n+1)/2);j++){consttemp=matrix[i][j];matrix[i][j]=matrix[n-1-j][i];matrix[n-1-j][i]=matrix[n-1-i][n-1-j];matrix[n-1-i][n-1-j]=matrix[j][n-1-i];matrix[j][n-1-i]=temp;}}}解析:-分層旋轉矩陣。-時間復雜度:`O(n^2)`。13.答案(Python):pythondefcountAndSay(n):ifn==1:return"1"prev=countAndSay(n-1)result=""count=1foriinrange(1,len(prev)):ifprev[i]==prev[i-1]:count+=1else:result+=str(count)+prev[i-1]count=1result+=str(count)+prev[-1]returnresult解析:-遞歸實現(xiàn)。-統(tǒng)計連續(xù)數(shù)字的個數(shù),然后拼接。-時間復雜度:`O(nk)`,`k`為字符串長度。14.答案(Java):javapublicStringminWindow(Strings,Stringt){if(s==null||t==null||s.length()<t.length())return"";int[]countT=newint[128];int[]window=newint[128];for(charc:t.toCharArray()){countT[c]++;}inthave=0,need=t.length();intleft=0,right=0,minLen=Integer.MAX_VALUE,ansLeft=0;while(right<s.length()){charc=s.charAt(right);window[c]++;if(countT[c]>0&&window[c]==countT[c]){have++;}while(have==need){if(right-left+1<minLen){minLen=right-left+1;ansLeft=left;}chard=s.charAt(left);window[d]--;if(countT[d]>0&&window[d]<countT[d]){have--;}left++;}right++;}returnminLen==Integer.MAX_VALUE?"":s.substring(ansLeft,ansLeft+minLen);}解析:-滑動窗口法。-統(tǒng)計`t`中字符頻率,然后擴展窗口直到包含`t`所有字符。-時間復雜度:`O(n)`。15.答案(Python):pythondefisBalanced(root):defcheck(node):ifnotnode:return0left=check(node.left)right=check(node.right)ifabs(left-right)>1orleft==-1orright==-1:return-1returnmax(left,right)+1retu

溫馨提示

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

評論

0/150

提交評論