面試部門–京東廣告部門
筆者目前研二網絡空間安全碩士在讀,按照實驗室往年的慣例,這個寒假過後就要準備投實習崗位了(當然是越早準備越好)。我們實驗室今年1.10號以後就可以回家了,那會兒看到一位同學發的推薦貼,就試着投了下京東的廣告部門。很快就接到部門leader電話,約定1.15下午面試,其實這個時間是可以商量的,要是覺得自己準備的不是太充分,可以往後順延。
筆者準備投**”數據研發“,”後臺開發“**崗位。可能崗位不同,但是一些基礎知識都是一樣的,要是湊巧碰到同部門的面試官,很可能問題都是一樣的,還是在很大程度上有可借鑑下性。同個人習慣一樣,他們或許也就對那些問題熟悉。
學習路程
簡要說下自己的學習路程。
現階段使用Python
最多,在研一第一學期主要熟悉了hadoop
大數據平臺,第二學期對平臺上的一些組件有了一定了解,如:Spark
,HDFS
,Hive
;第三學期學習Spark
編程。由於Spark
使用Scala
編寫,有時爲了追蹤源碼,學習模仿高手的編程方法及習慣,這就要求學習Spark
需得掌握Scala
語言。當然Spark
對於Java
,Python
也是支持的,只是用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
,take
,reduce
。
這一塊是Spark
的核心計算部分,需要熟悉。
4.遇到數據傾斜如何處理?
不熟悉。和面試官簡單的聊了下,給了些提醒,還是不能很好的回答。完事後查了下,記錄下來爭取弄明白。
Spark
在計算過程中會將數據讀到多個分區來處理,若大部分數據跑到某一個分區,導致分區內的數據不均勻,容易使得數據傾斜。
如“木桶原理”一樣,總的計算時間取決於運行時間最長的分區,數據傾斜是Spark
運算要盡力避免的問題。
解決方案
5.緩存機制?
答:cache
和persist
。若如果追蹤到源碼cache
方法也是調用的persist
。persist
方法中的參數選擇空間更大,如:
6.一個分區如何轉換爲多個分區?
答:常見的三種方案要熟悉。集合創建;外部數據集創建;RDD
轉換。
7.談一談寬依賴與窄依賴以及stage劃分。
答:窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用,窄依賴我們形象的比喻爲獨生子女;
寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition,會引起shuffle,總結:寬依賴我們形象的比喻爲超生
遇到寬依賴會劃分一個階段:
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
若是看過相關源碼,那是最好的了。
與數據結構相關
- 說一下常用的排序算法
冒泡、簡單選擇、直接插入排序,希爾排序,堆排序,歸併排序,快速排序;
瞭解時間複雜度及空間複雜度
這是重點,不管在哪兒面都繞不開,需要熟練掌握。
與Linux相關
需要熟悉常用的指令。
10. 問了一些常用的命令;
如:將一個文件的前n行數字進行排序
cat
命令用過沒?
筆試題
- 題目:跳臺階。
講清楚思路,然後寫。
1)遞歸完成
這時會問,該方法的效率如何。還有沒其他方法呢?答:循壞完成。
2)循壞
分析兩種方法的時間複雜度,給出判斷。
注:他們是廣告部門,主要用的是召回,排序算法;本想着重問算法方面的知識儲備。
全程大約不到70min,聊的還行,比我想象中要好得多,畢竟第一次面。不論結果如何,權當攢一次經驗。接下來還得在面其他的,我也會記錄下不同的面試題型及問題與大家分享。
從一名不羈的碼農開始