2026年IT行業(yè)軟件工程師面試題及解答指南_第1頁
2026年IT行業(yè)軟件工程師面試題及解答指南_第2頁
2026年IT行業(yè)軟件工程師面試題及解答指南_第3頁
2026年IT行業(yè)軟件工程師面試題及解答指南_第4頁
2026年IT行業(yè)軟件工程師面試題及解答指南_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年IT行業(yè)軟件工程師面試題及解答指南一、編程題(共3題,每題20分)題目1(20分):實現(xiàn)一個LRU緩存機(jī)制要求:-設(shè)計一個LRU(LeastRecentlyUsed)緩存系統(tǒng),支持get和put操作-get(key)-獲取鍵key對應(yīng)的值,如果鍵不存在返回-1-put(key,value)-插入或更新鍵值對。當(dāng)緩存容量已滿時,需要驅(qū)逐最久未使用的數(shù)據(jù)-使用雙向鏈表和哈希表實現(xiàn),保證O(1)時間復(fù)雜度示例:LRUCachecache=newLRUCache(2);cache.put(1,1);//緩存是{1=1}cache.put(2,2);//緩存是{1=1,2=2}cache.get(1);//返回1cache.put(3,3);//去除鍵2,緩存是{1=1,3=3}cache.get(2);//返回-1(未找到)cache.put(4,4);//去除鍵1,緩存是{4=4,3=3}cache.get(1);//返回-1(未找到)cache.get(3);//返回3cache.get(4);//返回4題目2(20分):字符串轉(zhuǎn)換整數(shù)(atoi)要求:-實現(xiàn)atoi函數(shù),將非負(fù)字符串轉(zhuǎn)換為整數(shù)-忽略前導(dǎo)空格-處理正負(fù)號-當(dāng)數(shù)字超過32位整數(shù)范圍時,返回INT_MAX或INT_MIN-遇到非數(shù)字字符時停止轉(zhuǎn)換示例:Input:"-42"Output:-42Explanation:Thefirstnon-whitespacecharacteris'-',whichistheminussign.Then,wereadthenextcharacteranditis'4'.Thisisnotawhitespacecharactersowestopreadingmorecharacters.Theparsedintegeris-42.題目3(20分):合并區(qū)間要求:-給定一個區(qū)間列表,合并所有重疊的區(qū)間-輸出合并后的區(qū)間列表-區(qū)間用[start,end]表示,且start≤end示例:Input:[[1,3],[2,6],[8,10],[15,18]]Output:[[1,6],[8,10],[15,18]]Explanation:Sinceintervals[1,3]and[2,6]overlap,mergetheminto[1,6].二、算法題(共4題,每題15分)題目4(15分):二叉樹的最大深度要求:-給定二叉樹的根節(jié)點,返回二叉樹的最大深度-最大深度是從根節(jié)點到最遠(yuǎn)葉子節(jié)點的最長路徑上的節(jié)點數(shù)示例:輸入:[3,9,20,null,null,15,7]輸出:3解釋:3/\920/\157題目5(15分):羅馬數(shù)字轉(zhuǎn)整數(shù)要求:-實現(xiàn)將羅馬數(shù)字轉(zhuǎn)換為整數(shù)-羅馬數(shù)字由'I','V','X','L','C','D','M'組成-通常情況下,較小的數(shù)字在左邊代表減法,在右邊代表加法示例:Input:"MCMXCIV"Output:1994Explanation:M=1000,CM=900,XC=90,IV=4題目6(15分):搜索插入位置要求:-給定一個排序數(shù)組和一個目標(biāo)值,返回目標(biāo)值在數(shù)組中的插入位置-如果數(shù)組中存在目標(biāo)值,返回其索引-如果不存在,返回它應(yīng)該被插入的位置示例:Input:nums=[1,3,5,6],target=5Output:2題目7(15分):最長回文子串要求:-給定一個字符串,找到最長的回文子串的長度-可以使用動態(tài)規(guī)劃或中心擴(kuò)展法示例:Input:"babad"Output:3Explanation:"bab"or"aba"areboththelongestpalindromicsubstrings.三、系統(tǒng)設(shè)計題(共2題,每題25分)題目8(25分):設(shè)計一個簡單的微博系統(tǒng)要求:-設(shè)計一個支持基本功能的微博系統(tǒng)-功能要求:發(fā)布微博、獲取關(guān)注者的微博流、關(guān)注/取消關(guān)注-說明數(shù)據(jù)結(jié)構(gòu)選擇、主要接口設(shè)計、性能考慮題目9(25分):設(shè)計一個短鏈接系統(tǒng)要求:-設(shè)計一個短鏈接系統(tǒng),實現(xiàn)長鏈接到短鏈接的轉(zhuǎn)換-需要考慮:-鏈接轉(zhuǎn)換的隨機(jī)性和唯一性-高并發(fā)處理能力-定期清理無效鏈接-說明系統(tǒng)架構(gòu)、數(shù)據(jù)存儲方案、主要技術(shù)選型答案與解析編程題答案題目1:實現(xiàn)一個LRU緩存機(jī)制(20分)答案:javaclassLRUCache{privateintcapacity;privateMap<Integer,Node>map;privateNodehead,tail;classNode{intkey;intvalue;Nodeprev;Nodenext;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){Nodenode=map.get(key);if(node==null)return-1;moveToHead(node);returnnode.value;}publicvoidput(intkey,intvalue){Nodenode=map.get(key);if(node==null){NodenewNode=newNode(key,value);map.put(key,newNode);addToHead(newNode);if(map.size()>capacity){NodetoDel=tail.prev;removeNode(toDel);map.remove(toDel.key);}}else{node.value=value;moveToHead(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);}}解析:-使用雙向鏈表維護(hù)訪問順序,頭節(jié)點指向最近訪問,尾節(jié)點指向最久未訪問-哈希表實現(xiàn)O(1)時間復(fù)雜度的get操作-put操作時,如果鍵已存在則更新值并移動到頭部;如果超出容量則刪除尾節(jié)點-添加、刪除、移動操作均通過調(diào)整指針實現(xiàn),保證O(1)復(fù)雜度題目2:字符串轉(zhuǎn)換整數(shù)(atoi)(15分)答案:javapublicclassSolution{publicintmyAtoi(Strings){if(s==null||s.length()==0)return0;inti=0,n=s.length();intsign=1;longresult=0;//去除前導(dǎo)空格while(i<n&&s.charAt(i)=='')i++;//處理正負(fù)號if(i<n&&(s.charAt(i)=='+'||s.charAt(i)=='-')){sign=(s.charAt(i)=='-')?-1:1;i++;}//轉(zhuǎn)換數(shù)字while(i<n){charc=s.charAt(i);if(c<'0'||c>'9')break;result=result10+(c-'0');//檢查溢出if(sign==1&&result>Integer.MAX_VALUE)returnInteger.MAX_VALUE;if(sign==-1&&-result<Integer.MIN_VALUE)returnInteger.MIN_VALUE;i++;}return(int)(signresult);}}解析:-遵循"去除空格→解析符號→轉(zhuǎn)換數(shù)字→檢查溢出"的邏輯-使用long類型存儲中間結(jié)果避免溢出問題-對INT_MAX/INT_MIN進(jìn)行判斷,確保在32位整數(shù)范圍內(nèi)-遇到非數(shù)字字符時立即停止轉(zhuǎn)換,不處理后續(xù)字符題目3:合并區(qū)間(15分)答案:javapublicclassSolution{publicint[][]merge(int[][]intervals){if(intervals==null||intervals.length==0)returnnewint[0][2];//按起點排序Arrays.sort(intervals,(a,b)->Ipare(a[0],b[0]));List<int[]>result=newArrayList<>();int[]prev=intervals[0];result.add(prev);for(inti=1;i<intervals.length;i++){int[]curr=intervals[i];if(prev[1]>=curr[0]){//重疊prev[1]=Math.max(prev[1],curr[1]);}else{//不重疊prev=curr;result.add(prev);}}returnresult.toArray(newint[result.size()][]);}}解析:-先按區(qū)間的起始位置進(jìn)行排序-遍歷排序后的區(qū)間列表,比較當(dāng)前區(qū)間與結(jié)果列表中最后一個區(qū)間的終點-如果重疊則合并(更新終點為兩者最大值),否則添加新區(qū)間-最終結(jié)果轉(zhuǎn)換為二維數(shù)組返回答案與解析(續(xù))算法題答案題目4:二叉樹的最大深度(15分)答案:java//遞歸解法publicclassSolution{publicintmaxDepth(TreeNoderoot){if(root==null)return0;return1+Math.max(maxDepth(root.left),maxDepth(root.right));}}//迭代解法(BFS)publicclassSolution{publicintmaxDepth(TreeNoderoot){if(root==null)return0;intdepth=0;Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);while(!queue.isEmpty()){depth++;intsize=queue.size();for(inti=0;i<size;i++){TreeNodenode=queue.poll();if(node.left!=null)queue.offer(node.left);if(node.right!=null)queue.offer(node.right);}}returndepth;}}解析:-遞歸解法:遞歸計算左右子樹深度,取最大值加1-迭代解法(BFS):層序遍歷,每層深度+1-時間復(fù)雜度:O(n),n為節(jié)點數(shù)-空間復(fù)雜度:遞歸解法O(h),迭代解法O(n)題目5:羅馬數(shù)字轉(zhuǎn)整數(shù)(15分)答案:javapublicclassSolution{publicintromanToInt(Strings){if(s==null||s.length()==0)return0;Map<Character,Integer>map=newHashMap<>();map.put('I',1);map.put('V',5);map.put('X',10);map.put('L',50);map.put('C',100);map.put('D',500);map.put('M',1000);intresult=0;intprev=0;for(inti=s.length()-1;i>=0;i--){intcurr=map.get(s.charAt(i));if(curr<prev){result-=curr;}else{result+=curr;prev=curr;}}returnresult;}}解析:-從右向左遍歷羅馬數(shù)字-如果當(dāng)前值小于前一個值,則減去當(dāng)前值(表示減法情況)-否則加上當(dāng)前值(表示加法情況)-使用哈希表存儲羅馬數(shù)字對應(yīng)值,提高查找效率-時間復(fù)雜度:O(n),n為字符串長度-空間復(fù)雜度:O(1),哈希表大小固定題目6:搜索插入位置(15分)答案:javapublicclassSolution{publicintsearchInsert(int[]nums,inttarget){intleft=0,right=nums.length-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target)returnmid;if(nums[mid]<target)left=mid+1;elseright=mid-1;}returnleft;}}解析:-二分查找變體-如果找到target,返回索引-如果未找到,left指向第一個大于target的位置-對于[1,3,5,6]target=5,left最終會指向索引2-對于target=2,left最終指向索引1-對于target=7,left最終指向索引4(插入位置)-時間復(fù)雜度:O(logn)-空間復(fù)雜度:O(1)題目7:最長回文子串(15分)答案:javapublicclassSolution{publicStringlongestPalindrome(Strings){if(s==null||s.length()<1)return"";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;}}returns.substring(start,end+1);}privateintexpandAroundCenter(Strings,intleft,intright){while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){left--;right++;}returnright-left-1;}}解析:-中心擴(kuò)展法:每個字符(或字符間)作為中心,向兩邊擴(kuò)展-考慮兩種情況:奇數(shù)長度回文(如"aba")和偶數(shù)長度回文(如"abba")-記錄最大回文子串的起始和結(jié)束位置-時間復(fù)雜度:O(n^2)-空間復(fù)雜度:O(1)系統(tǒng)設(shè)計題答案題目8:設(shè)計一個簡單的微博系統(tǒng)(25分)要求:-設(shè)計支持基本功能的微博系統(tǒng)-功能要求:發(fā)布微博、獲取關(guān)注者的微博流、關(guān)注/取消關(guān)注-說明數(shù)據(jù)結(jié)構(gòu)選擇、主要接口設(shè)計、性能考慮答案:1.數(shù)據(jù)模型設(shè)計:-用戶(User):用戶ID、昵稱、關(guān)注列表、粉絲列表-微博(Tweet):微博ID、用戶ID、內(nèi)容、發(fā)布時間、點贊數(shù)-關(guān)注關(guān)系(Follow):用戶ID、關(guān)注用戶ID2.核心接口設(shè)計:java//用戶相關(guān)interfaceUserService{UsergetUser(StringuserId);voidfollowUser(StringuserId,StringfollowId);voidunfollowUser(StringuserId,StringfollowId);}//微博相關(guān)interfaceTweetService{TweetpostTweet(StringuserId,Stringcontent);List<Tweet>getTimeline(StringuserId);List<Tweet>getFeed(StringuserId);voidlikeTweet(StringuserId,StringtweetId);}3.系統(tǒng)架構(gòu):-數(shù)據(jù)存儲:-用戶和關(guān)注關(guān)系:關(guān)系型數(shù)據(jù)庫(如MySQL)-微博:NoSQL數(shù)據(jù)庫(如MongoDB)或分片存儲-緩存層:Redis

溫馨提示

  • 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

提交評論