2019春·Android面試指南

12月份辭職,我的如意算盤是年前面一下定下來,然后休息,年后入職~~美滋滋!約面幾家發現現在要求都好高啊,技術深度源碼架構級,小紅書、猿輔導每一面都有算法,算法不過,就止步了。所以就踏踏實實的準備了,年后回來面了一下,最后拿了三家的offer,在這給大家分享一些經驗!我覺得很多同學其實技術都是不錯的,就是面試的話術上可能表述的不夠清楚有條理,所以可能這個面經更偏重與幫大家總結面試時回答的重點,沒有特別具體的答案,如果有哪些問題,搞不清楚答案的,可以留言我會私信解答!

有的面試官可能會很客氣,說先問一下基礎哈,如果你只答基礎,那你就太天真了!一定要有延伸~有深度思考~有拓展~,不要給一個合理但是不出彩的答案,一定要給一個有條理的全面的優秀的答案。

一 、View相關

1.自定義View

合理的答案:自定義一個View,需要考慮構造方法,onMeasure方法,onSizechanged(),onLayout,onDraw。

優秀的答案:Android中有幾種自定義View,有繼承View的,有繼承ViewGroup的,有繼承特定View的,有繼承特定ViewGroup的,然后每一種我們都需要重寫哪些方法,為什么有的要重寫measure方法等。

面試官延伸:getMeasureWidth 和 getWidth的區別?view的invalidate和requestLayout區別?

2.View的繪制

合理的答案:onMeasure()+? onLayout() + onDraw() 調用順序,以及父View和子View各個方法在做什么。

優秀的答案:View的繪制從哪里開始的?(加分點可以不說)+繪制基礎+自定義View時需要注意的+自己遇到過的坑/在View的繪制流程中有哪些可以優化的點(或需要注意的點)

面試官延伸:LinearLayout和RelativeLayout 測量的區別,多次測量都在測什么?有weight的時候,怎么測量?

3.觸摸反饋

合理的答案:涉及到哪些方法,調用順序,這個部分只要看過應該都能說出來,就是別說的亂了。

優秀的答案:觸摸反饋的過程中涉及到哪些角色,比如Activity 、ViewGroup、View,他們都負責做什么,他們接收到不同的事件都做了哪些處理。區分Down事件和Move /Up事件,分別描述。

面試官延伸:滑動沖突? scrollView里面有一個button,然后按住button向上滑,講述事件傳遞過程?按住一個button,然后手指移到別處,click事件還能不能響應?

4.ListView RecyclerView

合理的答案:兩者使用上的區別

優秀的答案:使用上的區別+緩存機制的區別(源碼)

面試官延伸:如何優化

二、Handler的消息處理機制相關

1、ThreadLocal工作原理

合理的答案:作用域+怎么存?

優秀的答案:在哪些情況下用+java 的和Android的有什么區別(加分點)+優點(如果沒有ThreadLocal,我們就要。。。)+具體應用(looper或者其他應用的實例)

面試官延伸:ThreadLocal和使用synchronized有什么區別?

2、Handler工作原理

合理的答案:handler looper message都負責什么,然后handler.sendMessage之后哪些方法被調用了,最后handler怎么收到的消息。一定要講源碼?。。?/p>

優秀的答案:handler是負責線程切換的,結合具體調用源碼,講述怎么切換的,先講UI和非UI,再講子線程使用handler和主線程有什么區別。

面試官延伸:一個線程能否創建多個Handler,Handler跟Looper之間的對應關系?looper.loop為什么沒有阻塞主線程?子線程的looper.loop()之后的語句嗎還會被執行嗎?handler的postDelayed方法是在哪個線程等待?View的post方法實現原理?

三、多線程相關

1、volatile關鍵字作用

合理的答案:保證可見性,禁止指令重排

優秀的答案:jvm內存模型+線程安全(原子性、可見性、有序性)+volatile保證了哪個

2、synchronized原理及使用

合理的答案:保證可見性和有序性

優秀的答案:jvm內存模型+線程安全(原子性、可見性、有序性)+synchronized保證了哪個+底層如何實現(monitor)

面試官延伸:類鎖和方法鎖的區別?與Lock的區別?

3、Android實現多線程的方式

合理的答案:thread 、runnable、線程池等

