Android 中高級面試必知必會

又到年底了,每到這個時候驰唬,我們都會慢慢反思顶岸,這一年都做了什么?有什么進(jìn)步叫编?年初的計劃都實現(xiàn)了嗎辖佣?明年年初有跳槽的底氣了嗎?況且今年的互聯(lián)網(wǎng)環(huán)境太差搓逾,需要自己有足夠的知識儲備卷谈,才能夠應(yīng)對這凌冽的寒風(fēng)。

本文主要是整理了中高級安卓需要會的(或者說面試被頻繁問到的內(nèi)容)霞篡,主要作為參考大綱世蔗,之后會陸續(xù)更新每個詳細(xì)部分,供大家參考朗兵,互相學(xué)習(xí)污淋。

1、Java 相關(guān)

  1. 容器(HashMap余掖、HashSet寸爆、LinkedList、ArrayList、數(shù)組等)

需要了解其實現(xiàn)原理赁豆,還要靈活運用仅醇,如:自己實現(xiàn) LinkedList、兩個棧實現(xiàn)一個隊列魔种,數(shù)組實現(xiàn)棧析二,隊列實現(xiàn)棧等。

HashMap节预、HashTable 和 CurrentHashMap 的核心區(qū)別(并發(fā))叶摄,其次內(nèi)部數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)、擴容心铃、存取操作准谚,再深一點 哈希碰撞,哈希計算去扣,哈希映射柱衔,為什么是頭插法,擴容為什么是 2 的冪次等愉棱。

參考鏈接

JAVA容器-自問自答學(xué)HashMap
什么是HashMap唆铐?
從源碼角度認(rèn)識ArrayList,LinkedList與HashMap

  1. 內(nèi)存模型

參考鏈接

理解Java內(nèi)存模型
你了解Java內(nèi)存模型么(Java7奔滑、8艾岂、9內(nèi)存模型的區(qū)別)

  1. 垃圾回收算法(JVM)
JVM 類加載機制、垃圾回收算法對比朋其、Java 虛擬機結(jié)構(gòu)

當(dāng)你講到分代回收算法的時候王浴,不免會被追問到新生對象是怎么從年輕代到老年代的,以及可以作為 root 結(jié)點的對象有哪些兩個問題梅猿。

1氓辣、談?wù)剬?JVM 的理解?
2、JVM 內(nèi)存區(qū)域袱蚓,開線程影響哪塊區(qū)域內(nèi)存钞啸?
3、對 Dalvik喇潘、ART 虛擬機有什么了解体斩?對比?

ART 的機制與 Dalvik 不同颖低。在Dalvik下絮吵,應(yīng)用每次運行的時候,字節(jié)碼都需要通過即時編譯器(just in time 忱屑,JIT)轉(zhuǎn)換為機器碼源武,這會拖慢應(yīng)用的運行效率扼褪,而在ART 環(huán)境中想幻,應(yīng)用在第一次安裝的時候粱栖,字節(jié)碼就會預(yù)先編譯成機器碼,極大的提高了程序的運行效率脏毯,同時減少了手機的耗電量闹究,使其成為真正的本地應(yīng)用。這個過程叫做預(yù)編譯(AOT,Ahead-Of-Time)食店。這樣的話渣淤,應(yīng)用的啟動(首次)和執(zhí)行都會變得更加快速。

優(yōu)點:

  • 系統(tǒng)性能的顯著提升吉嫩。
  • 應(yīng)用啟動更快价认、運行更快、體驗更流暢自娩、觸感反饋更及時用踩。
  • 更長的電池續(xù)航能力。
  • 支持更低的硬件忙迁。

缺點:

  • 機器碼占用的存儲空間更大脐彩,字節(jié)碼變?yōu)闄C器碼之后,可能會增加10%-20%(不過在應(yīng)用包中姊扔,可執(zhí)行的代碼常常只是一部分惠奸。比如最新的 Google+ APK 是 28.3 MB,但是代碼只有 6.9 MB恰梢。)
  • 應(yīng)用的安裝時間會變長佛南。

