Android現(xiàn)在是越來越不好找工作了,并且未來還會(huì)更難,主要原因呢還是太卷,同樣是搞搞業(yè)務(wù)代碼,誰更熟練要誰,同樣的高工崗,誰對(duì)底層原理研究最深要誰,比如下面這些面試題,八股文越熟練越容易通過 Android 面試。
簡單講解一下Android技術(shù)面試中主要涉及的內(nèi)容有哪些。這些問題之前有整理過一份文檔匯總,把大廠高頻常問的問題都做了解析

Java基礎(chǔ)
面試Android崗位,Java基礎(chǔ)那是必問的。如果項(xiàng)目中使用kotlin比較多的話,可能還會(huì)問一些kotlin相關(guān)的問題。
Java, 作為一門基礎(chǔ)語言,考核的是應(yīng)聘者是否具備扎實(shí)的基本功。很多培訓(xùn)班或者非科班出身的人,經(jīng)常會(huì)栽在這一環(huán)節(jié)。一般這個(gè)環(huán)節(jié)的問題答不上來的話,基本上是提前結(jié)束了。
那么常見面試的Java基礎(chǔ)問題有哪些呢?下面我們簡單列舉一些供大家參考:
- Java集合類List,Map,Set相關(guān)的實(shí)現(xiàn)原理。
- Java線程池的實(shí)現(xiàn)原理和使用
- Java線程同步相關(guān)的知識(shí)點(diǎn)。
- Java鎖機(jī)制,以及死鎖產(chǎn)生的原因以及解決方案。
- Java反射、泛型、注解相關(guān)的知識(shí)點(diǎn)以及使用。
- Java類加載機(jī)制。
- Java虛擬機(jī)的資源回收機(jī)制以及算法。

以上基本上是面試Android崗位的常見考點(diǎn),所以我們必須重視對(duì)Java語言的學(xué)習(xí)和理解,即便你在平時(shí)工作中使用kotlin較多,也不能忽視對(duì)Java基礎(chǔ)知識(shí)的鞏固和學(xué)習(xí)。
設(shè)計(jì)模式
設(shè)計(jì)模式其本身其實(shí)也是屬于Java基礎(chǔ)范疇的,只不過部分大廠對(duì)設(shè)計(jì)模式的要求較高,所以會(huì)單獨(dú)擰出來進(jìn)行考察。
很多大廠都喜歡招那些對(duì)代碼有潔癖,有高追求的人進(jìn)來。在他們眼里,追求的并不是這個(gè)功能如何實(shí)現(xiàn),而是這個(gè)功能如何更好地實(shí)現(xiàn)。只要性能不佳或者擴(kuò)展性不夠強(qiáng)的話,結(jié)局基本上就是推翻重構(gòu)。
其實(shí)設(shè)計(jì)模式的考核因人而異,面試官并不會(huì)過于為難你,因?yàn)樵O(shè)計(jì)模式其本身就是個(gè)非常虛的東西,很多人即使是了解設(shè)計(jì)模式,在平時(shí)的工作中也不一定會(huì)使用它們。所以設(shè)計(jì)模式的考核更多的是加分項(xiàng),并不是必要項(xiàng),所以即使答不上來其實(shí)也是沒什么關(guān)系的。
但是如果你在簡歷中寫了"熟悉/精通常用的設(shè)計(jì)模式"的時(shí)候,那么你就要小心了,因?yàn)槟憧赡軐?huì)面臨一波直擊靈魂深處的拷問。
那么設(shè)計(jì)模式一般會(huì)考察哪些內(nèi)容呢?下面我們簡單列舉一些供大家參考:
- java設(shè)計(jì)模式的六大設(shè)計(jì)原則以及它們的關(guān)系。
- 單例模式、適配器模式、裝飾者模式、代理模式、外觀模式、策略模式、觀察者模式、責(zé)任鏈模式、命令模式、狀態(tài)模式、中介者模式。這十一種常用的設(shè)計(jì)模式是考核的重點(diǎn),你需要掌握它們的優(yōu)缺點(diǎn)以及使用的場景。
- 適配器模式,裝飾者模式,外觀模式它們之間的區(qū)別是什么。
- 代理模式、策略模式、狀態(tài)模式它們之間的區(qū)別是什么。
- 外觀模式、中介模式它們之間的區(qū)別是什么。
- 靜態(tài)代理和動(dòng)態(tài)代理的區(qū)別,什么場景使用,實(shí)現(xiàn)動(dòng)態(tài)代理的幾種方式。
- 簡單列舉幾個(gè)Android源碼中使用到設(shè)計(jì)模式的例子。
以上我只是簡單列舉了一些設(shè)計(jì)模式常見的考點(diǎn),因?yàn)樵O(shè)計(jì)模式的考核相對(duì)靈活,因此還是以實(shí)際應(yīng)用場景為主。
例如,面試官可能會(huì)問你:簡單列舉幾個(gè)你常用的設(shè)計(jì)模式,談?wù)勊鼈兊膬?yōu)缺點(diǎn)以及使用的場景。
這個(gè)時(shí)候,大多數(shù)做Android開發(fā)的人腦海里可能只剩下單例模式、觀察者模式這些個(gè)常常被他們?yōu)E用的設(shè)計(jì)模式。
這里我并不推薦大家說這兩種設(shè)計(jì)模式,為什么呢?因?yàn)檫@兩種設(shè)計(jì)模式并不能很好地詮釋設(shè)計(jì)模式的美。而且你要知道任何東西聽多了,人的心理是受不了的,這很容易導(dǎo)致面試官心態(tài)崩潰。
就拿我來說,只要一有人無腦回答單例模式或者觀察者模式的時(shí)候,我都會(huì)情不自禁地提高問題的難度。你要知道,就是一個(gè)簡簡單單的單例模式,我也能給你問到心態(tài)崩潰。
所以聽我的勸,不要一提到設(shè)計(jì)模式,你腦海里就只剩下單例模式或者觀察者模式,多了解了解其他設(shè)計(jì)模式,對(duì)你會(huì)有很大的幫助。
Android基礎(chǔ)
Android基礎(chǔ),不用說這是面試Android崗位必須要問的內(nèi)容。要是連這個(gè)都答不上來,基本你的面試就提前結(jié)束了。
Android基礎(chǔ)是任何Android面試都需要考核的內(nèi)容。不過這也是按級(jí)別而定,一般高級(jí)開發(fā)工程師的面試,Android基礎(chǔ)只是一筆帶過。
那么Android基礎(chǔ)有哪些呢?下面我們簡單列舉一些供大家參考:
- Handler機(jī)制以及相關(guān)知識(shí)。
- Activity和Fragment生命周期。
- Android四大組件相關(guān)的知識(shí)。
- Android進(jìn)程間通信的方式。
- Context相關(guān)的知識(shí)。
- Activity的啟動(dòng)模式。
- Android動(dòng)畫相關(guān)知識(shí)。
- Android自定義組件相關(guān)知識(shí)。
- Android事件分發(fā)機(jī)制以及觸摸事件沖突的處理。
- ANR產(chǎn)生的原因以及避免ANR的方式。
- 內(nèi)存泄漏產(chǎn)生的原因以及定位解決的方式。
- OOM產(chǎn)生的原因以及解決的方式。
- Android頁面渲染機(jī)制以及優(yōu)化方式。
- LinearLayout、FrameLayout、RelativeLayout和ConstraintLayout的理解和性能對(duì)比。
- Android各版本的特性。
- Android屏幕適配的技巧。
- MVC,MVP,MVVM的理解與實(shí)踐。
- Android的主題、樣式、屬性相關(guān)的內(nèi)容。
- JNI相關(guān)的知識(shí)。

