Android應屆畢業生“過五關斬六將”,怒刷千題,讓你面試一路暢通!

面試:如果不準備充分的面試,完全是浪費時間,更是對自己的不負責!

如果想變得優秀那就去看那些優秀的人在學什麼,做什麼,想盡一切辦法和他們交流;多出去看看這個世界,然後把自己逼到往死裏學。

如今已是五月底,馬上即將迎來六月份的畢業季,大批的屆畢業生即將進入求職面試的緊張階段,在這裏分享一下我從事Android多年以來的面試經驗。

這篇攻略是我從事開發工作七八年來,去面試,以及面試別人的經驗總結。其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裏所列的肯定不可能覆蓋全部方式,希望對大家找工作有幫助!

文末會給大家分享我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟之前的年前突然裁員風波心裏是有點迷)

Java 知識

基礎

  1. 什麼是面向對象(OOP)?
  2. 什麼是多態?實現多態的機制是什麼?
  3. 接口(Interface)與抽象類(Abstract Class)的區別?
  4. 重寫(Override)與重載(Overload)的區別?
  5. 父類的靜態方法能否被子類重寫?
  6. 靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?爲什麼?
  7. 什麼是內部類?內部類、靜態內部類、局部內部類和匿名內部類的區別及作用?
  8. == 和 equals() 和 hashCode() 的區別?
  9. Integer 和 int 之間的區別?
  10. String 轉換成 Integer 的方式及原理?
  11. 自動裝箱實現原理?類型轉換實現原理?
  12. 對 String 的瞭解?
  13. String 爲什麼要設計成不可變的?
  14. final、finally 和 finalize 的區別?
  15. static 關鍵字有什麼作用?
  16. 列舉 Java 的集合以及集合之間的繼承關係?
  17. List、Set、Map 的區別?
  18. ArrayList、LinkedList 的區別?
  19. HashMap,HashTable,ConcurrentHashMap 實現原理以及區別?
  20. HashSet 與 HashMap 怎麼判斷集合元素重複?
  21. String、StringBuffer、StringBuilder 之間的區別?
  22. 什麼是序列化?怎麼實現?有哪些方式?
  23. 對反射的瞭解?
  24. 對註解的瞭解?
  25. 對依賴注入的瞭解?
  26. 對泛型的瞭解?
  27. 泛型中 extends 和 super 的區別?
  28. 對 Java 的異常體系的瞭解?
  29. 對解析與分派的瞭解?
  30. 靜態代理和動態代理的區別?有什麼場景使用?
  31. 談談對 Java 狀態機理解?

線程與併發

  1. 線程和進程的區別?
  2. 開啓線程的三種方式
  3. 如何正確的結束一個Thread?
  4. Thread 與 Runnable 的區別?
  5. run() 與 start() 方法的區別?
  6. sleep() 與 wait() 方法的區別?
  7. wait 與 notify 關鍵字的區別?
  8. synchronized 關鍵字的用法、作用及實現原理?
  9. volatile 關鍵字的用法、作用及實現原理?
  10. transient 關鍵字的用法、作用及實現原理?
  11. ReentrantLock、synchronized、volatile 之間的區別?
  12. 什麼是線程池,如何使用?
  13. 多線程斷點續傳的實現原理?
  14. 什麼是深拷貝和淺拷貝?
  15. Java 中對象的生命週期?
  16. 對併發編程的瞭解?

JVM

  1. 簡述 JVM 內存模型和內存區域?
  2. 簡述垃圾回收器的工作原理?
  3. 如何判斷對象的生死?垃圾回收算法?新生代,老生代?
  4. 哪些情況下的對象會被垃圾回收機制處理掉?
  5. 垃圾回收機制與調用 System.gc() 的區別?
  6. 強引用、軟引用、弱引用、虛引用之間的區別?
  7. 強引用設置爲 null,會不會被回收?
  8. 簡述 ClassLoader 類加載機制?
  9. 對雙親委派模型的瞭解?
  10. String a = "a"+"b"+"c" 在內存中創建幾個對象?
  11. 對 Dalvik、ART 虛擬機的瞭解?
  12. 對動態加載(OSGI)的瞭解?
  13. 常見編碼方式有哪些?
  14. utf-8 編碼中的中文佔幾個字節?int 型佔幾個字節?

Android 知識

