實習面經-京東廣告部門-數據研發

面試部門–京東廣告部門

筆者目前研二網絡空間安全碩士在讀,按照實驗室往年的慣例,這個寒假過後就要準備投實習崗位了(當然是越早準備越好)。我們實驗室今年1.10號以後就可以回家了,那會兒看到一位同學發的推薦貼,就試着投了下京東的廣告部門。很快就接到部門leader電話,約定1.15下午面試,其實這個時間是可以商量的,要是覺得自己準備的不是太充分,可以往後順延。

筆者準備投**”數據研發“,”後臺開發“**崗位。可能崗位不同,但是一些基礎知識都是一樣的,要是湊巧碰到同部門的面試官,很可能問題都是一樣的,還是在很大程度上有可借鑑下性。同個人習慣一樣,他們或許也就對那些問題熟悉。

學習路程

簡要說下自己的學習路程。

現階段使用Python最多,在研一第一學期主要熟悉了hadoop大數據平臺,第二學期對平臺上的一些組件有了一定了解,如:Spark,HDFSHive;第三學期學習Spark編程。由於Spark使用Scala編寫,有時爲了追蹤源碼,學習模仿高手的編程方法及習慣,這就要求學習Spark需得掌握Scala語言。當然Spark對於JavaPython也是支持的,只是用Java語言來編寫有點繁瑣,而部分Api Python並不支持。

許多讀者可能並不瞭解Scala語言,這裏簡單提一下。

Scala的設計者---- 馬丁·奧德斯基設計這門語言的初衷是想人民在高效、簡潔、輕鬆的環境下來寫代碼,也就是有事沒事來寫寫代碼放鬆(這和國內的996不符合,生活太累了)。Scala語法細碎,靈活,將函數當做“一等公民”來對待,同時幾乎支持Java所有的接口,也是將編譯後的字節碼放在JVM上運行。語法細碎使得學習成本較高,當然也正是這些語法使得scala異常強大。想要深入瞭解Spark,很有必要學習下Scala,畢竟市面上的許多教材及課程都是用Scala講解。

面試過程

談項目

直接從項目聊起,談所用過的算法
1.談一談xgboost與隨機森林算法有何不同?

面試官忽略我的第一個項目,直接問第二個和算法相關。後來得知他們部門比較注重算法。
其實我本身對算法不是很熟悉,一般只是拿過來用。

2.數據集如何劃分?項目中所用的某一個算法與同類算法相比,效果如何?
答:一般我們會將數據集劃分爲訓練集和測試集,訓練集用來訓練一個模型,測試集用來判斷訓練出的模型的準確率。第二個問題不怎麼會,試着回來了下。

與Spark相關

3.熟悉Spark中哪些算子?問了join屬於哪一類算子。

答:總體上分爲轉化算子和行動算子。熟悉常幾個用的算子,如:map,flatMap,groupByKey,reduceByKey;count,collect,takereduce

這一塊是Spark的核心計算部分,需要熟悉。
4.遇到數據傾斜如何處理?

不熟悉。和面試官簡單的聊了下,給了些提醒,還是不能很好的回答。完事後查了下,記錄下來爭取弄明白。
Spark在計算過程中會將數據讀到多個分區來處理,若大部分數據跑到某一個分區,導致分區內的數據不均勻,容易使得數據傾斜。
如“木桶原理”一樣,總的計算時間取決於運行時間最長的分區,數據傾斜是Spark運算要盡力避免的問題。
解決方案
5.緩存機制?
答:cachepersist。若如果追蹤到源碼cache方法也是調用的persistpersist方法中的參數選擇空間更大,如:
file

6.一個分區如何轉換爲多個分區?

答:常見的三種方案要熟悉。集合創建;外部數據集創建;RDD轉換。

7.談一談寬依賴與窄依賴以及stage劃分。

答:窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用,窄依賴我們形象的比喻爲獨生子女;
file

寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition,會引起shuffle,總結:寬依賴我們形象的比喻爲超生

file

遇到寬依賴會劃分一個階段:

file
8.運行Spark程序後計算機資源耗費如何?

這個根據自己的實際瞭解的情況答就行,在我們使用spark-submit提交程序時肯定會進行相關配置。如:spark-submit --executor-cores 8 --class com.spark.learning.SparkTraining WordCount-1.0-SNAPSHOT.jar

  • yarn 模式提交

spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ./spark-examples_2.11-2.4.3.jar 100

  • local模式

spark-submit --class org.apache.spark.examples.SparkPi ./spark-examples_2.11-2.4.3.jar 100

若是看過相關源碼,那是最好的了。

與數據結構相關

  1. 說一下常用的排序算法

冒泡、簡單選擇、直接插入排序,希爾排序,堆排序,歸併排序,快速排序;
瞭解時間複雜度及空間複雜度
這是重點,不管在哪兒面都繞不開,需要熟練掌握。

與Linux相關

需要熟悉常用的指令。
10. 問了一些常用的命令;

如:將一個文件的前n行數字進行排序

  1. cat命令用過沒?

筆試題

  • 題目:跳臺階。

講清楚思路,然後寫。
1)遞歸完成

這時會問,該方法的效率如何。還有沒其他方法呢?答:循壞完成。
2)循壞
分析兩種方法的時間複雜度,給出判斷。

注:他們是廣告部門,主要用的是召回,排序算法;本想着重問算法方面的知識儲備。

全程大約不到70min,聊的還行,比我想象中要好得多,畢竟第一次面。不論結果如何,權當攢一次經驗。接下來還得在面其他的,我也會記錄下不同的面試題型及問題與大家分享。

從一名不羈的碼農開始
在這裏插入圖片描述

發佈了91 篇原創文章 · 獲贊 55 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章