一、背景
在 3 月 10 日左右投了作業幫的簡歷,一直沒有回覆,以爲是簡歷被刷了,沒想到 3 月 24 日 hr 打電話說 3 月 25 日下午面試,我心想投了大數據,肯定 hadoop、hive、spark 這些必定少不了,於是滿滿複習了一天大數據相關的課程,下面就開始了今天的面試:
二、面試過程
面試官小哥人很好,上來沒有讓我自我介紹,直接告訴我說今天分爲三大塊的內容:數據結構基礎、數據結構算法及一些題目的想法、以及自己所做的項目。
3.1 基礎
1、散列表
q:你瞭解 HashMap 嗎,你瞭解散列表嗎?
a: 我都說了會一點(其實就是知道 HashMap 和散列表是什麼)
q: 結果面試官就問我基於我的認識,讓我設計一個工業級別的散列表,我會怎麼設計?
a: 我直接懵了,說了個 key,hashcode,數組。
q: 數組?比如說存儲 1000 萬條數據,數組合適嗎?
a: 我又說用用鏈表吧,因爲可能沒有這麼大的連續內存。
q: 鏈表,然後呢?
a: 不會了
2、快排
q:你知道快排嗎?
a:應該知道吧。
q:快排時間複雜度是多少,怎麼推導
a:n * log n,推導:。。。。
q:最壞的時間複雜度,怎麼導致的,爲什麼?
a:忘了隨便說了個 n^2,後面感覺就瞎說了
q:換一種問法吧,快排的核心思想是什麼?
a:我提到了劃分
q:根據我提到的劃分,出一個相關的題,對 1000 萬個數據排序
a:我只說了按批次排序,然後再歸併
q:如果每個批次有重複怎麼辦
a:我說不會了,請您提示一下吧
q:使用 hash 值把數據分區,根據散列平均分,最後就不用去重了(我還是不太懂)
面試官看我什麼都不會,放棄問了
3.2 代碼
q:看你會 spark,你知道的 spark 的 RDD 有哪些?
a:(我被問懵了,RDD 怎麼還有中呢)嗯。。。嗯。。。嗯。。。了半大天一個字沒說出來,後來問了下什麼是哪些?
q:rdd 的算子有哪些?
a:(懵了半大天腦子鏽了,一聽這個我會,就激動了,開始囉嗦)rdd 的算子首先分爲 transform 算子和 action 算子,transform 算子有 map、mappartition…(然後就想不起來了,居然連最簡單的 flatMap 也沒想起來),action 算子有 reduce、reduceByKey(然後就想不起來了)
q:那不讓你寫 spark 代碼了,寫個基本代碼吧
1、遞歸求二叉樹深度
2、小青蛙跳臺階問題,100 階(讓我用遞歸,但我用遞歸超時了,說 100 太多了,會超時,換個數字吧,30、40? 面試官說行,然後就用 30 跑通了)
3、廣度優先輸出二叉樹
4、找到字符串中包含的子串
如: axdcfadcfcfa
cfa
我當時懵了,沒寫出來,後來想到雙指針直接解決問題
3.3 項目
讓我介紹一下我用 spark 的項目吧,我簡單說了一下,因爲那就是個大數據作業,面試官說你這項目大公司根本看不上,還是得注重基礎
三、反問環節
q:我們作爲學大數據的學生,是大數據的框架更重要呢,還是基礎更重要呢?
a:看你想進什麼公司吧,大公司最看重基礎了,像數據結構、網絡、操作系統、數據庫這些都要求很高,大數據框架的瞭解是加分項。
q:我想問一下叫我今天表現怎麼樣呢?這時第一次面試(笑)?
a:coding 還行,但是理論不行,加油吧!
四、總結
1、整個面試過程體驗非常好,其實面試沒有自己之前想的那麼嚇人;
2、在面試的時候說話不要囉裏囉唆,問什麼答什麼;
3、基礎很重要!!!!!!!!!一定要好好複習基礎知識,大數據框架沒那麼重要。