基礎

  1. 四大組件是什麼?
  2. Activity 的生命週期?
  3. Activity 之間的通信方式?
  4. Activity 各種情況下的生命週期?
  5. 橫豎屏切換時 Activity 的生命週期
  6. 前臺切換到後臺,然後再回到前臺時 Activity 的生命週期
  7. 彈出 Dialog 的時候按 Home 鍵時 Activity 的生命週期
  8. 兩個 Activity 之間跳轉時的生命週期
  9. 下拉狀態欄時 Activity 的生命週期
  10. Activity 與 Fragment 之間生命週期比較?
  11. Activity 的四種 LaunchMode(啓動模式)的區別?
  12. Activity 狀態保存與恢復?
  13. Fragment 各種情況下的生命週期?
  14. Activity 和 Fragment 之間怎麼通信, Fragment 和 Fragment 怎麼通信?
  15. Service 的生命週期?
  16. Service 的啓動方式?
  17. Service 與 IntentService 的區別?
  18. Service 和 Activity 之間的通信方式?
  19. 對 ContentProvider 的理解?
  20. ContentProvider、ContentResolver、ContentObserver 之間的關係?
  21. 對 BroadcastReceiver 的瞭解?
  22. 廣播的分類?使用方式和場景?
  23. 動態廣播和靜態廣播有什麼區別?
  24. AlertDialog、popupWindow、Activity 之間的區別?
  25. Application 和 Activity 的 Context 之間的區別?
  26. Android 屬性動畫特性?
  27. 請列舉 Android 中常見的佈局(Layout)類型,並簡述其用法,以及排版效率。【獵豹移動】 LinearLayout、RelativeLayout、FrameLayout 的特性對比及使用場景?
  28. 對 SurfaceView 的瞭解?
  29. Serializable 和 Parcelable 的區別?
  30. Android 中數據存儲方式有哪些?
  31. 屏幕適配的處理技巧都有哪些?
  32. Android 各個版本 API 的區別?
  33. 動態權限適配方案,權限組的概念?
  34. 爲什麼不能在子線程更新 UI?
  35. ListView 圖片加載錯亂的原理和解決方案?
  36. 對 RecycleView 的瞭解?
  37. Recycleview 和 ListView 的區別?
  38. RecycleView 實現原理?
  39. Android Manifest 的作用與理解?
  40. 多線程在 Android 中的使用?
  41. 區別 Animation 和 Animator 的用法,概述實現原理?【獵豹移動】

進階

  1. 畫出 Android 的大體架構圖
  2. 低版本 SDK 如何使用高版本 API?
  3. AsyncTask 如何使用?
  4. AsyncTask 機制、原理及不足?
  5. 如果在 onStop() 的時候做了網絡請求,onResume() 的時候怎麼恢復?
  6. Handler 機制和底層實現?
  7. Handler、Thread、HandlerThread 區別? Thread、Looper、MessageQueue、Handler、Message,每個類的功能是什麼,這些類之間是什麼關係?【獵豹移動】
  8. ThreadLocal 原理、實現及如何保證 Local 屬性?
  9. 自定義 View 的流程?如何機型適配?
  10. 自定義 View 的時怎麼獲取 View 的大小?
  11. View 的繪製流程?
  12. View 的事件傳遞分發機制?
  13. requestLayout(),onLayout(),onDraw(),drawChild() 區別與聯繫?
  14. invalidate() 和 postInvalidate() 的區別?
  15. 如何計算一個 View 的嵌套層級?
  16. Android 動畫框架及實現原理?
  17. 進程和 Application 的生命週期的關係?
  18. SpareArray 的實現原理?
  19. SharedPreferences 的實現眼裏?是否進程同步?如何做到同步?
  20. ContentProvider 是如何實現數據共享的?
  21. ContentProvider 的權限管理?
  22. Android 系統爲什麼會設計 ContentProvider?
  23. Android 線程有沒有上限?
  24. 怎麼去除重複代碼?
  25. Android 中開啓攝像頭的主要流程?
  26. 對 Bitmap 對象的瞭解?
  27. 圖片加載原理?
  28. 圖片壓縮原理?
  29. 圖片框架實現原理?LRUCache 原理?
  30. EventBus 實現原理?
  31. ButterKnife 實現原理?
  32. Volley 實現原理?
  33. okhttp 實現原理?
  34. 服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達?
  35. SQLite 數據庫升級,數據遷移問題?
  36. 數據庫框架對比和源碼分析?
  37. CAS介紹,OAuth 授權機制?
  38. 談談你對安卓簽名的理解
  39. App 是如何沙箱化,爲什麼要這麼做?

混合開發

  1. 混合開發的方式?各自優缺點和使用場景?
  2. Hybird
  3. React Native
  4. Weex
  5. Flutter
  6. Dart
  7. 快應用

性能優化

  1. 如何對 Android 應用進行性能分析以及優化?
  2. ANR 產生的原因是什麼?怎麼定位?
  3. OOM 是什麼?怎麼解決?是否可以 try catch?
  4. 內存泄露的解決方法?
  5. ddms 和 traceView 的使用?
  6. 性能優化如何分析 systrace?
  7. 用 IDE 如何分析內存泄漏?
  8. Java 多線程引發的性能問題,怎麼解決?
  9. 啓動頁白屏、黑屏、太慢怎麼解決?
  10. App 啓動崩潰異常怎麼捕捉? 對於 Android App 閃退,可能有哪些原因?請針對每種情況簡述分析過程。【獵豹移動】
  11. 如何保持應用的穩定性?
  12. RecyclerView 和 ListView 的性能對比?
  13. Bitmap 如何處理大圖?如何預防 OOM?
  14. 如何縮小 Apk 的體積?
  15. 如何統計啓動時長?