4、垃圾回收機制和調(diào)用 System.gc()的區(qū)別嵌言?

參考鏈接

Java虛擬機(JVM)你只要看這一篇就夠了嗅回!

  1. 類加載過程(需要多看看,重在理解呀页,對于熱修復(fù)和插件化比較重要)
  2. 反射
  3. 多線程和線程池
線程有哪些狀態(tài)妈拌,哪些鎖,各種鎖的區(qū)別

并發(fā)編程:
synchronized 和 volatile 蓬蝶、ReentrantLock 尘分、CAS 的區(qū)別

synchronized 修飾實例方法和修飾靜態(tài)方法有啥不一樣。

sleep 丸氛、wait培愁、yield 的區(qū)別,wait 的線程如何喚醒它

  1. HTTP缓窜、HTTPS定续、TCP/IP谍咆、Socket通信、三次握手四次揮手過程
計算機網(wǎng)絡(luò)部分:
1私股、TCP 有哪些狀態(tài)
2摹察、三次握手、四次揮手倡鲸。為啥不是三次不是兩次
3供嚎、HTTPS 和 HTTP 的區(qū)別,HTTPS 2.0 3.0峭状?
4克滴、瀏覽器輸入一個 URL 按下回車網(wǎng)絡(luò)傳輸?shù)牧鞒蹋?5、問的深一點的可能涉及到網(wǎng)絡(luò)架構(gòu)优床,每層有什么協(xié)議劝赔,F(xiàn)TP 相關(guān)原理,例:TCP 建立連接后胆敞,發(fā)包頻率是怎么樣的着帽?

  1. 設(shè)計模式(六大基本原則、項目中常用的設(shè)計模式竿秆、手寫單例等)
1启摄、生產(chǎn)者模式和消費者模式的區(qū)別?
2幽钢、單例模式雙重加鎖歉备,為什么這樣做?
3匪燕、知道的設(shè)計模式有哪些蕾羊?
4、項目中常用的設(shè)計模式有哪些帽驯?
5龟再、手寫生產(chǎn)者、消費者模式尼变。
6利凑、手寫觀察者模式代碼。
7嫌术、適配器模式哀澈、裝飾者模式、外觀模式的異同度气?
8割按、談?wù)剬?java 狀態(tài)機的理解。
9磷籍、談?wù)剳?yīng)用更新(灰度适荣、強制更新现柠、分區(qū)更新?)
  1. 斷點續(xù)傳
  2. Java 四大引用
強引用弛矛、軟引用够吩、弱引用、虛引用的區(qū)別以及使用場景汪诉。

強引用置為 null废恋,會不會被回收?

稍微問的深一些的面試官會和內(nèi)存泄漏檢測原理以及垃圾回收糅雜在一起扒寄。

  1. Java 的泛型,<? super T> 和 <? extends T> 的區(qū)別
問到泛型拟烫、泛型擦除该编、通配符相關(guān)的東西
  1. final、finally硕淑、finalize 的區(qū)別
  2. 接口课竣、抽象類的區(qū)別

2、Android 相關(guān)

  1. 自定義 View
    1置媳、ViewGroup 繪制順序 (例:自定義 ViewGroup 如何實現(xiàn) FlowLayout于樟?如何實現(xiàn) FlowLayout 調(diào)換順序)
    2、 自定義 View 如何實現(xiàn)打桌球效果拇囊;
    3迂曲、 自定義 View 如何實現(xiàn)拉弓效果,貝瑟爾曲線原理實現(xiàn)寥袭?