優秀的答案:以上加上適用的場景+幾種線程池的分析

面試官延伸:sleep wait區別?生產者消費者(代碼實現)死鎖(代碼實現)

四、java相關

1、垃圾回收

合理的答案:什么樣的東西是垃圾,怎么回收

優秀的答案:jvm內存模型,GC roots? ,垃圾回收算法及怎么選擇,Android的Dalvik和ART 在垃圾回收上有什么不同?

面試官延伸:內存泄漏?ooM問題的排查?垃圾回收在哪個線程?

2、類加載器

合理的答案:雙親委托 加載過程

優秀的答案:java有幾種類加載器,加載過程,Android 幾種類加載器,加載過程,為什么要設計成這種委托模式?JVM在搜索類的時候,又是如何判定兩個class是相同的呢?

面試官延伸:插件化、熱更新(最好還能擴展除了類加載以外的其他的熱更新方式)

3、動態代理 注解 反射

合理的答案:解釋概念

優秀的答案:解釋概念加上比如動態代理在Retrofit當中的應用 ,自定義注解,反射為什么耗性能

面試官延伸:注解如何實現一個findViewById

4、泛型

合理的答案:解釋概念

優秀的答案:為何引入泛型+泛型擦除+泛型邊界

面試官延伸:一般會手寫代碼考你對泛型擦除和邊界的理解

5、數據結構(別的不會HashMap也要會的熟練的仿佛是自己寫的)

合理的答案:數組+鏈表

優秀的答案:結構+put元素如何實現+擴容+size()

面試官延伸:ArrayMap和SparseArray的改進?是不是一定比HashMap好?是查找算法好還是結構比hashmap合理?ConcurrentHashMap的原理?(此處坑多,不同的JDK版本結構不一樣)

五、優化和設計相關

1、優化相關

合理的答案:網上也很多文章,很多優化點,就怕說不全。

優秀的答案:其實Android的優化涉及的方面比較多,啟動優化、內存優化、布局優化、卡頓優化、電量優化、網絡優化等,我主要負責過哪部分的優化。。。然后,項目原來。。。優化的目標。。。,我們在線下如何排查問題,用了哪些工具,我們在線上怎么監控,我們怎么保持優化的長期效果等

面試官延伸:這個部分可能會問,你們優化后的具體數值體現?

2、設計相關

這個部分通常都是加分項,可以參照看過的網絡框架、圖片框架等的結構進行設計。比如一個網絡的話,肯定要考慮它的協議層,還有其他負責連接管理和線程管理的基礎組件等。

六、開源框架相關

1、網絡框架

合理的答案:okhttp retrofit volley如何使用

優秀的答案:源碼級別,okhttp(攔截器鏈的每個攔截器都負責什么+具體應用)retrofit(動態代理+適配器等挖掘里面用的好的編程思想和設計模式)volley我不熟,參考前兩個。。。

面試官延伸:如何給某些特定域名的url增加header?https?

2、圖片框架

合理的答案:對比Glide 和 Picasso 和Fresco,下載圖片的方式,緩存機制,加載到內存的機制都有什么不同。

優秀的答案:以上+深入一個框架的源碼,進行分析,比如Fresco的MVC、Drawable層次及繪制,內存緩存、硬盤緩存、職責鏈模式、對象池、自定義計數引用等

面試官延伸:如果你設計一個圖片庫?


以上是我在面試過程中出現率比較高的部分,如果大家有遇到過比較好的面試題,可以留言,我在整理補充在后面,先這樣,希望大家都能在面試中真正發揮出自己的真正水平~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數? 在 Jav...
    侯蛋蛋_閱讀 2,507評論 1 4
  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,142評論 1 32
  • 基礎 不管是Android基礎還是Java基礎以及常見的數據結構,這些是無原則地必須要熟練掌握的,尤其是非計算機專...
    JxMY閱讀 2,808評論 2 48
  • 在一個方法內部定義的變量都存儲在棧中,當這個函數運行結束后,其對應的棧就會被回收,此時,在其方法體中定義的變量將不...
    Y了個J閱讀 4,445評論 1 14
  • 我從十六歲開始拍電影,在我的思維里沒有主、配角之分,在我的本子上我從來都是中心! 希望在每一個年齡段都有閃光的、別...
    愛麗絲潼潼閱讀 72評論 0 0