京東數據分析崗面試經歷分享:SQL+Python+業務洞察全考察
2年數據分析經驗京東面試全流程復盤,包含技術一面二面、業務面真題,涵蓋SQL窗口函數、Python pandas、AB測試、指標體系等考點,附面試真題匯總和備考建議
背景介紹
先說下我的基本情況吧。我本科統計學專業畢業,目前在一家中型電商公司做了2年的數據分析師,日常工作主要是用SQL取數、做報表,偶爾用Python做些自動化腳本和簡單的數據建模。說實話,在原公司待著也算穩定,但總覺得成長空間有限——數據基建不完善,很多時間花在取數這種重複勞動上,真正做深度分析的機會不多。
今年3月中旬,我在京東招聘官網上看到了京東零售-數據分析崗的社招信息,崗位要求3年以內經驗,JD裡寫的主要是用戶行為分析、活動效果評估、指標體系搭建這些,跟我目前的工作方向比較匹配。猶豫了兩天還是投了,畢竟京東的數據體量和分析深度,肯定不是我現在這家公司能比的。
投遞後大概一週,HR打電話來約面試,整體流程是技術一面→技術二面→業務面+HR面,三輪面試跨度大約兩週。下面我按輪次詳細復盤,希望能幫到正在準備京東數據分析面試的朋友們。
第1輪 技術一面(視頻面,約55分鐘)
一面面試官是個看起來30歲左右的小哥,開場先讓我自我介紹,然後直接進入技術環節。整體節奏比較緊湊,問題密度很高。
1. SQL:求每個品類下銷售額Top3的商品
面試官給了一個訂單表order_detail,字段有order_id、product_id、category_id、sale_amount、order_date,讓我寫出每個品類下銷售額排名前三的商品。
這題我比較熟,直接用窗口函數寫了:
我的回答:
SELECT category_id, product_id, total_sale
FROM (
SELECT category_id, product_id, SUM(sale_amount) AS total_sale,
ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY SUM(sale_amount) DESC) AS rn
FROM order_detail
GROUP BY category_id, product_id
) t
WHERE rn <= 3;
面試官追問:如果用RANK()和ROW_NUMBER()有什麼區別?我答了並列排名的情況,RANK()會有跳躍,DENSE_RANK()不會跳躍。他點了點頭,沒再追問。
2. SQL:求連續3天登錄的用戶
給一個用戶登錄日誌表user_login,字段有user_id、login_date,求連續3天及以上登錄的用戶。
這題我之前刷過類似的,用ROW_NUMBER()做差值的方法:
我的回答:
SELECT user_id
FROM (
SELECT user_id, login_date,
DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) DAY) AS grp
FROM (SELECT DISTINCT user_id, login_date FROM user_login) t1
) t2
GROUP BY user_id, grp
HAVING COUNT(*) >= 3;
面試官說思路沒問題,但追問了一個邊界情況:如果同一天有多條登錄記錄怎麼處理?我說用DISTINCT去重,已經在子查詢裡處理了。他確認OK。
3. SQL:留存率計算
給定用戶註冊表和登錄表,計算次日留存率、7日留存率。
我的回答:用LEFT JOIN,將註冊日期和登錄日期做差,分別篩選差值為1和7的記錄,再除以當日註冊人數。面試官讓我寫完整SQL,我寫了大概5分鐘,他檢查後說邏輯正確。
4. Python:pandas數據清洗
面試官問:如果有一個DataFrame,其中age列有缺失值和異常值(比如負數和超過150的值),怎麼清洗?
我的回答:先用df['age'].isnull().sum()查看缺失數量,缺失比例小的話用中位數填充df['age'].fillna(df['age'].median()),異常值用df.loc[df['age'] < 0 | (df['age'] > 150), 'age'] = np.nan先置空再填充。面試官追問如果缺失比例很大怎麼辦?我說可能要考慮這個特徵是否還有意義,或者用模型預測填充,但實際工作中一般跟業務方確認。
5. Python:groupby和agg操作
問:如何用pandas實現按用戶分組,計算每個用戶的訂單數、平均訂單金額、最大訂單金額?
我的回答:df.groupby('user_id')['order_amount'].agg(['count', 'mean', 'max']),面試官說OK,又問如果想自定義列名呢?我答.agg(訂單數=('order_amount', 'count'), 均價=('order_amount', 'mean'), 最大額=('order_amount', 'max')),他滿意了。
6. 統計基礎:p值和假設檢驗
面試官問:p值的含義是什麼?0.05的顯著性水平怎麼理解?
我的回答:p值是在原假設為真的前提下,觀察到當前或更極端結果的概率。0.05的顯著性水平意味著如果原假設為真,我們有5%的概率會錯誤地拒絕原假設(即第一類錯誤率控制在5%)。面試官追問:那p值小就一定說明效果顯著嗎?我說不一定,還要看效應量和樣本量,大樣本下很小的差異也可能p值顯著,但實際意義不大。他點頭認可。
7. 統計基礎:大數定律和中心極限定理
問:簡單說下大數定律和中心極限定理的區別?
我的回答:大數定律說的是樣本量足夠大時,樣本均值趨近於總體期望;中心極限定理說的是樣本量足夠大時,樣本均值的分佈趨近於常態分佈,不管總體是什麼分佈。前者關注的是「收斂到真值」,後者關注的是「分佈形態」。面試官說解釋得很清楚。
第2輪 技術二面(視頻面,約60分鐘)
二面面試官是位看起來資歷比較深的女面試官,應該是團隊負責人級別的。整體風格更偏業務場景,技術問題也跟業務結合更緊密。
1. SQL:用戶漏斗分析
給定用戶行為日誌表user_action,字段有user_id、action_type(瀏覽/加購/下單/支付)、action_time,求從瀏覽到支付的每一步轉化率。
我的回答:先用CASE WHEN統計每個用戶是否完成了各步驟,再匯總計算轉化率。我寫了大概7-8分鐘,面試官看後說思路對,但提醒我注意去重問題——同一用戶可能多次瀏覽,要用是否完成過某行為來判斷,而不是計數。我承認這個點確實容易忽略,修改後她認可了。
2. AB測試:如何設計一個優惠券效果的AB實驗
面試官給了一個場景:京東要測試滿200減30的優惠券對GMV的影響,問怎麼設計實驗。
我的回答:首先確定實驗指標——主要指標是人均GMV,輔助指標是客單價、下單轉化率;然後確定分流策略——按用戶ID隨機分流,實驗組發券、對照組不發;樣本量用功效分析計算,確保能檢測到5%的提升;實驗週期至少7天覆蓋完整週期;最後用t檢驗或Mann-Whitney U檢驗比較兩組差異。
面試官追問了兩個問題:一是如果用戶之間有社交傳播效應怎麼處理?我說可以考慮按社交圈簇分流,或者用時間片輪轉實驗;二是如果實驗期間遇到大促怎麼辦?我說要麼避開大促期,要麼把大促作為分層因素。她說回答得比較全面。
3. AB測試:辛普森悖論
問:什麼是辛普森悖論?在AB測試中如何避免?
我的回答:辛普森悖論是指在各分組中觀察到的趨勢,在合併數據後趨勢反轉。比如實驗組在iOS和Android上分別表現更好,但合併後反而更差,可能是因為iOS用戶佔比差異導致的。避免方法是在分析時進行分層分析,或者用CUPED等方法控制混雜變量。面試官追問CUPED的原理,我只能說個大概——用實驗前的協變量來降低方差,具體公式記不清了。這算是我二面答得不太好的一題,面試官說沒關係,知道思路就行。
4. 業務分析:京東618大促復盤
面試官問:如果讓我做京東618大促的數據復盤,我會從哪些維度分析?
我的回答:我會從四個維度展開:一是整體業績——GMV、訂單量、客單價同比環比變化;二是流量分析——UV、PV、各渠道引流效果、跳出率;三是轉化漏斗——從瀏覽到下單各環節轉化率,找出流失嚴重的環節;四是用戶分層——新老用戶貢獻佔比、高價值用戶行為特徵、沉睡用戶召回效果。面試官追問:如果GMV同比增長但利潤率下降,你怎麼分析?我說要拆解成本結構,看是補貼力度過大還是低毛利品類佔比提升,再結合品類和用戶維度交叉分析。她對這個思路比較認可。
5. 指標體系:如何搭建一個品類的經營指標體系
問:如果讓你負責京東某品類的數據,怎麼搭建經營指標體系?
我的回答:我會用OSM模型來搭建。先確定目標(Objective),比如品類GMV增長;然後拆解策略(Strategy),GMV=流量×轉化率×客單價,每個因子再往下拆;最後定義度量(Measurement),流量看UV/PV,轉化率看各環節轉化,客單價看人均消費。同時要區分北極星指標、過程指標和監控指標,形成看板。面試官問:如果多個指標之間有衝突怎麼辦?我說要看優先級,比如短期GMV和長期用戶滿意度衝突時,需要跟業務方對齊戰略方向。她點了點頭。
6. SQL:同比環比計算
給定月度銷售匯總表,字段有month、category_id、gmv,計算每個品類每月的同比和環比增長率。
我的回答:環比用LAG(gmv, 1) OVER(PARTITION BY category_id ORDER BY month),同比用LAG(gmv, 12) OVER(PARTITION BY category_id ORDER BY month),然後計算增長率。面試官說沒問題,又問如果某些月份沒有數據導致LAG取到空值怎麼辦?我說用COALESCE處理,或者確保數據是連續的月份序列。
第3輪 業務面+HR面(約45分鐘)
三面是業務負責人和HR一起面的,前30分鐘業務面,後15分鐘HR面。
業務面部分
業務面主要聊項目經歷和業務理解。面試官讓我詳細講一個最有成就感的數據分析項目。我講了之前做的一個用戶流失預警項目——用RFM模型對用戶分層,發現最近30天未復購的高價值用戶佔比12%,然後配合運營做了定向召回,最終召回率18%,貢獻GMV約80萬。
面試官追問了幾個點:RFM各維度的閾值怎麼定的?我說用K-means聚類確定分界點;召回策略是什麼?短信+push+專屬優惠券;怎麼評估效果?用對照組做對比。他說整體邏輯清晰,但問我如果重新做會怎麼改進?我說會嘗試用機器學習模型替代RFM規則,加入更多行為特徵,比如瀏覽頻次、搜索關鍵詞等。
還問了一個開放題:京東PLUS會員的續費率下降了,你會怎麼分析?我先拆解——是哪類用戶續費率下降?是新入會用戶還是老會員?再分析可能的原因:權益吸引力下降?競品會員分流?價格敏感?然後針對性做數據驗證。面試官似乎比較滿意。
HR面部分
HR面就比較常規了:
1. 為什麼想來京東?——平台大、數據體量大、成長空間大
2. 當前薪資和期望?——如實回答
3. 職業規劃?——3年內成為能獨立負責業務線數據分析的資深分析師
4. 有什麼想了解的?——問了團隊規模和業務方向
HR說大概一週內給結果。
面試真題匯總
下面是三輪面試的所有題目匯總,方便大家快速瀏覽:
技術一面:
1. SQL:每個品類銷售額Top3商品 → 窗口函數ROW_NUMBER/RANK → ⭐⭐
2. SQL:連續3天登錄用戶 → 日期差值法 → ⭐⭐⭐
3. SQL:次日/7日留存率計算 → LEFT JOIN + 日期差 → ⭐⭐⭐
4. Python:pandas缺失值和異常值清洗 → fillna + 條件替換 → ⭐⭐
5. Python:groupby多聚合操作 → agg函數 → ⭐⭐
6. 統計:p值含義和顯著性水平 → 假設檢驗基礎 → ⭐⭐
7. 統計:大數定律vs中心極限定理 → 概率論基礎 → ⭐⭐
技術二面:
1. SQL:用戶行為漏斗分析 → CASE WHEN + 去重 → ⭐⭐⭐
2. AB測試:優惠券效果實驗設計 → 實驗設計全流程 → ⭐⭐⭐⭐
3. AB測試:辛普森悖論及避免方法 → 分層分析/CUPED → ⭐⭐⭐⭐
4. 業務分析:618大促復盤維度 → OSM/拆解思維 → ⭐⭐⭐
5. 指標體系:品類經營指標搭建 → OSM模型 → ⭐⭐⭐⭐
6. SQL:同比環比計算 → LAG窗口函數 → ⭐⭐⭐
業務面+HR面:
1. 項目深挖:用戶流失預警項目 → 項目復盤能力 → ⭐⭐⭐
2. 開放題:PLUS會員續費率下降分析 → 業務拆解思維 → ⭐⭐⭐⭐
3. 行為面試:為什麼來京東/職業規劃 → 動機與規劃 → ⭐⭐
心得體會與建議
1. SQL是基本功,窗口函數必須熟練
京東的數據分析面試,SQL考察比重非常大,尤其窗口函數幾乎必考。ROW_NUMBER、RANK、LAG這些要形成肌肉記憶,建議每天刷2-3道LeetCode SQL題,保持手感。另外去重、空值處理這些細節也容易被忽略,面試時一定要主動考慮邊界情況。
2. AB測試是加分項,一定要理解原理而不只是背概念
二面問的AB測試設計題,如果只會背「隨機分流、假設檢驗」這種泛泛的回答是遠遠不夠的。面試官會追問分流策略、樣本量計算、混雜變量控制這些細節,建議系統學習一下因果推斷和實驗設計的知識,CUPED、差分法這些進階方法了解原理會加分很多。
3. 業務思維比技術深度更重要
從二面開始,面試官更看重你能不能把技術應用到業務場景中。比如618復盤那道題,技術本身不難,難的是你能不能系統地拆解問題、提出有洞察力的分析維度。建議平時多看業務分析報告,培養結構化思維。
4. 不會的題別慌,展示思考過程
二面CUPED那題我確實答得不完美,但我先說了「具體公式記不清了」,然後講了我理解的思路和用途。面試官後來說,比起背公式,他們更看重候選人面對不會的問題時的思考方式。所以遇到不會的,先冷靜分析,說出你的推理過程,比直接說「不知道」要好得多。
最後說下結果:面完三面後第6天,HR打電話來了,offer到手🎉。整體體驗下來,京東的面試流程很專業,面試官水平也很高,問題設計得很有針對性。祝大家面試順利!
FAQ
Q1:京東數據分析崗對學歷有什麼要求?
A:社招的話,本科及以上即可,更看重實際項目經驗。我本科雙非也過了簡歷關,所以學歷不是硬門檻,但統計學、數學、計算機相關專業會有加分。
Q2:面試中SQL考到什麼難度?
A:基本是中等偏上難度,窗口函數是核心考點,JOIN和子查詢也會考。不會考特別複雜的存儲過程或性能優化,但邏輯一定要寫對。建議刷題平台:LeetCode SQL、牛客網SQL專項。
Q3:Python考得深嗎?需要會機器學習嗎?
A:Python主要考pandas數據處理,不會考算法實現。機器學習不是硬性要求,但如果你的項目裡用到了,面試官可能會追問。建議把pandas的groupby、merge、apply這些操作練熟。
Q4:AB測試在面試中佔比大嗎?
A:非常大,尤其是二面。京東作為電商公司,AB測試是日常工作的核心方法論。建議重點準備:實驗設計流程、樣本量計算、分流策略、辛普森悖論、CUPED等。
Q5:從投遞到拿到offer大概多久?
A:我整個流程大約3週:投遞後1週約一面,一面後3天約二面,二面後4天約三面,三面後6天出結果。不同部門節奏可能不同,供參考。