(參考鏈接:自定義View路捧,有這一篇就夠了 - 簡書Android 自定義 View

  1. 事件攔截分發(fā)(Android事件分發(fā)機制传黄,大表哥帶你慢慢深入 - 簡書 )
事件分發(fā)已經(jīng)不是直接讓你講了杰扫,會給你具體的場景,比如 A 嵌套 B 膘掰,B 嵌套 C章姓,從 C 中心按下,一下滑出到 A识埋,事件分發(fā)的過程凡伊,這里面肯定會有 ACTION_CANCEL 的相關(guān)調(diào)用時機。
  1. 解決過的一些性能問題惭聂,在項目中的實際運用窗声。
  2. 性能優(yōu)化工具
    (TraceView、Systrace辜纲、調(diào)試 GPU 過度繪制 & GPU 呈現(xiàn)模式分析笨觅、Hierarchy Viewer拦耐、MAT、Memory Monitor & Heap Viewer & Allocation Tracker 等)
  1. 性能優(yōu)化 (講講你自己項目中做過的性能優(yōu)化)
    (1)網(wǎng)絡(luò):API 優(yōu)化见剩、流量優(yōu)化杀糯、弱網(wǎng)優(yōu)化
    (2)內(nèi)存:OOM 處理、內(nèi)存泄漏苍苞、內(nèi)存檢測固翰、分析、Bitmap 優(yōu)化
    LeakCanary 原理羹呵,為什么檢測內(nèi)存泄漏需要兩次骂际?
    (3)繪制
    (4)電量:WeakLock 機制、JobScheduler 機制
    (5)APK 瘦身
    (APK 瘦身是怎么做的冈欢,只用 armabi-v7a 沒有什么問題么歉铝?
    APK 瘦身這個基本是 100% 被面試問到,可能是我簡歷上提到的原因凑耻。)
    (6)內(nèi)存抖動
    (7)內(nèi)存泄漏
    (8)卡頓 {如何檢測卡頓太示,卡頓原理是什么,怎么判斷頁面響應(yīng)卡頓還是邏輯處理造成的卡頓}
    BlockCanary 的原理
    (9)性能優(yōu)化:布局優(yōu)化香浩、過度渲染處理类缤、ANR 處理、監(jiān)控邻吭、埋點餐弱、Crash 上傳。
    (10)啟動優(yōu)化
冷啟動什么的肯定是基礎(chǔ)镜盯,后續(xù)應(yīng)該還有的是懶加載岸裙,丟線程池同步處理,需要注意這里可能會有的坑是速缆,丟線程池如何知道全部完成降允。

問題
1、啟動頁白屏及黑屏解決艺糜?
2剧董、啟動太慢如何解決?
3破停、啟動崩潰捕捉翅楼?
4、Https 請求慢的解決辦法(DNS真慢、攜帶數(shù)據(jù)毅臊、直接訪問 IP)

  1. 緩存自己如何實現(xiàn)(LRUCache 原理)
  2. 圖形圖像相關(guān):OpenGL ES 管線流程、EGL 的認(rèn)識黑界、Shader 相關(guān)
  3. SurfaceView管嬉、TextureView皂林、GLSurfaceView 區(qū)別及使用場景
  4. 動畫、差值器蚯撩、估值器Android中的View動畫和屬性動畫 - 簡書础倍、Android 動畫 介紹與使用
屬性動畫、補間動畫胎挎、幀動畫的區(qū)別和使用場景
  1. MVC沟启、MVP、MVVM
相互間的區(qū)別和各種使用場景犹菇,如何選擇適合自己的開發(fā)架構(gòu)德迹。
  1. Handler、ThreadLocal项栏、AsyncTask浦辨、IntentService 原理及應(yīng)用
Handler 機制原理,IdleHandler 什么時候調(diào)用沼沈。
  1. Gradle(Groovy 語法、Gradle 插件開發(fā)基礎(chǔ))

  2. 熱修復(fù)币厕、插件化
    (1列另、談?wù)剬?ClassLoader 的理解
    2、雙親委托機制的好處
    3旦装、自定義 ClassLoader
    4页衙、插件化為什么會出現(xiàn),如何代碼加載阴绢,資源加載店乐,代理 Hook)

  3. Activity 生命周期

  4. Android 的 4 大啟動模式呻袭,注意 onNewIntent() 的調(diào)用眨八。

  5. 講講 Android 的四大組件;

  6. 組件化架構(gòu)思路
    1左电、如何從一個老項目一步步實現(xiàn)組件化廉侧,主要問思路,考察架構(gòu)能力和思考能力篓足。(需要考慮很多段誊,每一步做什么,順序很重要)
    2栈拖、組件化和模塊化的理解與區(qū)別连舍?

  7. 系統(tǒng)打包流程

  8. Android 有哪些存儲數(shù)據(jù)的方式。

  9. SharedPrefrence 源碼和問題點涩哟;

  10. sqlite 相關(guān)
    1索赏、sqlite 升級盼玄,增加字段的語句
    2、數(shù)據(jù)庫框架對比和源碼分析
    3参滴、數(shù)據(jù)庫優(yōu)化及數(shù)據(jù)遷移問題
    4强岸、getWritableDatabase 和 getReadableDatabase 的區(qū)別

  11. ListViewRecyclerView 區(qū)別?RecyclerView 有幾層緩存砾赔,如何讓兩個 RecyclerView 共用一個緩存蝌箍?
    1、RecycleView 如何進(jìn)行局部刷新暴心。
    2妓盲、性能優(yōu)化。

  12. 如何判斷一個 APP 在前臺還是后臺专普?

  13. 如何做應(yīng)用泵醭模活?全家桶原理檀夹?

  14. 混合開發(fā)
    1筋粗、 Hybrid 做過嗎? :Android 通過WebView調(diào)用 JS 代碼 :JS 通過WebView調(diào)用 Android 代碼炸渡;
    2娜亿、Hybrid 通信原理是什么,有做研究嗎蚌堵?
    3买决、說說你用過的混合開發(fā)技術(shù)有哪些?各有什么優(yōu)缺點吼畏?

