2026年IT公司高級研發(fā)工程師面試題_第1頁
2026年IT公司高級研發(fā)工程師面試題_第2頁
2026年IT公司高級研發(fā)工程師面試題_第3頁
2026年IT公司高級研發(fā)工程師面試題_第4頁
2026年IT公司高級研發(fā)工程師面試題_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2026年IT公司高級研發(fā)工程師面試題一、編程實現(xiàn)題(共3題,每題20分,總分60分)1.(20分)題目:請用Python實現(xiàn)一個函數(shù),輸入一個正整數(shù)`n`,輸出一個包含`n`個元素的列表,其中每個元素是其在列表中的索引與值的平方和的絕對值。例如,當(dāng)`n=5`時,輸出為`[0,1,4,9,16]`。要求:-不能使用內(nèi)置函數(shù)或第三方庫。-時間復(fù)雜度不超過O(n)。-空間復(fù)雜度不超過O(n)。答案與解析:pythondefgenerate_list(n):result=[]foriinrange(n):result.append(abs(ii))returnresult示例測試print(generate_list(5))#輸出:[0,1,4,9,16]解析:-遍歷從`0`到`n-1`,計算每個索引的平方值,并存儲在列表中。-使用`abs(ii)`確保結(jié)果為非負(fù)數(shù),符合題目要求。-時間復(fù)雜度為O(n),空間復(fù)雜度為O(n),符合要求。2.(20分)題目:請用C++實現(xiàn)一個函數(shù),輸入一個字符串`s`,返回一個新字符串,其中所有小寫字母反轉(zhuǎn)為大寫字母,所有大寫字母反轉(zhuǎn)為小寫字母,其他字符保持不變。要求:-不能使用標(biāo)準(zhǔn)庫中的`tolower`或`toupper`函數(shù)。-時間復(fù)雜度不超過O(n)。-空間復(fù)雜度不超過O(n)。答案與解析:cppinclude<string>usingnamespacestd;stringreverse_case(conststring&s){stringresult;for(charc:s){if('a'<=c&&c<='z'){result+=c-'a'+'A';}elseif('A'<=c&&c<='Z'){result+=c-'A'+'a';}else{result+=c;}}returnresult;}//示例測試include<iostream>intmain(){stringinput="HelloWorld!";cout<<reverse_case(input)<<endl;//輸出:hELLOwORLD!return0;}解析:-遍歷輸入字符串,對每個字符判斷是否為小寫或大寫字母,并反轉(zhuǎn)。-小寫字母轉(zhuǎn)大寫:`c-'a'+'A'`,大寫字母轉(zhuǎn)小寫:`c-'A'+'a'`。-其他字符保持不變。-時間復(fù)雜度為O(n),空間復(fù)雜度為O(n)。3.(20分)題目:請用Java實現(xiàn)一個方法,輸入一個整數(shù)數(shù)組`nums`,返回一個新數(shù)組,其中包含所有偶數(shù)元素,并按從大到小的順序排列。要求:-不能使用內(nèi)置排序方法。-時間復(fù)雜度不超過O(nlogn)。-空間復(fù)雜度不超過O(n)。答案與解析:javaimportjava.util.ArrayList;importjava.util.Collections;publicclassEvenSort{publicstaticint[]sortEvenNumbers(int[]nums){ArrayList<Integer>evens=newArrayList<>();for(intnum:nums){if(num%2==0){evens.add(num);}}//手動實現(xiàn)冒泡排序(簡化版)for(inti=0;i<evens.size()-1;i++){for(intj=0;j<evens.size()-1-i;j++){if(evens.get(j)<evens.get(j+1)){Collections.swap(evens,j,j+1);}}}//轉(zhuǎn)換為數(shù)組int[]result=newint[evens.size()];for(inti=0;i<evens.size();i++){result[i]=evens.get(i);}returnresult;}//示例測試publicstaticvoidmain(String[]args){int[]input={5,2,9,4,6,3};int[]output=sortEvenNumbers(input);for(intnum:output){System.out.print(num+"");//輸出:9642}}}解析:-遍歷輸入數(shù)組,將偶數(shù)存儲在`ArrayList`中。-使用冒泡排序?qū)ε紨?shù)列表按從大到小排序(簡化實現(xiàn),實際可優(yōu)化為快速排序等)。-時間復(fù)雜度為O(nlogn),空間復(fù)雜度為O(n)。二、系統(tǒng)設(shè)計題(共2題,每題20分,總分40分)1.(20分)題目:設(shè)計一個簡單的消息推送系統(tǒng),要求支持以下功能:-用戶注冊時,可訂閱多個主題(如新聞、體育、科技等)。-系統(tǒng)收到消息時,根據(jù)主題將消息推送給所有訂閱該主題的用戶。-用戶可以隨時退訂某個主題。要求:-描述系統(tǒng)架構(gòu)(至少包含數(shù)據(jù)庫和主要服務(wù))。-說明關(guān)鍵組件的設(shè)計思路(如用戶管理、消息分發(fā))。-考慮高并發(fā)場景下的優(yōu)化方案(如緩存、異步處理)。答案與解析:系統(tǒng)架構(gòu):1.數(shù)據(jù)庫:-用戶表:存儲用戶ID、用戶名、訂閱的主題列表。-主題表:存儲主題ID、主題名稱。-消息表:存儲消息ID、主題ID、消息內(nèi)容、發(fā)送時間。2.主要服務(wù):-用戶管理服務(wù):處理用戶注冊、退訂主題。-消息推送服務(wù):接收消息,根據(jù)主題分發(fā)消息。-消息隊列:異步處理消息,提高系統(tǒng)吞吐量。關(guān)鍵組件設(shè)計:-用戶管理服務(wù):-用戶注冊時,將用戶ID和訂閱的主題列表存儲到數(shù)據(jù)庫。-退訂時,更新用戶表中的主題列表。-消息推送服務(wù):-接收消息時,查詢數(shù)據(jù)庫獲取所有訂閱該主題的用戶ID。-通過消息隊列異步發(fā)送消息(如RabbitMQ或Kafka)。高并發(fā)優(yōu)化:-緩存:對熱門主題的用戶列表緩存到Redis,減少數(shù)據(jù)庫查詢。-異步處理:使用消息隊列解耦消息生產(chǎn)和消費(fèi),提高系統(tǒng)響應(yīng)速度。-分布式部署:消息推送服務(wù)可水平擴(kuò)展,分?jǐn)偢卟l(fā)壓力。2.(20分)題目:設(shè)計一個短鏈接生成系統(tǒng),要求支持以下功能:-輸入長鏈接,生成短鏈接,并支持自定義別名(可選)。-點擊短鏈接時,解析為原始長鏈接,并統(tǒng)計點擊次數(shù)。-系統(tǒng)需支持高并發(fā)訪問,且短鏈接具有唯一性。要求:-描述系統(tǒng)架構(gòu)(至少包含數(shù)據(jù)庫和主要服務(wù))。-說明關(guān)鍵組件的設(shè)計思路(如短鏈接生成、點擊統(tǒng)計)。-考慮數(shù)據(jù)一致性和高可用性方案。答案與解析:系統(tǒng)架構(gòu):1.數(shù)據(jù)庫:-鏈接表:存儲短鏈接、原始長鏈接、點擊次數(shù)、創(chuàng)建時間等。-索引:為短鏈接設(shè)置唯一索引,防止重復(fù)。2.主要服務(wù):-短鏈接生成服務(wù):接收長鏈接,生成短鏈接。-鏈接解析服務(wù):接收短鏈接,解析為原始長鏈接并統(tǒng)計點擊次數(shù)。-負(fù)載均衡器:分發(fā)請求到多個服務(wù)實例,提高可用性。關(guān)鍵組件設(shè)計:-短鏈接生成服務(wù):-使用Base62編碼(如a-zA-Z0-9)將長ID轉(zhuǎn)換為短鏈接,確保唯一性。-支持自定義別名,需檢查別名是否已存在。-鏈接解析服務(wù):-接收短鏈接,解碼獲取長ID,查詢數(shù)據(jù)庫返回原始長鏈接。-更新點擊次數(shù),避免使用高開銷的原子操作(可用Redis實現(xiàn))。高可用性方案:-數(shù)據(jù)一致性:-使用分布式數(shù)據(jù)庫(如TiDB)或分庫分表,確保數(shù)據(jù)一致性。-短鏈接生成時,先生成后插入數(shù)據(jù)庫,避免沖突。-緩存:對熱門短鏈接緩存到Redis,減少數(shù)據(jù)庫查詢。-分布式部署:服務(wù)可水平擴(kuò)展,通過Nginx或HAProxy實現(xiàn)負(fù)載均衡。三、算法與數(shù)據(jù)結(jié)構(gòu)題(共3題,每題20分,總分60分)1.(20分)題目:給定一個包含重復(fù)元素的數(shù)組`nums`,返回所有不重復(fù)的三元組,其中三元組的元素之和等于目標(biāo)值`target`。例如,`nums=[-1,0,1,2,-1,-4]`,`target=0`,返回`[[-1,-1,2],[-1,0,1]]`。要求:-不能使用內(nèi)置函數(shù)。-時間復(fù)雜度不超過O(n^2)。-空間復(fù)雜度不超過O(1)。答案與解析:pythondefthree_sum(nums,target):nums.sort()n=len(nums)result=[]foriinrange(n-2):跳過重復(fù)的元素ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:result.append([nums[i],nums[left],nums[right]])跳過重復(fù)的元素whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnresult示例測試print(three_sum([-1,0,1,2,-1,-4],0))#輸出:[[-1,-1,2],[-1,0,1]]解析:-先對數(shù)組排序,方便使用雙指針法。-固定第一個數(shù),使用雙指針`left`和`right`分別指向剩余部分的開頭和結(jié)尾。-如果三數(shù)之和等于目標(biāo)值,記錄三元組,并跳過重復(fù)元素。-如果小于目標(biāo)值,左指針右移;大于目標(biāo)值,右指針左移。-時間復(fù)雜度為O(n^2),空間復(fù)雜度為O(1)。2.(20分)題目:給定一個字符串`s`,判斷是否存在一個子串,使得該子串的所有字符在原字符串中連續(xù)出現(xiàn),且長度為`k`。例如,`s="abcabcbb"`,`k=3`,返回`True`(子串"abc"連續(xù)出現(xiàn))。要求:-不能使用內(nèi)置函數(shù)。-時間復(fù)雜度不超過O(n)。-空間復(fù)雜度不超過O(k)。答案與解析:pythondefhas_consecutive_substring(s,k):iflen(s)<k:returnFalsechar_set=set()left=0forrightinrange(len(s)):char_set.add(s[right])維護(hù)窗口大小為kifright-left+1>k:char_set.remove(s[left])left+=1檢查窗口內(nèi)所有字符是否連續(xù)ifright-left+1==k:all_consecutive=Trueforiinrange(left,right+1):iford(s[i])-ord(s[left])>k-1:all_consecutive=Falsebreakifall_consecutive:returnTruereturnFalse示例測試print(has_consecutive_substring("abcabcbb",3))#輸出:True解析:-使用滑動窗口維護(hù)長度為`k`的子串。-遍歷字符串,將當(dāng)前字符加入集合。-當(dāng)窗口大小超過`k`時,移除左指針字符。-檢查窗口內(nèi)所有字符是否連續(xù)(即ASCII碼差不超過`k-1`)。-時間復(fù)雜度為O(n),空間復(fù)雜度為O(k)。3.(20分)題目:給定一個整數(shù)數(shù)組`nums`,返回數(shù)組中所有缺失的數(shù)字。例如,`nums=[4,2,2,3,3,1,1,5]`,返回`[6,7,8,9,10]`。要求:-不能使用內(nèi)置函數(shù)。-時間復(fù)雜度不超過O(n)。-空間復(fù)雜度不超過O(n)。答案與解析:pythondeffind_missing_numbers(nums):n=len(nums)標(biāo)記已出現(xiàn)的數(shù)字seen=[False](n+1)fornuminnums:ifnum<=n:seen[num]=Truemissing=[]foriinrange(1,n+1):ifnotseen[i]:missing.append(i)處理缺失的數(shù)字大于n的情況missing.extend(range(n+1,n+100))#假設(shè)缺

溫馨提示

  • 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

提交評論