又到年末了,每到這個時候,咱們都會慢慢反思,這一年都作了什麼?有什麼進步?年初的計劃都實現了嗎?明年年初有跳槽的底氣了嗎?何況今年的互聯網環境太差,須要本身有足夠的知識儲備,纔可以應對這凌冽的寒風。java
本文主要是整理了中高級安卓須要會的(或者說面試被頻繁問到的內容),主要做爲參考大綱,以後會陸續更新每一個詳細部分,整理成爲了一份完整的983頁的PDF。供你們參考,互相學習。供你們參考,互相學習。
更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。)
能夠點擊關於我聯繫我獲取完整PDF或者互相交流
(VX:mm14525201314)git
須要瞭解其實現原理,還要靈活運用,如:本身實現 LinkedList、兩個棧實現一個隊列,數組實現棧,隊列實現棧等。
HashMap、HashTable 和 CurrentHashMap 的核心區別(併發),其次內部數據結構的實現、擴容、存取操做,再深一點 哈希碰撞,哈希計算,哈希映射,爲何是頭插法,擴容爲何是 2 的冪次等。github
JVM 類加載機制、垃圾回收算法對比、Java 虛擬機結構面試
當你講到分代回收算法的時候,難免會被追問到新生對象是怎麼從年輕代到老年代的,以及能夠做爲 root 結點的對象有哪些兩個問題。算法
一、談談對 JVM 的理解?
二、JVM 內存區域,開線程影響哪塊區域內存?
三、對 Dalvik、ART 虛擬機有什麼瞭解?對比?sql
ART 的機制與 Dalvik 不一樣。在Dalvik下,應用每次運行的時候,字節碼都須要經過即時編譯器(just in time ,JIT)轉換爲機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,字節碼就會預先編譯成機器碼,極大的提升了程序的運行效率,同時減小了手機的耗電量,使其成爲真正的本地應用。這個過程叫作預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啓動(首次)和執行都會變得更加快速。數據庫
優勢:編程
缺點:設計模式
四、垃圾回收機制和調用 System.gc()的區別?數組
線程有哪些狀態,哪些鎖,各類鎖的區別
併發編程:
synchronized 和 volatile 、ReentrantLock 、CAS 的區別
synchronized 修飾實例方法和修飾靜態方法有啥不同。
sleep 、wait、yield 的區別,wait 的線程如何喚醒它
計算機網絡部分:
一、TCP 有哪些狀態
二、三次握手、四次揮手。爲啥不是三次不是兩次
三、HTTPS 和 HTTP 的區別,HTTPS 2.0 3.0?
四、瀏覽器輸入一個 URL 按下回車網絡傳輸的流程?
五、問的深一點的可能涉及到網絡架構,每層有什麼協議,FTP 相關原理,例:TCP 創建鏈接後,發包頻率是怎麼樣的?
一、生產者模式和消費者模式的區別?
二、單例模式雙重加鎖,爲何這樣作?
三、知道的設計模式有哪些?
四、項目中經常使用的設計模式有哪些?
五、手寫生產者、消費者模式。
六、手寫觀察者模式代碼。
七、適配器模式、裝飾者模式、外觀模式的異同?
八、談談對 java 狀態機的理解。
九、談談應用更新(灰度、強制更新、分區更新?)
強引用、軟引用、弱引用、虛引用的區別以及使用場景。
強引用置爲 null,會不會被回收?
稍微問的深一些的面試官會和內存泄漏檢測原理以及垃圾回收糅雜在一塊兒。
問到泛型、泛型擦除、通配符相關的東西
自定義 View
一、ViewGroup 繪製順序 (例:自定義 ViewGroup 如何實現 FlowLayout?如何實現 FlowLayout 調換順序)
二、 自定義 View 如何實現打桌球效果;
三、 自定義 View 如何實現拉弓效果,貝瑟爾曲線原理實現?
2. 事件攔截分發
事件分發已經不是直接讓你講了,會給你具體的場景,好比 A 嵌套 B ,B 嵌套 C,從 C 中心按下,一下滑出到 A,事件分發的過程,這裏面確定會有 ACTION_CANCEL 的相關調用時機。
(1)網絡:API 優化、流量優化、弱網優化
(2)**內存 :**OOM 處理、內存泄漏、內存檢測、分析、Bitmap 優化 **LeakCanary 原理,爲何檢測內存泄漏須要兩次?**
(3)繪製
(4)**電量:** WeakLock 機制、JobScheduler 機制 (5)**APK瘦身** (APK 瘦身是怎麼作的,只用 armabi-v7a 沒有什麼問題麼? APK 瘦身這個基本是 100% 被面試問到,多是我簡歷上提到的緣由。) (6)**內存抖動** (7)**內存泄漏** (8)**卡頓**{如何檢測卡頓,卡頓原理是什麼,怎麼判斷頁面響應卡頓仍是邏輯處理形成的卡頓} **BlockCanary** 的原理 (9)**性能優化:** 佈局優化、過分渲染處理、ANR 處理、監控、埋點、Crash 上傳。 (10)**啓動優化**
冷啓動什麼的確定是基礎,後續應該還有的是懶加載,丟線程池同步處理,須要注意這裏可能會有的坑是,丟線程池如何知道所有完成。
問題:
一、啓動頁白屏及黑屏解決?
二、啓動太慢如何解決?
三、啓動崩潰捕捉?
四、Https 請求慢的解決辦法(DNS、攜帶數據、直接訪問 IP)
5丶 緩存本身如何實現(LRUCache 原理)
6丶 圖形圖像相關:OpenGL ES 管線流程、EGL 的認識、Shader 相關
7丶 SurfaceView、TextureView、GLSurfaceView 區別及使用場景
8丶. 動畫、差值器、估值器
屬性動畫、補間動畫、幀動畫的區別和使用場景
9丶 MVC、MVP、MVVM
相互間的區別和各類使用場景,如何選擇適合本身的開發架構。
10丶 Handler、ThreadLocal、AsyncTask、IntentService 原理及應用
Handler 機制原理,IdleHandler 何時調用。
12丶 Gradle(Groovy 語法、Gradle 插件開發基礎)
11丶 熱修復、插件化
(一、談談對 ClassLoader 的理解 二、雙親委託機制的好處 三、自定義 ClassLoader 四、插件化爲何會出現,如何代碼加載,資源加載,代理 Hook)
12丶 Activity 生命週期;
13丶 Android 的 4 大啓動模式,注意 onNewIntent() 的調用。
14丶 講講 Android 的四大組件;
15丶 組件化架構思路
一、如何從一個老項目一步步實現組件化,主要問思路,考察架構能力和思考能力。(須要考慮不少,每一步作什麼,順序很重要) 二、組件化和模塊化的理解與區別?
16丶 系統打包流程
17丶 Android 有哪些存儲數據的方式。
18丶 SharedPrefrence 源碼和問題點;
19丶 sqlite 相關
一、sqlite 升級,增長字段的語句 二、數據庫框架對比和源碼分析 三、數據庫優化及數據遷移問題 四、getWritableDatabase 和 getReadableDatabase 的區別
20丶 ListView 和 RecyclerView 區別?RecyclerView 有幾層緩存,如何讓兩個 RecyclerView 共用一個緩存?
一、RecycleView 如何進行局部刷新。 二、性能優化。
21丶 如何判斷一個 APP 在前臺仍是後臺?
22丶 如何作應用保活?全家桶原理?
23丶 混合開發
一、 Hybrid 作過嗎? **例**:Android 經過WebView調用 JS 代碼 **例**:JS 經過WebView調用 Android 代碼; 二、Hybrid 通訊原理是什麼,有作研究嗎? 三、說說你用過的混合開發技術有哪些?各有什麼優缺點?
Binder 機制(IPC、AIDL 的使用)
(講講 Linux 上的 IPC 通訊,Binder 有什麼優點,Android 上有哪些多進程通訊機制?)
一、項目中碰見了什麼多進程場景?
二、AIDL 是什麼?解決了什麼問題?
三、談談對進程共享和線程安全的認知?
四、什麼是協程?
2. EventBus
3. LeakCanary
4. ARouter
重點: Router 原理,如何實現組件間的通訊,組件化平級調用數據的方式。
5. 插件化(不一樣插件化機制原理與流派,優缺點。侷限性)
6. 熱修復
7. RXJava
(RxJava 的線程切換原理)
8. Retrofit
(Retrofit 在 OkHttp 上作了哪些封裝?動態代理和靜態代理的區別,是怎麼實現的)
9. OkHttp 和 Volley 的區別。
一、OkHttp 源碼,網絡緩存
二、若是從網絡加載一個 10M 的圖片,說下注意事項 三、安卓爲啥要加簽名機制
請查看完整的PDF版
(更多完整項目下載。未完待續。源碼。圖文知識後續上傳github。)
能夠點擊關於我聯繫我獲取完整PDF
(VX:mm14525201314)