【大廠訣竅】:Android開發3年每天CRUD,系統複習2個月後幸運拿下美團offer!

前言

這是我去年的經歷,覺得還挺勵志的,希望能幫助到一些正在迷茫的同學。

是去美團送外賣了?有配電瓶車嗎?

答:親,有配的哦,開起來賊順滑。啊呸,說啥了,咱進的是正兒八經的技術部門。

鹹魚的自我救贖

當時剛過完年回到上海,此時的我已經畢業兩年半了,和大多數鹹魚一樣,上班就是CRUD,下班就是看劇、玩遊戲(英雄聯盟、手遊都玩)。

當時我的工資一個月到手就5k出頭,但是因爲在甲方駐場開發,加上差補餐補有接近8k,還包住。每到週末幾個小夥伴一起打牌、一起搞情、一起洗腳,日子過得很是滋潤,當時其實挺滿足的。

讓我萌生想跳槽的根本原因已經忘了,想了很久沒想起來,可能是受其他小夥伴的影響吧,有了這種想法後就開始準備起來了。

剛開始只是每天下班後躺在牀上看別人的博客學習一些東西,一般是22:30看一小時左右,當時最先看的是線程、四大組件、Java基礎相關知識,等等這類比較基礎的知識。

想跳槽的想法有了之後便一發不可收拾,如果說剛開始每天晚上看1小時只是在試探,那麼半個月之後我便全力投入面試準備了。

當時工作上的事情不是很多,每天花個兩三個小時基本就能應付了,所以其餘的上班時間我都拿來準備面試了。準備面試的方式主要通過看別人的博客、看源碼,內容主要是 Android 核心知識和 Android 面試題。

從二月初準備到了三月底,這期間我主要乾了以下幾件事:

1.看面試題

這期間我看了很多套 Android 面試題,還記得的有:

①Android Framework 高頻面試題總結

②字節跳動高頻面試真題解析

③美團 Android 面試真題解析

④Android社招高頻面試題

........

很重要的一點,看題要帶着理解、帶着思考去看,將題目與實際開發的內容結合去理解,這樣很容易就記下來了,死記硬背效果不好。還有看面試題不能只看一次,需要反覆看,就像你高中準備考試那樣。看完這些面試題後,我能很自信的在我簡歷寫上了:

  • 具有良好的C/C++/java編程基礎,熟練掌握常用的設計模式,熟悉多線程編程、熟悉網絡編程;
  • 熟悉掌握Android App開發知識和技巧
  • 熟悉android結構體系,熟悉android常見組件如:activity,service,fragment等組件的原理

對於Framework這聽着就高大上的東西,當時我能做的就是帶着理解把下面這幾道題目背的滾瓜爛熟,在此之前我壓根就瞭解Framework。

  • Binder有什麼優勢?(字節跳動)
  • Binder是如何做到一次拷貝的?(騰訊)
  • MMAP的原理講解;(騰訊)
  • 爲什麼Intent不能傳遞大數據?(阿里)
  • 描述AIDL生成的java類細節;(字節跳動)
  • 四大組件底層的通信機制;(字節跳動)
  • 爲什麼Intent不能傳遞大數據?(阿里)

對於背面試題,我只能說兩個字。

2.源碼初探

在看完上面的面試題後,已經能應付很多問題了,但是好像還缺了點什麼?沒錯,就是能讓你裝逼的源碼。當時我選擇了常用集合的源碼,基本都是邊看源碼、邊對着別人的博文跟着一行行的學。在學習 Android 集合源碼時,對我很有幫助是這份《Android源碼解析》

主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。

看完這些源碼後,我把一些我掌握的比較好的寫到簡歷裏去了,因爲這是當時我覺得自己爲數不多的亮點了。

這些源碼的準備也基本全用上了,面試中遇到過這些相關的問題:

  • AsyncTask 是串行還是並行執行?
  • AsyncTask 隨着安卓版本的變遷
  • Retrofit 與 OkHttp 是怎麼合作的?
  • Retrofit 中的數據究竟是怎麼處理的?它是怎麼返回 RxJava.Observable 的?
  • ..........

後面被問多了,就會加一些自己的思考。

自己深挖過(例如看過源碼)的知識點被問到時,一定要抓住機會表現,讓面試官感受到自己的深度,這些都是加分的點。

3.項目準備