3督赤、Android Framework

  1. AMS 、PMS
  2. Activity 啟動流程泻蚊,App 啟動流程
  3. Binder 機制(IPC躲舌、AIDL 的使用)
    (講講 Linux 上的 IPC 通信,Binder 有什么優(yōu)勢藕夫,Android 上有哪些多進(jìn)程通信機制?)
    1孽糖、項目中遇見了什么多進(jìn)程場景?
    2毅贮、AIDL 是什么办悟?解決了什么問題?
    3滩褥、談?wù)剬M(jìn)程共享和線程安全的認(rèn)知病蛉?
    4、什么是協(xié)程?
  4. 為什么使用 Parcelable铺然,好處是什么俗孝?
  5. Android 圖像顯示相關(guān)流程,Vsync 信號等

4魄健、三方源碼

  1. Glide :加載赋铝、緩存、LRU 算法
    (如何自己設(shè)計一個大圖加載框架)
    (LRUCache 原理)
  2. EventBus
  3. LeakCanary
  4. ARouter
重點:Router 原理沽瘦,如何實現(xiàn)組件間的通信革骨,組件化平級調(diào)用數(shù)據(jù)的方式。
  1. 插件化(不同插件化機制原理與流派析恋,優(yōu)缺點良哲。局限性)
  2. 熱修復(fù)
  3. RXJava
    (RxJava 的線程切換原理)
  4. Retrofit
    (Retrofit 在 OkHttp 上做了哪些封裝?動態(tài)代理和靜態(tài)代理的區(qū)別助隧,是怎么實現(xiàn)的)
  5. OkHttp 和 Volley 的區(qū)別筑凫。
    1、OkHttp 源碼并村,網(wǎng)絡(luò)緩存
    2巍实、如果從網(wǎng)絡(luò)加載一個 10M 的圖片,說下注意事項
    3哩牍、安卓為啥要加簽名機制

