金三銀四跳槽季,拿上攻略有底氣!【持續更新...】

在這裏插入圖片描述
馬上又到了金三銀四了,整理了一些面試題分,希望對大家有所幫助 ~

雖然我不推薦大家刷題,這裏僅供大家差缺補漏。所有的知識點還是重在自己理解,用自己的方式表達出來比較好。

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. 快應用

Framework

  1. 請介紹一下 NDK?
  2. 如何加載 ndk 庫?如何在 jni 中註冊 native 函數,有幾種註冊方式?【獵豹移動】
  3. Android 進程分類?
  4. 談談對進程共享和線程安全的認識?
  5. 談談對多進程開發的理解以及多進程應用場景?
  6. 什麼是協程?
  7. 邏輯地址與物理地址,爲什麼使用邏輯地址?
  8. Android 爲每個應用程序分配的內存大小是多少?
  9. 進程保活的方式?
  10. 系統啓動流程是什麼?
  11. 一個應用程序安裝到手機上的過程發生了什麼?
  12. App 啓動流程,從點擊桌面開始(Activity 啓動流程)?
  13. 什麼是 AIDL?解決了什麼問題?如何使用?
  14. Binder 機制及工作原理?
  15. App 中喚醒其他進程的實現方式?
  16. Activity、Window、View 三者的關係與區別?
  17. ApplicationContext 和 ActivityContext 的區別?
  18. ActivityThread,ActivityManagerService,WindowManagerService 的工作原理?
  19. PackageManagerService 的工作原理?
  20. PowerManagerService 的工作原理?
  21. 權限管理系統(底層的權限是如何進行 grant 的)?
  22. 操作系統中進程和線程有什麼區別?系統在什麼情況下會在用戶態和內核態中切換?【獵豹移動】
  23. 如果一個 App 裏面有多個進程存在,請列舉你所知道的全部 IPC 方法。

性能優化

  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. 閉包和局部內部類的區別?

網絡基礎

在這裏插入圖片描述

  1. 描述一次網絡請求的流程?
  2. TCP 中 3 次握手和 4 次揮手的過程?
  3. TCP 與 UDP 的區別及應用?
  4. HTTP 協議
  5. HTTP 1.0 與 2.0 的區別
  6. HTTP 報文結構
  7. HTTP 與 HTTPS 的區別以及如何實現安全性
  8. HTTPS 原理
  9. 談談你對 WebSocket 的理解
  10. WebSocket 與 socket 的區別
  11. 視頻加密傳輸

數據結構與算法

在這裏插入圖片描述

數據結構

  • 簡述常見的數據結構?
  • 堆的結構?
  • 樹、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)然後面試官一直問你方案是怎麼做的
  • 遇到面試官敷衍隨便問問題

項目介紹

https://github.com/android-exchange/Android-Interview

所有的面試題都放在 Android-Interview 項目上,該項目是由 現滴滴出行終端技術首席架構師 - 任玉剛 領導組織,我與多位 Android 大佬共同維護的項目。

該項目持續更新,歡迎大家 Star,如果有更優質的面試題歡迎聯繫我提交。

我的 GitHub

github.com/jeanboydev

我的公衆號

歡迎關注我的公衆號,分享各種技術乾貨,各種學習資料,職業發展和行業動態。

Android 波斯灣

技術交流羣

歡迎加入技術交流羣,來一起交流學習。

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