
前言
這是我去年的經歷,覺得還挺勵志的,希望能幫助到一些正在迷茫的同學,
是去美團送外賣了?有配電瓶車嗎?
答:親,有配的哦,開起來賊順滑,啊呸,說啥了,咱進的是正兒八經的技術部門,
咸魚的自我救贖
當時剛過完年回到上海,此時的我已經畢業兩年半了,和大多數咸魚一樣,上班就是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、面試前夕,刷題沖刺
面試的前一周時間內,就可以開始刷題沖刺了,請記住,刷題的時候,技術的優先,演算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎么會問,
以上內容均免費分享給大家,需要完整版的朋友,點這里可以看到全部內容,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/239545.html
標籤:其他
