從簡歷被拒到收割今日頭條offer,我花了一年時間

大數據技術2019-06-25 17:37:51

來自公眾號:大數據肌肉猿  


一、印象中的頭條

二、面試背景

三、準備面試

四、頭條一面電話面(Java+項目)

五、頭條二面視頻面(大數據+項目)

六、頭條三面視頻面(算法+場景題)

七、如何通過頭條筆試?

八、如何準備頭條面試?

九、一個關於如何進大廠的小建議



一、印象中的頭條


1.老闆張一鳴跟我是福建老鄉,龍巖市在我朋友説來就是山溝溝,能走出美團王興和頭條張一鳴讓我卯足了去龍巖吃特產老鼠乾的慾望。


2.給的錢多,筆試也賊難。參加過頭條筆試的同學都知道,頭條筆試可以筆試三次,就是不論你有沒有參加都有三次機會。筆試就5道算法題,兩個小時,去年第一次看到算法題就自閉了,第一次掛了。第二次又很認真地做,做到一半放棄了。沒過幾天又邀請我做第三次,有一種強行被侮辱的感覺。


3.內推被拒。正如我標題所説,簡歷被拒。去年3月份在知乎上看到一個頭條大佬説可以內推春季實習,於是私信併發了簡歷給他。看了我簡歷之後説頭條競爭激烈,我背景不夠,點到為止。。(打擾了)




二、面試背景


自從去年被頭條筆試的算法凌辱和被頭條的前輩指教了之後對頭條沒啥好感了,也感覺進不去,所以後面大半年都沒關注頭條的招聘,直到以下兩件事情的發生。


1.有一天,之前一塊實習的哥們説進了頭條,我也蠢蠢欲動打算開始搞了。那時有一個不成熟的想法:「連他都可以進,我應該也可以吧」



2.正好在健身房認識了一個在抖音做數倉的小leader,我覺得這是天意啊。於是免費給他上了節私教課,上完讓他幫忙內推。



三、準備面試


其實從三月份投遞簡歷開始準備面試到四月份收offer,也不過1個月的時間,但這都是建立在我過去一年的積累啊,無數次的通宵自習室,圖書館的專屬椅子都被我坐的陷進去。避免誤導大家,這次也不做標題黨,寫了準備一年,踏踏實實幹事。


都是比較不錯的書單


以下是我去年給自己訂的學習計劃:


一月:

大數據入門


整個一月份都在刷入門視頻和《Hadoop權威指南》,又臨近期末,每天5點半起牀,看兩個小時的視頻然後上課或者複習期末考。


二月:

劍指offer刷一遍、數據結構、JavaSE、JVM、多線程


①劍指offer有些搞不懂的直接跳過,等下個月第二遍再刷;


②數據結構重點是各種樹、二叉樹、紅黑樹的一些特性以及鏈表的特性;


③JavaSE主要是類對象接口的區別,能不能繼承,Static的特點,各種Hashmap,ArrayList等集合框架的原理源碼;


④JVM是根據網上整合的高頻面試題進行學習的,刷了一遍面試題之後才去看周志華的《深入理解Java虛擬機》,JVM難的不是JVM佈局,垃圾回收算法等這些理論,而是結合代碼和項目場景。比如説一段代碼,有很多個類、方法,其中又有靜態類和全局變量,這時候項目跑起來的時候哪些先加載,哪些變量存放在哪個區,不止要懂理論,還要結合代碼懂理論。還有就是項目中的OOM,棧溢出,JVM的參數調優等等。


⑤多線程也是刷網上面試題和博客的,幾本多線程的書都是一坨一坨的,理解不來。先動手把幾個多線程實現方法實現了一遍,然後分析優缺點,再由此切進去線程不安全和各種鎖。多線程學習不同JVM,自己多動手,多調試一下,控制枱都會告訴你答案。


三月:

劍指offer二刷,數據庫、操作系統、網絡、準備面試


