面試斬獲貓眼Android崗Offer,我是怎樣準備Android技術面的知否?

a1322674015發表於2020-09-14

作者:哈登

前言

本篇文章給大家分享一下筆者面試的一些感受和經驗。

筆者從前期準備到所有面試結束,花費了差不多3個月的時間。真可謂“面試造航母,工作擰螺絲”,面試過程真的很累很辛苦。

筆者面了很多公司,最終拿下了貓眼Offer;

有面試交流群小夥伴問我是怎麼準備面試的,我也想談談我最近的一些想法和計劃,大家一起討論。因此寫下了這篇文章。

整體分為以下兩個方面:

  • 自我介紹 & 專案經驗
  • 知識儲備

自我介紹

1、結合招聘崗位,只講重點。
簡歷內容這麼多,實際的你,更有很多很多可以描述的東西。但時間有限,沒有面試官會聽你說個沒完。
根據你求職的崗位,說重點即可。
其實簡歷製作的原則,也是一樣。只是自我介紹時間更短,內容更精華。
2、有理有據,少說空話。
如果你說“自己學習能力強”,這就是一句假大空的話。誰都可以說自己學習能力強。
你如果真的在這方面有突出,就要舉一個例子,比如是1個月從0到1考了什麼證照等。
3、有開頭有結尾,有邏輯。
開頭問候,結尾總結。中間1、2、3條理清楚。
4、特別提醒。
自我介紹中的內容,很可能是面試官後續發問的內容。所以,一是要引起重視,講最重要的,你最想讓面試官知道的內容。 而是做好準備,揚長避短,不要給自己挖坑。

比如前面你說自己學習能力強,但是沒有舉例子。

面試官很可能,順著你的話問你,怎麼證明你學習能力強呢? 結果你答不上來,或者是非常普通的成績,根本不能算是“學習能力強”。 那你就是給自己挖坑了。

其實自我介紹也是每個人各有不同,說起來也只能提供大致的思路。和你具體的求職崗位、經歷、個人風格有很大的關係。

專案經驗

專案經驗這塊因人而異,把覺得做的有亮點的東西挑出來,從四個方面來準備:

  • 功能模組的實現
  • 達到了什麼效果
  • 遇到了什麼問題,是如何解決的
  • 涉及到的相關知識點

專案經驗和知識點 其實是一個雙向的過程,要 試圖去找到它們之間的聯絡:

  • 談到專案經驗的時候,可以說:做完 xx 之後,我還去了解了一下 yy 背後的原理,xxx,這裡體現的是 你是否有求知慾 。
  • 談到知識點的時候,可以說:yy 的原理是這樣的,在 xx 專案中我是如何應用它來解決問題的,這裡體現的是 你是否具備把知識付諸實踐的能力。

知識儲備

很多人準備面試的時候,大多數就會這樣的,開啟牛客網,查詢 “Android 面經”,找幾個多的開始看。以及從各大技術交流平臺搜尋Android面試題。開始刷題複習。

這雖然看起來很自然,但是並不是一種 健康的方式,面試題的作用應當是查缺補漏,上學的時候也不是直接發習題冊然後對著答案學習吧?

知乎上有個問題,叫做 如何高效學習,裡面有一個回答我覺得很符合我自己的觀點,就是 建立起自己的知識體系,建立知識體系的目的在於:

  • 鞏固記憶。
  • 認識自己,找到自己的優勢及不足。
  • 把握複習的進度。

經驗總結。

目前我參考和自己整理的總結的會分為以下幾個大點:

Java 相關
1.容器(HashMap、HashSet、LinkedList、ArrayList、陣列等)
2.記憶體模型
3.垃圾回收演算法(JVM)
4.類載入過程(需要多看看,重在理解,對於熱修復和外掛化比較重要)
5.反射
6.多執行緒和執行緒池
7.HTTP、HTTPS、TCP/IP、Socket通訊、三次握手四次揮手過程

