面試斬獲貓眼Android崗Offer,我是怎樣準備Android技術面的知否?
作者:哈登
前言
本篇文章給大家分享一下筆者面試的一些感受和經驗。
筆者從前期準備到所有面試結束,花費了差不多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 建立連線後,發包頻率是怎麼樣的?
- 設計模式(六大基本原則、專案中常用的設計模式、手寫單例等)
生產者模式和消費者模式的區別?
單例模式雙重加鎖,為什麼這樣做?
知道的設計模式有哪些?
專案中常用的設計模式有哪些?
手寫生產者、消費者模式。
手寫觀察者模式程式碼。
介面卡模式、裝飾者模式、外觀模式的異同?
談談對 java 狀態機的理解。
談談應用更新(灰度、強制更新、分割槽更新?)
9.斷點續傳
10.Java 四大引用
11.Java 的泛型, 和 的區別
12.問到泛型、泛型擦除、萬用字元相關的東西
13.
final
、
finally
、
finalize
的區別
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
- AMS 、PMS
- Activity 啟動流程,App 啟動流程
- 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號)
- 自我介紹
- Handler是用來做啥的
- 每個執行緒都能有自己的Handler嗎
- Fragment和Activity之間傳遞資料
- Activity載入Fragment的方式
- add一個Fragment的時候已經有一個Fragment的話,對之前的Fragment的生命週期的影響
- ActivityA啟動ActivityB的生命週期回撥
- Activity的啟動模式(分別用於什麼場景)
- onSaveInstance和onReStoreInstance作用
- ViewModel怎麼實現的
- ViewModel是不是一直存在記憶體中(比如我開啟了很多頁面,或者ViewModel持有Bitmap這樣的物件)
- Android用過哪些佈局
- View的繪製會經過哪些(onMeasure,onLayout,onDrow)
- 讓View重新繪製的方法(重繪時,onMeasure會呼叫幾次)
- onMeasure會執行幾次
- ConstraintLayout經常用到的屬性
- guaidline為什麼不會在佈局上顯示
- 事件分發機制
- Android中執行緒掛了程式會崩潰嗎?
- RxJava用過了哪些運算子
- Java記憶體分為哪些區域
- 堆記憶體溢位、棧溢位相同嗎
- 哪些場景下會發生棧溢位
- 建立的物件一般在哪個區域
- GCRoots有哪些
- 複製演算法(GC演算法之一)的流程
- 靜態內部類和內部類的區別
- volatile的作用是什麼
- 禁止指令重排序是怎麼實現的
- 為什麼需要禁止指令重排序
- synchronized修飾靜態方法和普通方法時的區別
- synchronized可重入嗎
- 類鎖、物件鎖有區別嗎
- 兩個字串,求相同的最長串
- 兩個玻璃球,100層,求出具體在哪一層扔下會碎
- 反問環節
二面(技術面): 10:27 ~ 11:20(8.31號)
- 自我介紹
- 問了一些專案裡面的東西,聊聊是幹啥的
- 為什麼要用MVVM
- 資料變更UI自動更新怎麼實現的,用的DataBinding嗎
- 什麼是觀察者模式,有什麼好處
- 什麼情況下用責任鏈模式?哪裡遇到過?有什麼好處?
- 怎麼實現的責任鏈模式
- 為什麼okHttp裡面用到責任鏈模式
- 使用者可以自定義多個攔截器嗎
- 有網狀態下的快取和無網狀態下的快取一樣嗎
- 快取是自己做的還是okhttp做的
- 可以手寫一些sql嗎
- room是什麼型別的資料庫
- room是怎麼實現的,為什麼不要寫sql呢
- livedata粘性事件
- jetpack還用過哪些
- navigation用來做什麼
- TCP UDP區別
- 為什麼需要三次握手和四次揮手
- 三次揮手不行嗎
- 兩次揮手呢(伺服器接收到客戶端的FIN報文,立馬將回復客戶端ACK和自己的FIN報文一併發給客戶端可以嗎?)
- TCP屬於哪一層
- TCP的上一層是哪一層
- 應用層常見的協議
- http與https的區別
- https怎麼進行的加密
- 對稱加密和非對稱加密的方式
- 你知道的非對稱和對稱加密有哪些
- 給定字串“abcdefg”,列印出長度為4,並且不重複的的字串組合(eg: “abcd”、“abce”,而"abcd"和"abdc"這種僅順序不同的串屬於同一個);
三面 (非技術面): 11:00~11:20(9.1號)
- 自我介紹(不要說前兩面說到的,說點有意思的。ps:內心想法,我儘量哭的小聲點。。。 ?)
- 簡歷上的專案是基於什麼初衷寫的
- 當初為什麼選擇Android
- Retrofit,Rxjava,okHttp這些是怎麼接觸到的
- jetpack呢
- MVVM和MVP說說你的理解
- 平時怎麼進行學習的
- 家在哪兒
- 確定來北京嗎
- 有時間來實習嗎
總結
從上面看下來問的內容比較多,但是面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
在這裡我給大家分享下我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟年前突然被裁心裡是有點迷),其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式,不過對大家找工作肯定是有幫助!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946034/viewspace-2719545/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Android實習】20場面試斬獲大廠offer,我學會了什麼Android面試
- Android面試準備(中高階)Android面試
- 華為面試Android崗;群面+技術面+綜合面+英語面面試Android
- 面試大廠,我是這樣準備專案的面試
- 下血本買的!萬字Android技術類校招面試題彙總,Android崗Android面試題
- 我所經歷的Android面試|掘金技術徵文Android面試
- 如果我是Android面試官一Android面試
- 如果我是Android面試官二Android面試
- 如何準備校招技術面試面試
- 怎樣應對Android技術下半場Android
- 2019前端面試題--這樣準備,拿不到offer算我輸!前端面試題
- 怎樣回答技術面試題?面試題
- Android 面試題(附答案) | 掘金技術徵文Android面試題
- 怎樣準備一場面試:候選人篇面試
- 阿里校招Android崗面經分享,Offer入手但委婉拒收阿里Android
- Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?Android面試題執行緒
- 2018Android面試總結| 掘金技術徵文Android面試
- 技術崗-常見筆試面試題筆試面試題
- 知否?知否?情人眼裡出程式碼
- Android 開發網易面試涼涼經,面試官:基礎不牢,技術不夠深入,無緣offerAndroid面試
- 知否知否,Java 面試的年貨到了Java面試
- 談談面試知識點準備面試
- 2019年Android崗位BAT等大廠面試題知識點小結AndroidBAT面試題
- 如何準備阿里技術面試?終面官現身說法!阿里面試
- Java研發方向如何準備BAT技術面試答案JavaBAT面試
- 2018大廠Android面試經驗 | 掘金技術徵文Android面試
- Android技術分享| 【你畫我猜】Android 快速實現Android
- Android開發實用必備的幾款外掛,華為Android面試真題解析,已拿offerAndroid面試
- 【行走的Offer收割機】記一位朋友斬獲BAT技術專家Offer的面試經歷【石杉的架構筆記】BAT面試架構筆記
- 如何準備Java的高階技術面試,java基礎面試筆試題Java面試筆試
- 資料庫相關崗位面試準備建議資料庫面試
- 斬獲BAT-offer大神的兩萬字面試乾貨分享BAT面試
- Android開發技術面總結Android
- 面試準備面試
- Android 中高階面試必知必會Android面試
- Android面試題:bindService獲取代理是同步還是非同步Android面試題非同步
- 一個兩年的程式設計師,面5家斬獲點我達,網易offer的面試總結程式設計師面試
- 騰訊技術崗位筆試&面試題(一)筆試面試題