一位30K大佬的面試經驗!Android高級開發崗必問知識點,趕緊收藏

前言

馬上就要開始春招了,不知道各位小夥伴有沒有找到自己心儀的工作呢。

最近這兩年移動開發遭遇寒冬,再加上培訓機構以及很多應屆生的加入,很多從事Android和IOS開發的同學,都出現了工作難找的情況。基於此種情況下,這段時間基於以下疑慮打算去外面看看:

1、瞭解Android的互聯網市場到底如何?

2、瞭解當前的互聯網公司更需要哪方面的熱門技術?

3、面對移動互聯網的滑鐵盧,該何去何從?

基於以上問題,打算面試數家公司,一方面瞭解目前的Android市場情況,一方面提升自己的面試技術,從這些面試中學得更多的知識和技能,還有把此經歷分享出來,希望大家多多交流。

No.1:金蝶(雲之家)

面試結果:21K,15薪,公積金繳納比例12個點,繳納基數20k

面試過程:面試流程總的有三面,因爲當時比較忙,所以約的電面,面試的是當時的技術經理,然後約的週六技術總監面試,最後人事面。

一面:Android技術經理

旁白:百分之90的面試第一句都是來自我介紹,所以這個時候把自己的項目經歷準備充分就好,這方面需要在簡歷裏面下功夫。

面試官問:App的性能指標有哪些?

我答:App的性能指標涉及的範圍比較廣,比如Crash率、卡頓、內存、CPU、網絡流量、耗電等等。接下來面試官有問到Android裏面的奔潰率多少合適,當時具體多少我沒說,我講到了在實際開發中可以集成騰訊的Bugly來解決和統計奔潰率的問題。然後,談到了App卡頓優化,在這塊我先談App 卡頓的一些場景,像列表(RecycleView)滾動時的卡頓問題、頻繁IO導致的卡頓、主線程做耗時操作、複雜的佈局設計等幾種情況進行講解,在開發中怎麼注意卡頓的問題,然後講解了怎麼使用工具來定位卡頓問題,如BlockCannary、TraceView,然後稍微說了下線上卡頓的定位,可以自建APM平臺收集卡頓日誌,以及第三方平臺聽雲的使用。因爲時間有限,其它性能指標就沒有在談及。

面試官問:Android組件化是怎麼通信的?

我答:Android組件化的通信有多種方式,比如Activity的跳轉可以使用路由機制,像Arouter框架或者自己根據uri機制來實現一套路由。還有組件之間的數據通信,可以使用LocalBroadcast、AIDL等來進行通信。

面試官問:瞭解Socket通信嗎?

我答:Socket這塊聊到了TCP協議以及三次握手,還有我以前參與過的一個車載系統的APP,使用了TCP通信來採集GPS、數據流量等信息,還有TCP長連接的保活機制。因爲這個項目不是我負責的哈,所以這塊講的比較淺,當時面試官提到我們項目中的TCP通信協議怎麼定義的,這塊沒有說上來。

面試官問:Android中的進程間通信有哪些?

我答:Android進程間通信包括Binder通信、Socket通信、廣播、內容提供者等等,其實,Android裏面的四大組件都涉及到了進程間通信。

面試官問:我的問題問得差不多,你有什麼需要了解的嗎?

我答:公司目前的Android團隊是怎樣的?這個職位將來要負責什麼項目?

面試官答:目前這邊項目組Android有3個,我是這邊的Android技術經理,這個職位負責的是雲之家APP。然後,我問了下上班時間這些。

最後,面試結束,面試官叫我等待通知。然後,下午,人事約我複試,複試的是項目組的總監,這次我約的是下班後7點鐘。

二面:技術總監

面試官問:談談你對Android開發中架構的理解?

我答:Android項目中的架構是與業務有關,不同的業務場景需要不同的架構支持,我談談之前開發過的旅遊APP的架構演進:

(1)快速開發:項目初期,業務量少,這個時候使用短平快的MVC模式,可以適應快速開發的節奏。然後,順便說到了MVP和MVVM的區別和理解。

(2)模塊化:隨着業務量的增長,可以把項目中的功能按照模塊進行劃分,模塊之間的通信可以使用EventBus,並且把一些基本的功能抽成一個CommonLib模塊,包含utils(工具類)、自定義控件、功能組件。

