1. 程式人生 > >給Android程式設計師的一些面試建議

給Android程式設計師的一些面試建議

前言

應大家的邀請,寫一篇關於Android面試相關的部落格,需要說明的是本文只針對Android應用開發,不針對rom開發以及逆向工程。我想面試對於程式設計師來說是很重要的一件事件,面試結果的好壞直接決定了能否進入某個公司以及以什麼級別和待遇進入某個公司。我參加面試的經驗並不多,但是以面試官的身份面試別人倒是有很多次,所以我可以結合這些經驗來介紹下如何更好地把握一個面試。

什麼是合適的候選者

在介紹如何面試之前,這裡先從公司的角度來分析:”到底什麼樣的候選者是公司所需要的技術人才?“就我在百度的一些面試官經驗來說,一個具有如下特徵的Android程式設計師是我們所需要的:
1. 具有本科及以上學歷(名校更好)
2. 具有2年及以上的工作經驗(名企更好)
3. 技術紮實,有技術追求和工作激情


4. 良好的溝通和協作

在上面的四條中,其中第3條是最為重要的,即技術,在百度技術是大家所推崇的,因此技術是決定能否通過面試的最重要最直接的原因。一般來說,越是大公司,其對技術的要求就越高,儘管部分崗位並不需要那麼好的技術,但是為了對候選者做出區分,其面試過程仍然會面試一些稍微深入的話題,相信大家都有所體會。

除了技術以外,良好的溝通和協作能力也是比較重要的。也許很多人覺得這個比較抽象,心裡會想:”你怎麼知道我有沒有良好的溝通和協作能力呢“?其實這個問題並不難,面試過程就是一次溝通過程,如果不能和麵試官很好地溝通,這就說明候選者的溝通有問題。如何很好地和麵試官溝通呢?給如下幾點建議:
- 禮貌和尊重


- 聽懂面試官的問題並直接回答。有些候選者聽不懂面試官的問題,還有些面試者總是不直接回答問題,或者也許是不會的原因,就開始轉彎抹角甚至轉移話題,我認為這是很不好的,人要用於承擔,即使這個問題不會,那也可以大聲地說出來”不好意思,這個我不太會“,甚至還可以虛心地請教下面試官,面試不僅僅是一次找工作的過程,也是一次自我學習和提高的過程。大家要知道的是,不是必須全部答對問題才能通過面試,只要大部分問題能回答出來並且候選者的態度良好,那麼這樣的候選者仍然能通過面試,當然態度不好的候選者,即使技術很好也很大可能通不過面試。
- 謙虛謹慎、態度友好。有些候選者在面試的時候不謹慎,給人一種隨意的感覺,比如坐姿不端正,翹著二郎腿等等,換句話說就是別太隨意,作為面試官公司都要求不能太隨意,何況候選者呢!太隨意的舉動會給對方一種不被尊重的感覺。關於謙虛,這個就不必多說了,任何時候都要謙虛,面試過程中驕傲自大(俗稱”得瑟“),是很容易被斃的。態度友好,就是要讓面試官感受到你的誠意,這樣大家溝通起來才比較舒服和自在。

下面對學歷和工作經驗做一些說明,學歷並不是一個硬性要求,即使候選者學校不怎麼好也是有可能通過面試的,這就要求候選者技術非常紮實。而工作經驗,之所以是2年以上,這是因為社會招聘的物件一般都是有一定工作經驗的,而1年工作經驗略短了點,拿百度來說,社招的最低級別一般為T4,差不多剛好就是2年經驗左右。

這裡做下總結,理想的候選者應該是這樣的
1. 紮實的技術功底,有技術追求(必須)
2. 態度、溝通和為人都很好(必須)
3. 2年左右工作經驗(基本必須)
4. 名校、名企、高學歷(非必須,加分項)
基本來說,滿足1和2就能通過面試,3和4都是次要條件,但是一般來說不滿足3就很難滿足1,不要說特例,木有參考意義。
由此可見,技術是面試結果的決定因素。那麼到底技術掌握到什麼程度才能比較輕鬆地通過面試呢?說了那麼多,好像和Android沒有一點關係,下面就開始以Android為例來分析下面試過程所需的技術。

Android面試過程所需要掌握的技術

一場面試都有一個流程,拿Android面試來說,面試內容不可能全是Android問題,裡面應該會有程式設計基礎相關的問題。我對Android面試中的問題做了下分類,如下所示:

類別 描述
資料結構和演算法 熟悉或者知道
Java 熟練掌握
Android 熟練掌握
設計模式和架構 熟悉

