從簡歷被拒,到頭條Android面試。二本渣渣如何在359天成功拿下offer!

我是二本院校非科班的,從簡歷被拒,到拿下頭條面試,我花了一年的時間。

一、印象中的頭條

二、面試背景

三、準備面試

四、如何通過頭條筆試?

五、如何準備頭條面試?

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

一、印象中的頭條

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

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

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

二、面試背景

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

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

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

三、準備面試

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

每天早上,泡一杯咖啡,享受陽光灑在窗前的溫暖。翻開武林祕籍,開背!

邊背邊加上筆記,更有助於理解喲~

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

一月:

Java入門

整個一月份都在刷入門視頻和《深入理解Java虛擬機》,又臨近期末,每天5點半起牀,看兩個小時的視頻然後上課或者複習期末考。

二月:

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

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

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

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

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

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

三月:

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

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

②Android面試題刷了網上搜集1307字節跳動高頻面試題解,其他都是框架原理,源碼解析等理論。

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

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

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

Android高級開發面試題

以上資源均免費分享給大家,內容均放在了開源項目:【Github】,大家可以自行獲取。

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

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

①三月份被阿里閒魚部門的三面面試官懟了一發,說簡歷沒有混合開發項目面Android崗,理論會再多有什麼用,於是打算在四月份補一下項目。
項目準備思路

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

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

5-12月:

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

如何閱讀源碼?

1.深入解析微信 MMKV 源碼
MMKV 是微信於 2018 年 9 月 20 日開源的一個 K-V 存儲庫,它與 SharedPreferences 相似,但又在更高的效率下解決了其不支持跨進程讀寫等弊端。

2.深入解析阿里巴巴路由框架ARouter 源碼
組件化被越來越多的Android項目採用,而作爲組件化的基礎——路由也是重中之重。因此詳細的分析阿里巴巴開源的路由框架ARouter。從源碼的角度解釋爲什麼這樣使用,以及避免做什麼,讓你使用地更加順滑。

3.深入解析AsyncTask 源碼(一款 Android 內置的異步任務執行庫)
AsyncTask 是 Android SDK 中提供的一個用於執行異步任務的框架,在 Android 興起的早期被廣泛使用,但如今已經被 RxJava、協程等新興框架所取代。雖然它存在着一些不足,但我們還是可以嘗試瞭解一下它的實現原理以及存在的不足。

4.深入解析Volley 源碼(一款 Google 推出的網絡請求框架)
Volley 是 Google 開發的一款網絡請求框架,目前已停止更新。雖然目前大家的關注焦點都在 Retrofit、OkHttp 等第三方網絡請求框架,團隊的項目中所用的也是這兩個框架,但 Volley 中還是有非常多優秀的設計思想值得我們去學習的。

5.深入解析 Retrofit源碼
在Andrroid開發中,網絡請求十分常用,而在Android網絡請求庫中,Retrofit是當下最熱的一個網絡請求庫。

6.深入解析OkHttp 源碼
OkHttp是一個處理網絡請求的開源項目,是Android端最火熱的輕量級框架,由移動支付Square公司貢獻用於替代HttpUrlConnection和Apache HttpClient。隨着OkHttp的不斷成熟,越來越多的Android開發者使用OkHttp作爲網絡框架。

7.深入解析ButterKnife 源碼
作爲 Android開發者,大家肯定都知道大名鼎鼎的butterknife。它大大的提高了開發效率,雖然在很早之前大家就開始使用它了,但是隻知道是通過註解的方式實現的,卻一直沒有仔細的學習下大牛的代碼。所以有必要系統的分析下 butterknife的實現原理。

8.深入解析Okio源碼(一套簡潔高效的 I/O 庫)
Okio 中有兩個非常重要的接口——Sink 以及 Source,它們都繼承了 Closeable,其中 Sink 對應了我們原來所使用的 OutputStream,而 Source 則對應了我們原來所使用的 InputStream。
Okio 的入口就是Okio 類,它是一個工廠類,可以通過它內部的一些 static 方法來創建 Sink、Source 等對象。

