程序員面試題目及代碼能力測試_第1頁
程序員面試題目及代碼能力測試_第2頁
程序員面試題目及代碼能力測試_第3頁
程序員面試題目及代碼能力測試_第4頁
程序員面試題目及代碼能力測試_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年程序員面試題目及代碼能力測試一、編程語言基礎(5題,每題10分,共50分)1.題目:請用Python實現一個函數,判斷一個字符串是否為回文串(正序和逆序讀都一樣)。例如,輸入"racecar"返回True,輸入"hello"返回False。要求不使用Python內置的逆序函數。答案與解析:pythondefis_palindrome(s:str)->bool:left,right=0,len(s)-1whileleft<right:ifs[left]!=s[right]:returnFalseleft+=1right-=1returnTrue測試用例print(is_palindrome("racecar"))#Trueprint(is_palindrome("hello"))#False解析:通過雙指針法從字符串兩端向中間遍歷,比較對應字符是否相同。如果發(fā)現不匹配則直接返回False,否則最終返回True。時間復雜度O(n),空間復雜度O(1)。2.題目:請用Java實現一個方法,找出一個整數數組中的最大值和最小值,并返回一個包含兩個元素的數組。例如,輸入[3,1,4,1,5]返回[1,5]。答案與解析:javapublicint[]findMinMax(int[]arr){if(arr==null||arr.length==0){thrownewIllegalArgumentException("Arrayisemptyornull");}intmin=arr[0];intmax=arr[0];for(intnum:arr){if(num<min)min=num;if(num>max)max=num;}returnnewint[]{min,max};}//測試用例publicstaticvoidmain(String[]args){int[]result=newSolution().findMinMax(newint[]{3,1,4,1,5});System.out.println("Min:"+result[0]+",Max:"+result[1]);//輸出:Min:1,Max:5}解析:初始化最大值和最小值為數組的第一個元素,遍歷數組更新最大值和最小值。時間復雜度O(n),空間復雜度O(1)。3.題目:請用C++實現一個函數,計算一個正整數的二進制表示中1的個數。例如,輸入5(二進制101)返回2。答案與解析:cppintcount_bits(intn){intcount=0;while(n>0){count+=n&1;n>>=1;}returncount;}//測試用例include<iostream>intmain(){std::cout<<count_bits(5)<<std::endl;//輸出:2return0;}解析:通過不斷右移整數并判斷最低位是否為1來計數。時間復雜度O(logn),空間復雜度O(1)。4.題目:請用JavaScript實現一個函數,將一個字符串轉換為首字母大寫的形式。例如,輸入"helloworld"返回"HelloWorld"。答案與解析:javascriptfunctioncapitalize(str){if(!str)returnstr;returnstr.charAt(0).toUpperCase()+str.slice(1);}functioncapitalizeWords(str){returnstr.split('').map(capitalize).join('');}//測試用例console.log(capitalizeWords("helloworld"));//"HelloWorld"解析:先處理首字母大寫,再通過split和map處理每個單詞的首字母大寫,最后join回字符串。時間復雜度O(n),空間復雜度O(n)。5.題目:請用Go實現一個函數,檢查一個字符串是否包含所有重復的字母至少兩次。例如,輸入"abba"返回True,輸入"abc"返回False。答案與解析:gofunchasDuplicateLetters(sstring)bool{count:=make([]int,26)for_,char:=ranges{index:=int(char-'a')count[index]++ifcount[index]>1{returntrue}}returnfalse}//測試用例packagemainimport"fmt"funcmain(){fmt.Println(hasDuplicateLetters("abba"))//truefmt.Println(hasDuplicateLetters("abc"))//false}解析:使用長度為26的計數數組記錄每個字母的出現次數,如果某個字母出現超過一次則返回True。時間復雜度O(n),空間復雜度O(1)。二、數據結構與算法(5題,每題10分,共50分)1.題目:請實現一個LRU(最近最少使用)緩存,支持get和put操作。緩存容量為3,例如:-put(1,1)→緩存是{1=1}-put(2,2)→緩存是{1=1,2=2}-get(1)→返回1-put(3,3)→緩存滿,刪除最久未使用的1,緩存是{2=2,3=3}-get(4)→返回-1(未找到)答案與解析:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeynotinself.cache:return-1self.order.remove(key)self.order.append(key)returnself.cache[key]defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)self.cache[key]=valueself.order.append(key)iflen(self.cache)>self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]測試用例lru=LRUCache(3)lru.put(1,1)lru.put(2,2)print(lru.get(1))#1lru.put(3,3)print(lru.get(4))#-1解析:使用哈希表記錄緩存,雙向鏈表記錄訪問順序。get時將key移到隊尾,put時如果超出容量則刪除隊頭元素。時間復雜度O(1),空間復雜度O(capacity)。2.題目:請用二分查找法實現一個函數,在一個有序數組中查找目標值,如果存在返回索引,否則返回-1。例如,輸入[1,2,3,4,5]和目標3返回2。答案與解析:pythondefbinary_search(arr:list,target:int)->int:left,right=0,len(arr)-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:returnmidelifarr[mid]<target:left=mid+1else:right=mid-1return-1測試用例print(binary_search([1,2,3,4,5],3))#2print(binary_search([1,2,3,4,5],6))#-1解析:每次將查找區(qū)間減半,直到找到目標值或區(qū)間為空。時間復雜度O(logn),空間復雜度O(1)。3.題目:請實現一個函數,將一個非負整數n轉換為羅馬數字。例如,輸入3返回"III",輸入4返回"IV",輸入9返回"IX"。答案與解析: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=""i=0whilenum>0:for_inrange(num//val[i]):roman+=syms[i]num-=val[i]i+=1returnroman測試用例print(int_to_roman(3))#"III"print(int_to_roman(4))#"IV"print(int_to_roman(9))#"IX"解析:使用兩個數組按從大到小排列的值和符號,依次匹配并減去對應的值,拼接符號到結果中。時間復雜度O(1),空間復雜度O(1)。4.題目:請實現一個函數,判斷一個無向圖是否是二分圖(即可以染成兩種顏色且相鄰節(jié)點不同色)??梢允褂绵徑颖砘蜞徑泳仃嚤硎?。答案與解析:pythondefis_bipartite(graph:list)->bool:n=len(graph)color=[-1]n#-1表示未染色,0和1表示兩種顏色defdfs(node,c):color[node]=cforneighboringraph[node]:ifcolor[neighbor]==-1:ifnotdfs(neighbor,1-c):returnFalseelifcolor[neighbor]==c:returnFalsereturnTrueforiinrange(n):ifcolor[i]==-1:ifnotdfs(i,0):returnFalsereturnTrue測試用例print(is_bipartite([[1,3],[0,2],[1,3],[0,2]]))#Trueprint(is_bipartite([[1,2,3],[0,2],[0,1,3],[0,2]]))#False解析:使用深度優(yōu)先搜索(DFS)遍歷圖,嘗試用兩種顏色染色,如果相鄰節(jié)點顏色相同則不是二分圖。時間復雜度O(V+E),空間復雜度O(V)。5.題目:請實現一個函數,找出所有可能的括號組合,例如n=3返回["((()))","(()())","(())()","()(())","()()()"]。答案與解析:pythondefgenerate_parentheses(n:int)->list:defbacktrack(s,left,right):iflen(s)==2n:result.append(s)returnifleft<n:backtrack(s+'(',left+1,right)ifright<left:backtrack(s+')',left,right+1)result=[]backtrack('',0,0)returnresult測試用例print(generate_parentheses(3))#["((()))","(()())","(())()","()(())","()()()"]解析:使用回溯法,每次選擇添加'('或')',要求左括號數量不超過n,右括號數量不超過左括號。時間復雜度O(4^n/√n),空間復雜度O(4^n/√n)。三、系統(tǒng)設計(3題,每題15分,共45分)1.題目:設計一個簡單的微博系統(tǒng),需要支持以下功能:-發(fā)布微博(包含文本、時間戳、作者)-獲取某用戶的最新10條微博-獲取某用戶的關注者列表-獲取某用戶的粉絲列表-點贊微博(每個用戶對每條微博最多點贊一次)答案與解析:數據模型:plaintextUser:id,username,followers,followingTweet:id,user_id,text,timestamp,likesFollowRelation:follower_id,followee_id功能實現:-發(fā)布微博:將新微博存入`Tweet`表,關聯`user_id`和`timestamp`。-獲取最新10條微博:按`timestamp`降序查詢`Tweet`表,取前10條。-獲取關注者/粉絲:通過`FollowRelation`表查詢。-點贊:維護一個`Like`表記錄`user_id`和`tweet_id`的組合,檢查是否已存在。架構建議:-微博存儲:使用關系型數據庫(如MySQL)存儲用戶和微博數據。-高并發(fā):通過Redis緩存熱點用戶數據,減少數據庫壓力。-分布式:將微博分片存儲,支持水平擴展。2.題目:設計一個短鏈接系統(tǒng),要求:-輸入長鏈接后生成短鏈接(如6位隨機字母)-訪問短鏈接時解析為原始長鏈接-支持統(tǒng)計短鏈接的訪問次數答案與解析:數據模型:plaintextShortLink:id,original

溫馨提示

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

評論

0/150

提交評論