除了技術知識外,項目也是必不可少的一環,但是不需要準備很多,只需要挑2-3個你最牛逼的需求點準備就行了。

  • 圖像處理SDK(獨立aar,拼圖整體界面純Canvas繪製及手勢動畫,利用renderscript濾鏡算法及高斯模糊,深拷貝備份實現回退.......)
  • 畫屏APP( 給Android app設計編寫架構,研發框架,完成產品功能迭代與性能調優.......)

第2其實就是來湊數的,打擾了。

但是項目中遇到難題時千萬不要總想着退縮,這些解決難題的過程、解決的難題,都會讓你快速成長和受用終身。

這些內容就是我開始面試前的全部準備了,從2月初到3月底,差不多準備了1個半月,當時的簡歷是這麼寫的。現在看起來有點 low,但是當時已經是我的極限了。

鹹魚修煉出山

準備好了之後就是瘋狂投遞簡歷了,各種知名的招聘網站都要去投,也沒有什麼挑選的說法(唯一可能就是儘量選互聯網公司,還有就是像阿里騰訊這種大公司,咱是不敢投的),只要是招2年 Android 的投就完事了。只要能給個面試機會,咱就得謝天謝地了。

從3月底面試到了4月底,總共面了20來個公司。基本是每天2個面試,上午下午各一個。早上室友還沒起牀,我就已經出門了。早餐都是在三林東地鐵站附近的巴比饅頭解決的;午餐就在面試公司的附近找家麥當勞解決。那段時間每天在路上奔波的時間至少四五個小時,但是完全不覺得累,整個人對未來充滿了希望。

也多虧了這一個月的面試時光,我走過了上海的很多地方:漕河涇、張江高科、唐鎮、人民廣場、陸家嘴、中山公園,之前在上海呆了2年去過的地方還沒我面試期間去的多。

面試經歷

面試有時候就跟碰運氣一樣,運氣好點,問的全是會的,運氣差點,兩句話就被轟出來。

這裏就只放部分公司的面試題了,有些實在是不記得了。。。

小公司1

  • java有什麼特性,繼承有什麼用處,多態有什麼用處
  • 反射是什麼,在哪裏用到,怎麼利用反射創建一個對象
  • 代理模式與裝飾模式的區別,手寫一個靜態代理,一個動態代理
  • 對象加載的過程,屬性先加載還是方法先加載
  • 垃圾回收機制與jvm結構
  • 自定義View,事件分發機制講一講
  • http與https有什麼區別
  • Activity啓動模式,以及各啓動模式生命週期問題
  • 靜態方法,靜態對象爲什麼不能繼承
  • Activity怎麼啓動Service,Activity與Service交互,Service與Thread的區別
  • 介紹一下android動畫
  • Launcher啓動App的流程,中間有幾種跨進程通信(socket)
  • Handler通信,Binder通信
  • 你碰到過什麼內存泄漏,怎麼處理
  • RXJava怎麼切換線程
  • Fragment hide show生命週期
  • 平常有用到什麼鎖,synchronized底層原理是什麼

小公司2

  • 簡單描述下Handler,Handler是怎麼切換線程的,Handler同步屏障
  • Glide的緩存,有用過Glide的什麼深入的API,自定義model是在Glide的什麼階段
  • 講講mvc,mvp模式,presenter內存泄漏的問題
  • ANR瞭解過嗎?有沒有實際的ANR定位問題的經歷
  • 性能優化你做過哪些?
  • 有什麼實際解決UI卡頓優化的經歷
  • 有做過什麼Bitmap優化的實際經驗
  • 項目搭建過程中有什麼經驗,有用到什麼gradle腳本,分包有做什麼操作
  • 組件化有詳細瞭解過嗎?ARouter詳細原理
  • 講一下事件分發機制,RecyclerView是怎麼處理內部ViewClick衝突的
  • mainfest中配置LargeHeap,真的能分配到大內存嗎?