Gradle

  1. Gradle 源碼解析
  2. 對熱修復和插件化的理解?
  3. 插件化原理分析
  4. 模塊化實現(好處,原因)
  5. 項目組件化的理解
  6. 描述清點擊 Android Studio 的 build 按鈕後發生了什麼?

Kotlin

  1. 談談對 Kotlin 的理解
  2. 閉包和局部內部類的區別?

數據結構與算法

數據結構

  • 簡述常見的數據結構?
  • 堆的結構?
  • 樹、B+ 樹、二叉樹、紅黑樹的瞭解?
  • 二叉樹的深度優先遍歷和廣度優先遍歷?
  • 堆和樹的區別?
  • 圖的瞭解?

算法

  • 排序算法有哪些?
  • 最快的排序算法是哪個?
  • 手寫冒泡排序
  • 手寫快速排序
  • 快速排序的過程、時間複雜度、空間複雜度
  • 手寫堆排序

常見算法問題

  • 給阿里2萬多名員工按年齡排序應該選擇哪個算法?
  • GC算法(各種算法的優缺點以及應用場景)
  • 蟻羣算法與蒙特卡洛算法
  • 子串包含問題(KMP 算法)寫代碼實現
  • 一個無序,不重複數組,輸出N個元素,使得N個元素的和相加爲M,給出時間複雜度、空間複雜度。手寫算法
  • 萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)
  • 兩個不重複的數組集合中,求共同的元素。
  • 兩個不重複的數組集合中,這兩個集合都是海量數據,內存中放不下,怎麼求共同的元素?
  • 一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法
  • 一張Bitmap所佔內存以及內存佔用的計算
  • 2000萬個整數,找出第五十大的數字?
  • 求1000以內的水仙花數以及40億以內的水仙花數
  • 燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
  • 5枚硬幣,2正3反如何劃分爲兩堆然後通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同
  • 時針走一圈,時針分針重合幾次

設計模式與架構

設計模式

  • 談談你對 Android 設計模式的理解
  • 項目中常用的設計模式有哪些?
  • 手寫生產者-消費者模式?
  • 手寫觀察者模式?
  • 適配器模式、裝飾者模式、外觀模式的異同?

架構

  • MVC、MVP、MVVM 原理和區別?
  • 請畫出 MVC、MVP 的差異?【獵豹移動】
  • 對 RxJava 的理解,功能與原理,優缺點?
  • 從 0 設計一款 App 整體架構,如何去做?
  • Fragment 如果在 Adapter 中使用應該如何解耦?
  • 對於應用更新這塊是如何做的?(解答:灰度,強制更新,分區域更新)?
  • 實現一個 Json 解析器(可以通過正則提高速度)?

其他方面

人事相關

  • 請簡單做個自我介紹?
  • 爲什麼離開上家公司?您在前一家公司的離職原因是什麼?
  • 爲什麼要做 xxx 崗位(出現所學專業與求職崗位不同時提問)?
  • 講一個你認爲做的最好的項目/案例
  • 你應聘該崗位的優勢是什麼?
  • 如果實際工作後發現自己不適合這個職位怎麼辦?
  • 你最擅長的技術點,最感興趣的技術領域和技術點?
  • 說說你對行業、技術發展趨勢的看法?
  • 理想中的工作環境是什麼?
  • 說說你的家庭?
  • 就你申請的這個職位,你認爲你還欠缺什麼?
  • 你做過的哪件事最令自己感到驕傲?說一件最能證明你能力的事情?
  • 是否可以實習,可以實習多久?
  • 評價下自己,評價下自己的技術水平,個人代碼量如何?
  • 當前的 offer 狀況;如果 BATH 都給了offer 該如何選?
  • 你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,還是 money?
  • 假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎麼辦?
  • 你看中公司的什麼?或者公司的那些方面最吸引你?
  • 講一件你印象最深的一件事情?
  • 介紹你做過的哪些項目,介紹一個你影響最深的項目?
  • 你做過的哪件事最令自己感到驕傲?
  • 都使用過哪些框架、平臺?
  • 都使用過哪些自定義控件?
  • 項目中用了哪些開源庫,如何避免因爲引入開源庫而導致的安全性和穩定性問題?
  • 有沒有什麼開源項目?
  • 研究比較深入的領域有哪些?
  • 對業內信息的關注渠道有哪些?
  • 業餘都有哪些愛好?
  • 最近都讀哪些書?
  • 你的夢想是什麼?

常見套路

如果有遇到以下這些情況,你可以繼續投簡歷:

  • 我們 xx 總不在,會叫 hr 聯繫你,你先回去等通知
  • 面試叫你帶上以往作品(工作成績需要以往作品展示的除外,如:ui)然後面試官一直問你方案是怎麼做的
  • 遇到面試官敷衍隨便問問題

想要面試順通嘛,關注我的主頁個人說明獲取面試資料爲面試做足準備叭!這裏提前祝各位應屆畢業生面試成功!

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