標籤:

如何面試 Android 工程師?

如何面試android工程師?要求有哪些基本素質?


其實知乎的「Android 開發」話題下有很多問題是適合做面試題的:

http://www.zhihu.com/topic/Android-%E5%BC%80%E5%8F%91

可以翻一翻,開放式的和實操類的都有。舉例:

Android 中線程與線程,進程與進程之間如何通信?

activity,intent 和 service 是什麼關係?

handler 機制的原理是什麼?

橫豎屏切換時候 activity 的生命周期?


拿自身來舉個栗子把= ̄ω ̄=~

先介紹一下自己的情況,我是一名2016應屆畢業生,自學的android開發,面試過好多公司(目前待業/(ㄒoㄒ)/),有實習生的,也有社招的,也有校招的,下面就從這三個來說吧:

實習生:

對於實習生而言的話,可能對於android方面的要求並不是特別的高,比較注重基礎,但是基本的得會,比如:

  1. 四大組件基本的概念以及使用。
  2. activity的生命周期流程,這是最基本的,但是你得清楚到底是啥時候調用各個方法,如一個頁面(A)當前正在跟用戶交互,彈出一個Dialog後,A的各個回調方法的流程調用情況等。
  3. 數據存儲的方式,五大存儲方式的基本使用。
  4. 掌握網路通信中httpClient和HttpUrlConnection基本使用,任何網路框架都是從最簡單的寫起,所以這個必須要知道。
  5. 熟悉json解析,JsonObject,JsonArray等等的各種使用。
  6. 會導入第三方庫。
  7. 線程(Thread,Runnable)的使用。
  8. 主線程和其他線程的交互(Handler,AsyncTask)。

校招:

對於校招而言的話,主要是對於計算機基礎能力的考察,尤其bat等公司更甚,當然android方面也是需要的,主要考察的方面是:

  1. 熟練掌握操作系統原理
  2. 熟練掌握計算機網路
  3. 熟練掌握數據結構以及演算法
  4. 良好的java基礎
  5. android基本的都要會,在此基礎上需要掌握一定的源碼方面的知識,比如handler源碼,AsyncTask源碼,觸摸事件機制,view的事件分發機制,清楚他們是如何由0到1完成各自的工作的。
  6. 閱讀過相關開源項目,對開源項目做過校正或者貢獻的,Github好多小星星的~

社招:

再講之前先吐槽一下某大型互聯網照片處理類公司(B)的HR,說好的校招,結果把我安排到社招相關去了,嗶了狗了。

對於社招方面,個人了解的也比較少,主要是經歷了B這個公司的面試,所以就面試的內容來講講吧,拋磚引玉好了,個人覺得社招尤其注重你在工作項目中的對於代碼整體框架的整體認識以及熟練掌握程度:

  1. 對於源碼有一定的研究,Binder機制的理解,熟練自定View,能夠對開源庫進行再次的封裝,改寫等等,AWS,WWS等等有一定的認識。
  2. 閱讀過開源項目源碼,清楚開源項目的構建歷程,優缺點等。
  3. 設計模式的理解與運用。
  4. 對於上任公司項目的理解,能夠清楚的講解自己編寫代碼的思路。
  5. 獨立解決Bug的能力,優化代碼的能力,重構代碼的能力。
  6. 良好的計算機基礎。

最最重要的一點,我覺得是:

對於技術是否有熱情,有求知慾,願意去嘗試,去了解新的技術,這是我認為最重要的一點。

僅僅針對個人情況寫的,有什麼寫的不對的地方還請大家多多指正

另:

Jerry Chan 博客地址,有興趣的朋友可以看看,共同進步~


可以從各個方面來看,技術方面,可以問問android系統的一些基礎知識,如果對方是有項目經驗的,可以舉實例來讓對方給出技術解決方案,我個人比較喜歡問實例,因為來面試的人把基礎知識都背的差不多了,再怎麼問都差不多,只有實例才可以看出對方到底有沒有實際項目經驗,和知識點的運用能力。