(3)組件化:項目規模越來越大之後,可以對項目進行組件化,把項目按照業務模塊進行拆分,拆分出一個一個的業務組件。組件化之後,業務模塊之間更加獨立了。這個時候,可以很方便的把一個業務組件獨立出來,成爲一個獨立APP。

(4)插件化:隨着業務進一步的發展,有的時候需要接入合作方的APP,作爲項目中的一個模塊。當時,我們的旅遊APP,需要把合作方的酒店APP接入進來,作爲我們旅遊APP的一個模塊,這個時候使用插件化,把酒店APP作爲一個插件接入就可以了。當然,還有一些情況,使用插件化後,可以動態升級某個功能模塊以及實現功能模塊的按需加載。

面試官問:談談你對Android性能優化的理解?

我答:性能優化這塊涉及到的話題很廣,可以從內存、卡頓、網絡、佈局、啓動等方面來說,我先說說Android中的卡頓優化吧。卡頓性能優化可以分爲三個過程:開發期,測試期以及線上。

(1)開發期:一方面,需要開發注意平時的代碼設計,多多關注哪些方面容易出現卡頓,如ListView卡頓優化、頻繁IO等。另一方面,我們可以集成一些工具來自動檢測卡頓的地方,如BlockCanary。

(2)測試期:測試的同學可以把卡頓列爲一個測試指標,在測試時遇到卡頓反饋給開發人員,還有我們集成多工具BlockCanary也可以在測試期檢測到。

(3)線上:如果需要線上檢測,那麼自己可以搭建一個APM平臺,來收集卡頓相關的數據然後來進行卡頓優化。當然,我們也可以使用第三方平臺,如聽雲、OneAPM平臺。

講完卡頓性能優化後,技術總監聊了點java基礎,涉及點內容沒有深入,然後,問了幾個非技術性問題。

面試官問:說說你的幾個與工作相關的優缺點?

這個問題很多面試官都喜歡問,這個每個人的情況不同。舉個例子,如英文不錯,看英文的技術文檔無障礙;工作認真負責;熱愛新技術;喜歡研究一些深入的技術等等。缺點如,執行力有的時候不夠,安排好的事情沒能及時完成;做工作的時候有的時候比較專注於一些疑難問題,從而忘記了工作進度,這個時候加加班處理下沒多大問題的。

ps:這個有缺點的問題儘量都能答上,如果答得不好,會大大減分,因而失去一個offer。

最後,面試官問:你還有什麼問題需要問的嗎?

我答:您這邊項目組情況是怎麼樣的?有多少個Android開發的?工作時間是怎樣的?

ps:面試快結束的時候,一般面試官都會這麼問,當面試官提這個問題的時候最好別什麼都不問,這樣的話會大大減分,面試官會覺得你對他們公司不關心。但問問題的時候也不要隨便問,根據不同的情況,如面試官是做技術的,我們一般可以問問技術團隊是怎樣,大概要做一個怎樣的項目,然後,這個項目有什麼規劃。如果是HR,我們可以問項目情況,團隊情況,上班時間等等。還有一個問題,最好問下,“貴公司對該職位有什麼期望?”,這樣可以瞭解這個職位和自己的契合度,方便以後入職。

三面:人事

人事這塊問的非常詳細,像上家公司做的每個項目,項目開發週期,團隊多少人等等。這塊根據自己以往的項目經驗來說就行。一般正常來說,面到人事,差不多offer就快到手了。但是,也不是絕對,有的公司人事把關比較嚴格,在人事這塊面掛的也出現過兩次。這裏來段小插曲,當時,人事問了一個問題,“你開發中遇到的技術難點是什麼?”,人事問這個,當時,腦袋卡殼了,一時不知道怎麼回答,不過後來緩過神來,既然是人事問題,那我就把抓着某個技術說就可以了,人事就沒繼續往下問。如果是技術人員問到這塊,遇到腦袋卡殼,基本是掛了。在面試中,我遇到過一次,在後面的連載中繼續分享。

怎個面試結束下來,就是談offer了,我跟人事談期望22K,不過一直沒談下來哈。

