一線互聯網公司 Android 面試回顧


這篇文章的作者是一位顏值不亞於我的小伙伴,最近剛剛拿到某大廠 offer,趁着大佬開心央求他寫了一篇分享,我們一起向大佬學習!


先說說我是如何展開面試復習的,
大概分為四大類:

  1. 安卓基礎知識

  2. JAVA基礎知識

  3. 算法和數據結構

  4. 職業發展規划相關問題

安卓基礎知識

安卓基礎知識確實很多,如果日常積累不夠的話確實比較頭暈,比如我承認我只在 APP 升級的時候搞過一個前台的 Service,但是面試的時候就會問你 Service 生命周期,如何綁定,如何跨進程通訊,如何關閉Service 等等,你肯定不能說"我沒用過我不會"。

所以我們就要復習,一來我們可以應付面試,二來我們也可以通過基礎知識的積累來提高我們的能力。

首先我又讀了一遍《Android開發藝術探索》,想以該書為基礎展開復習,這本書必須一遍一遍的嚼,我在大三實習的時候剛買來讀了第一遍,實習辭職到家讀了第二遍,剛剛加入工作讀了第三遍,這次我又讀了一遍,我發現這書沒有幾遍根本讀不透。

這次閱讀我主要關注了一下幾個方面(事實證明確實有效):

  1. Activity 任務棧和 4 種啟動模式關聯性問題

  2. IPC 非常重要,想要達到中級和高級的水平就必須要讀懂,跨進程幾種方式必須了解

  • Binder 肯定是必問的,當然還有 AIDL

  • 自定義 View 的 draw measure layout 過程,事件的分發,攔截,處理,處理滑動沖突的思路,view滑動的幾種方式

  • 動畫的幾種實現方式

  • Window 在 Android 里的作用。它和 Activity 和 View 的關系

  • 四大組件的工作過程,這個確實有難度,按自己能力鑽研吧,也別陷的太深

    • 但是,四大組件的使用方式必須會,Service 的啟動和綁定,廣播的使用方法,寫個簡單 ContentProvider 這些都是必須的

  • Looper,Handler,MessageQueue 的關系

  • 主線程為什么是主線程,如何開啟線程,線程池和安卓常用的四種線程池

    • 他們的特點和使用場景

  • AsyncTask 原理,並發問題,缺點等

  • 如何面對大的 bitmap,如何自己設計一個 ImageLoader

    • 其實可以擴展為,如何設計一個 okhttp,如何設計一個 retrofit,eventBus 等等

    • 其實就考察對開源框架的認識和使用的熟練程度

  • 如何避免和處理 Crash 和 ANR

  • 優化篇,過度繪制,OOM,內存泄漏,布局優化,MAT, Lint

  • 書里差不多就這些了,書也有些年頭了,所以另外我還多准備了一些方面。

    1. 有個問題很常見:你了解過哪些開源框架?

    • okhttp 或者 retrofit 必須了解一下底層原理,即使不能讀好源碼,也要看看別人是怎么分析的

  • 如今熱更新和插件化特別火,一定要能說出來幾種,並簡單說明原理

  • MVC MVP MVVM 優缺點,一點要說出自己的切身體會

  • Fragment,生命周期和使用方法

  • Rxjava 盡量也看看

  • 注解機制,現在這么多使用注解的框架

  • Java 基礎知識

    我是參照的《Thinking in Java》這個書和網上的博文,別的我也沒買。網上 Java 的資料非常多,但是確實有很多寫的不好,甚至有一些錯誤的,大家閱讀要小心了。

    主要知識點:

    1. 修飾符

    2. 類 接口 抽象類 匿名內部類 回調機制

    3. 幾種基本類型,長度,邊界

    4. 從 Iterator 到 Collection,再到 Set List Map(必問)

    • 從以下幾個角度理解學習:用法,具體實現類,線程安全性,底層數據存儲結構,某些場景下如何選用?比如 ArrayList 和 LinkedList 如何選用

  • 線程相關(必問)

    • 鎖機制 synchronize 用法

    • 實現一個死鎖

    • 同步,生產者消費者模型

    • Thread 中的幾個常用方法 比如問你 sleep 和 wait 區別

    • 線程安全

  • JVM 了解一些,GC 了解一下,堆和棧的區別等

  • 靜態代理,動態代理 反射

  • 設計模式 單例模式(要會寫),工廠模式,抽象工廠,觀察者模式等

  • 算法和數據結構

    知識點:

    1. 數組,鏈表,隊列,棧,圖

    • 不會直接問你,會讓你找到用處,比如Activity任務棧

  • 算法

    • 基本幾種排序復雜度和思路

    • 幾種查找復雜度和思路

    • 串的處理

    推薦 LeetCode 刷題和讀《劍指offer》。

    職業發展規划相關問題

    主要有以下幾個問題:

    1. 為什么想離職

    2. 當前項目的強度和自己的角色

    3. 希望加入個什么樣的團隊

    4. 對我們公司的了解

    最好提前想一想避免面試時候緊張思路亂,說話沒有邏輯。

    面試問題

    記錄下這次面試的主要問題。

    一面

    1. MVP,MVC,MVVM

    • 項目里有沒有用,缺點是什么,如何改進

  • ClassLoader 原理

  • Binder原理和使用

  • Activity 如何顯示到屏幕上

  • 自定義 View 的注意事項

  • Retrofit 原理

  • okhttp 連接池如何維護的

  • MAT 如何使用,能干什么

  • 注解如何使用,編譯時和運行時注解的區別

  • 有沒有了解過熱修復

  • Map 的實現類和數據結構

  • 內存泄漏如何檢測

  • 如何避免過度繪制

  • 鎖機制

  • 二面

    1. List 的實現類和優缺點,他們是否線程安全

    2. 如何設計一個優秀的 SDK,如何讓 SDK 適應業務模式的變化。

    3. 在紙上設計一個推送 SDK 或者監控 SDK

    4. 兩道算法題

    • 考察大量數據排序

    • 考察多線程協同意識,和核心線程的利用意識。

    • 只要求寫思路,偽代碼即可

  • 為什么要離職

  • 是否能接受加班

  • 三面(HR)

    1. 當前項目組結構和項目組中的角色

    2. 為什么離職

    3. 多久能到崗

    4. 當前薪水

    5. 希望薪水

    總結

    以上內容是我用 3 周時間所復習的,LeetCode 只刷了 10 多道 easy 的,我一直都暗示自己,就算暫時不能面過也是對自己能力的一種提升,所以就乖乖的學習了。

    因為確定了 offer,有一些問題不太方便說清楚,所以匿名投稿。

    筆者畢業剛滿一年,之前工作是在金融公司可能並不是特別追求技術,而筆者又是喜歡追求技術的人,所以格格不入,只能把目標放在互聯網大廠了。也希望大家都去敢於嘗試和追逐自己的夢想!



    注意!

    本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



     
      © 2014-2022 ITdaan.com 联系我们: