2026年IT行業(yè)技術(shù)面試題庫編程與算法篇_第1頁
2026年IT行業(yè)技術(shù)面試題庫編程與算法篇_第2頁
2026年IT行業(yè)技術(shù)面試題庫編程與算法篇_第3頁
2026年IT行業(yè)技術(shù)面試題庫編程與算法篇_第4頁
2026年IT行業(yè)技術(shù)面試題庫編程與算法篇_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年IT行業(yè)技術(shù)面試題庫:編程與算法篇1.基礎(chǔ)編程題(共5題,每題10分)1.1題目1(Java):編寫一個Java方法,接收一個字符串參數(shù),返回該字符串中所有唯一字符的長度。例如,輸入`"hello"`,返回`3`(`h,e,l`是唯一的)。要求不使用額外的數(shù)據(jù)結(jié)構(gòu)(如HashMap)。1.2題目2(Python):實現(xiàn)一個函數(shù),接收一個列表,返回一個新列表,其中包含原列表中所有非遞增子序列的最小值。例如,輸入`[5,4,3,2,1]`,返回`[5,4,3,2,1]`;輸入`[1,2,3,4,5]`,返回`[1]`。1.3題目3(C++):用C++實現(xiàn)一個無重復(fù)數(shù)字的排列組合函數(shù),輸入一個不重復(fù)的字符串,返回所有可能的排列。例如,輸入`"abc"`,返回`["abc","acb","bac","bca","cab","cba"]`。1.4題目4(JavaScript):編寫一個JavaScript函數(shù),接收一個數(shù)組,返回一個對象,其中鍵為數(shù)組中的元素,值為該元素出現(xiàn)的次數(shù)。例如,輸入`[1,2,2,3,3,3]`,返回`{1:1,2:2,3:3}`。1.5題目5(Go):實現(xiàn)一個Go函數(shù),接收一個整數(shù),返回該整數(shù)的二進(jìn)制表示中1的個數(shù)。例如,輸入`9`(二進(jìn)制`1001`),返回`2`。2.算法題(共8題,每題15分)2.1題目6(動態(tài)規(guī)劃):給定一個整數(shù)數(shù)組,其中每個元素表示爬樓梯時每一步可以走的步數(shù)(例如,`[2,3,1,0,0]`表示可以走2步或3步),問從底部到頂部的最少步數(shù)是多少?假設(shè)初始位置為第0個元素。2.2題目7(貪心算法):有一個背包,容量為`W`,有`n`個物品,每個物品的重量為`w[i]`,價值為`v[i]`。實現(xiàn)一個函數(shù),返回背包能裝下的最大價值。要求使用貪心算法,不要求最優(yōu)解(但需說明為什么)。2.3題目8(二分查找):在一個有序數(shù)組中,找到某個數(shù)字的最后出現(xiàn)位置。例如,輸入`[1,2,2,2,3]`和目標(biāo)`2`,返回`3`(最后一個`2`的下標(biāo))。要求時間復(fù)雜度為`O(logn)`。2.4題目9(鏈表):給定一個單鏈表,判斷是否為回文鏈表。例如,輸入`1->2->2->1`,返回`true`。要求不使用額外空間。2.5題目10(樹):給定一個二叉樹,返回其最大深度。例如,輸入`[3,9,20,null,null,15,7]`(對應(yīng)二叉樹),返回`3`。2.6題目11(堆):實現(xiàn)一個函數(shù),接收一個數(shù)組,返回該數(shù)組的中位數(shù)。要求時間復(fù)雜度為`O(nlogn)`,可以使用堆。2.7題目12(圖):給定一個無向圖,判斷是否存在環(huán)??梢允褂蒙疃葍?yōu)先搜索(DFS)或廣度優(yōu)先搜索(BFS)。2.8題目13(字符串匹配):實現(xiàn)KMP算法,輸入主串和子串,返回子串在主串中的第一次出現(xiàn)位置。例如,輸入`"ABABDABACDABABCABAB"`和`"ABABCABAB"`,返回`10`。3.實用編程題(共5題,每題20分)3.1題目14(文件處理):編寫一個Python腳本,讀取一個文件夾中的所有`.txt`文件,統(tǒng)計每個文件中單詞的頻率,并輸出頻率最高的10個單詞及其出現(xiàn)次數(shù)。3.2題目15(數(shù)據(jù)庫):假設(shè)有一個學(xué)生表`students`(`id,name,age,grade`),編寫SQL查詢,返回年齡大于18且成績在`B`以上的學(xué)生數(shù)量。3.3題目16(并發(fā)編程):用Java實現(xiàn)一個多線程程序,模擬銀行取款操作。有100個線程(客戶),每個線程隨機(jī)取款100次,賬戶初始余額為1000,要求同步操作以避免數(shù)據(jù)不一致。3.4題目17(網(wǎng)絡(luò)編程):用Python編寫一個簡單的TCP客戶端和服務(wù)器,客戶端發(fā)送一個字符串,服務(wù)器返回該字符串的反轉(zhuǎn)。要求使用`socket`庫。3.5題目18(數(shù)據(jù)結(jié)構(gòu)設(shè)計):設(shè)計一個LRU(最近最少使用)緩存,容量為`capacity`。支持`get(key)`和`put(key,value)`操作,要求時間復(fù)雜度為`O(1)`??梢允褂霉1?雙向鏈表。答案與解析1.1答案(Java):javapublicintuniqueChars(Strings){int[]count=newint[26];for(charc:s.toCharArray()){count[c-'a']++;}intunique=0;for(intval:count){if(val==1)unique++;}returnunique;}解析:統(tǒng)計每個字母的出現(xiàn)次數(shù),唯一字符的計數(shù)為1。不使用HashMap是因為題目限制。1.2答案(Python):pythondeffind_min_in_subsequences(arr):result=[]foriinrange(len(arr)):ifall(arr[j]>=arr[i]forjinrange(i+1,len(arr))):result.append(arr[i])returnresult解析:遍歷數(shù)組,檢查當(dāng)前元素是否為非遞增子序列的最小值。1.3答案(C++):cppinclude<vector>include<string>include<algorithm>usingnamespacestd;voidpermuteHelper(string&s,intstart,vector<string>&result){if(start==s.size()){result.push_back(s);return;}for(inti=start;i<s.size();++i){swap(s[start],s[i]);permuteHelper(s,start+1,result);swap(s[start],s[i]);}}vector<string>permuteUnique(strings){vector<string>result;sort(s.begin(),s.end());permuteHelper(s,0,result);returnresult;}解析:使用回溯法,但先排序以避免重復(fù)排列。1.4答案(JavaScript):javascriptfunctioncountElements(arr){constcount={};for(constnumofarr){count[num]=(count[num]||0)+1;}returncount;}解析:遍歷數(shù)組,用對象記錄每個元素的出現(xiàn)次數(shù)。1.5答案(Go):gofunccountOnes(nint)int{count:=0forn!=0{count+=n&1n>>=1}returncount}解析:位運算,每次檢查最低位是否為1,然后右移。2.1答案(動態(tài)規(guī)劃):pythondefminSteps(arr):dp=[float('inf')]len(arr)dp[0]=0foriinrange(1,len(arr)):forstepinarr[i]:ifi-step>=0:dp[i]=min(dp[i],dp[i-step]+1)returndp[-1]ifdp[-1]!=float('inf')else-1解析:動態(tài)規(guī)劃,`dp[i]`表示到達(dá)第`i`個元素的最少步數(shù)。2.2答案(貪心算法):pythondefknapsackGreedy(w,weights,values):totalValue=0foriinsorted(range(len(values)),key=lambdax:values[x]/weights[x],reverse=True):ifw>=weights[i]:totalValue+=values[i]w-=weights[i]returntotalValue解析:按價值密度排序,貪心選擇價值密度最大的物品。2.3答案(二分查找):pythondeffindLastOccurrence(arr,target):left,right=0,len(arr)-1result=-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:result=midleft=mid+1elifarr[mid]<target:left=mid+1else:right=mid-1returnresult解析:二分查找的變種,找到右邊界。2.4答案(鏈表):pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefisPalindrome(head):ifnotheadornothead.next:returnTrueslow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextsecondHalf=reverseList(slow)firstHalf=headwhilesecondHalf:iffirstHalf.val!=secondHalf.val:returnFalsefirstHalf=firstHalf.nextsecondHalf=secondHalf.nextreturnTrue解析:快慢指針找中點,反轉(zhuǎn)后半部分,然后比較。2.5答案(樹):pythondefmaxDepth(root):ifnotroot:return0return1+max(maxDepth(root.left),maxDepth(root.right))解析:遞歸計算左右子樹的最大深度。2.6答案(堆):pythonimportheapqdeffindMedian(arr):maxHeap=[]minHeap=[]fornuminarr:heapq.heappush(maxHeap,-num)iflen(maxHeap)>len(minHeap)+1:heapq.heappush(minHeap,-heapq.heappop(maxHeap))eliflen(minHeap)>0and-maxHeap[0]>minHeap[0]:heapq.heappush(minHeap,-heapq.heappop(maxHeap))heapq.heappush(maxHeap,-heapq.heappop(minHeap))iflen(maxHeap)>len(minHeap):return-maxHeap[0]else:return(-maxHeap[0]+minHeap[0])/2解析:使用兩個堆,一個最大堆和一個最小堆,保持平衡。2.7答案(圖):pythondefhasCycle(graph):visited=set()recStack=set()fornodeingraph:ifnodenotinvisited:ifdfsCycle(node):returnTruereturnFalsedefdfsCycle(node):visited.add(node)recStack.add(node)forneighboringraph[node]:ifneighbornotinvisited:ifdfsCycle(neighbor):returnTrueelifneighborinrecStack:returnTruerecStack.remove(node)returnFalse解析:DFS檢測環(huán),使用遞歸棧。2.8答案(KMP):pythondefkmpSearch(text,pattern):lps=computeLPS(pattern)i=j=0whilei<len(text):ifpattern[j]==text[i]:i,j=i+1,j+1ifj==len(pattern):returni-jelifi<len(text)andpattern[j]!=text[i]:ifj!=0:j=lps[j-1]else:i+=1return-1defcomputeLPS(pattern):lps=[0]len(pattern)i=1j=0whilei<len(pattern):ifpattern[i]==pattern[j]:lps[i]=j+1i,j=i+1,j+1elifj>0:j=lps[j-1]else:lps[i]=0i+=1returnlps解析:KMP算法,計算最長前綴后綴數(shù)組。3.1答案(文件處理):pythonimportosfromcollectionsimportCounterdefcountWordsInFiles(folder):wordCount=Counter()forfilenameinos.listdir(folder):iffilename.endswith('.txt'):withopen(os.path.join(folder,filename),'r',encoding='utf-8')asf:words=f.read().split()wordCount.update(words)top10=wordCount.most_common(10)forword,freqintop10:print(f"{word}:{freq}")解析:遍歷文件夾中的所有.txt文件,統(tǒng)計單詞頻率。3.2答案(數(shù)據(jù)庫):sqlSELECTCOUNT()FROMstudentsWHEREage>18ANDgrade='B';解析:標(biāo)準(zhǔn)SQL查詢,條件過濾。3.3答案(并發(fā)編程):javaclassBankAccount{privateintbalance=1000;publicsynchronizedvoidwithdraw(intamount){if(balance>=amount){balance-=amount;}}publicsynchronizedintgetBalance(){returnbalance;}}publicclassBankSimulation{publicstaticvoidmain(String[]args)throwsInterruptedException{BankAccountaccount=newBankAccount();Thread[]customers=newThread[100];for(inti=0;i<100;i++){customers[i]=newThread(()->{for(intj=0;j<100;j++){account.withdraw((int)(Math.random()100));}});customers[i].start();}for(Threadt:customers){t.join();}System.out.println("Finalbalance:"+account.getBalance());}}解析:使用`synchronized`關(guān)鍵字同步方法,避免線程安全問題。3.4答案(網(wǎng)絡(luò)編程):pythonimportsocketServerserver_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_socket.bind(('localhost',12345))server_socket.listen(5)print("Serverrunning...")whileTrue:client_socket,addr=server_socket.accept()data=client_socket.recv(1024).decode()reversed_data=data[::-1]client_socket.send(reversed_data.encode())client_socket.close()Clientclient_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client_socket.connect(('localhost',12345))client_socket.send("Hello".encode())data=client_socket.recv(1024).decode()print("Received:",data)client_socket.close()解析:使用`socket`庫實現(xiàn)TCP通信。3.5答案(數(shù)據(jù)結(jié)構(gòu)設(shè)計):pythonclassLRUCache:def__init__(self,capacity):self.capacity=ca

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論