作者 | 天天有道
基本介紹
今天介紹一位朋友的經歷:
從3月初開始複習,準備面試題。複習的資料主要爲《Android開發核心知識點筆記》和各個大佬的博客,還有就是網上的其他博客資料。
首先介紹一下自己基本情況:渣本畢業快4年,一直在小廠摸魚混日子,學歷和簡歷背景不是很好看,所以面試邀約也不是很多,面試也到處碰壁。從3月中旬開始面試,一直到4月底。共面試9家公司,近20輪面試,拿到2個小公司和1個上市公司(不是出名的公司)的offer,最後準備去上市公司了。也投遞了BAT、360、抖音、快手、平安等大廠的崗位,不過大部分沒給面試機會,少數大廠在後續面試中也把我拒絕了,原因是:基礎知識不夠紮實,技術深度不夠……
面試分享
每輪面試都會有自我介紹,所以在面試前大家可以先準備一段自我介紹,向面試官介紹自己的基本情況。我這裏只分享Android技術面試題(以每個公司爲分類,將幾輪面試題綜合起來),面試官會在每個面試題繼續深入,一直問到你不會爲止。
至於面試題答案,我已經做了整理,但由於篇幅原因就沒有貼上來,有需要的朋友們可以在文末領取。
在面試過程中儘可能回答完整(深度、廣度、擴展),這樣才能在面試官面前加分。建議大家找工作開始面試前,先找幾家小公司找點面試感覺,然後再投自己期望的公司。
接下來是面試題:
公司一
- 組件化和arouter原理
- recyclerview和listview區別
- glide流程,緩存前壓縮,緩存命中
- APP性能優化,內存優化,佈局優化,繪製優化,內存泄漏
- Http和Https區別
- socket心跳包
- jvm虛擬機,堆和棧的結構
- activity啓動模式,有哪些不同
- stack棧的特點,自定義stack結構
- kotlin優劣勢
公司二
- 自定義view,中英文字符串寬高測量顯示,測量算法,可擴展性
- 事件分發機制
- Activity,view,window聯繫
- 熱修復和插件化原理
- Synchronized底層原理,java鎖機制
- java容器,hashmap和hashtable區別,hashmap原理,擴容流程,擾動算法的優勢
- ArrayList和LinkendList區別,List泛型擦除,爲什麼反射能夠在ArrayList< String >中添加int類型
- Http和Https區別,SSL/TLS過程
- Android性能優化
- jvm虛擬機,堆和棧的結構,棧幀,JMM
- 組件化注意點,組件間通信機制
- 線程安全的單例模式有哪幾種
- 熟悉的設計模式
公司三
- MVC,MVP,MVVM
- Activity和fragment生命週期區別,fragment正常添加和viewpager添加的區別,fragment懶加載原理,FragmentPagerAdapter 和 FragmentStatePagerAdapter
- 熱修復和插件化
- 友盟bug統計,混淆後怎麼定位bug。沒接入熱修復的APP中,上線後遇到bug怎麼解決
- view繪製原理 (可以先說下基本view繪製,然後再說下屏幕刷新機制)
- 使用Analyze減少APK體積,原理
- Android 版本差異
公司四
- 基礎類型字節,漢字佔幾個字節,線程和進程
- 四大組件,fileprovider和Contentprovide區別,activity啓動流程
- MVC,MVP,MVVM
- TCP三次握手,四次揮手
- Eventbus,glide原理
- 性能優化,內存抖動,內存泄漏,內存溢出,handler機制,IntentService和handlerThread,子線程更新view內容的方法
- GC回收算法
- recyclerview和listview區別
- 組件化,模塊化,插件化,熱修復
- 工作中遇到的難題怎麼解決的
- Kotlin Java優缺點,kotlin什麼時候用分號,run,with,apply,內聯函數,高階函數
- APK體積優化
- 進程間通信
- 單例模式,哪些是安全的
- retrofit設計模式
- 自定義view
- 是否做過音視頻和IM?
- APK性能優化
- CurrentHashMap1.7和1.8區別
- volatile關鍵字的作用,怎麼保證原子性呢?
- 網絡優化
- 對新技術的看法
- java泛型,協變和逆變
公司五
- HTTPS具體步驟
- 常用的設計模式,代理模式和裝飾者模式區別
- 服務端返回錯誤的json數據,客戶端怎麼自定義model,避免出錯
- Hook技術
- kotlin瞭解,協程
- 屏幕適配
- 抓包工具使用和原理
- 網絡優化
- 未來期望,對公司的瞭解
- Okhttp,rxjava,glide,retrofit等原理,okhttp底層數據傳輸原理,http報文體結構
- APK體積優化
- Android jetpack使用和原理,新技術看法
- crashHandler獲取應用crash信息
- recyclerview和listview緩存區別
- Android 常見崩潰問題分析及一般的解決方案
- NestedScrollView觸摸機制,AOP相關知識
- 設計APP,整體架構選型
- Android沙盒和底層Linux通信
- ACTION_CANCLE什麼時候觸發
- 線程池原理
公司六
- 組件化,arouter,組件化UI,還有哪些路由框架。AS調試方法
- MVC,MVP,MVVM,Jetpack
- JVM,JMM,java加載對象的步驟,classLoader,GC回收算法
- 插件化和熱修復
- 唯一安卓ID,安卓安全的知識,加密算法,判斷activity前臺進程
- TCP三次握手和四次揮手
- hash算法,hashmap,怎麼解決hash衝突
- 加載大圖,glide緩存機制,設計模式,雙重檢測的單例模式爲什麼要檢查兩次,自己設計圖片加載框架思路
- 啓動未註冊的Activity
- AOP,藍牙開發,IOT
- glide緩存清除:lrucache算法
- glide緩存文件太大,查找效率慢怎麼優化?glide下載高清圖片優化
- 最近研究的技術,遇到最難的事,對公司的期望
公司七
- 組件化, arouter優缺點
- MVC,MVP,MVVM
- 項目中的亮點,對架構的理解
- handler原理及相關知識點,message回收策略
- hashmap原理,arraymap原理,對比性能。
- hashmap爲什麼大於8才轉化爲紅黑樹,加載因子爲什麼是0.75
- Synchronized底層原理,java鎖機制
- 服務和廣播
- activity啓動模式(給例子具體分析,A(標準)-》B(單例)-》C(singleTop)-》D(singleTask),分析有幾個棧,每個棧內的activity)
- 常用設計模式,線程安全的單例模式
公司八
- static、final;繼承與多態
- 組件化, arouter優缺點
- context相關知識點
- handler原理及相關知識點,handler緩存池大小。
- 性能優化,啓動速度優化,架構
- java虛擬機與Dalvik和ART區別
- Kotlin協程,擴展函數和屬性以及伴生對象
- 電商APP的首頁,怎麼設計一個APP架構
- MVP中數據請求爲什麼要和M一起,答:網絡請求和javabean都是數據模型相關
- Glide的存儲EngineKey是怎麼保證唯一的。面試官答:有個隊列會將EngineKey存儲起來,每次生成後進行對比存儲。這個我在源碼中沒找對位置,如果知道的同學,麻煩幫忙解釋下。
- retrofit是怎麼將service接口轉化爲我們需要的javabean的?
- 怎麼做管理,新技術學習
公司九
- SqLite與contentProvider區別
- fragment週期,兩個fragment切換週期變化,fragment通信
- https證書校驗,加密相關,網絡請求框架
- glide加載流程,大圖顯示,圖片大小計算
- view繪製(從onSync()開始)
- 線程內存模型,線程間通信
- 獲取view的寬高,更新view的方式,主線程消息機制
- OOM,內存泄漏,內存溢出,java引用類型,ANR分析
- APP性能優化,webview相關,webview優化,webview中Android與js互調
- 插件化和熱修復
總結
最後也是感覺運氣不錯,拿下Offer,一線城市,年薪是25W,自己已經非常滿意了。
關於簡歷方面,簡歷上寫的東西,一定要先搞懂,特別是簡歷上的專業技能。這次面試收到的最多反饋就是:基礎知識不夠紮實,技術深度不夠。
現在Android開發大部分需要懂點C++和Linux知識,大廠也需要刷算法面試題,在後面的學習過程中,我也會從以上幾個方面着手。當然也必須把基礎知識學牢固,技術深度搞深入點。
關於我的複習資料,就是下面圖中這些了
如果你有需要的話,可以點擊Android學習PDF+架構視頻+面試文檔+源碼筆記獲取免費領取方式
最後祝大家都能拿到心儀的offer!