背景描述
首先描述一下背景,小編是一個在 Android 開發行業摸爬滾打5年多的開發,呆過的互聯網公司有三家,均從事的Android 開發的作業,最后離職的一家公司也是做的最久的一家,作業了將近3年多時光,
至于離職原因?
其實這個問題一直都不是一個單一性的問題,它是一多元化多維度的問題,對我來說主要是體現在以下幾個方面:
1.當前所使用的技術對自身成長不是很大;
2.當前負責的專案發展空間到達了一定的瓶頸;
3.認為自己的職場履歷需要有一段大廠經歷;(相信每個程式員都想這樣在履歷上添加這么一筆)
4.那就是組織架構頻繁變動,導致業務線頻繁變更,這一點對業務很不利,需要一直磨合,
面試目標順序
當時我的面試大廠目標并不是單一的,大家看下圖就知道了:

因為這次面的都是大廠,所以面試的準備周期有點長,準備了2個多月的時間,進行復習學習、刷題等操作,
面試思路
面試時一個漫長的程序,這個程序不單純只是面試這么簡單,它也是一個 自我考察 的程序,在這個程序中也是講究方式方法,下面我從自我考察和方式方法兩個方面來進行簡單的闡述,
自我考察
技術實力是面試的大前提,你需要非常清晰的了解自己,了解自己所要面試崗位,這是決定面試是否成功的先決條件,
比如我作業時間4年多,我要面試的崗位是高級Android工程師,那我這個自身素質是否能滿足面試崗位所要求的條件?
其實這一點在我剛剛面試的時候也是拿不準的,因為在公司已經3年,這段時間對外界的發展其實是不了解的,所以我做了以下幾件事:
1.把自己負責的專案業務進行整體總結,
2.把專案中用到的所有技術進行整體總結,
3.復習常用 框架/系統 原始碼,比如Glide,Okhttp,Reteofit,Activity啟動流程,Hander,HashMap,鎖等等常用的原始碼原理,
4.查看BOSS,拉勾對應崗位所要求的技能,
方式方法
面試環節中即便你技術很好,專案經驗很豐富,你也不乏有知識盲區,也有未能顧及的技術點,當這些點集中出現的時候你面試的成功率也會大大降低,所以針對面試我總結了以下幾個流程:
1.面試分為3個階段(初期,中期,高offer期),
初期: 主要通過(BOSS,拉勾投遞即可),初期主要投遞小公司,這部分公司有兩個目的,第一是相互交流技術點,不斷完善自己的技術覆寫度,第二是了解當前市場的需求點,
中期: 主要通過獵頭去投遞,這個階段主要投遞中場,這類公司要求技術深度會比初期公司要深一些,演算法的考察會加重,同時面試官的技術水平也會偏高一些,甚至有的中場面試難度會達到大場的水平,這個中期盡可能的持續長一些,非常有利于后續的面試經驗總結,
高offer期: 這個階段主要投遞你的目標企業,切記面試優先級從最不意向的公司開始投遞,投遞的方式也是通過獵頭,這樣可以加快面試流程,以上的初中期更多的是完善你的技術覆寫度,以及你的面試感,為了是讓你以最好的姿態去挑戰你最想去的企業,這樣一路走來你面試的成功率會大大提高,
2.溝通能力
面試除了考察你的技術實力以外,還有一點是比較重要的,那就是溝通能力,你面試的崗位越高,對你溝通能力的要求也就越高,
溝通是特別重要的一個點,這決定你是否能非常清晰的把你所知所想完整的闡述出來,
我們面試的程序就是自我營銷的一個程序,所以當你覺得自己溝通能力不是很強的時候,那么你就需要定向的去總結幾個點:
比如一個出色的自我介紹, 專案中遇到的最難解決的一個問題,如果讓你設計一個架構你應該怎么設計,簡單的介紹一下你負責的業務 等…
3.面試頻率
面試周期我建議15-30天,
初期:小公司,我建議一天面試3個,如果有精力的話可以4個,這里需要注意一點,小公司有很多不靠譜的,比如還用Eclipse的,比如上來還沒問技術就先打擊你的,這種可以找機會離開,不要浪費時間,面試時長建議控制在60分鐘以內,不要太摳細節,有條件的可以打開錄音器,方便結束后晚上復盤,你復盤3-4天的時候你會發現面試內容開始大批量重復了,
中期:這個時期我建議一天最多2個公司,因為中場一般都是3輪或者以上的面試,有一部分是一路走完的,所以你需要給二面三面留出時間以方便充分溝通,千萬不要一面完就打算走,因為一二三面所考察的完全不同,一面主要是基礎,二面主要是框架/原始碼/簡歷里的技術,三面一般會聊專案,方案或者思路,
高offer期: 這個環節需要你按實際情況伺機而動,因為有的大廠是一條龍面完,有的是每一次面試都單獨約,但是大廠一般的流程都比較慢,都在1周以上才能完成整場面試,一般都在4-6面之間,但是建議一天最多安排2場面試,這個面試時長不確定性因素會比較多,如果面試官不是很討厭你,一般都會在60分鐘以上,
面試的基本流程
我先后面試了差不多20幾家公司,最后到手的OFFER有8個左右,最后選擇的是自己想去的 阿里,面試內容我下面會簡單總結一些,共分為兩部分,一個是面試中出現的頻率比較高的問題,二就是面試的這些公司的一些體驗分享,
面試高頻問題區:
1.HashMap 1.7,1.8的差異,1.8中什么情況下轉換為紅黑樹,建構式中引數代表的意思
2.用什么Map可以保證執行緒安全,為什么?ConcurrentHashMap為什么能保證執行緒安全?1.7和1.8原理有什么差異,
3.有多少種單例模式,列舉算不算單例,單例模式中不用volatile會導致什么問題?volatile特性是什么?為什么android中不推薦使用列舉,
4.Glide中怎么實作圖片的加載進度條,Glide的快取是怎么設計的?為什么要用弱參考,
5.implementation 和 api的區別是什么?
6.事件分發的流程,以及怎么解決滑動沖突?
7.事件是怎么產生的?mFirstTarget 為什么是一個鏈表?
8.自定義View需要經歷哪幾個程序?
9.A 跳轉到 B頁面,兩個頁面的生命周期怎么走?什么情況下A的stop()不會執行,
10.Activity 的4中啟動模式分別是什么,有什么不同,
11.okhttp中有幾個佇列?分別干什么用的?怎么取消一個請求?
12.Rxjava中map和flatMap有什么區別,都用過什么運算子,
13.如果Rxjava組合發送任務,中間任務出現例外,其他任務該怎么處理,
14.哪個場景會發生記憶體泄露,記憶體泄露怎么檢測,怎么解決,以及leak cannery內部原理是什么?為什么新版本的不需要在Application中注冊了,
15.手機適配問題怎么處理,都有什么方案,
16.Android9 10 11 都更新了什么新特性,新版本中無法獲取IMEI怎么處理,
17.資料序列話有那倆種方式,Serialization和Parcelable區別,如果持久化需要用哪一個
18.組件化怎么分層,各個組件之間怎么通信,
19.怎防止程式崩潰,如果已經到了Thread.UncaughtExceptionHandler是否可以讓程式繼續運行,
20.Handler Looper mesaageQueue message 之間的關系,
21.子執行緒一定不能更新ui么?什么時候可以?什么時候不可以,檢測邏輯是在什么階段初始化的,
22.ANR發生的原理是什么, 怎么排查,
23.說下路由ARoute的實作原理,怎么處理頁面過多記憶體占用過大問題,
24.執行緒池都什么時候用,怎么創建,建構式中的引數分別代表什么意思?
25.行程優先級
26.反向輸出字串
27.兩個有序鏈表合并
28.字串移除多余空格,且技術單詞首字符大寫,
29.二叉樹中和為某一值的路徑
30.本地廣播和正常廣播的區別
31.二進制低位轉高位
32.字串陣列判重
33.二叉樹 判斷是否為搜索二叉樹
34.Activity啟動流程,Launcher啟動流程
公司面試體驗分享
擬合未來
- 這公司面試體驗很好,一共三輪面試,技術面二面,HR一面,
- 一面:自定義view、Handler機制、組件化和插件化、HashMap的原始碼、retrofit和okhttp的原始碼用到了哪些設計模式、NDK靜態庫和動態庫編譯流程、openGL渲染模式、Android中的影片有哪些它們之間的區別、談談mvvm,
- 二面:講之前做的專案負責哪塊,根據業務采用什么架構、使用過哪些設計模式,專案中遇到哪些棘手的問題,如何解決的,
- 三面:HR整體問下以前公司的情況等問題
- 總體下來基本面試官都是根據簡歷來問的,體驗心得就是要對自己以前做的專案也好好梳理,提前組織好語言,挖掘專案閃光點,
百度
- 這里主要負責的業務是手機百開發,總共面試了三次,
- 一面內容:
1:java參考,以及參考佇列,以及使用場景
2:拆裝箱
3:LeakCanary
4:map
5:線上性能監控
6:SharedPrefrence 遇到的問題
7;手寫演算法
- 二面內容:
1:Handler
2: 行程間通信
3:序列化
4:影片,
5:native崩潰捕獲原理
6:結合專案提問
7:Recyclerview的點擊事件原理
8:啟動一個空的apk,回啟動幾個執行緒
9:手寫演算法
- 三面內容:
1:跳槽原因
2:原來公司規模
3:預期薪資
4:個人優勢
- 個人體驗心得:
1;簡歷上寫的一定要了解,并且知道原理
2:多熟悉專案,找出一些能聊得功能點
3:崩潰捕獲,以及解決(java ,native)
4:優化需要知道(大廠都會問)
5:了解由點到面,需要把知識連貫起來
中軟國際
- 崗位業務榮耀手機內置APP-主要負責推送,一共兩面
- 一面:問的專案中哪些用到了hook技術,是怎么實作的,Okhttp底層原理,點擊應用圖示的啟動流程,hashmap在java7和java8的區別,為什么要引入紅黑樹
- 二面:專案是怎么搭建的,用到了哪些技術點,arouter用到了什么技術點,是用來解決什么問題,socket底層原理,是如何帶領團隊的,一個功能是如何從分析需求到落地的
- 個人體驗心得:盡量圍繞簡歷上的點來刷面試題,不一定都要研究透徹,被問到自己不熟的點,可以盡量嘗試著往自己熟悉點帶,例如之前我被問到pms是怎么管理package資訊的,我就說目前我對pms了解不深,主要也是研究了ams,然后就把自己了解的說一下就好了,
杭州紅花朵朵(總共三面)
- 一面:Fragment和Activity生命周期聯動,及Fragment顯示與隱藏的一些方法,Handler原理, View繪制流程,事件分發,APP從安裝到啟動都做了什么,設計模式相關,
- 二面:執行緒都有那些狀態,執行緒鎖相關的東西,對稱與非對稱加密,HTTPS請求程序,陣列,鏈表,紅黑樹二叉樹等一些資料結構相關的東西,還有一些開放性的問題
- HR面:自由回答
- 個人體驗:基礎最重要,不僅要會用,還要知道其中的原理,
京東到家(總共三面)
- 一面:執行緒,行程,訊息,通信,handler,okhttp
- 二面:事件分發,java一些基礎,演算法
- 三面:聊專案
- 體驗:除了技術,溝通,理解能力要好
apus(總共三面)
- 一面:問了java基礎,java synchronized和volatile 關鍵字的作用,問了hashMap陣列大小為什么是2的次方,如果經過一次擴容,元素下標會變嗎,sharedPreference commit與apply的區別,還有apply為什么會造成anr,view的繪制流程,如何檢測應用幀率,gradle的一些知識(沒答出來,具體問題忘了)
- 二面:可能是看我對view的繪制流程比較了解 就主要問了這一塊的內容,測量、布局、繪制,然后拿出了一個效果,問我怎么實作
- HR面:公司是北京和鄭州這邊協同辦公,經常要和那邊協作,如果出了問題,如何解決
- 個人感受:基礎要熟悉,如果一面有哪一個方向回答的好的話,二面就可能深入到那個方向深入的問
阿里巴巴
- 面試的崗位是音視頻開發,總共是 3輪技術面+1輪HR面,
- 一面內容:
1.MediaCodec連環炮:MediaCodec報錯,只有錯誤碼,沒有任何其它資訊,如何解決?使用MediaCodec遇到了哪些問題?同步使用和異步使用有什么區別?
2.如何計算音頻幀,一幀音頻幀有多大
3.YUV基礎知識,相比于RGB減少了多少空間,YUV 各個分量都是0實際渲染出來是什么顏色的,NV21和NV12有什么區別
4.MP4是如何存盤音視頻檔案的,它是什么結構
5.OpenSL 相關的問題,如何使用,可以干什么不可以干什么
6.結合專案問題
- 二面內容:
1.SurfaceView和TextureView區別
2.OpenGL ES相關問題,MVP矩陣左乘和右乘有什么區別,什么是外部紋理,為什么叫外部
3.OpenGL如何渲染一個View
4.VBO是用來干嘛的解決什么問題
5.結合專案問問題
- 三面內容:
1.專案是什么架構,如何設計的,為什么這么設計
2.演算法題:字串反轉
3.平時如何學習的
- 個人感受:音視頻開發感覺OpenGL ES問的比較多,這方面多看看LearnOpenGL這個網站的教程,多加體會,
其實還有幾家小型公司的面試,我就不在此一一的說明了,因為文章篇幅長度有限,所以就挑選了幾個自己覺得面的還不錯的公司進行跟大家分享,慶幸的是等到了自己想要的 阿里 OFFER,看了自己前期的2個多月的面試準備沒有白費,
推薦分享
小編之前在做面試準備的時候,從網上查找收集整理了一些 Android 開發相關的學習檔案、面試題、Android 核心筆記等等檔案,進行算題復習 Android 相關的知識,通過這次的面試效果檢測,也體驗出了結果,這次面試能通過一半原因是自己的技識訓過的去,另一半的原因就是吸收了這些學習檔案精華,
所以我想拿出來跟大家進行分享,希望能幫助到大家學習提升,在面試中能順利通過,如有需要參考的可以直接去我 CodeChina地址:https://codechina.csdn.net/u012165769/Android-T3 訪問查閱,



轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/294978.html
標籤:其他