①劍指offer第二遍重點刷第一遍時思路懂代碼不懂的。


②數據庫刷了牛客網SQL實戰100多題的,其他都是索引原理,悲觀樂觀鎖等理論。


③操作系統刷高頻面試題。死鎖的產生條件、解決方法等等,資源調度算法,併發和並行等。


④網絡也是刷面試題。三次握手四次揮手以及為什麼要這樣做、TCP和UDP、網頁請求過程、DNS解析過程、網絡模型、響應碼的意思等。


⑤我每刷一道算法或者理解了一道面試題都會進行整理,所以到面試之前看看整理的文檔和博客就行,異常輕鬆。這個月也繼續投遞簡歷進行面試,從三月份開始都是邊投邊準備,不存在全部準備好再去投。


三月份收了京東、瓜子二手車等二線大廠的offer。


四月:

大數據項目、手寫劍指offer、繼續面試


①三月份被阿里菜鳥部門的三面面試官懟了一發,説簡歷沒有大數據項目面大數據崗,理論會再多有什麼用,於是打算在四月份補一下項目。


②在補項目的同時,不忘算法,練習白板寫代碼。


四月份收了騰訊、去哪兒一些offer,騰訊和去哪兒終面都得現場面,所以一天飛北京,一天飛深圳。拿到騰訊offer的時候跟HR商量能不能去上海或者北京的base,HR説不行,於是就沒去了。選工作和生活城市有一個硬性標準:離家遠!那些在北方讀書的同學畢業之後一直要往家裏跑,而我則是一直往外跳,或許是因為在廈門待了四年吧,家鄉也是「圍城」啊。


5-12月:

實習,看框架源碼,面試,整理面經


最後選擇了去Kyligence實習了,剛好趁這個機會學習了Kylin源碼,看了Hadoop和Spark的部分源碼。後面的面試也是為了倒逼自己學習,在面試中找不足,也順便整理了一些面試資料。


總結:

一定要列好自己的學習計劃,也要學會根據自己的學習情況調整計劃。項目是面試的敲門磚,也是面試的大頭,我是從大二出去實習的,所以在項目這邊可以花較少的時間,不用從零開始學。底層理論一定要會,不然大廠無望。算法一定要硬剛,總共就那幾種題型,我剛開始也很抵觸的,覺得太難了,後面迎難而上也就那麼回事。第一遍不行就第二遍,不然就第三遍,直到現在劍指offer裏面也有一些我不懂的題目,但我也不會去深究,大局為重,不摳細節。



別的同學放寒假的時候,自己一個人在學校旁邊租了個小房子學到過年前夕;為了鞏固實習的項目更好地面試,跑了幾次之前實習的公司請同事吃飯問項目細節;為了阿里面試用肝硬剛,連夜複習;簡歷投的太多,信息都被賣了,而且一聽到手機響就以為是面試電話;去騰訊終面,在深大的通宵自習室連夜複習。


以上是我過去一年的準備,説説我從投遞簡歷到收offer這一個月的準備。


1.複習算法。把以前刷過的算法題分類整理了一下,因為之前有整理過,所以複習起來沒用多少時間,還特意去理解了長長的KMP算法,LRU算法。


2.複習理論基礎。除了複習整理的面經和資料之外,還特意去了解了一下Golang,因為頭條用的go語言。


3.特意準備了幾個項目技術難點,能在面試的時候炫一下。



四、頭條一面(Java+項目)


1.倒排索引

2.講講redis裏面的哈希表?   

3.happen-before的規則?

4.volatile修飾符,synchronize鎖 

5.java單例模式的實現,懶漢、餓漢?

6.進程與線程的區別,多進程和多線程的區別?

7.HashMap原理,為什麼用紅黑樹,紅黑樹的特點?

8.快排時間空間複雜度,最好最壞的情況,優化方案?

9.TCP的擁塞控制,具體過程是怎麼樣的?UDP有擁塞控制嗎?如何解決?

