2026年IT企業(yè)軟件工程師面試題庫_第1頁
2026年IT企業(yè)軟件工程師面試題庫_第2頁
2026年IT企業(yè)軟件工程師面試題庫_第3頁
2026年IT企業(yè)軟件工程師面試題庫_第4頁
2026年IT企業(yè)軟件工程師面試題庫_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年IT企業(yè)軟件工程師面試題庫一、編程基礎(3題,每題10分,共30分)題目1(10分)請用Python實現一個函數,該函數接收一個字符串作為參數,返回該字符串中所有重復字符及其出現次數的字典。例如,輸入"abccba",輸出應該為`{'c':2,'a':2,'b':1}`。pythondefcount_duplicates(s:str)->dict:請在此處編寫代碼pass題目2(10分)請用C++實現一個單鏈表節(jié)點類`ListNode`,包含整型數據域`val`和指向下一個節(jié)點的指針`next`。然后實現一個成員函數`remove_duplicates`,用于刪除鏈表中所有重復的元素,只保留不重復的元素。cppclassListNode{public:intval;ListNodenext;//構造函數ListNode(intx):val(x),next(nullptr){}//請在此處實現remove_duplicates函數voidremove_duplicates(){//請在此處編寫代碼}};題目3(10分)請用Java實現一個方法,接收一個整數數組,返回一個新數組,其中包含原數組中所有奇數索引處的元素。例如,輸入`[1,2,3,4,5]`,返回`[1,3,5]`。javapublicclassArrayUtils{publicstaticint[]getOddIndexElements(int[]arr){//請在此處編寫代碼returnnull;}}二、算法與數據結構(5題,每題14分,共70分)題目4(14分)給定一個非負整數數組`nums`和一個整數`target`,請編寫一個函數,找出數組中和為目標`target`的兩個數,并返回它們的索引。你可以假設每個輸入都只有一個解,且不能重復使用同一個元素。pythondeftwo_sum(nums,target):請在此處編寫代碼pass題目5(14分)請實現一個二叉搜索樹(BST)的迭代后序遍歷。你可以使用遞歸或非遞歸方式實現。python定義二叉樹節(jié)點classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefpostorder_traversal(root):請在此處編寫代碼pass題目6(14分)請實現一個LRU(最近最少使用)緩存。緩存應該支持以下操作:-`LRUCache(intcapacity)`,用容量`capacity`初始化緩存-`get(intkey)`,如果鍵存在,則返回其值,否則返回-1-`put(intkey,intvalue)`,如果鍵已存在,則更新其值。如果鍵不存在,則添加鍵值對。當緩存容量已滿時,刪除最久未使用的鍵。pythonclassLRUCache:def__init__(self,capacity:int):請在此處編寫代碼passdefget(self,key:int)->int:請在此處編寫代碼passdefput(self,key:int,value:int)->None:請在此處編寫代碼pass題目7(14分)請實現一個函數,判斷一個字符串是否是另一個字符串的子序列。子序列可以通過刪除一些字符而不改變剩余字符的相對順序得到。pythondefis_subsequence(s:str,t:str)->bool:請在此處編寫代碼pass題目8(14分)請實現一個函數,給定一個整數`n`,返回`n`的漢諾塔移動方案。你需要從頂部開始,按順序移動所有盤子。一次只能移動一個盤子,并且在移動過程中,任何大盤子都不可以在小盤子上面。pythondefhanoi(n:int,source:str,auxiliary:str,target:str)->List[str]:請在此處編寫代碼pass三、系統設計(2題,每題20分,共40分)題目9(20分)設計一個簡單的微博系統,需要支持以下功能:1.用戶注冊和登錄2.發(fā)布微博(限制長度為280字符)3.關注/取消關注用戶4.獲取關注用戶的最新微博時間線5.獲取指定用戶的微博請簡要描述系統架構,包括主要組件、數據存儲方式以及關鍵接口設計。題目10(20分)設計一個高并發(fā)的短鏈接生成系統。系統需要滿足以下要求:1.支持高并發(fā)請求2.鏈接短小且唯一3.支持自定義短鏈接前綴4.能夠快速查找到原始長鏈接5.具有高可用性和可擴展性請描述系統設計方案,包括數據結構、算法以及部署架構。答案與解析編程基礎答案與解析題目1答案pythondefcount_duplicates(s:str)->dict:count={}forcharins:ifcharincount:count[char]+=1else:count[char]=1return{char:cntforchar,cntincount.items()ifcnt>1}解析:使用字典統計每個字符的出現次數,然后篩選出出現次數大于1的字符。時間復雜度為O(n),空間復雜度為O(n)。題目2答案cppclassListNode{public:intval;ListNodenext;ListNode(intx):val(x),next(nullptr){}voidremove_duplicates(){ListNodecurrent=this;while(current!=nullptr){ListNoderunner=current;while(runner->next!=nullptr){if(runner->next->val==current->val){ListNodetemp=runner->next;runner->next=runner->next->next;deletetemp;}else{runner=runner->next;}}current=current->next;}}};解析:使用快慢指針法,當前節(jié)點與后續(xù)節(jié)點比較,如果相同則刪除。時間復雜度為O(n^2),空間復雜度為O(1)。題目3答案javapublicclassArrayUtils{publicstaticint[]getOddIndexElements(int[]arr){if(arr==null||arr.length==0){returnnewint[0];}int[]result=newint[arr.length/2+(arr.length%2==0?0:1)];intindex=0;for(inti=0;i<arr.length;i+=2){result[index++]=arr[i];}returnresult;}}解析:遍歷數組,將奇數索引處的元素復制到新數組中。時間復雜度為O(n),空間復雜度為O(n)。算法與數據結構答案與解析題目4答案pythondeftwo_sum(nums,target):num_to_index={}fori,numinenumerate(nums):complement=target-numifcomplementinnum_to_index:return[num_to_index[complement],i]num_to_index[num]=ireturn[]解析:使用哈希表記錄每個數字及其索引,遍歷數組時檢查補數是否存在。時間復雜度為O(n),空間復雜度為O(n)。題目5答案pythondefpostorder_traversal(root):ifnotroot:return[]stack=[(root,False)]result=[]whilestack:node,visited=stack.pop()ifnode:ifvisited:result.append(node.val)else:stack.append((node,True))stack.append((node.right,False))stack.append((node.left,False))returnresult解析:使用棧實現非遞歸后序遍歷,先右后左再訪問。時間復雜度為O(n),空間復雜度為O(n)。題目6答案pythonclassLRUCache:classNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=Nonedef__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=self.Node(0,0)self.tail=self.Node(0,0)self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeyinself.cache:node=self.cache[key]self._remove(node)self._add(node)returnnode.valuereturn-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self._remove(self.cache[key])node=self.Node(key,value)self.cache[key]=nodeself._add(node)iflen(self.cache)>self.capacity:lru=self.head.nextself._remove(lru)delself.cache[lru.key]def_remove(self,node):delself.cache[node.key]node.prev.next=node.nextnode.next.prev=node.prevdef_add(self,node):node.next=self.head.nextnode.next.prev=nodeself.head.next=nodenode.prev=self.head解析:使用雙向鏈表和哈希表實現LRU緩存。鏈表頭為最近使用,尾為最久未使用。時間復雜度為O(1),空間復雜度為O(capacity)。題目7答案pythondefis_subsequence(s:str,t:str)->bool:ifnots:returnTrueifnott:returnFalses_idx,t_idx=0,0whiles_idx<len(s)andt_idx<len(t):ifs[s_idx]==t[t_idx]:s_idx+=1t_idx+=1returns_idx==len(s)解析:雙指針法,遍歷t字符串,如果找到s中的字符則移動s指針。時間復雜度為O(m+n),空間復雜度為O(1)。題目8答案pythondefhanoi(n:int,source:str,auxiliary:str,target:str)->List[str]:ifn==1:return[f"Movefrom{source}to{target}"]moves=[]moves.extend(hanoi(n-1,source,target,auxiliary))moves.append(f"Movefrom{source}to{target}")moves.extend(hanoi(n-1,auxiliary,source,target))returnmoves解析:遞歸解法,先將n-1個盤子從源移動到輔助,然后移動最大盤子,再將n-1個盤子從輔助移動到目標。時間復雜度為O(2^n),空間復雜度為O(n)。系統設計答案與解析題目9答案系統架構1.主要組件:-用戶服務:處理用戶注冊、登錄、個人信息管理-微博服務:處理微博發(fā)布、獲取、編輯、刪除-關注服務:處理關注/取消關注關系-消息隊列:處理異步任務,如通知-緩存:Redis緩存熱點數據2.數據存儲:-用戶信息:MySQL,索引用戶ID-微博數據:MySQL,索引微博ID、用戶ID、發(fā)布時間-關注關系:Redis哈希表,鍵為用戶ID,值為關注列表-熱點數據:Redis有序集合,按發(fā)布時間排序3.關鍵接口:-用戶登錄:POST/login,返回token-發(fā)布微博:POST/tweets,參數:內容、圖片等-獲取時間線:GET/timeline,參數:用戶ID、頁碼-關注用戶:POST/follow/{user

溫馨提示

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

評論

0/150

提交評論