一般來說,一個Android應用開發崗位是不需要太強的資料結構和演算法的,但是這並不意味著候選者可以完全不懂資料結構和演算法,所以資料結構和演算法大家還是要稍微瞭解下,由於它不是必須的,所以就算面試過程中回答的不好也沒關係,只要後面的Java、Android相關的問題能夠完美回答就好。有同學和我反饋,說面試掛在了資料結構和演算法,這在社招中應該是不多見的,這多半是因為Android的問題也沒有很好地回答出來,這就是社招和校招的不同之處,校招看基礎,社招看技術深度和業務。

關於設計模式和架構,其實中高階面試對這個的要求並不是特別高,熟悉下常見的設計模式基本就ok,比如單例模式、工程模式、觀察者模式等。

接下來主要描述下面試過程中對Android技術的要求。在我對Android的理解這篇文章中,我對Android的技術類別做了一下劃分,如下所示:

類別 描述 開發者所需級別
基本知識點 熟練掌握 初中級
深入知識點 熟練掌握 中高階
基本知識點的細節 掌握 高階
系統核心機制 熟悉、掌握 高階、資深
瑣碎的知識點 瞭解 所有級別

對於大部分面試者來說,大家的目標崗位應該是中高階,中級崗位(百度T4)需要掌握的知識點是:基本知識點、深入知識點;高階崗位(百度T5)需要掌握的知識點是:基本知識點、深入知識點、基本知識點的細節和系統核心機制。
1. 基本知識點
比如四大元件如何使用、如何建立Service、如何進行佈局等。這類知識是需要熟練掌握的,並且也沒什麼難度。
2. 稍微深入的知識點
比如AIDL、Binder、多程序、View的繪製流程、事件分發、訊息佇列等。這類知識對於高階開發者來說也是必須掌握的,然而相信很多候選者在面試之前並不能對這些問題了如指掌。這些問題基本都是面試過程中很常見的問題,也是高階崗位所必須掌握的問題,不搞定這些問題無法達到百度的高階工程師的標準,因此也不可能通過面試。
3. 基本知識點的細節
比如Activity的啟動模式和標記位、Service同時處於start和bind狀態時的停止問題、AsyncTask的同步非同步問題以及使用時的限制等,這種問題還有很多。這類知識點,大家在開發過程中可以並不會去注意,這會導致一個問題,那就是開發應用沒問題,但是在面試時面試官只要稍微問下細節或者特殊情況,就hold不住了。 這類問題也是高階開發者所需要掌握的,有些面試官喜歡問一些看似刁鑽的問題,但是候選者如果回答不了也是不好的。
4. 系統核心機制
比如主執行緒的訊息迴圈、主執行緒如何和AMS如何跨程序互動、SystemServer程序中的各種Service的工作方式、AsyncTask的工作原理等。這類知識對於高階開發者也是建議掌握的,因為它們可以讓開發者理解Android的執行體系。 這類問題並不是所有的Android面試都會涉及到,但是技術含量高的大公司有可能涉及此類問題。
5. 瑣碎的知識點
此類知識點我把它們定義為一些重要但是沒有什麼技術難度的問題,比如如何開啟一個網頁、如何打電話、如何發簡訊、如何定位、多點觸控等,這類問題往往不好記憶,但是需要的時候去查一下就能立馬搞定。這類問題基本上不會出現在面試過程中。

大家結合自己對Android的學習過程以及面試經驗,在面試中遇到的問題是不是都是包含在上面的5個分類之中呢?對於1和5相信所有人都沒有問題,但是對比2、3、4中的內容,大家是不是都能很好地Cover呢?換句話說,如果2、3、4中的內容大家都能很好地掌握,面試中的問題還能難倒我們嗎?在前面的分析中提到,技術是覺得面試是否成功的關鍵因素,那麼在面試前要做的就是把技術搞好,同時注意溝通和態度,這樣的話通過面試豈不是很簡單的事?

如何學習Android面試中所需的技術

這裡主要是指上面2、3和4這三個類別中的技術,說實話,這並不是一件很簡單的事。那麼到底如何學習呢,這裡先大概說下,隨後會有一系列部落格來詳細地介紹這些技術的學習過程。首先要閱讀原始碼,因為面試中的很多問題需要從原始碼中找答案,其次要主動學習平時工作中遇不到的一些技術,由於專案的原因,我們不可能通過公司的專案來解除到Android中所有的重要技術,尤其是一些規模不大的專案來說,這個時候要主動去學習。也許有人要問:”我怎麼知道哪些東西是需要主動學習的呢?“這的確是個問題,但是我在前面的分類中做了一些舉例,大家可以先嚐試學習下那些技術,它們都是很重要且時常在面試中出現的技術問題。另外學習的過程中要注意積累,比如寫部落格、記筆記都是可以的,同時在Github上做開源也是不錯的選擇。

