前言
這是我去年的經歷,覺得還挺勵志的,希望能幫助到一些正在迷茫的同學。
是去美團送外賣了?有配電瓶車嗎?
答:親,有配的哦,開起來賊順滑。啊呸,說啥了,咱進的是正兒八經的技術部門。
鹹魚的自我救贖
當時剛過完年回到上海,此時的我已經畢業兩年半了,和大多數鹹魚一樣,上班就是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、面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。