計算機網路部分:
TCP 有哪些狀態

  • 三次握手、四次揮手。為啥不是三次不是兩次
  • HTTPS 和 HTTP 的區別,HTTPS 2.0 3.0?
  • 瀏覽器輸入一個 URL 按下回車網路傳輸的流程?
  • 問的深一點的可能涉及到網路架構,每層有什麼協議,FTP 相關原理,例:TCP 建立連線後,發包頻率是怎麼樣的?
  1. 設計模式(六大基本原則、專案中常用的設計模式、手寫單例等)

生產者模式和消費者模式的區別?
單例模式雙重加鎖,為什麼這樣做?
知道的設計模式有哪些?
專案中常用的設計模式有哪些?
手寫生產者、消費者模式。
手寫觀察者模式程式碼。
介面卡模式、裝飾者模式、外觀模式的異同?
談談對 java 狀態機的理解。
談談應用更新(灰度、強制更新、分割槽更新?)

9.斷點續傳
10.Java 四大引用
11.Java 的泛型, 和 的區別
12.問到泛型、泛型擦除、萬用字元相關的東西
13. finalfinallyfinalize 的區別
14.介面、抽象類的區別

Android 相關

1.自定義 View

ViewGroup 繪製順序 (例:自定義 ViewGroup 如何實現 FlowLayout?如何實現 FlowLayout 調換順序)
自定義 View 如何實現打桌球效果;
自定義 View 如何實現拉弓效果,貝瑟爾曲線原理實現?

2.事件攔截分發

事件分發已經不是直接讓你講了,會給你具體的場景,比如 A 巢狀 B ,B 巢狀 C,從 C 中心按下,一下滑出到 A,事件分發的過程,這裡面肯定會有 ACTION_CANCEL 的相關呼叫時機。

3.解決過的一些效能問題,在專案中的實際運用。

4.效能最佳化工具

(TraceView、Systrace、除錯 GPU 過度繪製 & GPU 呈現模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker 等)

5.效能最佳化 (講講你自己專案中做過的效能最佳化)

網路:API 最佳化、流量最佳化、弱網最佳化
記憶體:OOM 處理、記憶體洩漏、記憶體檢測、分析、Bitmap 最佳化 ,LeakCanary 原理,什麼檢測記憶體洩漏需要兩次?
繪製
電量:WeakLock 機制、JobScheduler 機制
APK 瘦身 (APK 瘦身是怎麼做的,只用 armabi-v7a 沒有什麼問題麼?
APK 瘦身這個基本是 100% 被面試問到,可能是我簡歷上提到的原因。)
記憶體抖動
記憶體洩漏
卡頓 {如何檢測卡頓,卡頓原理是什麼,怎麼判斷頁面響應卡頓還是邏輯處理造成的卡頓} ,BlockCanary 的原理
佈局最佳化、過度渲染處理、ANR 處理、監控、埋點、Crash 上傳。
啟動最佳化

6.Http[s]請求慢的解決辦法(DNS、攜帶資料、直接訪問 IP)
7.快取自己如何實現(LRUCache 原理)
8.圖形影像相關:OpenGL ES 管線流程、EGL 的認識、Shader 相關
10.SurfaceView、TextureView、GLSurfaceView 區別及使用場景

動畫、差值器、估值器(Android中的View動畫和屬性動畫 、Android 動畫 介紹與使用)
11.屬性動畫、補間動畫、幀動畫的區別和使用場景
12.MVC、MVP、MVVM
相互間的區別和各種使用場景,如何選擇適合自己的開發架構。
13.Handler、ThreadLocal、AsyncTask、IntentService 原理及應用,Handler 機制原理,IdleHandler 什麼時候呼叫。
14.Gradle(Groovy 語法、Gradle 外掛開發基礎)

15.熱修復、外掛化

談談對 ClassLoader 的理解
雙親委託機制的好處
自定義 ClassLoader
外掛化為什麼會出現,如何程式碼載入,資源載入,代理 Hook)

16.元件化架構思路