以上內(nèi)容是作為一名合格Android開發(fā)工程師所必備的知識(shí)點(diǎn),也是常見的考點(diǎn),請(qǐng)務(wù)必每條都要清楚掌握,這樣你在面試過程中才能游刃有余。
Android源碼分析
Android源碼分析,算是要求較高的考核。不過這在大廠面試中非常普遍,因?yàn)楹芏啻髲S對(duì)Android源碼的分析和理解都有相當(dāng)高的要求。
那么常見的Android源碼分析有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.Android系統(tǒng)的啟動(dòng)流程分析。
- 2.APP啟動(dòng)的流程分析。
- 3.Activity的啟動(dòng)流程分析。
- 4.Zygote進(jìn)程的創(chuàng)建和啟動(dòng)流程分析。
- 5.Window窗口創(chuàng)建和加載的流程分析。
- 6.Dalvik和ART的理解。
- 7.RecyclerView的源碼分析。

閱讀源碼是一件相對(duì)枯燥的事情,如果平時(shí)工作中涉及不到的話就很難堅(jiān)持下去,因此需要非常強(qiáng)的毅力。不過話又說回來,如果你能夠熟練地掌握Android源碼的話,那么就非常有機(jī)會(huì)進(jìn)入大廠了。
Android進(jìn)階技能
這部分一般是對(duì)Android高級(jí)開發(fā)工程師的考核,主要涉及的點(diǎn)主要是一些性能優(yōu)化,技術(shù)細(xì)節(jié)方面的問題。
要想成為一名高級(jí)開發(fā)工程師,性能優(yōu)化以及架構(gòu)設(shè)計(jì)永遠(yuǎn)都是繞不開的話題。做技術(shù)如果只是廣而不深的話,是不可能成為一名高級(jí)開發(fā)工程師的。只有不斷提升自己的不可替代性,才能提高自己的價(jià)值。
那么常見的Android進(jìn)階技能有哪些呢?下面我們簡單列舉一些供大家參考:
- App穩(wěn)定性優(yōu)化。(crash、性能以及體驗(yàn)等)
- App啟動(dòng)速度優(yōu)化。
- App內(nèi)存優(yōu)化。
- App界面繪制優(yōu)化。
- App瘦身優(yōu)化。
- App安全優(yōu)化。
- 網(wǎng)絡(luò)請(qǐng)求優(yōu)化。
- WebView使用優(yōu)化。
- RecyclerView的緩存刷新優(yōu)化。
- AOP技術(shù)的原理和實(shí)踐。
- gradle腳本持續(xù)集成技術(shù)。
- App進(jìn)程?;?。

以上只是Android進(jìn)階技能的一小部分通用性技術(shù),除此之外還有很多細(xì)分領(lǐng)域相關(guān)的進(jìn)階技能??傊?,如果這項(xiàng)技術(shù)是你掌握而其他人普遍不了解的,那么它就屬于進(jìn)階技能。
新技術(shù)研究
Android這些年的技術(shù)發(fā)展基本上已經(jīng)趨向成熟,所以對(duì)于新技術(shù)的研究也并不是那么看中,可能面試官就是隨口問一下,想要知道你的學(xué)習(xí)欲望強(qiáng)不強(qiáng)罷了。
那么有什么新的技術(shù)可以在業(yè)余時(shí)間進(jìn)行研究呢?下面我們簡單列舉一些供大家參考:
- Android組件化
- Android插件化
- Android熱更新技術(shù)
- Android JetPack框架技術(shù)
- Kotlin開發(fā)技術(shù)
- compose聲明式UI技術(shù)
- Android Hook技術(shù)
- AOP技術(shù)
- 依賴注入技術(shù)IoC
- 跨平臺(tái)開發(fā)技術(shù):ReactNative、Flutter等。

