記錄一次壯烈犧牲的阿里巴巴Android開發面試
前言
今天是一個小雨霏霏,涼風習習的日子。大概晚上六七點的時候,螞蟻金服移動端大佬來了電話,要進行一輪的技術面試。我一臉黑人問號???現在的面試都流行突襲嗎?
於是我的這一次面試之旅,就此壯烈的展開。
至於全部的內容不可能都記住,但是大概的流程和思路可以這裡分享一下。有類似經歷的朋友們歡迎評論區討論。 文末可以分享一份我自己一直有收集整理的各類專題面試題,包含答案和解析。從初級到中級,高階,都有。文末可領取
自我介紹
首先呢,大佬讓我用兩分鐘自我介紹。我本以為自己能滔滔不絕,將對方視作相親物件般全方位介紹自己。結果不到半分鐘,我就介紹完了==。
五秒鐘的沉默後,大佬嗯了一聲。
感覺自己的臉上堆滿了尷尬而不失禮貌的微笑。
最近的專案經歷
這時大佬問我最近從事了什麼專案,研究生階段都進行了什麼樣的工作。
那必須吹一吹!從Android的起源到APP發展再到各種前沿技術,順便提一嘴音視訊技術跟跨平臺開發,結果半分鐘一到,又說不下去了==
大佬很有耐心的聽我說了一堆語無倫次的話, 開始進入正題。
java
大佬:你知道什麼是執行緒安全嗎?
我:(烏魯烏魯說了一堆)就是比如如果同時有兩個執行緒訪問同一個變數,那麼它們對變數造成的修改所帶來的結果可能是不確定的。
大佬:那你知道JAVA有什麼方法來實現執行緒安全嗎?
我;不是特別知道
大佬;那你講講Java中過載和重寫的區別?
我;過載:一個類中可以有多個相同方法名的,但是引數型別和個數都不一樣。
重寫;子類繼承父類,則子類可以通過實現父類中的方法,從而新的方法把父類舊的方法覆蓋。
大佬;final和static是怎麼使用的?
我;final變數即為常量,只能賦值一次,final方法不能被子類重寫,還有final類不能被繼承。
static變數:對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為靜態分配一次記憶體,
在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問(方便),當然也可以通過物件來訪問(但是這是不推薦的)。
.............
大佬:你java基礎還可以啊,你說說為什麼我們要使用java語言開發呢?
我:(因為java牛逼啊)首先呢,Android應用是由Java語言進行開發的,SDK也是由Java語言編寫,所以java語言對於Android開發的重要性無可替代的。雖說kotlin語言得到了Android官方的熱推,但是kotlin也是編譯成了java語言再執行的。對於Android來說,只要SDK沒有用kotlin重寫,那麼Java語言是都需要學習的。而且Android apk的後臺伺服器程式大概率是java語言構建,所以學習java也是一種必然。
大佬:那麼你覺得Java中哪些東西是我們Android程式設計師最需要用的呢?
我:其實現在我們大多數做Android開發的都是 複製貼上程式碼塊,所以與Android中比較相關的稍微比較難的Java基礎幾乎都是一個門檻,像 泛型,多執行緒,反射,JVM,Java IO,註解,序列化等,
大佬:那你都懂這些原理了是吧?
我:啊........暫時不是特別懂,我回去準備認真研究這些原理的。