最後,說下最近的面試成果,目前拿到了多家公司的offer,知名點的如OPPO、魅族、金蝶、珍愛網等等,還有一些不太知名點的公司,如岩心、ECAR等,談到的薪資分佈在16k到30K,最高的達到30k,百分之九十分佈在20k以上,當然,也有些公司沒有面到最後,後續也都分享出來,希望讀到的朋友們多多指教。

下面是整理的一些面試過程中Android高級知識點:

Android高級知識點

一、Android性能優化

1.描述一下android的系統架構?
2.Android線程間通信有哪幾種方式
3. 如何避免OOM異常
4.Android程序運行時權限與文件系統權限的區別?
5.Hybrid 通信原理是什麼,有做研究嗎?
6.Framework工作方式及原理,Activity是如何生成一個view的,機制是什麼
7.ANR是什麼?怎樣避免和解決ANR
8.Devik進程,linux進程,線程的區別
9.卡頓 {如何檢測卡頓,卡頓原理是什麼,怎麼判斷頁面響應卡頓還是邏輯處理造成的卡頓} ,BlockCanary 的原理

二、Android熱修復、插件化、組件化

1.談談對 ClassLoader 的理解
2.自定義 ClassLoader
3.插件化爲什麼會出現,如何代碼加載,資源加載,代理 Hook)
4.如何從一個老項目一步步實現組件化,主要問思路,考察架構能力和思考能力。(需要考慮很多,每一步做什麼,順序很重要)
5.組件化和模塊化的理解與區別?
6.class文件加載Dex原理
7.Gradle自動補丁包生成原理

三、Android Framework、 ROM定製、Ubuntu、Linux之類的問題

1.Binder 機制(IPC、AIDL 的使用)
2.Activity 啓動流程,App 啓動流程
3.Android 圖像顯示相關流程,Vsync 信號等
4.爲什麼使用 Parcelable,好處是什麼
5.AMS 、PMS
6.類加載機制
7.Ubuntu編譯安卓系統
8.對Dalvik、ART虛擬機有什麼瞭解?
9.JVM內存區域,開線程影響哪塊內存

四、架構設計和設計模式

1.MVC MVP MVVM原理和區別
2.項目中常用的設計模式
3.說說EventBus作用,實現方式,代替EventBus的方式
4.Fragment如果在Adapter中使用應該如何解耦?
5.實現一個Json解析器(可以通過正則提高速度)
6.從0設計一款App整體架構,如何去做?
7.Fragment如果在Adapter中使用應該如何解耦?
8.談談你對Android設計模式的理解

五、算法

1.手寫一個冒泡排序
2.快速排序的過程、時間複雜度、空間複雜度
3.蟻羣算法與蒙特卡洛算法
4.兩個不重複的數組集合中,求共同的元素。
5.2000萬個整數,找出第五十大的數字?
6.求1000以內的水仙花數以及40億以內的水仙花數
7.寫出你所知道的排序算法及時空複雜度,穩定性
8.二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑

六、網絡和安全機制

1.TCP的3次握手和四次揮手
2.HTTP與HTTPS的區別以及如何實現安全性
3.App 是如何沙箱化,爲什麼要這麼做?
4.談談你對WebSocket的理解
5.請解釋安卓爲啥要加簽名機制?
6.HTTP1.0與2.0的區別
7.視頻加密傳輸
8.https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解?

七、Flutter相關

1.Flutter 中的生命週期
2.Widget 和 element 和 RenderObject 之間的關係?
3.Flutter中的Widget、State、Context 的核心概念?是爲了解決什麼問題?
4.State 對象的初始化流程?
5.講一下flutter的幾個特點/優缺點
6.Flutter 如何與 Android iOS 通信?
7.說一下什麼是狀態管理,爲什麼需要它?
8.說一下 BLoC 模式?

面試系統複習路線

有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會只留給有準備的人。我們只有時刻準備着,才能在機會到來的時候,去抓住它。

這裏給大家分享一下我的面試複習路線,有需要的朋友可以參考一下:

1、看視頻進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。

2、進行系統梳理知識,提升儲備

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

系統學習方向:

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

3、讀源碼,看實戰筆記,學習大神思路

“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。

4、面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章