一年半Android工作經驗試水杭州:我是如何拿下頭條、阿里和滴滴 offer 的

前言

筆者畢業於非雙大學,大學畢業社招進入環球網,Android開發工程師一職。

成果

來到杭州的目標非常的明確,大廠。其實就是網易、阿里和滴滴。好在基本三家都拿到了offer。最終決定選擇阿里p6。

面試題

大廠流程比較長,比如阿里就面試了將近三週。所以期間也面試了很多別的公司,創業公司or上市公司。這裏我把我所被問到的面試題總結梳理一下。簡單深入的都有。筆者個人工作經驗不豐富,如若回答不好的地方歡迎指正。

文末會給大家分享我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟即使是寒冬也擋不住一個安卓程序員追求大廠的決心)

Java基礎知識點

Jvm相關

  • Java內存結構及分區
  • Java對象的創建、存儲及訪問
  • Java判斷對象是否存活及垃圾回收算法(GC)
  • Jvm中的常見的垃圾回收器
  • Java類加載過程
  • Java類加載器(雙親委派模型)

集合相關

  • ArrayList分析
  • LinkedList分析
  • HashMap分析
  • HashTable分析
  • LinkedHashMap分析
  • HashSet分析
  • LinkedHashSet分析
  • ArrayMap、SparseMap、與HashMap的對比
  • ConcurrentHashMap分析

併發相關

  • Java內存模型
  • volatile原理
  • Synchronized的原理
  • AQS原理
  • Condition原理
  • ReentrantLock 原理
  • 公平鎖與非公平鎖
  • ReentrantReadWriteLock原理

線程相關

  • 線程和進程的區別
  • 線程的啓動和終止
  • 線程間通信
  • 等待/通知機制

線程池相關

  • 使用線程池的原因
  • 線程池內部原理
  • 線程池中的幾種重要的參數及流程說明
  • 線程池中幾種常見的工作隊列
  • 幾種常見的線程池及使用場景。

IO相關

  • IO相關面試問題-Socket
  • IO相關面試問題-BIO/NIO

Android基礎知識點

Activity相關

  • 典型狀況下的生命週期
  • 異常情況下的生命週期
  • 異常情況下的數據保存
  • 各種情況下跳轉到某個Activity時目標Activity及當前Activity的生命週期
  • Activity的啓動模式及應用場景
  • 進程和應用生命週期

Service相關

  • Service的定義及作用
  • Service兩種啓動方式 startService、 bindService 區別及生命週期
  • Service綁定服務的三種實現方式,擴展Binder類、使用Messenger、使用AIDL
  • 關於啓動服務與綁定服務間的轉換問題 先綁定服務後啓動服務、先啓動服務後綁定服務
  • 服務Service與線程Thread的區別
  • Android 5.0以上的隱式啓動問題及其解決方案
  • 如何保證服務不被殺死
  • IntentService的使用及原理

BroadcastReceiver相關

  • BroadcastReceiver定義及作用、應用場景
  • BroadcastReceiver的註冊方式,靜態方式、動態方式
  • BroadcastReceiver註冊與取消的時機
  • BroadcastReceiver的不同類型,普通廣播,系統廣播、有序廣播、粘性廣播、應用類廣播

Fragment相關

  • Fragment生命週期
  • Fragment的懶加載
  • Fragment之間的通信
  • FragmentPagerAdapter與FragmentStatePagerAdapter的區別
  • 爲什麼不建議直接通過使用new Fragment的方式傳入數據

序列化相關

  • 序列化與反序列化的定義及區別
  • Serializable中serialVersionUID及transient關鍵字的作用
  • 序列化:Parcelable和Serializable差異

IPC相關

  • 在Android中什麼樣的情況下會使用多進程模式,如何開啓多進程
  • Android爲什麼採用Binder做爲IPC機制
  • IPC常用方式 使用Bundle、使用文件共享、使用Messenger、使用AIDL、使用ContentProvider、使用Socket
  • AIDL的語義
  • AIDL如何創建
  • AIDL生成Java文件詳細分析

View事件機制相關

  • View的座標體系
  • View滑動的幾種方式,使用ScrollTo/ScrollBy、使用動畫、改變佈局參數
  • 彈性滑動的原理及實現
  • View的事件分發機制,點擊事件的傳遞規則,事件分發的源碼解讀
  • 處理滑動衝突的場景及解決方法

View繪製相關

  • DecorView、Window、ViewRootImpl等概念
  • MeasureSpec概念
  • View的工作流程,measure過程、layout過程、draw過程
  • 自定義View需要注意的事項
  • Activity、Window、View三者之間的關係

View動畫相關

  • 常用動畫View動畫(補間動畫)、屬性動畫與幀動畫
  • 補間動畫與屬性動畫區別
  • 差值器和估值器理解
  • 屬性動畫的工作原理

Handler相關

  • Handler機制之ThreadLocal
  • Handler機制之Looper、Handler、消息隊列如何理解
  • Handler機制之Message的發送與取出
  • Handler機制之Message及Message的回收機制
  • Handler機制之循環消息隊列的退出
  • Handler機制之內存泄漏
  • Handler機制之IdleHandle的理解及使用

AsyncTask相關

  • AsyncTask的使用和注意事項
  • AsyncTask幾個重要的方法 doInBackgound、onProgressUpdate、onPostExecute等
  • AsyncTask的工作原理及源碼理解