........
效能調優
大佬:說說你平時怎麼樣給你做的APP調優的?
我:我主要從兩個層面。
第一個層面:從寫程式碼的時候認真仔細勤勤懇懇的好好寫,寫出高效能高可用的程式碼,免得後面再回頭修修改改特別麻煩;
第二個層面:對已經成型的程式碼,通過工具檢查程式碼的問題,通過檢查到的問題來進行程式碼的刪改,。
大佬:你覺得你寫出的程式碼都是高效能的嗎?
我:我在leetcode上有刷了上百道題,差不多精通最常用的排序查詢動態規劃等演算法的能力,可以根據應用場景寫出符合當前場景的特殊結構,比如用sparseArray替代HashMap
大佬:好那你寫好的程式碼進行調優一般用的什麼工具和操作?
我:使用Profiler工具進行測試和檢查,看哪裡有效能消耗大的操作,然後分析對於程式碼的問題。我的方向主要是如何對記憶體調優,對耗電調優,對網路流量調優,當然,還有對啟動速度,頁面切換效果與速度,開機白屏體驗,閃屏方面的原因等進行分析和調優。哦,還有螢幕適配相機適配等......
大佬:可以,總結的很全面啊(大佬的態度明顯親和了好多,我感覺放低姿態不敢嘚瑟)
我:我對效能調優這塊比較熟悉點。之前主要是搞這方面的~
接著又問了一些gradle,git還有抓包工具stetho這些,終於問開始其它問題。
移動架構+音視訊+混合開發
大佬:你瞭解Android裡面哪些常用的架構?
我:(如果你通知我明天面試,我就全部瞭解了><)MVC,MVP,MVVM這些都瞭解一點。
大佬;有過實戰專案嗎?會元件化嗎?
不好意思,深一點的知識我不熟悉,但是我很願意去學習和實戰的(趕緊表忠心啊!)
大佬很給面子的開始問下一個問題;
音視訊這塊有學習過嗎?
我;(心中一萬隻駿馬奔騰,我是來面試螞蟻金服Android開發的,又不是去抖音那些公司去做音視訊的)瞭解一些音視訊的編解碼技術,流媒體協議,ffmpeg,還有OpenCV/OpenGl/ 這些影象處理知識。但是要會用的話,還需要等以後了~
Weex
大佬;你對weex瞭解嗎?
我;(還好之前強補了可以說死記硬背了一些weex的知識,畢竟Weex混合架構由於阿里系的強大,還是很多對方用到的)
Weex架構的優點;
- 自動做響應式佈局, 開發過程只需要按照設計稿尺寸寫畫素值px
- image元件支援預設圖片, 支援圖片自適應
- css屬性lines, 簡化多行超出點點點的實現
- refresh支援下拉重新整理
- slider 輪播圖元件
- animation 轉場動畫
- 其他app原生能力........
(感覺大佬對這些還挺看重的....)
大佬;flutter怎麼看?
我;最近這段時間在學這一塊,flutter現在已經逐漸變成了主流的混合開發框架,我們做開發的要保持與時俱進不斷學習新技術(我內心在吶喊,我學不動了,誰來拯救我!)
............
大佬;你有什麼問題想需要提問的嗎?
我;好奇大佬比我大不了多少,頭髮比我要茂盛多了?
大佬停頓了幾秒,抬手拿掉頭上的假髮套(哈哈哈強行腦補一波~)
總結
最後當然和大佬話一話家常,進行最後的掙扎。總結來說,要想成功進行一次阿里巴巴的面試,你需要了解甚至精通以下內容:
JAVA語言,尤其是執行緒 JVM原理
資料結構!
熟悉sdk,精通應用開發
效能調優
常用架構,元件化
設計模式
一些比較6的前沿技術,以及混合開發
可以說是涉及範圍非常廣了。不過其實要想成為一名優秀的移動端開發,是需要這些知識面的,以前還覺得Android是不是不行了要涼了,原來根本還是看自身的技術水平。要繼續深入學習!
最後
現在找工作和跳槽的旺季,很多朋友都在找面試方面的題目,而且是有答案和詳解的那種。
這裡我搜集整理了各種網際網路公司Android面試涉及到的絕大部分面試題及答案,並整理做成了文件專題,以及系統的進階學習視訊資料,可以免費分享給大家。
( 包括Java在Android開發中應用、APP框架知識體系、高階UI、全方位效能調優,NDK開發,音視訊技術,人工智慧技術,跨平臺技術等技術資料 ),希望能幫助到你面試前的複習,且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。
資料領取方式:
加Android技術交流群;964557053,找群管理免費領取。備註一下簡書看到的來領取資料就可以了!

Android進階視訊+面試資料部分截圖

Android常見原理性面試專題文件截圖