9.深入解析SharedPreferences源碼
SharedPreference 是一個 Android 開發自帶的適合保存輕量級數據的 K-V 存儲庫,它使用了 XML 的方式來存儲數據,比如我就經常用它保存一些如用戶登錄信息等輕量級數據。

10.深入解析EventBus 源碼
EventBus 是一個 Android 事件發佈/訂閱框架。
傳統的事件傳遞方式包括:Handler(消息處理機制,一般用於更新UI)、BroadCastReceiver(廣播接收者)、Interface 回調。

EventBus優點:

  • Activity、Fragment、Service與線程之間的通訊是很常見的,EventBus正好可以屏蔽一些線程切換問題,簡單地實現發佈訂閱功能。
  • 代碼簡潔,使用簡單,並將事件發佈和訂閱充分解耦。

11.Android 自定義註解初探
由於之前用到的很多開源框架如 GreenDao、EventBus、ButterKnife、ARouter 等都使用了自定義註解,因此有必要去研究一下自定義註解。

12.View 的工作機制源碼分析

13.Android 觸摸事件分發機制源碼分析

14.Android 按鍵事件分發機制源碼分析

15.深入解析 Handler 源碼
Android 的消息機制是基於 Handler 實現的。很多人以爲,知道了 Handler、Looper、MessageQueue 就自以爲了解了 Handler 的原理。但其實看源碼的過程中慢慢就會發現,Handler 的內容可不止這點, 像同步屏障、 Handler 的 native 層的阻塞喚醒機制等等這些知識以前就沒有理解清楚。

16.深入解析Binder源碼
Binder在Android中堪稱武林祕籍中的"易筋經",無論是菜鳥還是老鳥都對之神往。Binder架構是進程間相互通信的最常用手段,四大組件的基本功能都是依賴着Binder才能夠實現的。
爲了開發者能夠使用java與cpp進行binder通信,binder的設計貫穿了framework、native和kernel層,開發者可以輕鬆的在上層使用binder向其它進程發起數據通信。

17.深入解析JNI源碼
Android NDK開發中,常常因爲效率、安全等原因,需要藉助JNI的機制調用到Native環境中進行c/cpp操作。

18.深入解析Glide源碼
Glide 功能豐富,圖片三級緩存、可深度定製(繼承AppGlideModule、LibraryGlideModule實現更多功能)、修改網絡請求庫、支持多種輸入輸出資源的轉換(例如輸入Stream,輸出bitmap等等)、生命週期的管理。因此很有必要深入解析源碼

19.RxJava原理及如何封裝使用
RxJava可謂是Android開發人員必備技能,重要性就無需贅述了。

20.LeakCanary核心原理源碼解析
LeakCanary是Android內存泄漏的框架,作爲一個“面試常見問題”,它一定有值得學習的地方。

21.插件化架構定義及插件化架構的實踐思路分析
babel插件、webpack插件、vue-cli插件,爲啥這麼多的優秀框架都是使用插件系統?插件化架構是什麼?帶來了什麼好處?可以應用到什麼場景呢?

以上資源均免費分享給大家,內容均放在了開源項目:【Github】,大家可以自行獲取。

總結:

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

四、如何通過頭條筆試?

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

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

2.積累工具類算法。什麼叫工具類算法?就是你解一道算法題需要用到另一種算法,這個被調用的算法就是解決這道算法題的工具。比如常見的「數組」、「鏈表」、「二叉樹」、「圖」以及常見的選擇和排序算法都是經常使用的工具類算法。

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

1.1.1 常用的數據結構有哪些?
1.1.2 數組
1.1.3 鏈表
1.1.4 隊列&堆棧
1.1.5 二叉樹
1.1.6 HashMap
1.1.7圖
1.1.8排序算法有哪些?
1.1.9 查找算法
1.1.10 串
1.1.12 其他算法









數據結構與算法刷題指南

以上資源均免費分享給大家,內容均放在了開源項目:【Github】,大家可以自行獲取。

八、如何準備頭條面試?

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

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

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

3.針對性去了解公司的技術棧使用情況。比如頭條關注性能優化,衆人皆知,那爲什麼我不突擊學習一下呢?

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

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

本文在開源項目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,裏面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章