另外,為了更好更快地學習Android面試中所需的技術,大家可以閱讀我的一本書《Android開發藝術探索》,書中對前面的2、3和4類別中的技術細節做了詳細深入的講解,通過這本書可以達到立竿見影的效果。說到《Android開發藝術探索》,我不得不說,我寫這本書的初衷是幫助Android程式設計師更好地成長為高階工程師,直到有一天一些讀者和我反饋,說這本書的內容很適合面試,我這才突然發現,原來這本書的內容真的適合面試,這也算是無心插柳吧。至於書的內容我就不做過多介紹了,大家可以看目錄、樣章以及讀者評價,如果覺得不適合自己的話就不要購買了。

相關推薦

Android程式設計師一些面試建議

前言 應大家的邀請,寫一篇關於Android面試相關的部落格,需要說明的是本文只針對Android應用開發,不針對rom開發以及逆向工程。我想面試對於程式設計師來說是很重要的一件事件,面試結果的好壞直接決定了能否進入某個公司以及以什麼級別和待遇進入某個公司。我

迷茫的Java程式設計師一些中肯建議,你還在虛度光陰嗎?

最近好多人私信問我,該怎樣才能成為高薪架構師,還有一個就對當前的狀態感到迷茫,我在此做一個簡單的說明,或者對迷茫中的你來說有些許幫助。 當前你感到迷茫嗎? 有很多人對現在的工作感到很沒意思,因為當前的工作,完全是實現業務,技術上沒有任何提高。在這種狀態下就會感到迷茫,特別是一想到將來這種迷茫

一名年薪百萬阿里P8架構師寫Java程式設計師一些建議(架構師必備)

阿里P8架構師—Peter 畢業於海南大學,曾就職於阿里、蘇寧易購等一線互聯公司,十餘年Java從業經驗,系統架構師及微服務之先驅,JEECG急速開發框架的設計與佈道者。重點關注微服務設計與編排、高併發架構設計與重構、國內外前沿開源技術封裝及引進等領域。 1:架構師應不應該寫程式碼 合格

想提高自己程式設計效率的程式設計師一些個人建議

       我是一個程式設計師、設計師和企業家,也是 Asana 的聯合創始人。許多知名公司(如:Uber,Pinterest,Dropbox)都在使用這款提升團隊生產力的軟體。我在 Facebook 做開發經理時,設計過一個用於提升團隊生產力的工具,Facebook 至

大學生程式設計師的一點建議

小甲的一位讀者在最近遇到了一些問題,這些問題可能是大部分計算機相關專業的大學生在大學期間都會遇到

Android程式設計師看的前端教程(15)——CSS選擇器(5)

在之前的幾篇部落格中分別介紹了CSS中常用的選擇器:標籤選擇器,類選擇器,ID選擇器,萬用字元選擇器。在本篇部落格中,我們將學習這些選擇器的複合使用。 並集選擇器 並集選擇器由各個選擇器通過逗號連線而成的,它為不同的標籤設定相同的CSS樣式;語

2019年,JAVA程式設計師六個建議

  1、深入學習一項技能   或許你學習了很多各種高大上的框架與知識點,對其都瞭解一二,那麼你的視野是很廣的,但是這並不能很穩妥的為你的未來帶來更好的提升,正如18年末的程式設計師寒季,大批程式設計師被辭,我想我們應該更深入的去了解一兩相針對性的技能,比如分散式或者高併發等的技能領域,並將對應領

Android程式設計師看的前端和後臺教程

今日科技快訊 昨日,第四屆世界網際網路大會迎來了論壇議程最為集中的一天。上午,兩個重磅藍皮書《世界網際網路發展報告2017》、《中國網際網路發展報告2017》在烏鎮釋出,全面展現世界各國和中國網際網路發展現狀及未來趨勢。報告指出,全球移動網際網路爆發式擴張正在接近尾聲,人工智慧等新興網路資訊科技成為

Android程式設計師看的前端教程(09)——HTML5標籤(8)

課程安排 HTML不是程式設計語言,而是一種標記語言,它用一些標記、標籤來說明文字的顯示效果。要製作網頁和建立網站,就必須對HTML語言有所瞭解。客觀地講:HTML標籤沒有多少邏輯性而言,為了大家更好的理解和記憶,我們對這些標籤進行分門別類的講

