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

立刻又到了金三銀四了,整理了一些面試題,但願對你們有所幫助 ~java

雖然我不推薦你們刷題,這裏僅供你們差缺補漏。全部的知識點仍是重在本身理解,用本身的方式表達出來比較好。android

Java

基礎

線程與併發

  • 線程和進程的區別?
  • 開啓線程的三種方式
  • 如何正確的結束一個Thread?
  • Thread 與 Runnable 的區別?
  • run() 與 start() 方法的區別?
  • sleep() 與 wait() 方法的區別?
  • wait 與 notify 關鍵字的區別?
  • synchronized 關鍵字的用法、做用及實現原理?
  • volatile 關鍵字的用法、做用及實現原理?
  • transient 關鍵字的用法、做用及實現原理?
  • ReentrantLock、synchronized、volatile 之間的區別?
  • 什麼是線程池,如何使用?
  • 多線程斷點續傳的實現原理?
  • 什麼是深拷貝和淺拷貝?
  • Java 中對象的生命週期?
  • 對併發編程的瞭解?

JVM

Android

基礎

  • 四大組件是什麼?
  • Activity 的生命週期?
  • Activity 之間的通訊方式?
  • Activity 各類狀況下的生命週期?
  • 橫豎屏切換時 Activity 的生命週期
  • 前臺切換到後臺,而後再回到前臺時 Activity 的生命週期
  • 彈出 Dialog 的時候按 Home 鍵時 Activity 的生命週期
  • 兩個 Activity 之間跳轉時的生命週期
  • 下拉狀態欄時 Activity 的生命週期
  • Activity 與 Fragment 之間生命週期比較?
  • Activity 的四種 LaunchMode(啓動模式)的區別?
  • Activity 狀態保存與恢復?
  • Fragment 各類狀況下的生命週期?
  • Activity 和 Fragment 之間怎麼通訊, Fragment 和 Fragment 怎麼通訊?
  • Service 的生命週期?
  • Service 的啓動方式?
  • Service 與 IntentService 的區別?
  • Service 和 Activity 之間的通訊方式?
  • 對 ContentProvider 的理解?
  • ContentProvider、ContentResolver、ContentObserver 之間的關係?
  • 對 BroadcastReceiver 的瞭解?
  • 廣播的分類?使用方式和場景?
  • 動態廣播和靜態廣播有什麼區別?
  • AlertDialog、popupWindow、Activity 之間的區別?
  • Application 和 Activity 的 Context 之間的區別?
  • Android 屬性動畫特性?
  • 請列舉 Android 中常見的佈局(Layout)類型,並簡述其用法,以及排版效率。【獵豹移動】 LinearLayout、RelativeLayout、FrameLayout 的特性對比及使用場景?
  • 對 SurfaceView 的瞭解?
  • Serializable 和 Parcelable 的區別?
  • Android 中數據存儲方式有哪些?
  • 屏幕適配的處理技巧都有哪些?
  • Android 各個版本 API 的區別?
  • 動態權限適配方案,權限組的概念?
  • 爲何不能在子線程更新 UI?
  • ListView 圖片加載錯亂的原理和解決方案?
  • 對 RecycleView 的瞭解?
  • Recycleview 和 ListView 的區別?
  • RecycleView 實現原理?
  • Android Manifest 的做用與理解?
  • 多線程在 Android 中的使用?
  • 區別 Animation 和 Animator 的用法,概述實現原理?【獵豹移動】

高級

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

混合開發

  • 混合開發的方式?各自優缺點和使用場景?
  • Hybird
  • React Native
  • Weex
  • Flutter
  • Dart
  • 快應用

Framework

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

性能優化

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

Gradle

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

Kotlin

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

網絡技術

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

數據結構與算法

數據結構

  • 簡述常見的數據結構?
  • 堆的結構?
  • 樹、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 解析器(能夠經過正則提升速度)?

人事相關

常見套路

若是有遇到如下這些狀況,你能夠繼續投簡歷:git

項目介紹

github.com/android-exc…github

全部的面試題都放在 Android-Interview 項目上,該項目是由知名大廠 Android 專家工程師領導組織,我與多位 Android 大佬共同維護的。面試

該項目持續更新,歡迎你們 Star,若是有更優質的面試題歡迎聯繫我提交。算法

個人 GitHub

github.com/jeanboydev/…數據庫

個人公衆號

歡迎你「掃一掃」下面的二維碼,關注個人公衆號,能夠接受最新的文章推送,有豐厚的抽獎活動和福利等着你哦!😍編程

Android波斯灣

若是你有什麼疑問或者問題,能夠 點擊這裏 提交 issue,也能夠發郵件給我 jeanboy@foxmail.com設計模式

同時歡迎你 數組

Android技術進階:386463747
來一塊兒交流學習,羣裏有不少大牛和學習資料,相信必定能幫助到你!
相關文章
相關標籤/搜索