上面的內(nèi)容,其實(shí)很多已經(jīng)算不上新技術(shù)了,如果你現(xiàn)在還不了解的話,那么你最好花點(diǎn)時(shí)間了解一下,否則我只能說你是真的out了。
開源項(xiàng)目源碼分析
開源項(xiàng)目源碼分析和Android源碼分析一樣,也是考核應(yīng)聘者對(duì)原理的理解。如果僅僅只是會(huì)使用而不對(duì)其原理加以了解的話,那么你也只能算是達(dá)到初級(jí)水平,這樣是無法進(jìn)入到大廠的。
那么開源項(xiàng)目的源碼分析我們應(yīng)該怎么做呢?首先我們需要帶著問題一點(diǎn)點(diǎn)閱讀源碼,搞清楚其內(nèi)部的實(shí)現(xiàn)邏輯,然后梳理出其大致的設(shè)計(jì)架構(gòu),畫出UML圖,最后總結(jié)出其中運(yùn)用到的設(shè)計(jì)模式和思想。
那么有哪些優(yōu)質(zhì)的開源項(xiàng)目值得我們?nèi)パ芯科湓创a呢?下面我們簡單列舉一些供大家參考:
- OkHttp
- Retrofit
- Glide
- LeakCanary
- RxJava
- ARouter
- EventBus
- ButterKnife
- GreenDao
- Dagger2
以上我列舉的基本上都是我們平時(shí)開發(fā)過程中經(jīng)常使用到的開源項(xiàng)目,認(rèn)真研究和分析他們的設(shè)計(jì)思想和精髓,并積極運(yùn)用到我們平時(shí)的編碼當(dāng)中去,可以讓我們的技術(shù)得到質(zhì)的飛躍!
算法
部分大廠對(duì)Android開發(fā)工程師的算法也是有一定要求的,這部分沒有什么好說的,打開LeetCode去多刷刷題就可以了。
雖說Android開發(fā)工程師也需要掌握一定的算法,不過和那些專業(yè)做算法的相比肯定是沒那么高的要求的,我們并不需要把LeetCode的每道題都刷一遍,只要把一些簡單和中等難度的題刷一遍就可以了。
那么常見的Android算法題有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.各類排序。(尤其二分法插入排序、歸并排序需要著重掌握其思想)
- 2.手寫反轉(zhuǎn)鏈表、鏈表復(fù)制、鏈表合并。
- 3.手寫隊(duì)列或者鏈表等數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。
- 4.字符串匹配、去重問題。
- 5.雙指針?biāo)惴▎栴}。
- 6.數(shù)組查重問題。
- 7.二叉樹的遍歷和序列化。
- 8.貪心算法相關(guān)問題。
一個(gè)好的算法可能極大地提升應(yīng)用的性能,如果你平時(shí)有心的話就會(huì)發(fā)現(xiàn)在Android源碼中也經(jīng)常能看到算法的身影,感興趣的可以閱讀一下SparseArray的源碼。
Android 工程師的競爭環(huán)境越來越激烈,但 Andorid 開發(fā)仍然是一個(gè)剛需的工種,行業(yè)對(duì)人才的需求從未終止,但與此同時(shí)也對(duì)我們提出了更高的要求。如果你仍然只是在日常開發(fā)過程中復(fù)制粘貼,或者仍以完成一個(gè)項(xiàng)目需求為唯一目的,只是掌握了如何去調(diào)用某個(gè) API 或者數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)某個(gè)功能,已經(jīng)不能算是合格的工程師了。
對(duì)于 Android 開發(fā)者來說,要成為優(yōu)秀的 Android 開發(fā)工程師,不只能夠讓你在工作中更加游刃有余,同樣會(huì)讓你在職業(yè)發(fā)展中面臨更多優(yōu)質(zhì)的機(jī)遇。而一個(gè)初中級(jí) Android 工程師在通往高級(jí)甚至是資深工程師的發(fā)展過程中,我認(rèn)為這份Android面試指導(dǎo)手冊(cè)中超過 90% 所有內(nèi)容都是你必須掌握,且無法繞過的。