京東尋獵提前批演算法崗面經,已拿offer | 秋招徵文

  • 2020 年 9 月 7 日
  • AI

應小夥伴的需求分享一下京東提前批演算法崗的面經,目前已offer~

我當時提前批投的是數分,面試官覺得我更加適合演算法,詢問了我的意見後把title改成了演算法。非常幸運能遇到我的兩位技術面面試官和hr小姐姐,面試官人都非常nice,碰到回答不上來的問題會耐心引導,還讓我不要緊張哈哈哈。

樓主自身的base是機器學習、自然語言處理和優化,所以面試時這方面涉及的多一些。

當時二面完記錄了一下所以比較全,一面和hr面沒有及時記錄已經找不到通話記錄了,可以做一點點參考。

一面 

30min (問項目)

【面試的通話記錄遺失了,做一下簡單的回顧】
1.自我介紹,對實習的兩個項目及細節進行了細緻的詢問。


2.最後問了一個概率題:

如果我們部門有16個人搶一個大紅包,用一枚均勻的六面骰子,如何保證每個人的獲獎的概率是一樣的?
簡單回答了一下,將16個人編號並分成4組,投到1則第1組通過第一輪,投到2則第2組通過第一輪,投到3則第3組通過第一輪,投到4則第4組通過第一輪,投到5或6則重新投。接著,對過了第一輪的4名同事重新編號並再投擲一次骰子,投到1則同事1獲得大獎,投到2則同事2獲得大獎,投到3則同事3獲得大獎,投到4則同事4獲得大獎,投到5或者6則重投。

二面 

30min (問機器學習基礎知識)

1.先做一下自我介紹。

2.機器學習

2.1 嶺回歸和Lasso
2.1.1 嶺回歸和Lasso的區別?
Lasso是加 L1 penalty,也就是絕對值;嶺回歸是加 L2 penalty,也就是二範數。從貝葉斯角度看,L1 正則項等價於參數 w 的先驗概率分布滿足拉普拉斯分布,而 L2 正則項等價於參數 w 的先驗概率分布滿足高斯分布。從優化求解來看,嶺回歸可以使用梯度為零求出閉式解,而 Lasso 由於存在絕對值,在 0 處不可導,只能使用 Proximal Mapping 迭代求最優解。從結果上看,L1 正則項會使得權重比較稀疏,即存在許多 0 值;L2 正則項會使權重比較小,即存在很多接近 0 的值。

2.1.2 什麼時候用哪個更好?
L1 正則項可以用來做特徵選擇,如果只是防止過擬合的話兩者都可以。

2.1.3 從幾何上來看有什麼區別?
嶺回歸在坐標軸上是個圓,Lasso 是個菱形。

2.1.4 penalty在不同形狀下為什麼會產生這個效果呢?(稀疏/權重小)
不知道。

3.運籌優化

3.1 簡單講一下分支定界
沒接觸過,簡單講了一下我們學的優化內容,一階演算法、二階演算法、KKT、對偶、鞅。面試官說我們學的可能偏最優化,不是運籌。

4.自然語言處理

4.1 簡單介紹一下自然語言處理方面最主流的演算法
自然語言處理的話 Seq2Seq 系列的模型會使用的比較多一些,最開始提出了序列模型 RNN,後來人們發現比較慢,效果不太好,並且存在梯度消失的問題,使用 LSTM、GRU 之類的模型一定程度上改善了這一問題,但還是沒有根本解決。之後又有人提出了 Attention,借鑒 Information Query 領域的知識提出了一套新的模型,根治了梯度消失的問題,也就是Transformer。最近比較火的 BERT 是借鑒 Transformer 和 ELMo 提出來的,在此基礎上又有人做了優化,提出了ALBERT。還有一個比較火的模型是 XLNet,結合了 ELMo 和 BERT 的優點,將 Auto-Regressive 模型改成了雙向結構。

4.2 解釋一下梯度消失的原因
RNN 其實還是基於反向傳播的模型,這種模型本質上是一層一層的 f(wx+b) 套起來,根據鏈式法則反向傳播求梯度的時候會存在累乘之前層的權重的現象。當層數越多,也即 RNN 的鏈越長,如果 w 的值比較小,乘很多次就接近 0 了,也就是梯度消失;如果 w 的值比較大,也即大於 1,乘很多次就接近正無窮了,也就是梯度爆炸。

