京東物流演演算法工程師面試經歷:路徑最佳化+運力排程深度考察
2年演演算法經驗面試京東物流全流程覆盤,涵蓋對偶理論、ALNS路徑規劃、VRP變體、大促排程策略、智慧排程系統設計等真題,附心得建議和FAQ
背景介紹
先說下我的情況,2年演演算法工程師經驗,碩士畢業後在一家物流科技公司做路徑最佳化和運力排程相關的演演算法工作。之前用Python + OR-Tools + Gurobi做運籌最佳化,也用PyTorch做過一些預測模型。去年底開始看機會,目標很明確——京東物流演演算法團隊。為什麼選京東物流?因為京東物流是國內物流演演算法落地最好的公司之一,倉配一體化、智慧排程、無人倉這些技術都是行業標杆,而且資料量大、場景複雜,對演演算法工程師來說是最理想的練兵場。整個面試從投遞到拿到offer花了三週,經歷了技術一面、技術二面、技術三面。下面我把整個過程詳細覆盤一下。
面試流程覆盤
一面:運籌學基礎 + 最佳化
一面的面試官是個看起來很學術的博士,上來就問了一個讓我有點緊張的問題:線性規劃的對偶理論是什麼?在物流場景中有什麼應用?我從對偶問題的定義講起,說了原問題和對偶問題的關係(弱對偶性、強對偶性、互補鬆弛性),然後舉了物流中的例子:原問題是配送成本最小化,對偶問題就是資源利用率最大化。面試官追問:對偶間隙在什麼情況下為0?我回答線上性規劃中,如果原問題有最優解,則強對偶性成立,對偶間隙為0。但在整數規劃中,對偶間隙通常不為0,這也是為什麼整數規劃更難求解。
接下來是最佳化演演算法的考察:梯度下降、牛頓法和擬牛頓法的區別?在什麼場景下選擇哪種方法?我從收斂速度、計算複雜度、適用場景三個維度對比:梯度下降一階收斂、計算簡單但收斂慢,適合大規模問題;牛頓法二階收斂、收斂快但需要計算Hessian矩陣,適合小規模光滑問題;擬牛頓法(BFGS、L-BFGS)用近似Hessian替代精確Hessian,是兩者的折中。面試官追問:L-BFGS的記憶體最佳化是怎麼做的?我回答只儲存最近m個向量的歷史資訊來近似Hessian,而不是儲存完整的n×n矩陣。
然後是一道建模題:一個倉庫有100個SKU,每個SKU的需求量、庫存量、補貨成本不同,怎麼建立最優補貨模型?我定義了決策變數x_i為SKU i的補貨量,目標函式是最小化總成本(補貨成本 + 缺貨懲罰 + 庫存持有成本),約束條件包括:補貨量不超過供應商產能、補貨後庫存不超過倉庫容量、滿足需求覆蓋的機率約束。面試官追問:如果需求是隨機的怎麼處理?我回答可以用隨機規劃,將需求建模為場景樹,用樣本平均近似(SAA)求解。也可以用魯棒最佳化,在最壞情況的需求下保證解的可行性。
一面大概55分鐘,最後問了一個開放題:運籌最佳化和機器學習在物流場景中怎麼結合?我回答可以用機器學習做需求預測,把預測結果作為運籌最佳化的輸入引數;也可以用強化學習做動態排程,替代傳統的規則引擎;還可以用學習最佳化(Learn to Optimize)的方法,用神經網路加速最佳化求解過程。
二面:路徑規劃 + 排程演演算法
二面的面試官更偏工程方向,問的問題也更偏實際場景。一上來就問了一個京東物流最核心的問題:車輛路徑問題(VRP)的常見變體有哪些?京東物流主要解決的是哪種?我列舉了CVRP(帶容量約束)、VRPTW(帶時間窗)、MDVRP(多車場)、PDPTW(帶取送貨和時間窗)等變體,然後說京東物流主要解決的是VRPTW和PDPTW,因為京東的配送有明確的時間承諾(211限時達、次日達等),而且有取件需求(退換貨取件)。
接下來是演演算法深挖:VRP的求解方法有哪些?精確演演算法和啟發式演演算法各自的優劣勢?我回答精確演演算法(分支定界、列生成、分支定價)能保證最優解但計算量大,適合小規模問題;啟發式演演算法(遺傳演演算法、禁忌搜尋、自適應大鄰域搜尋ALNS)不能保證最優但速度快,適合大規模實際問題。面試官追問:京東物流用的什麼演演算法?我回答核心框架是ALNS,因為ALNS在大規模VRP上表現最好,而且容易加入各種業務約束。ALNS的destroy和repair算子可以根據業務場景定製,比如京東的"就近配送"約束可以用特定的repair算子來實現。
然後是一道場景題:雙十一期間訂單量是平時的10倍,你的排程演演算法怎麼應對?我從幾個層面回答:1)演演算法層面:提前用歷史資料訓練更aggressive的排程策略,放寬時間窗約束,允許更多跨區配送;2)系統層面:增加計算資源,使用並行求解,縮短求解週期(從5分鐘一次改為1分鐘一次);3)業務層面:預售前置,提前將商品調撥到離消費者最近的倉庫;4)降級策略:當演演算法求解超時時,回退到規則引擎做快速排程。面試官追問:怎麼評估排程演演算法的好壞?我回答核心指標是:配送準時率、車輛利用率、總行駛里程、單均配送成本。同時要做A/B測試,和線上基線對比。
二面還問了一個很有意思的問題:京東的無人倉排程和有人倉排程有什麼區別?我回答無人倉的排程更偏機器人路徑規劃(AGV排程),核心問題是多機器人無碰撞路徑規劃,可以用CBS(Conflict-Based Search)演演算法。有人倉的排程更偏人員排班和任務分配,核心問題是作業效率最大化。兩者的共同點是都需要即時響應和動態調整。
三面:專案深挖
三面是技術終面,面試官應該是京東物流演演算法團隊的負責人。問的問題更宏觀,也更看重技術深度和業務理解。
第一個問題:講一個你做過的最有挑戰的演演算法專案。我選了之前做的城市配送路徑最佳化專案,從問題定義、建模、演演算法設計、工程實現、上線效果講了一遍。重點說了幾個技術難點:1)如何處理動態訂單(新訂單不斷到來);2)如何處理即時路況變化;3)如何在大規模場景下保證求解速度。面試官對動態訂單的處理很感興趣,我詳細說了滾動時域最佳化(Rolling Horizon)的方法:每隔一段時間用當前狀態重新求解,將已執行的決策固定,只最佳化未來的決策。
然後是一個開放題:如果讓你從零搭建京東物流的智慧排程系統,你會怎麼設計?我從幾個層面展開:1)資料層:即時訂單流、車輛GPS、倉庫庫存、路網資料;2)預測層:需求預測、ETA預測、路況預測;3)最佳化層:路徑規劃、車輛排程、倉內排程;4)決策層:自動排程 + 人工干預;5)反饋層:效果評估、模型迭代。面試官追問:怎麼保證系統的即時性?我回答用流式計算框架處理即時資料,最佳化求解用熱啟動加速,關鍵路徑用快取。
三面還問了一個關於團隊協作的問題:演演算法工程師和業務方怎麼協作?如果演演算法方案和業務需求衝突怎麼辦?我回答演演算法工程師要深入理解業務,不能閉門造車。如果方案和需求衝突,首先要搞清楚衝突的原因——是模型假設不合理,還是業務需求不現實。然後和業務方一起找折中方案,演演算法提供多個帕累托最優解供業務方選擇。
真題彙總
下面是面試過程中遇到的所有真題,按型別整理:
運籌學基礎:線性規劃對偶理論及應用、整數規劃求解方法(分支定界、割平面)、凸最佳化基本概念、拉格朗日松弛法、隨機規劃與魯棒最佳化
最佳化演演算法:梯度下降變體對比(SGD/Adam/AdaGrad)、牛頓法與擬牛頓法、內點法原理、L-BFGS記憶體最佳化、對偶分解法
路徑規劃:VRP常見變體及京東場景、ALNS演演算法原理與實現、TSP的精確演演算法與近似演演算法、動態VRP求解方法、多目標路徑最佳化
排程演演算法:車輛排程與路徑規劃的區別、AGV排程演演算法(CBS)、人員排班最佳化、即時排程策略、大促場景下的排程降級
機器學習:需求預測模型選型、ETA預測特徵工程、強化學習在排程中的應用、學習最佳化(Learn to Optimize)、模型可解釋性
工程實踐:最佳化求解器選型(Gurobi vs OR-Tools vs SCIP)、大規模最佳化問題的並行求解、A/B測試設計、演演算法效果評估指標、模型上線與監控
心得建議
第一,運籌學基礎要扎實。京東物流的面試對運籌學基礎要求很高,不是那種背公式就能過的,而是要真正理解原理。對偶理論、凸最佳化、整數規劃這些,建議系統學習一下,推薦Boyd的《Convex Optimization》和Wolsey的《Integer Programming》。
第二,演演算法要能落地。京東物流特別看重演演算法的落地能力,不是那種發論文的演演算法,而是能解決實際問題的演演算法。面試中一定要體現你對業務場景的理解,比如為什麼用ALNS而不是遺傳演演算法,因為ALNS更容易加入業務約束。
第三,要有工程思維。演演算法工程師不是隻寫Python指令碼,還要考慮系統的即時性、可擴充套件性、可維護性。面試中如果只談演演算法不談工程,面試官會覺得你缺乏實戰經驗。
第四,瞭解京東物流的業務。面試前一定要了解京東物流的核心業務:倉配一體化、211限時達、京東快遞、京東冷鏈等。面試中如果能結合業務場景來回答問題,會大大加分。
第五,準備一個有深度的專案。京東物流的面試一定會深挖專案,建議準備一個涉及路徑最佳化、排程演演算法或需求預測的專案,能體現你從建模到落地的完整能力。
FAQ
Q:京東物流演演算法團隊用什麼技術棧?
核心是Python,最佳化求解器主要用Gurobi和OR-Tools,也有部分專案用SCIP。機器學習用PyTorch和XGBoost。工程框架用Java和Spring Boot,演演算法服務化後透過RPC呼叫。大資料處理用Spark和Flink。
Q:2年演演算法經驗面京東物流是什麼級別?
一般是T5到T6之間,看面試表現。T5的薪資大概25-40K,T6大概35-55K,加上年終獎,總包在物流行業裡算很有競爭力的。
Q:沒有物流經驗能面京東物流嗎?
可以,但需要補一些物流領域的基礎知識。建議面試前了解基本的物流概念:倉配一體化、最後一公里、逆向物流、運力排程等。如果你有運籌最佳化或路徑規劃的背景,轉型物流演演算法不難。
Q:京東物流的演演算法面試會考程式設計題嗎?
會,但不是LeetCode那種純演演算法題,而是和業務相關的程式設計題。比如實現一個簡單的VRP求解器、寫一個貪心排程演演算法、實現一個優先佇列等。建議刷一些和圖論、貪心、動態規劃相關的題目。
Q:京東物流的工作節奏怎麼樣?
整體節奏中等偏上,大促期間(618、雙11)會比較忙,需要7×24小時on-call。平時工作節奏相對正常,早10晚9左右。京東物流的技術氛圍不錯,能接觸到真實的物流資料和場景。