10.講講了解的垃圾回收算法和回收器,什麼時候執行STOP THE WORLD?

11.瞭解Go語言嗎?



五、頭條二面(大數據+項目)


1.Kylin的項目架構

2.Paxos和ZAB協議

3.CAP理論,分區容錯性的意義

4.大表Join小表優化,如何處理數據傾斜?

5. 講一下最大堆和最小堆

6.HDFS的讀取、寫入,容錯處理。(源碼)

7.MapReduce的過程(第一版和第二版的)

8.MR shuffle,Spark shuffle。

9.namenode HA,腦裂,Yarn的調度機制。

10. Hive的內部表和外部表區別、數倉建模模型、數倉分層、雪花模型和星型模型。

11.瞭解ClickHouse嗎?它與Kylin的區別?



六、頭條三面(算法+場景題)


1.LRU算法實現(偽代碼)

2.鏈表倒數第K個數(講思路)

3.一堆螺絲和螺母用最短時間匹配(代碼實現)

4.求每天瀏覽頁面的新用户(Hive QL實現)

5.求抖音小視頻每日點擊量最高的10個(Hash + 最小堆)



七、如何通過頭條筆試?


這次的筆試裏總共有5道,我AC了2.5題,第一題90%,第二題90%,第三題70%,不算好,但勉強通過了。去年的這個時候我可是連題目都看不懂的,看得懂的只知道用嘴怎麼説,不會用代碼實現。通過這段時間的算法訓練,總結了如下幾點算法筆試經驗:


1.平時刷題一定要總結歸納,最好分類。比如關於樹的題型,鏈表的,數組等等,觀察它們的解題思路,總結出解題套路。


2.積累工具類算法。什麼叫工具類算法?就是你解一道算法題需要用到另一種算法,這個被調用的算法就是解決這道算法題的工具。比如常見的「深度優先遍歷」、「廣度優先遍歷」、「01揹包」、「KMP算法」以及常見的選擇和排序算法都是經常使用的工具類算法。


3.學會抽象題目。筆試算法題不同於面試算法,不會直白跟你説要使用哪種算法去解答,更多的要自己學會抽象,拋開題目本身,要明白內部講的是什麼,別被題目的糖衣炮彈迷惑了。只有把題目抽象成最原始的算法你才能更好地使用工具類算法進行解答。



八、如何準備頭條面試?


頭條面試和其他大廠可能大同小異,但就是這個小異才是關鍵地方,能異於其他人的地方。可以從如下幾個方面去做準備:


1.特意準備幾個面試題源碼。像我在回答一些中規中矩面試題的時候,都會從源碼角度出發。比如常見的HashMap等集合類,多線程的各種鎖以及大數據框架的部分源碼。


2.特意準備項目難點。面一些大廠的時候避免不了被問到項目難點,不可能用普通Bug含糊過去啊。這邊可以從項目用到的技術棧出發,去尋找技術棧在項目中會存在的難點,然後套進自己的項目,找個自己能懂,最好能全懂的。


3.針對性去了解公司的技術棧使用情況。比如頭條使用Go,眾人皆知,那為什麼我不突擊學習一下呢?比如從業內人士得知頭條最早使用的是Kylin框架,後面慢慢轉為ClickHouse,那我必須瞭解一下兩者的不同啊,而且可以結合頭條的業務場景。



九、一個關於如何進大廠的小建議

我一直崇尚「曲線救國」的做法,也一直在向別人傳播這種做法。現在能力背景不足沒關係,只要規劃好自己的學習路線,一步步階梯式往上爬,總可以實現目標。因為我自己二本出身,但我意識的早,大二就開始實習,用項目和實習經歷彌補我背景不足,然後一步步走到「offer自由」。很多時候並不是只有巨人才可以成功,你只需要做到行動上的普通人,就可以超過很多思想上的巨人,行動上的矮子。



●編號841,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Linux學習

https://hk.wxwenku.com/d/201001975