2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案_第1頁
2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案_第2頁
2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案_第3頁
2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案_第4頁
2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

2026年京東集團(tuán)系統(tǒng)工程師算法面試題含答案一、編程基礎(chǔ)(5題,每題6分,共30分)1.題目:請編寫一個(gè)函數(shù),輸入一個(gè)整數(shù)數(shù)組,返回?cái)?shù)組中的最大值和最小值,要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。答案:pythondeffind_max_min(nums):ifnotnums:returnNone,Nonemax_val=min_val=nums[0]fornuminnums[1:]:ifnum>max_val:max_val=numelifnum<min_val:min_val=numreturnmax_val,min_val解析:通過一次遍歷數(shù)組,同時(shí)維護(hù)最大值和最小值變量,確保時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。2.題目:給定一個(gè)字符串,請判斷它是否是有效的括號字符串(只包含'('和')',且括號匹配)。答案:pythondefis_valid_brackets(s):stack=[]forcharins:ifchar=='(':stack.append(char)elifchar==')':ifnotstack:returnFalsestack.pop()returnnotstack解析:使用棧結(jié)構(gòu),遇到'('入棧,遇到')'出棧,最后棧為空則匹配有效。3.題目:請實(shí)現(xiàn)一個(gè)LRU(最近最少使用)緩存,支持get和put操作。答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)解析:使用哈希表存儲鍵值對,維護(hù)一個(gè)雙向列表記錄訪問順序,get時(shí)移動(dòng)到末尾,put時(shí)先檢查容量并移除最久未使用項(xiàng)。4.題目:給定一個(gè)二叉樹,請判斷它是否是平衡二叉樹(任意節(jié)點(diǎn)的左右子樹高度差不超過1)。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool:defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:遞歸計(jì)算每個(gè)節(jié)點(diǎn)的左右子樹高度,同時(shí)判斷平衡性,時(shí)間復(fù)雜度O(n)。5.題目:請實(shí)現(xiàn)一個(gè)快速排序算法,要求不使用遞歸。答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrstack=[(0,len(arr)-1)]whilestack:left,right=stack.pop()pivot=arr[(left+right)//2]l,r=left,rightwhilel<=r:whilearr[l]<pivot:l+=1whilearr[r]>pivot:r-=1ifl<=r:arr[l],arr[r]=arr[r],arr[l]l+=1r-=1ifleft<r:stack.append((left,r))ifl<right:stack.append((l,right))returnarr解析:使用棧模擬遞歸,通過循環(huán)處理分區(qū),時(shí)間復(fù)雜度O(nlogn),空間復(fù)雜度O(logn)。二、系統(tǒng)設(shè)計(jì)(3題,每題10分,共30分)1.題目:設(shè)計(jì)一個(gè)高并發(fā)的短鏈接系統(tǒng),要求支持秒級生成和解析,并保證唯一性。答案:核心組件:-短鏈接生成服務(wù):使用哈希算法(如CRC32或Base62編碼)將長鏈接映射為短鏈接。-分布式緩存:使用Redis存儲短鏈接與長鏈接的映射,支持高并發(fā)讀寫。-數(shù)據(jù)庫:使用分片數(shù)據(jù)庫存儲歷史數(shù)據(jù),保證唯一性和持久化。-負(fù)載均衡:使用Nginx或HAProxy分發(fā)請求。實(shí)現(xiàn)步驟:1.接收長鏈接,生成唯一ID(如UUID或自增ID)。2.使用哈希算法將ID轉(zhuǎn)換為短鏈接(如Base62編碼)。3.將短鏈接與長鏈接的映射寫入Redis緩存(過期時(shí)間設(shè)為1天)。4.將映射持久化到數(shù)據(jù)庫。解析:通過哈希算法和分布式緩存實(shí)現(xiàn)高并發(fā)處理,數(shù)據(jù)庫保證唯一性和持久化。2.題目:設(shè)計(jì)一個(gè)分布式任務(wù)調(diào)度系統(tǒng),要求支持定時(shí)任務(wù)和依賴任務(wù)。答案:核心組件:-任務(wù)注冊中心:使用Zookeeper或Etcd存儲任務(wù)信息(定時(shí)任務(wù)周期、依賴任務(wù)等)。-調(diào)度服務(wù):使用Redis或Memcached存儲任務(wù)執(zhí)行狀態(tài),定時(shí)掃描待執(zhí)行任務(wù)。-執(zhí)行器:分布式進(jìn)程執(zhí)行任務(wù),結(jié)果寫入消息隊(duì)列(如Kafka)。實(shí)現(xiàn)步驟:1.任務(wù)提交時(shí),注冊到Zookeeper,指定周期和依賴任務(wù)。2.調(diào)度服務(wù)定時(shí)掃描待執(zhí)行任務(wù),檢查依賴是否滿足。3.任務(wù)執(zhí)行完成后,更新狀態(tài)并通知消息隊(duì)列。解析:通過分布式存儲和定時(shí)掃描實(shí)現(xiàn)任務(wù)調(diào)度,依賴關(guān)系通過Zookeeper管理。3.題目:設(shè)計(jì)一個(gè)高并發(fā)的秒殺系統(tǒng),要求支持百萬級并發(fā),并防止超賣。答案:核心組件:-分布式鎖:使用Redis或Zookeeper實(shí)現(xiàn)分布式鎖,防止超賣。-數(shù)據(jù)庫優(yōu)化:使用樂觀鎖或行鎖控制庫存扣減。-限流系統(tǒng):使用令牌桶算法或漏桶算法限流。-異步處理:使用消息隊(duì)列(如Kafka)處理訂單生成。實(shí)現(xiàn)步驟:1.用戶請求時(shí),先進(jìn)行限流檢查。2.獲取分布式鎖,檢查庫存是否充足。3.扣減庫存并生成訂單,寫入數(shù)據(jù)庫。4.釋放鎖并通知消息隊(duì)列。解析:通過分布式鎖和數(shù)據(jù)庫鎖防止超賣,限流系統(tǒng)控制并發(fā),異步處理提升性能。三、算法進(jìn)階(4題,每題8分,共32分)1.題目:給定一個(gè)字符串,請找到最長回文子串的長度。答案:pythondeflongest_palindrome(s:str)->int:ifnots:return0start,end=0,0foriinrange(len(s)):len1=expand_from_center(s,i,i)#奇數(shù)長度len2=expand_from_center(s,i,i+1)#偶數(shù)長度max_len=max(len1,len2)ifmax_len>end-start:start=i-(max_len-1)//2end=i+max_len//2returnend-start+1defexpand_from_center(s:str,left:int,right:int)->int:whileleft>=0andright<len(s)ands[left]==s[right]:left-=1right+=1returnright-left-1解析:通過中心擴(kuò)展法,分別處理奇數(shù)和偶數(shù)長度的回文,時(shí)間復(fù)雜度O(n^2)。2.題目:給定一個(gè)整數(shù)數(shù)組,請找到其中和最大的連續(xù)子數(shù)組的和。答案:pythondefmax_subarray_sum(nums:list)->int:ifnotnums:return0max_sum=current_sum=nums[0]fornuminnums[1:]:current_sum=max(num,current_sum+num)max_sum=max(max_sum,current_sum)returnmax_sum解析:使用動(dòng)態(tài)規(guī)劃,維護(hù)當(dāng)前和最大和,時(shí)間復(fù)雜度O(n)。3.題目:給定一個(gè)無重復(fù)元素的數(shù)組,請生成所有可能的括號組合。答案:pythondefgenerate_parentheses(n:int):defbacktrack(s='',left=0,right=0):iflen(s)==2n:result.append(s)returnifleft<n:backtrack(s+'(',left+1,right)ifright<left:backtrack(s+')',left,right+1)result=[]backtrack()returnresult解析:通過回溯法,限制左括號數(shù)量不超過n,右括號數(shù)量不超過左括號,時(shí)間復(fù)雜度O(4^n/sqrt(n))。4.題目:給定一個(gè)鏈表,請判斷它是否有環(huán)。答案:pythonclassListNode:def__init__(self,x):self.val=xself.next=Nonedefhas_cycle(head:ListNode)->bool:slow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:returnTruereturnFalse解析:使用快慢指針,快指針每次走兩步,慢指針每次走一步,相遇則存在環(huán)。四、開放性問題(2題,每題10分,共20分)1.題目:如何設(shè)計(jì)一個(gè)高并發(fā)的實(shí)時(shí)推薦系統(tǒng)?答案:核心組件:-用戶畫像系統(tǒng):使用Elasticsearch存儲用戶標(biāo)簽和興趣,實(shí)時(shí)更新。-召回模塊:使用協(xié)同過濾或深度學(xué)習(xí)模型(如DIN)快速召回候選商品。-排序模塊:使用LambdaMART或深度學(xué)習(xí)模型(如BERT)進(jìn)行精準(zhǔn)排序。-實(shí)時(shí)計(jì)算:使用Flink或SparkStreaming處理實(shí)時(shí)數(shù)據(jù)。優(yōu)化策略:-冷啟動(dòng):使用熱門推薦或基于規(guī)則的策略。-重排序:結(jié)合用戶實(shí)時(shí)行為(如點(diǎn)擊流)調(diào)整推薦順序。解析:通過多階段模型和實(shí)時(shí)計(jì)算提升推薦效果,冷啟動(dòng)和重排序策略優(yōu)化用戶體驗(yàn)。2.題目:如何設(shè)計(jì)一個(gè)高可用的分布式存儲系統(tǒng)?答案:核心組件:-數(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論