Android程式設計師看的前端教程(21)——position定位

在該篇部落格中,將介紹和學習CSS的定位position。嗯哼,開始吧。 定位(position)的簡介 相對於浮動(float)而言定位(position)就要稍微簡單些了。定位(position)允許使用者較為精確地定義元素出現的相對位置,

Android程式設計師看的前端教程(08)——HTML5標籤(7)

課程安排 HTML不是程式設計語言,而是一種標記語言,它用一些標記、標籤來說明文字的顯示效果。要製作網頁和建立網站,就必須對HTML語言有所瞭解。客觀地講:HTML標籤沒有多少邏輯性而言,為了大家更好的理解和記憶,我們對這些標籤進行分門別類的講

Android程式設計師看的前端教程(25)——基本資料型別

JavaScript是弱型別程式設計語言,當進行變數宣告的時候無須指定變數的資料型別。但程式執行時,變數在記憶體中有對應的資料型別。在JavaScript中常用的基本資料型別有: number      數值型別

Android程式設計師一些面試建議

前言 應大家的邀請,寫一篇關於Android面試相關的部落格,需要說明的是本文只針對Android應用開發,不針對rom開發以及逆向工程。我想面試對於程式設計師來說是很重要的一件事件,面試結果的好壞直接決定了能否進入某個公司以及以什麼級別和待遇進入某個公司。我參加面試的經驗並不多,但是以面試官的身份

面試官的角度聊聊培訓班對程式設計師的幫助,同時培訓班出身的程式設計師一些建議

    談到程式設計師(尤其是零專案經驗的程式設計師)找工作,培訓班是個不可迴避的討論熱點。雖然本人也做過兼職Java培訓老師,多少了解些培訓班的事,但在這問題上無意為任何培訓學校站臺。而且本人一直在做技術面試官,所謂兼聽則明。     本文將從技術面試官的角度,再加

想用心走好java這條路的程式設計師一些建議

自學java沒那麼難 一:個人經歷 我的大學:第一年泡在圖書館看雜七雜八的書,跟學習毫無關係。第二年瘋狂打LOL,從白銀打到黃銅(黃銅守門員)。第三年上半年,被某人點醒,學習了整套C#知識體系,某馬。下半年又決定轉行,又開始了為期半年的自學java路程。所以我的經歷可能適用一些正在學校的學生或者準備轉行做

C++程式碼書寫規範——新手程式設計師一些建議

程式碼就是程式設計師的面子,無論是在工作中在電腦上寫程式程式碼還是在面試時在紙上寫演示程式碼我們都希望寫出整潔,優雅的程式碼

從篩選簡歷和麵試流程講起,再培訓班出身的程式設計師一些建議

    本人最近幾年一直在外企和網際網路公司承擔Java技術面試官的職責,大多面試的是Java初級和高階開發,其中有不少是培訓班出身的候選人。      在我之前的博文裡,從面試官的角度聊聊培訓班對程式設計師的幫助,同時給培訓班出身的程式設計師一些建議,我已

5年Android程式設計師面試位元組跳動兩輪後被完虐,請查收你的面試指南

大家應該看過很多分享面試成功的經驗,但根據倖存者偏差的理論,也許多看看別人面試失敗在哪裡,對自己才更有幫助。 最近跟一個朋友聊天,他準備了幾個月,剛剛參加完位元組跳動面試,第二面結束後,嗯,掛了… 所以啊,不管怎麼樣,不論是什麼樣的大小面試,要想不被面試官虐的不要不要的,只有刷爆面試題題做好全面的準備,當

#程式設計師面試,卻被一道“小學”演算法題刷下來:求幫忙看看

身為一名優秀的網際網路開發工程師,要求要具備良好的邏輯思維,要是連邏輯思維都沒有的話,那麼程式設計這一項工作絕對不適合你,因為你根本搞不懂程式碼之間的關係。所以程式設計師在面試的時候,會遭遇到一些相對基礎的邏輯思維題,如果你能做出來,那麼自然是好事,如果你做不出來,那麼也沒有關係,因為面試官只會看你

#java程式設計師的10條建議,吐血推薦!

1. 想清楚,再動手寫程式碼 剛入行的新手,為了展示自己的能力,拿到需求迫不及待地就開始上手寫程式碼,大忌! 如果有想學習java的程式設計師,可來我們的java學習扣qun:94311,1692免費送java的視訊教程噢!我整理了一份適合18年學習的java乾貨,送給每一位想學的小夥伴,並