版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2026年京東商城算法工程師面試題集一、編程能力測(cè)試(共5題,每題10分)1.(10分)題目:實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)非空字符串,統(tǒng)計(jì)并返回字符串中所有字符的出現(xiàn)頻率,并以字典形式返回。例如,輸入`"hello"`,返回`{'h':1,'e':1,'l':2,'o':1}`。要求:-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)(假設(shè)字符集固定)。-不使用內(nèi)置的`collections.Counter`等工具。答案:pythondefcount_frequency(s:str)->dict:ifnots:return{}假設(shè)字符集為ASCII,初始化計(jì)數(shù)器counter=[0]128forcharins:counter[ord(char)]+=1轉(zhuǎn)換為字典result={}foriinrange(128):ifcounter[i]>0:result[chr(i)]=counter[i]returnresult解析:-使用固定長(zhǎng)度的數(shù)組(128個(gè)ASCII字符)存儲(chǔ)每個(gè)字符的出現(xiàn)次數(shù),避免哈希表的額外開銷。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)(固定字符集)。2.(10分)題目:給定一個(gè)包含`n`個(gè)正整數(shù)的數(shù)組,設(shè)計(jì)算法找到數(shù)組中和最大的子數(shù)組(至少包含一個(gè)元素),并返回該子數(shù)組的和。例如,輸入`[-2,1,-3,4,-1,2,1,-5,4]`,返回`6`(子數(shù)組`[4,-1,2,1]`)。要求:-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。答案: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ù)兩個(gè)變量:`current_sum`(當(dāng)前子數(shù)組的最大和)和`max_sum`(全局最大和)。-每次遍歷時(shí),選擇`num`或`current_sum+num`作為新的子數(shù)組起點(diǎn)。3.(10分)題目:實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)二叉樹的所有左子樹替換為右子樹,右子樹替換為左子樹。例如,輸入二叉樹`[3,9,20,null,null,15,7]`,輸出`[3,20,9,null,null,7,15]`(二叉樹的中序遍歷)。要求:-不使用額外的數(shù)據(jù)結(jié)構(gòu),原地修改。答案:pythonDefinitionforabinarytreenode.classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefswap_tree(root:TreeNode)->TreeNode:ifnotroot:returnNone交換左右子樹root.left,root.right=root.right,root.left遞歸交換左右子樹swap_tree(root.left)swap_tree(root.right)returnroot解析:-遞歸遍歷二叉樹,交換每個(gè)節(jié)點(diǎn)的左右子樹。-原地修改,不使用額外空間。4.(10分)題目:實(shí)現(xiàn)一個(gè)函數(shù),判斷一個(gè)字符串是否是有效的括號(hào)組合。例如,輸入`"()[]{}"`,返回`True`;輸入`"(]"`,返回`False`。要求:-使用棧結(jié)構(gòu),時(shí)間復(fù)雜度O(n)。答案:pythondefis_valid_parentheses(s:str)->bool:stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:-使用棧存儲(chǔ)左括號(hào),遇到右括號(hào)時(shí)彈出棧頂并判斷是否匹配。-如果棧為空或所有括號(hào)匹配,返回`True`。5.(10分)題目:實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的所有空格替換為`%20`。例如,輸入`"Wearehappy."`,返回`"We%20are%20happy."`。要求:-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。答案:pythondefreplace_spaces(s:str)->str:雙指針法:一個(gè)從后往前,一個(gè)記錄替換后的位置s=list(s)#字符串不可變,轉(zhuǎn)為列表write=len(s)-1read=len(s)-1whileread>=0:ifs[read]=='':s[write-2:write+1]='%20'write-=3else:s[write]=s[read]write-=1read-=1return''.join(s)解析:-雙指針法:一個(gè)從后往前遍歷,一個(gè)記錄替換后的位置。-遇到空格時(shí)替換為`%20`,其他字符直接移動(dòng)。二、算法設(shè)計(jì)題(共5題,每題10分)1.(10分)題目:京東商城的商品評(píng)論中包含大量文本,需要實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)評(píng)論列表,返回出現(xiàn)頻率最高的`k`個(gè)關(guān)鍵詞。例如,輸入`["好評(píng)","性價(jià)比高","好評(píng)","物流快","好評(píng)"]`,`k=2`,返回`["好評(píng)","物流快"]`。要求:-時(shí)間復(fù)雜度O(nlogk),空間復(fù)雜度O(n)。答案:pythonfromcollectionsimportdefaultdictimportheapqdeftop_k_keywords(comments:list,k:int)->list:frequency=defaultdict(int)forcommentincomments:words=comment.split()forwordinwords:frequency[word]+=1使用小頂堆維護(hù)前k個(gè)高頻詞heap=[]forword,freqinfrequency.items():iflen(heap)<k:heapq.heappush(heap,(freq,word))else:iffreq>heap[0][0]:heapq.heapreplace(heap,(freq,word))提取結(jié)果return[wordfor_,wordinsorted(heap,reverse=True)]解析:-使用哈希表統(tǒng)計(jì)詞頻,然后使用小頂堆維護(hù)前`k`個(gè)高頻詞。-時(shí)間復(fù)雜度O(nlogk),空間復(fù)雜度O(n)。2.(10分)題目:京東的商品推薦系統(tǒng)需要根據(jù)用戶歷史購(gòu)買記錄推薦商品。給定一個(gè)用戶購(gòu)買記錄的列表(每個(gè)記錄包含用戶ID、商品ID和時(shí)間戳),設(shè)計(jì)算法推薦最近的`k`個(gè)商品給該用戶。例如,輸入`[(1,101,1627836580),(1,102,1627836600),(1,103,1627836700)]`,`k=2`,返回`[(1,103,1627836700),(1,102,1627836600)]`(按時(shí)間降序)。要求:-時(shí)間復(fù)雜度O(nlogn),空間復(fù)雜度O(n)。答案:pythondeftop_k_recommendations(records:list,k:int)->list:按時(shí)間降序排序records.sort(key=lambdax:x[2],reverse=True)returnrecords[:k]解析:-直接排序后取前`k`條記錄即可。-時(shí)間復(fù)雜度O(nlogn),空間復(fù)雜度O(n)。3.(10分)題目:京東的物流系統(tǒng)需要計(jì)算最優(yōu)配送路徑。給定一個(gè)起點(diǎn)、終點(diǎn)和多個(gè)配送點(diǎn),設(shè)計(jì)算法找到最短路徑(使用Dijkstra算法)。例如,輸入起點(diǎn)`A`,終點(diǎn)`D`,配送點(diǎn)`B`和`C`,以及邊權(quán)重`[(A,B,2),(A,C,4),(B,C,1),(B,D,5),(C,D,1)]`,返回最短路徑`A->B->C->D`,總權(quán)重`8`。要求:-使用鄰接表實(shí)現(xiàn)Dijkstra算法。答案:pythonimportheapqdefdijkstra(graph:dict,start:str,end:str)->(list,int):最短路徑和前驅(qū)節(jié)點(diǎn)distances={node:float('inf')fornodeingraph}distances[start]=0predecessors={node:Nonefornodeingraph}heap=[(0,start)]whileheap:current_distance,current_node=heapq.heappop(heap)ifcurrent_distance>distances[current_node]:continueforneighbor,weightingraph[current_node]:distance=current_distance+weightifdistance<distances[neighbor]:distances[neighbor]=distancepredecessors[neighbor]=current_nodeheapq.heappush(heap,(distance,neighbor))重建路徑path=[]node=endwhilenode:path.append(node)node=predecessors[node]path.reverse()returnpath,distances[end]解析:-使用Dijkstra算法計(jì)算最短路徑,通過(guò)鄰接表存儲(chǔ)圖結(jié)構(gòu)。-時(shí)間復(fù)雜度O((E+V)logV),空間復(fù)雜度O(V)。4.(10分)題目:京東的商品搜索需要支持模糊匹配。給定一個(gè)字典(商品名稱列表)和查詢?cè)~,設(shè)計(jì)算法返回匹配的商品名稱。例如,輸入字典`{"京東手機(jī)","華為手機(jī)","小米手機(jī)","蘋果手機(jī)"}`,查詢?cè)~`"手機(jī)"`,返回`["京東手機(jī)","華為手機(jī)","小米手機(jī)","蘋果手機(jī)"]`。要求:-支持前綴匹配,時(shí)間復(fù)雜度O(nm),其中`n`是字典大小,`m`是查詢?cè)~長(zhǎng)度。答案:pythondeffuzzy_search(dictionary:list,query:str)->list:results=[]foritemindictionary:ifitem.startswith(query):results.append(item)returnresults解析:-遍歷字典,檢查每個(gè)商品名稱是否以查詢?cè)~為前綴。-時(shí)間復(fù)雜度O(nm),適用于小規(guī)模數(shù)據(jù)。5.(10分)題目:京東的優(yōu)惠券系統(tǒng)需要根據(jù)用戶購(gòu)買金額計(jì)算可用的優(yōu)惠券金額。給定一個(gè)優(yōu)惠券列表(每個(gè)優(yōu)惠券包含金額上限和對(duì)應(yīng)折扣),設(shè)計(jì)算法返回用戶購(gòu)買金額`x`可用的最大優(yōu)惠券金額。例如,輸入`[(100,0.9),(200,0.85),(300,0.8)]`,購(gòu)買金額`x=150`,返回`1500.9=135`(使用金額上限為100的優(yōu)惠券)。要求:-優(yōu)惠券按金額上限降序排列,時(shí)間復(fù)雜度O(n)。答案:pythondefmax_coupon_value(coupons:list,x:int)->float:按金額上限降序排列coupons.sort(reverse=True,key=lambdac:c[0])forlimit,discountincoupons:ifx<=limit:returnxdiscountx=limitdiscountreturn0解析:-從金額上限最高的優(yōu)惠券開始計(jì)算,直到金額`x`小于當(dāng)前優(yōu)惠券上限。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。三、系統(tǒng)設(shè)計(jì)題(共5題,每題10分)1.(10分)題目:設(shè)計(jì)京東商城的商品推薦系統(tǒng),輸入用戶ID和當(dāng)前時(shí)間,返回推薦商品列表。要求考慮用戶歷史購(gòu)買記錄、實(shí)時(shí)行為(如點(diǎn)擊、加購(gòu))和熱門商品。要求:-說(shuō)明系統(tǒng)架構(gòu)、數(shù)據(jù)存儲(chǔ)方案和核心算法。答案:系統(tǒng)架構(gòu):1.數(shù)據(jù)采集層:-用戶行為日志(點(diǎn)擊、加購(gòu)、購(gòu)買)實(shí)時(shí)寫入Kafka,使用Flink或SparkStreaming處理。2.特征工程層:-用戶畫像(購(gòu)買偏好、歷史行為)存儲(chǔ)在Redis,使用HBase存儲(chǔ)商品標(biāo)簽和熱度數(shù)據(jù)。3.推薦引擎:-使用協(xié)同過(guò)濾(基于用戶的商品相似度)和實(shí)時(shí)推薦(基于用戶當(dāng)前行為的Lambda模型),結(jié)合熱門商品(TopN商品)。4.接口層:-使用SpringCloud構(gòu)建微服務(wù),通過(guò)APIGateway返回推薦結(jié)果。核心算法:-協(xié)同過(guò)濾:-基于用戶的商品相似度計(jì)算(如余弦相似度),推薦與用戶歷史購(gòu)買相似的商品。-實(shí)時(shí)推薦:-使用Lambda模型,根據(jù)用戶當(dāng)前行為(如加購(gòu))進(jìn)行加權(quán)推薦。-熱門商品:-TopN商品根據(jù)實(shí)時(shí)點(diǎn)擊和購(gòu)買數(shù)據(jù)計(jì)算。解析:-系統(tǒng)分層設(shè)計(jì),兼顧實(shí)時(shí)性和離線計(jì)算。-推薦算法結(jié)合多種模型,提高推薦準(zhǔn)確率。2.(10分)題目:設(shè)計(jì)京東商城的實(shí)時(shí)反作弊系統(tǒng),輸入用戶行為日志(如下單、支付、登錄),檢測(cè)異常行為并觸發(fā)風(fēng)控措施。要求:-說(shuō)明系統(tǒng)架構(gòu)、數(shù)據(jù)存儲(chǔ)方案和核心算法。答案:系統(tǒng)架構(gòu):1.數(shù)據(jù)采集層:-用戶行為日志實(shí)時(shí)寫入Kafka,使用Flink處理。2.規(guī)則引擎層:-使用Drools或Elasticsearch實(shí)時(shí)匹配反作弊規(guī)則(如短時(shí)間內(nèi)高頻下單)。3.風(fēng)險(xiǎn)評(píng)分層:-使用機(jī)器學(xué)習(xí)模型(如LSTM)計(jì)算用戶風(fēng)險(xiǎn)評(píng)分,存儲(chǔ)在Redis。4.風(fēng)控執(zhí)行層:-根據(jù)風(fēng)險(xiǎn)評(píng)分觸發(fā)措施(如限制下單、攔截支付)。核心算法:-規(guī)則引擎:-預(yù)定義規(guī)則(如連續(xù)3次下單失敗)觸發(fā)告警。-機(jī)器學(xué)習(xí)模型:-LSTM捕捉用戶行為時(shí)序特征,預(yù)測(cè)作弊概率。解析:-結(jié)合規(guī)則引擎和機(jī)器學(xué)習(xí),兼顧實(shí)時(shí)性和準(zhǔn)確性。3.(10分)題目:設(shè)計(jì)京東商城的秒殺系統(tǒng),支持高并發(fā)下單場(chǎng)景。輸入用戶請(qǐng)求,返回秒殺結(jié)果。要求:-說(shuō)明系統(tǒng)架構(gòu)、數(shù)據(jù)存儲(chǔ)方案和核心算法。答案:系統(tǒng)架構(gòu):1.流量分發(fā)層:-使用Nginx進(jìn)行流量分發(fā),防止單點(diǎn)過(guò)載。2.秒殺服務(wù):-使用Redis進(jìn)行庫(kù)存扣減(Lua腳本保證原子性),防止超賣。3.訂單系統(tǒng):-使用MySQL存儲(chǔ)訂單數(shù)據(jù),使用ShardingSphere進(jìn)行分庫(kù)分表。4.補(bǔ)償機(jī)制:-使用消息隊(duì)列(RabbitMQ)記錄失敗請(qǐng)求,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河源市連平縣人民代表大會(huì)常務(wù)委員會(huì)辦公室公開招聘編外人員備考題庫(kù)及答案詳解1套
- 4K神經(jīng)內(nèi)鏡在鞍結(jié)節(jié)手術(shù)中優(yōu)勢(shì)
- 3D打印生物支架在神經(jīng)再生中的安全評(píng)估策略
- 3D打印植入物在復(fù)雜骨缺損修復(fù)中的優(yōu)勢(shì)
- 3D打印引導(dǎo)下宮頸癌放療劑量梯度與腎保護(hù)策略
- 2025年內(nèi)蒙古交通集團(tuán)有限公司社會(huì)化公開招聘?jìng)淇碱}庫(kù)有答案詳解
- 3D打印人工晶狀體的光學(xué)性能測(cè)試
- 2025年嘉峪關(guān)市教育系統(tǒng)公開招聘公費(fèi)師范畢業(yè)生和小學(xué)全科型教師37人備考題庫(kù)及一套答案詳解
- 2025年江西省贛房投資集團(tuán)有限公司社會(huì)招聘?jìng)淇碱}庫(kù)帶答案詳解
- 小學(xué)信息技術(shù)課程微型垂直農(nóng)場(chǎng)系統(tǒng)中的編程與控制教學(xué)研究課題報(bào)告
- 水表過(guò)戶申請(qǐng)書范本
- 宏天BPMX3.3業(yè)務(wù)流程管理平臺(tái)操作手冊(cè)
- 桶裝水配送承包運(yùn)輸協(xié)議書范本(2024版)
- 質(zhì)疑函授權(quán)委托書
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報(bào)告
- 中考數(shù)學(xué)講座中考數(shù)學(xué)解答技巧基礎(chǔ)復(fù)習(xí)課件
- APQP流程管理-各階段輸出資料一覽表
- 重慶市市政道路道路開口施工組織方案
- 全口義齒人工牙的選擇與排列 28-全口義齒人工牙的選擇與排列(本科終稿)
- 開放系統(tǒng)11848《合同法》期末機(jī)考真題(第17套)
- 內(nèi)科學(xué) 泌尿系統(tǒng)疾病總論
評(píng)論
0/150
提交評(píng)論