天天拍車

  • 說說HashMap的原理
  • 說說Java的內存分區
  • 講講你對垃圾回收機制的瞭解,老年代有什麼算法?
  • 說說你對volatile字段有什麼用途?
  • 說說事件分發機制,怎麼寫一個不能滑動的ViewPager
  • 說說你對類加載機制的瞭解?DexClassLoader與PathClassLoader的區別
  • 說說插件化的原理,資源的插件化id重複如何解決?
  • mvp與mvvm模式的區別是什麼?
  • JetPack組件用過哪些?lifeCycle的原理是什麼?如果在onStart裏面訂閱,會回調onCreate嗎?
  • 單例模式有什麼缺點?
  • 說說App的啓動過程,在ActivityThread的main方法裏面做了什麼事,什麼時候啓動第一個Activity?
  • 說說你對Handler機制的瞭解,同步消息,異步消息等
  • 說說你對屏幕刷新機制的瞭解,雙重緩衝,三重緩衝,黃油模型
  • onCreate,onResume,onStart裏面,什麼地方可以獲得寬高
  • 爲什麼view.post可以獲得寬高,有看過view.post的源碼嗎?
  • attachToWindow什麼時候調用?
  • DataBinding的原理了解嗎?

浦發信用卡

  • 自定義view,中英文字符串寬高測量顯示,測量算法,可擴展性
  • 事件分發機制
  • Activity,view,window聯繫
  • 熱修復和插件化原理
  • Synchronized底層原理,java鎖機制
  • java容器,hashmap和hashtable區別,hashmap原理,擴容流程,擾動算法的優勢
  • ArrayList和LinkendList區別,List泛型擦除,爲什麼反射能夠在ArrayList< String >中添加int類型
  • Http和Https區別,SSL/TLS過程
  • Android性能優化
  • jvm虛擬機,堆和棧的結構,棧幀,JMM
  • 組件化注意點,組件間通信機制
  • 線程安全的單例模式有哪幾種
  • 熟悉的設計模式

美團

  • 線程掛起,休眠,釋放資源相關,喚醒,線程同步,數據傳遞,問了很多線程的問題,問了20分鐘大概
  • static synchronized 方法的多線程訪問和作用,同一個類裏面兩個synchronized方法,兩個線程同時訪問的問題
  • 內部類和靜態內部類和匿名內部類,以及項目中的應用
  • 泛型是什麼以及在項目中的應用
  • handler發消息給子線程,looper怎麼啓動
  • down、move、up事件的傳遞
  • activity棧
  • 封裝view的時候怎麼知道view的大小
  • intent-filter
  • arraylist和linkedlist的區別,以及應用場景
  • 怎麼啓動service,service和activity怎麼進行數據交互
  • 下拉狀態欄是不是影響activity的生命週期,如果在onStop的時候做了網絡請求,onResume的時候怎麼恢復
  • view渲染

開始面試完拿到了幾個offer,但是拒絕了,選擇了面試最後兩家公司:浦發和美團,我不是一個相信運氣的人,但是這次幸運女神確實眷顧了我,讓我抓住了最後一根稻草。

進美團並不是一帆風順的,拿到面試資格都費了好大勁,當時自己的簡歷太普通了,大概率入不了美團hr的法眼,但是我還是厚着臉皮投了很多部門,有些部門還投了很多次。終於,在我的死纏爛打下,有一位善良的hr給了我一次機會,這是我進美團的第一位貴人。

就這樣,我不可思議的拿到了美團的offer,薪水也超過了我的預期。

進大廠的訣竅

經過這幾年的“摸爬滾打”,我發現進大廠確實有一些訣竅,對於和我一樣背景一般的同學,只要你抓住了訣竅,進大廠不是夢。

1)一定要提前準備,至少準備個一個月,網上的面試題多看看,對於那些高頻題目,帶着理解去學習,實在不能理解的就背下來,大家高考的時候不都是背過來的。

2)大廠通常有很多部門,每個部門的hc數和招人標準都不一樣,即便是同個部門,如果hr不同,標準肯定也不一樣,重複投簡歷可以增大我們拿到面試機會的概率。同理,重複面試不同的部門,也可以增大我們進大廠的概率。

3)大廠經常會佈局新業務,新業務需要快速啓動入場,hc通常會有很多,因此招人的標準會稍微降低,這個時候是個絕佳的機會。我當時進的就是個新的業務部門。

寫在最後

有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會只留給有準備的人。我們只有時刻準備着,才能在機會到來的時候,去抓住它。

我很幸運的是,當我準備好的時候,機會來了。從此以後,我變成了一個相信運氣的人。

我相信,越努力,越幸運。


這裏給大家分享一下我的面試複習路線,有需要的朋友可以參考一下:

1、看視頻進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。

2、進行系統梳理知識,提升儲備

客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

系統學習方向:

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

3、讀源碼,看實戰筆記,學習大神思路

“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。

這個源碼的資料我在上面已經分享展示出來了,這裏就不再放圖片了。

4、面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

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