4.3 如果把激活函數全都換成線性函數,會出現什麼問題
如果把激活函數全都換成線性函數會失去非線性性,退化為一個線性回歸。如果是分類問題最後有一個 sigmoid 層,則退化為邏輯回歸。深度學習能起作用的本質原因就是使用了非線性的激活函數,從而通過很多神經元可以擬合任意一個函數。

4.4 如何評估一個模型的好壞?
有一些指標能夠幫助我們評估模型的好壞,例如對於分類問題可以使用 Accuracy、Precision、Recall、F1、Confusion Matrix、AUC 等;對於回歸問題可以使用 RMSE、R2 等;對於文本聚類問題可以使用 Perplexity 等。對於文本生成模型,也可以採用人工評價的方式,例如對於機器翻譯,可以將兩個模型的翻譯結果隨機指派給一些志願者,讓他們評價哪個模型翻譯得更好,得出一個統計的結論。

4.5 簡單介紹一下ROC和AUC
我們得到混淆矩陣後,可以計算出 TPR 和 FPR ,然後用 FPR 做橫軸,TPR 做縱軸,畫出一條 FPR-TPR 曲線,就是 ROC 曲線,ROC 曲線下方的面積就是 AUC。我們計算 AUC 的時候可以根據定義取多個 threshold,用矩形的面積來擬合曲線下面積。但是在實際使用中,這種演算法效率很低,因為對於每一個 threshold 都需要計算 TP、TN、FP、FN,實際過程中人們是使用 rank 來做,我稍微看過一下源碼,但是沒有深入研究這一部分。

4.6 AUC 的含義是什麼
這個問題沒有回答上來……答案應該是:假設從所有正樣本中隨機選取一個樣本,把該樣本預測為正樣本的概率為 p1,從所有負樣本中隨機選取一個樣本,把該樣本預測為正樣本的概率為p0,p1 > p0 的概率就是 AUC。

5.供應鏈管理
5.1 說明一下 EOQ 模型的假設,計算過程和結果
EOQ 模型假設每個時間的需求為常數,也即需求隨時間是線性累加的。假設存在兩種類型的成本,一個是訂貨成本,也即定一次貨需要的成本,比如不管定多少貨,都需要一次卡車運輸的人力和交通成本;一個是持貨成本,比如保存庫存的過程中需要支付的租金等。我們的目標是最小化這兩部分成本之和,也就是 (k+cQ)*d/Q+1/2hQ,關於Q是一條雙曲線,根據梯度為零可以求出最優解是 \sqrt(2kd/hc)。

5.2 對庫存管理的概念
我對庫存管理可能沒有一個比較 high level 的概念,我們工程實現主要做的是決策每天要定什麼貨,每個sku定多少,定完之後應該放在哪個貨架上,出庫的時候從哪個貨架出庫。

6.資料庫 & SQL & hive

6.1 使用 groupby 的時候最容易出問題的點?
沒出過問題……面試官說我sql使用的比較少


7.python

7.1 python 常用的 string format 形式
print(str(a))
print(“%d” % a)
print(“{}”.format(a))
面試官說還有一種,沒接觸過……

7.2 pandas 如果要做比較複雜的列操作時,怎麼操作?
我平時使用 apply 函數,如果操作比較簡單,直接使用 lambda 函數,如果比較複雜,就在外面寫一個函數 fuc,然後在 apply 裡面調用那個函數,例如 df.apply(fuc)。

最後反問了一下問題,然後面試官問了一下base是不是期望在北京。

hr面 

30min (傳統行為面,問了一點項目)
【忘記錄音了,做一下簡單的回顧】

1.首先介紹一下自己。

2.簡單講一下自己印象最深刻的實習。

3.介紹一下自己做過的最有挑戰的事情。

4.實習的項目和美團、餓了么配送任務中間的差別,有沒有看過他們的解決方案。

5.你對我們部門有什麼了解?

hr介紹了一下部門的數據分析師和演算法工程師的定義,問我更傾向於哪個方面。我說更傾向演算法方向,她說那之後發offer把title改成演算法工程師。

問了一下現在有在實習嗎?我說馬上要開學了,如果需要實習的話到時候和導師商量一下,她讓我聯繫Joy老師就可以。

反問了一下流程,說大概8月初會出結果,正式offer發放要等一下集團的流程。