工作能力方面,可以看看對方解決問題的方法,面對問題的態度,責任心等。

往往對方面試的時候,從回答你問題的方式,就可以看出這個人是否有自信,是否敢於承擔責任,問其A,答曰B的基本可以無視之。

技術能力很重要,但是我覺得態度更重要。


先看看他用神馬手機


說一下我面試過程中,覺得幾個有意思且夠有深度的問題吧。

一: 如果打包過程中apk的體積過大了你有什麼好的瘦身方法?(一針見血,沒有實際項目的人是不會有這種經驗的,只有在項目後期中實際遇到了才會考慮到這個問題!)

二:利用第三方工具過程中,是不是有重構過第三方代碼來解決或是預防65535的經歷?

三:說一下你項目中使用到的第三方平台。

四:(公司主要是研究哪方面的就側重哪方面去問, 舉個栗子,如果公司是做視頻的,那麼就問有沒有對直播、彈幕有過研究? 如果有,具體研究的哪方面?)

五:展示下自己的項目, 然後去問怎麼實現,實現的過程中遇到了什麼困難或者問題,怎麼解決的, 當然過去很久了很有可能就會忘記了, 這個時候再問在github或者是csdn再或者其他的平台有過記錄沒有?

隨心動筆,聊勝於無。


每一家公司都不同,這個無法判斷的。


自己本身要有本事


有能力的話是很好應聘的呢,,


我覺得

第一:是否真的有投身於這個行業的覺悟,是否真的喜歡編程。

第二:Java基礎要有,具體的依據每個公司的招聘需求而定,至少,多線程,網路編程要會。

第三:Android的主要組件是基礎,一定要會,越熟悉越好。如activity就有很多點可以考察,比如啟動模式,與fragment的交互,橫豎屏切換,Intent和Intent-Filter的使用等。還有Handler原理至少要懂。

第四:對於三方庫的使用和熟悉程度

第五:實際項目開發經驗,要問他最擅長什麼,然後讓他表述出來。

第六:有需要的話應該還是根據實際情況考驗下實際操作能力,最好是可以看出他的敲碼能力和對工具的熟悉程度。

最後一點,在以上技術指標滿足的情況下,個人的性格,德行,追求是否是和公司一致,如果是我,太沖的人和沒有自信的人,即使以上條件滿足,我也不一定會要


首先必須來一套全英文的筆試題吧,不考別的,就考java基礎,線程,io流,異常。

數據結構與演算法來簡單的,排序,搜索,棧,隊列,二叉樹等比較基礎的。

筆試完你就知道應聘者的基礎了。

面試再問應聘者的作品,項目,有無寫博客,有沒有給github開源項目貢獻過代碼,都可以參考。


以個人的經驗可以從以幾個方面參考

一、語言表達能力。

語言表達能力很重要。在開發的過程中,需要把問題描述清楚,交流無障礙。

二、獨立思考問題

開發過程中,終會遇到問題的,可以考量一下面試者的思考方式。比如 出一些演算法題。

三、技術相關的

包括java、Android、演算法。

java: 抽象類、介面、自動裝配、反射、異常、註解、文件讀寫、線性安全、java 虛擬機、代碼規範相關等等。

Android:handler的機制、自定義View、進程通信、事件處理、網路處理、內存優化、插件化思想、設計模式、類載入器等等

具體要問怎麼樣的,根據項目來。

演算法:幾大排序選一個、鏈表、二叉樹等等。


推薦閱讀:

pwa的出現會對移動端原生開發造成什麼影響?
Android系統的後台程序和後台自啟動程序和後台推送到底是個什麼關係?
如何評價「微軟仍未放棄Win10兼容安卓應用」的新聞?
如何評價 LG G5 手機及家族系列產品?
Android 4.0 需要殺進程的軟體嗎?

TAG:Android |