5蔫浆、算法與數(shù)據(jù)結(jié)構(gòu)

  1. 單鏈表:反轉(zhuǎn)、插入姐叁、刪除

  2. 雙鏈表:插入、刪除

  3. 手寫常見排序洗显、歸并排序外潜、堆排序

  4. 二叉樹前序、中序挠唆、后序遍歷

  5. 最大 K 問題

  6. 廣度处窥、深度優(yōu)先搜索算法

  7. 可以去刷一下 LeetCode ,對自己提升也會比較大。

  8. String 轉(zhuǎn) int玄组。
    核心算法就三行代碼滔驾,不過臨界條件很多,除了判空俄讹,還需要注意負(fù)數(shù)哆致、Integer 的最大最小值邊界等;

  9. 如何判斷一個單鏈表有環(huán)患膛?

  10. 鏈表翻轉(zhuǎn)摊阀;

  11. 快排;

  12. 100 億個單詞,找出出現(xiàn)頻率最高的單詞胞此。要求幾種方案臣咖;

  13. 鏈表每 k 位逆序;

  14. 鏡像二叉樹漱牵;

  15. 找出一個無序數(shù)組中出現(xiàn)超過一半次數(shù)的數(shù)字夺蛇;

  16. 計算二叉樹的最大深度,要求非遞歸算法酣胀。

  17. String 方式計算加法刁赦。

6、項目 & HR

  1. 項目開發(fā)中遇到的最大的一個難題和挑戰(zhàn)灵临,你是如何解決的截型。(95% 會問到)
  2. 說說你開發(fā)最大的優(yōu)勢點(95% 會問到)
  3. 你為什么會離開上家公司
  4. 你的缺點是什么?
  5. 你能給公司帶來什么效益儒溉?
  6. 你對未來的職業(yè)規(guī)劃宦焦?

下次更新內(nèi)容章節(jié)為 Java 中的集合,我會根據(jù)內(nèi)容多少決定分幾篇文章去講顿涣,大致內(nèi)容如我整理腦圖

為避免失聯(lián)或想第一時間查看我的文章更新波闹,可關(guān)注我的微信公眾號 KevenZheng ,之后會陸續(xù)更新上述目錄的內(nèi)容,敬請關(guān)注涛碑。

如需轉(zhuǎn)載精堕,請聯(lián)系我或注明出處!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒲障,一起剝皮案震驚了整個濱河市歹篓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揉阎,老刑警劉巖庄撮,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毙籽,居然都是意外死亡洞斯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門坑赡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烙如,“玉大人,你說我怎么就攤上這事毅否⊙翘” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵搀突,是天一觀的道長刀闷。 經(jīng)常有香客問我熊泵,道長,這世上最難降的妖魔是什么甸昏? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任顽分,我火速辦了婚禮,結(jié)果婚禮上施蜜,老公的妹妹穿的比我還像新娘卒蘸。我一直安慰自己,他們只是感情好翻默,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布缸沃。 她就那樣靜靜地躺著,像睡著了一般修械。 火紅的嫁衣襯著肌膚如雪趾牧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天肯污,我揣著相機與錄音翘单,去河邊找鬼。 笑死蹦渣,一個胖子當(dāng)著我的面吹牛哄芜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柬唯,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼认臊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锄奢?” 一聲冷哼從身側(cè)響起失晴,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拘央,沒想到半個月后师坎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡堪滨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕊温。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袱箱。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖义矛,靈堂內(nèi)的尸體忽然破棺而出发笔,到底是詐尸還是另有隱情,我是刑警寧澤凉翻,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布了讨,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏前计。R本人自食惡果不足惜胞谭,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望男杈。 院中可真熱鬧丈屹,春花似錦、人聲如沸伶棒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肤无。三九已至先蒋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宛渐,已是汗流浹背竞漾。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皇忿,地道東北人畴蹭。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像鳍烁,于是被迫代替她去往敵國和親叨襟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容