Bitmap壓縮機回收相關

  • Bitmap所佔內存
  • 常用壓縮圖片方式
  • LruCache原理
  • DiskLruCache原理
  • LinkedHashMap原理

ListView與RecyclerView相關

  • ListView的原理和複用機制
  • ListView和RecyclerView的區別

數據存儲相關

  • 常用數據庫框架GreenDao,官方Room
  • 數據庫數據遷移問題
  • GreenDao中一對一,一對多,多對多關係
  • SharedPreferences使用及源碼,commit與apply()方法的區別

Android開源框架知識點

OkHttp相關

  • OkHttp的優點
  • OkHttp執行請求的整個流程
  • OkHttp中的攔截器
  • OkHttp中的同步請求與異步請求的理解及其源碼
  • OkHttp中涉及到的設計模式
  • OkHttp底層網絡請求實現,socket還是URLConnection

Retrofit相關

  • Retrofit執行請求的整個流程
  • Retrofit中ConverterFactory、CallAdapterFactory的理解
  • Retrofit中CallAdapter的適配器模式

RxJava相關

  • RxJava常用創建操作符 create、from、just、interval、range等
  • RxJava常用組合、合併操作符 combineLatest、join、merge、zip等
  • RxJava錯誤處理操作符 onErrorReturn、onErrorResumeNext、onExceptionResumeNext等
  • RxJava過濾操作符 filter、ofType、sample、take等
  • Rxjava背壓相關理解
  • RxJava實際開發中的使用:網絡請求輪詢、網絡請求嵌套回調、從磁盤 / 內存緩存中 獲取緩存數據等

Glide相關

  • Glide的執行流程
  • Glide的緩存機制
  • Glide圖片轉換
  • Glide帶進度的圖片加載功能
  • Glide內存、磁盤緩存,優先級使用

ButterKnife相關

  • Java註解相關Annotation
  • Java註解相關之APT工具
  • ButterKnife註解框架原理

EventBus相關

  • EventBus原理,及索引類的使用

Android性能優化

  • 性能優化:佈局優化、繪製優化、線程優化等
  • ANR異常:主線程執行了耗時操作,如BroadcastReceiver(前臺廣播10s,後臺廣播爲60s)、Service(前臺20s,後臺200s)沒有處理完相關任務等
  • OOM異常:內存溢出的原因
  • 內存泄漏:內存泄露的幾種場景,如單例模式引出的泄露、靜態變量導致的泄露、屬性動畫導致的內存泄露等

Android屏幕適配知識點

  • 今日頭條適配方式
  • 寬高限定符適配方式
  • smallestWidth適配

Android打包知識點

  • 安卓簽名的理解
  • Gradle多渠道打包

Android架構知識點

  • MVC架構設計模式面試問題講解
  • MVP架構設計模式面試問題講解
  • MVVM架構設計模式面試問題講解

Android不同版本特性知識點

推薦閱讀:
Android不同版本下的特性
廣播在7.0、8.0、9.0下的適配
Android 6.0 權限下的適配
Android 7.0 應用共享文件(FileProvider)
Android 7.0 共享文件的使用方式

網絡知識點

  • 計算機網絡三種體系架構,OSI體系架構(7層)、TCP/IP體系架構(4層),五層體系架構
  • TCP的連接管理(三報文握手,四報文握手)
  • TCP與UDP的理解與區別
  • Http(HyberText Transfer Protocol)基本概念及報文結構
  • Http常見錯誤碼
  • Http1.0與Http1.1與Http2.0的區別
  • Http中get請求與post請求的區別
  • Http中cookie與session的區別
  • Http與Https的區別
  • Https加密算法相關面試問題,簽名證書,公鑰私鑰、數字摘要的理解

設計模式知識點

  • 單例模式
  • Builder模式
  • 裝飾模式
  • 策略模式
  • 模板方法
  • 觀察者模式
  • 等.....

算法知識點

  • 常見的八大排序方式
  • 時間複雜度的計算
  • 鏈表相關算法,鏈表翻轉,鏈表合併等
  • 二叉樹相關算法前序、中序、後序遍歷(遞歸,迭代)
  • 紅黑樹與BL樹

總結

以上問題包括但不全面對於這次杭州的求職。
總的來說,你的簡歷就是你給面試官的考綱,所以簡歷一定要真實,及時面試過程中遇到不會的題目,也要沉着冷靜思考,不會也要主動承認,然後最好能夠提出自己的思考和猜測。千萬別不懂裝懂!千萬別不懂裝懂!千萬別不懂裝懂!
上面的面試題筆者也已經整理成PDF文檔了,同時也整理了一些問題詳解;雖然說花了一點時間,但是我也願意把它免費分享出來,希望能夠幫助到有需要的Android工程師朋友,也省的大家再去網上花時間找資料。

領取方式:關注+點贊+加羣:878873098 免費獲取!

作爲Android程序員,個人還是覺得基礎很重要,從基礎到框架,從框架到原理,從原理到源碼,一步一腳印。一定要自信,直面面試官,表現出自己最好的狀態。同時別太咄咄逼人,一定要尊敬面試官,禮貌。

最後,還是希望每一個求職者,都能夠進入自己如願以償的公司拿到心儀的offer~

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