2026年軟件工程師面試筆試題庫及答案_第1頁
2026年軟件工程師面試筆試題庫及答案_第2頁
2026年軟件工程師面試筆試題庫及答案_第3頁
2026年軟件工程師面試筆試題庫及答案_第4頁
2026年軟件工程師面試筆試題庫及答案_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

2026年軟件工程師面試筆試題庫及答案一、編程語言基礎(chǔ)(5題,每題10分)1.題目(C++):編寫一個(gè)C++函數(shù),實(shí)現(xiàn)將字符串中的所有空格替換為"%20"。要求原地修改字符串,不使用額外空間(除少量輔助變量外)。cppvoidreplaceSpaces(charstr,intlength){//你的代碼}答案與解析:cppvoidreplaceSpaces(charstr,intlength){if(str==nullptr||length==0)return;intspaceCount=0;//先統(tǒng)計(jì)空格數(shù)量for(inti=0;i<length;++i){if(str[i]=='')++spaceCount;}intnewLength=length+spaceCount2;if(newLength>length){str[newLength-1]='\0';//設(shè)置字符串結(jié)尾inti=length-1;intj=newLength-2;while(i>=0){if(str[i]==''){str[j--]='0';str[j--]='2';str[j--]='%';}else{str[j--]=str[i];}--i;}}}解析:-首先統(tǒng)計(jì)字符串中空格的數(shù)量,因?yàn)槊總€(gè)空格需要替換為"%20",長度增加2倍。-從后向前遍歷字符串,避免覆蓋未處理的字符。空格時(shí)依次填充"0"、"2"和"%",其他字符直接復(fù)制。2.題目(Java):實(shí)現(xiàn)一個(gè)Java方法,判斷一個(gè)字符串是否為回文串(忽略大小寫和空格)。javapublicbooleanisPalindrome(Strings){//你的代碼}答案與解析:javapublicbooleanisPalindrome(Strings){if(s==null)returnfalse;Stringfiltered=s.replaceAll("[^a-zA-Z0-9]","").toLowerCase();intleft=0,right=filtered.length()-1;while(left<right){if(filtered.charAt(left)!=filtered.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:-使用正則表達(dá)式`[^a-zA-Z0-9]`過濾非字母數(shù)字字符,并轉(zhuǎn)換為小寫統(tǒng)一比較。-雙指針法從兩端向中間遍歷,若字符不匹配則不是回文。3.題目(Python):編寫Python代碼,實(shí)現(xiàn)一個(gè)函數(shù)`topKFrequent(nums,k)`,返回?cái)?shù)組中出現(xiàn)頻率最高的`k`個(gè)元素。pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):你的代碼答案與解析:pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):count=Counter(nums)return[itemforitem,_incount.most_common(k)]解析:-使用`Counter`統(tǒng)計(jì)元素頻率,`most_common(k)`返回頻率最高的`k`個(gè)元素。-時(shí)間復(fù)雜度O(nlogk),適合大數(shù)據(jù)場景。4.題目(JavaScript):實(shí)現(xiàn)一個(gè)JavaScript函數(shù),將一個(gè)字符串轉(zhuǎn)換為大寫,但僅保留首字母大寫,其余小寫。javascriptfunctioncapitalize(str){//你的代碼}答案與解析:javascriptfunctioncapitalize(str){if(!str)return'';returnstr.charAt(0).toUpperCase()+str.slice(1).toLowerCase();}解析:-首字母大寫(`toUpperCase()`),其余轉(zhuǎn)為小寫(`toLowerCase()`)。-處理空字符串或非字符串輸入。5.題目(Go):編寫Go函數(shù),實(shí)現(xiàn)快速排序算法。gofuncquickSort(arr[]int)[]int{//你的代碼}答案與解析:gofuncquickSort(arr[]int)[]int{iflen(arr)<=1{returnarr}pivot:=arr[len(arr)/2]left,right:=0,len(arr)-1fori:=rangearr{ifarr[i]<pivot{arr[i],arr[left]=arr[left],arr[i]left++}elseifarr[i]>pivot{arr[i],arr[right]=arr[right],arr[i]right--}}quickSort(arr[:left])quickSort(arr[right+1:])returnarr}解析:-選擇中間值`pivot`分區(qū),小于放左邊,大于放右邊。-遞歸排序左右子數(shù)組。時(shí)間復(fù)雜度O(nlogn)。二、數(shù)據(jù)結(jié)構(gòu)與算法(5題,每題10分)6.題目(鏈表):實(shí)現(xiàn)一個(gè)函數(shù),刪除鏈表的倒數(shù)第`n`個(gè)節(jié)點(diǎn)。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveNthFromEnd(head,n):你的代碼答案與解析:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveNthFromEnd(head,n):dummy=ListNode(0,head)left=dummyright=dummyfor_inrange(n+1):right=right.nextwhileright:left=left.nextright=right.nextleft.next=left.next.nextreturndummy.next解析:-使用雙指針,`right`先走`n+1`步,保證刪除時(shí)`left`在目標(biāo)節(jié)點(diǎn)前。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。7.題目(樹):給定二叉搜索樹,實(shí)現(xiàn)中序遍歷的迭代版本。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefinorderTraversal(root):你的代碼答案與解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefinorderTraversal(root):stack,result=[],[]current=rootwhilestackorcurrent:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()result.append(current.val)current=current.rightreturnresult解析:-棧模擬遞歸,先左后右壓棧,右子樹時(shí)彈出并記錄。8.題目(動(dòng)態(tài)規(guī)劃):實(shí)現(xiàn)斐波那契數(shù)列的第`n`項(xiàng)(動(dòng)態(tài)規(guī)劃優(yōu)化)。pythondeffib(n):你的代碼答案與解析:pythondeffib(n):ifn<=1:returnndp=[0,1]+[0](n-1)foriinrange(2,n+1):dp[i]=dp[i-1]+dp[i-2]returndp[n]解析:-使用數(shù)組存儲(chǔ)子問題結(jié)果,避免重復(fù)計(jì)算。時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)。-可優(yōu)化至O(1)空間:僅用兩個(gè)變量交替更新。9.題目(哈希表):實(shí)現(xiàn)一個(gè)函數(shù),找出數(shù)組中所有和為`target`的`nums[i]+nums[j]`對。pythondeftwoSum(nums,target):你的代碼答案與解析:pythondeftwoSum(nums,target):num_dict={}result=[]fori,numinenumerate(nums):complement=target-numifcomplementinnum_dict:result.append([complement,num])num_dict[num]=ireturnresult解析:-哈希表記錄數(shù)字及其索引,遍歷時(shí)檢查`target-num`是否已存在。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)。10.題目(貪心算法):給定整數(shù)數(shù)組,返回可以通過相鄰交換最多交換幾次使數(shù)組升序的最小交換次數(shù)。pythondefminSwaps(nums):你的代碼答案與解析:pythondefminSwaps(nums):n=len(nums)sorted_nums=sorted([(num,i)fori,numinenumerate(nums)])visited=[False]nswaps=0foriinrange(n):ifvisited[i]orsorted_nums[i][1]==i:continuecycle_size=0x=iwhilenotvisited[x]:visited[x]=Truex=sorted_nums[x][1]cycle_size+=1ifcycle_size>0:swaps+=(cycle_size-1)returnswaps解析:-將數(shù)組排序并記錄原始索引,通過檢測循環(huán)鏈表計(jì)算交換次數(shù)。三、系統(tǒng)設(shè)計(jì)(3題,每題20分)11.題目(短鏈接系統(tǒng)):設(shè)計(jì)一個(gè)短鏈接系統(tǒng),要求:1.輸入長鏈接,返回6位短鏈接(如`/a1b2c3`)。2.支持高并發(fā)訪問。3.解析短鏈接時(shí)能快速定位原始長鏈接。答案與解析:-核心思路:使用哈希函數(shù)(如Base62編碼)將長鏈接映射為短ID,存儲(chǔ)映射關(guān)系,解析時(shí)反向查詢。-技術(shù)選型:-哈希算法:Base62(a-z,A-Z,0-9),6位長度約支持`62^6`個(gè)短鏈接。-數(shù)據(jù)存儲(chǔ):Redis(hash結(jié)構(gòu))存儲(chǔ)短ID與長鏈接的映射,高并發(fā)讀寫。-分布式部署:負(fù)載均衡器分發(fā)請求,水平擴(kuò)展。-防沖突策略:-哈希前綴隨機(jī)生成避免碰撞。-定期重哈希舊數(shù)據(jù)。-解析流程:1.從短鏈接提取ID部分。2.Redis查詢單條記錄,返回長鏈接。12.題目(秒殺系統(tǒng)):設(shè)計(jì)一個(gè)秒殺系統(tǒng),要求:1.每秒處理數(shù)千請求。2.防止超賣和秒殺作弊。3.訂單生成后需秒級通知用戶。答案與解析:-核心思路:-使用Redis分布式鎖控制并發(fā)。-使用ZSET(有序集合)記錄庫存扣減順序。-消息隊(duì)列(RabbitMQ/Kafka)異步通知用戶。-技術(shù)選型:-鎖機(jī)制:RedisSETNX+EXPIRE實(shí)現(xiàn)分布式鎖。-庫存控制:ZSET按請求時(shí)間排序扣減,確保順序性。-異步通知:消息隊(duì)列減少主線程壓力。-防作弊策略:-請求去重(如Redis中保存臨時(shí)標(biāo)記)。-限制IP/用戶秒殺頻率。13.題目(分布式計(jì)數(shù)器):設(shè)計(jì)一個(gè)分布式計(jì)數(shù)器,要求:1.支持高并發(fā)自增。2.數(shù)據(jù)持久化。3.可分布式部署。答案與解析:-核心思路:-使用Redis原子操作`INCR`實(shí)現(xiàn)自增。-持久化可通過RedisRDB/AOF或應(yīng)用層定期保存。-技術(shù)選型:-原子操作:Redis`INCR`保證線程安全。-分布式部署:多個(gè)節(jié)點(diǎn)共享Redis實(shí)例。-優(yōu)化方案:-分片計(jì)數(shù)(如按模分片)。-本地緩存+異步同步。四、數(shù)據(jù)庫(2題,每題15分)14.題目(SQL):給定表`Orders`(`order_id,customer_id,order_date,total_amount`),查詢每個(gè)客戶的最近5筆訂單。sqlSELECTFROMOrdersWHERE(customer_id,order_date)IN(SELECTcustomer_id,MAX(order_date)FROMOrdersGROUPBYcustomer_id);答案與解析:sqlWITHRankedOrdersAS(SELECT,ROW_NUMBER()OVER(PARTITIONBYcustomer_idORDERBYorder_dateDESC)ASrnFROMOrders)SELECTFROMRankedOrdersWHERErn<=5;解析:-使用窗口函數(shù)`ROW_NUMBER()`分區(qū)排序,按`order_date`降序。-外層查詢篩選排名前5的記錄。15.題目(SQL):設(shè)計(jì)表結(jié)構(gòu),存儲(chǔ)文章和其評論,要求:1.文章支持追加評論。2.支持按文章ID分頁獲取評論。答案與解析:sqlCREATETABLEArticles(article_idINTPRIMARYKEY,titleVARCHAR(255),contentTEXT);CREATETABLEComments(comment_idINTPRIMARYKEY,article_idINT,user_nameVARCHAR(50),contentTEXT,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(article_id)REFERENCESArticles(article_id));解析:-`Articles`表存儲(chǔ)文章基本信息。-`Comments`表通過`article_id`關(guān)聯(lián)文章,按`created_at`排序支持分頁。五、網(wǎng)絡(luò)與系統(tǒng)(2題,每題15分)16.題目(HTTP):設(shè)計(jì)一個(gè)HTTP緩存策略,要求:1.緩存靜態(tài)資源(圖片、CSS)。2.動(dòng)態(tài)內(nèi)容不緩存。3.支持緩存失效。答案與解析:-核心策略:-靜態(tài)資源設(shè)置`Cache-Control:public,max-age=31536000`。-動(dòng)態(tài)內(nèi)容`Cache-Control:no-cache,must-revalidate`。-使用ETag和If-None-Match頭進(jìn)行驗(yàn)證。-技術(shù)選型:-CDN(如Cloudflare)緩存靜態(tài)資源。-服務(wù)器設(shè)置HTTP頭控制緩存。17.題目(負(fù)載均衡):比較輪詢(RoundRobin)和最少連接(LeastConnections)兩種負(fù)載均衡算法的優(yōu)缺點(diǎn)。答案與解析:-輪詢:-優(yōu)點(diǎn):實(shí)現(xiàn)簡單。-缺點(diǎn):未考慮服務(wù)器負(fù)載差異。-最少連接:-優(yōu)點(diǎn):均衡服務(wù)器壓力。-缺點(diǎn):需要實(shí)時(shí)統(tǒng)計(jì)連接數(shù)(性能開銷)。六、綜合編程(3題,每題15分)18.題目(Python):實(shí)現(xiàn)一個(gè)函數(shù),檢測字符串是否包含重復(fù)的連續(xù)字符。pythondefhas_repeated_char(s):你的代碼答案與解析:pythondefhas

溫馨提示

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

評論

0/150

提交評論