如何從一個老專案一步步實現元件化,主要問思路,考察架構能力和思考能力。(需要考慮很多,每一步做什麼,順序很重要)
元件化和模組化的理解與區別?

17.系統打包流程
18.Android 有哪些儲存資料的方式。
19.SharedPrefrence 原始碼和問題點;
20.sqlite 相關

sqlite 升級,增加欄位的語句
資料庫框架對比和原始碼分析
資料庫最佳化及資料遷移問題
getWritableDatabase 和 getReadableDatabase 的區別

20.如何判斷一個 APP 在前臺還是後臺?
21.混合開發

Hybrid 做過嗎? 例:Android 透過WebView呼叫 JS 程式碼 例:JS 透過WebView呼叫 Android 程式碼;
Hybrid 通訊原理是什麼,有做研究嗎?
說說你用過的混合開發技術有哪些?各有什麼優缺點?

Android Framework

  1. AMS 、PMS
  2. Activity 啟動流程,App 啟動流程
  3. Binder 機制(IPC、AIDL 的使用)

4.講講 Linux 上的 IPC 通訊,Binder 有什麼優勢,Android 上有哪些多程式通訊機制?

專案中遇見了什麼多程式場景?
AIDL 是什麼?解決了什麼問題?
談談對程式共享和執行緒安全的認知?

5.為什麼使用 Parcelable,好處是什麼?
6.Android 影像顯示相關流程,Vsync 訊號等

三方原始碼

1.Glide :載入、快取、LRU 演算法
(如何自己設計一個大圖載入框架)
(LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter

重點:Router 原理,如何實現元件間的通訊,元件化平級呼叫資料的方式。

5.外掛化(不同外掛化機制原理與流派,優缺點。侷限性)
6.熱修復
7.RXJava
(RxJava 的執行緒切換原理)
8.Retrofit
(Retrofit 在 OkHttp 上做了哪些封裝?動態代理和靜態代理的區別,是怎麼實現的)
9. OkHttp

1、OkHttp 原始碼,網路快取
2、如果從網路載入一個 10M 的圖片,說下注意事項

演算法與資料結構

1.單連結串列:反轉、插入、刪除
2.雙連結串列:插入、刪除
3.手寫常見排序、歸併排序、堆排序
4.二叉樹前序、中序、後序遍歷
5.最大 K 問題
6.廣度、深度優先搜尋演算法
7.String 轉 int。

核心演算法就三行程式碼,不過臨界條件很多,除了判空,還需要注意負數、Integer 的最大最小值邊界等;

8.如何判斷一個單連結串列有環?
9.連結串列翻轉;
10.快排;
11.100 億個單詞,找出出現頻率最高的單詞。要求幾種方案;
12.連結串列每 k 位逆序;
13.映象二叉樹;
14.找出一個無序陣列中出現超過一半次數的數字;
15.計算二叉樹的最大深度,要求非遞迴演算法。
16.String 方式計算加法。

專案&HR

1.專案開發中遇到的最大的一個難題和挑戰,你是如何解決的。(95% 會問到)
2.說說你開發最大的優勢點(95% 會問到)
3.你為什麼會離開上家公司
4.你的缺點是什麼?
5.你能給公司帶來什麼效益?
6.你對未來的職業規劃?

面試:如果不準備充分的面試,完全是浪費時間,更是對自己的不負責。

文末會給大家分享下我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟年前突然被裁心裡是有點迷),其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式,不過對大家找工作肯定是有幫助!

貓眼三輪面試

一面 (技術面): 20:00 ~ 21:12(8.27號)

  1. 自我介紹
  2. Handler是用來做啥的
  3. 每個執行緒都能有自己的Handler嗎
  4. Fragment和Activity之間傳遞資料
  5. Activity載入Fragment的方式
  6. add一個Fragment的時候已經有一個Fragment的話,對之前的Fragment的生命週期的影響
  7. ActivityA啟動ActivityB的生命週期回撥
  8. Activity的啟動模式(分別用於什麼場景)
  9. onSaveInstance和onReStoreInstance作用
  10. ViewModel怎麼實現的
  11. ViewModel是不是一直存在記憶體中(比如我開啟了很多頁面,或者ViewModel持有Bitmap這樣的物件)
  12. Android用過哪些佈局
  13. View的繪製會經過哪些(onMeasure,onLayout,onDrow)
  14. 讓View重新繪製的方法(重繪時,onMeasure會呼叫幾次)
  15. onMeasure會執行幾次
  16. ConstraintLayout經常用到的屬性
  17. guaidline為什麼不會在佈局上顯示
  18. 事件分發機制
  19. Android中執行緒掛了程式會崩潰嗎?
  20. RxJava用過了哪些運算子
  21. Java記憶體分為哪些區域
  22. 堆記憶體溢位、棧溢位相同嗎
  23. 哪些場景下會發生棧溢位
  24. 建立的物件一般在哪個區域
  25. GCRoots有哪些
  26. 複製演算法(GC演算法之一)的流程
  27. 靜態內部類和內部類的區別
  28. volatile的作用是什麼
  29. 禁止指令重排序是怎麼實現的
  30. 為什麼需要禁止指令重排序
  31. synchronized修飾靜態方法和普通方法時的區別
  32. synchronized可重入嗎
  33. 類鎖、物件鎖有區別嗎
  34. 兩個字串,求相同的最長串
  35. 兩個玻璃球,100層,求出具體在哪一層扔下會碎
  36. 反問環節

二面(技術面): 10:27 ~ 11:20(8.31號)

  1. 自我介紹
  2. 問了一些專案裡面的東西,聊聊是幹啥的
  3. 為什麼要用MVVM
  4. 資料變更UI自動更新怎麼實現的,用的DataBinding嗎
  5. 什麼是觀察者模式,有什麼好處
  6. 什麼情況下用責任鏈模式?哪裡遇到過?有什麼好處?
  7. 怎麼實現的責任鏈模式
  8. 為什麼okHttp裡面用到責任鏈模式
  9. 使用者可以自定義多個攔截器嗎
  10. 有網狀態下的快取和無網狀態下的快取一樣嗎
  11. 快取是自己做的還是okhttp做的
  12. 可以手寫一些sql嗎
  13. room是什麼型別的資料庫
  14. room是怎麼實現的,為什麼不要寫sql呢
  15. livedata粘性事件
  16. jetpack還用過哪些
  17. navigation用來做什麼
  18. TCP UDP區別
  19. 為什麼需要三次握手和四次揮手
  20. 三次揮手不行嗎
  21. 兩次揮手呢(伺服器接收到客戶端的FIN報文,立馬將回復客戶端ACK和自己的FIN報文一併發給客戶端可以嗎?)
  22. TCP屬於哪一層
  23. TCP的上一層是哪一層
  24. 應用層常見的協議
  25. http與https的區別
  26. https怎麼進行的加密
  27. 對稱加密和非對稱加密的方式
  28. 你知道的非對稱和對稱加密有哪些
  29. 給定字串“abcdefg”,列印出長度為4,並且不重複的的字串組合(eg: “abcd”、“abce”,而"abcd"和"abdc"這種僅順序不同的串屬於同一個);

三面 (非技術面): 11:00~11:20(9.1號)

  1. 自我介紹(不要說前兩面說到的,說點有意思的。ps:內心想法,我儘量哭的小聲點。。。 ?)
  2. 簡歷上的專案是基於什麼初衷寫的
  3. 當初為什麼選擇Android
  4. Retrofit,Rxjava,okHttp這些是怎麼接觸到的
  5. jetpack呢
  6. MVVM和MVP說說你的理解
  7. 平時怎麼進行學習的
  8. 家在哪兒
  9. 確定來北京嗎
  10. 有時間來實習嗎

總結

從上面看下來問的內容比較多,但是面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

在這裡我給大家分享下我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟年前突然被裁心裡是有點迷),其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式,不過對大家找工作肯定是有幫助!


大家可以點選碼雲地址領取:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946034/viewspace-2719545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章