面試對于程序員來說是很重要的事情,面試結(jié)果的好壞直接決定了能否進(jìn)入某個公司以及以什么級別和待遇進(jìn)入某個公司。這篇文章主要針對Android開發(fā)者的面試,以下是安卓大牛給面試者的幾個建議。
什么是合適的候選者
在介紹如何面試之前,這里先從公司的角度來分析:”到底什么樣的候選者是公司所需要的技術(shù)人才?“就我在百度的一些面試官經(jīng)驗來說,一個具有如下特征的Android程序員是我們所需要的:
1. 具有本科及以上學(xué)歷(名校更好)
2. 具有2年及以上的工作經(jīng)驗(名企更好)
3. 技術(shù)扎實,有技術(shù)追求和工作激情
4. 良好的溝通和協(xié)作
在上面的四條中,其中第3條是最為重要的,即技術(shù),在百度技術(shù)是大家所推崇的,因此技術(shù)是決定能否通過面試的最重要最直接的原因。一般來說,越是大公司,其對技術(shù)的要求就越高,盡管部分崗位并不需要那么好的技術(shù),但是為了對候選者做出區(qū)分,其面試過程仍然會面試一些稍微深入的話題,相信大家都有所體會。
除了技術(shù)以外,良好的溝通和協(xié)作能力也是比較重要的。也許很多人覺得這個比較抽象,心里會想:”你怎么知道我有沒有良好的溝通和協(xié)作能力呢“?其實這個問題并不難,面試過程就是一次溝通過程,如果不能和面試官很好地溝通,這就說明候選者的溝通有問題。如何很好地和面試官溝通呢?給如下幾點建議:
–禮貌和尊重。
–聽懂面試官的問題并直接回答。
有些候選者聽不懂面試官的問題,還有些面試者總是不直接回答問題,或者也許是不會的原因,就開始轉(zhuǎn)彎抹角甚至轉(zhuǎn)移話題,我認(rèn)為這是很不好的,人要用于承擔(dān),即使這個問題不會,那也可以大聲地說出來”不好意思,這個我不太會“,甚至還可以虛心地請教下面試官,面試不僅僅是一次找工作的過程,也是一次自我學(xué)習(xí)和提高的過程。大家要知道的是,不是必須全部答對問題才能通過面試,只要大部分問題能回答出來并且候選者的態(tài)度良好,那么這樣的候選者仍然能通過面試,當(dāng)然態(tài)度不好的候選者,即使技術(shù)很好也很大可能通不過面試。
–謙虛謹(jǐn)慎、態(tài)度友好。
有些候選者在面試的時候不謹(jǐn)慎,給人一種隨意的感覺,比如坐姿不端正,翹著二郎腿等等,換句話說就是別太隨意,作為面試官公司都要求不能太隨意,何況候選者呢!太隨意的舉動會給對方一種不被尊重的感覺。關(guān)于謙虛,這個就不必多說了,任何時候都要謙虛,面試過程中驕傲自大(俗稱”得瑟“),是很容易被斃的。態(tài)度友好,就是要讓面試官感受到你的誠意,這樣大家溝通起來才比較舒服和自在。
下面對學(xué)歷和工作經(jīng)驗做一些說明,學(xué)歷并不是一個硬性要求,即使候選者學(xué)校不怎么好也是有可能通過面試的,這就要求候選者技術(shù)非常扎實。而工作經(jīng)驗,之所以是2年以上,這是因為社會招聘的對象一般都是有一定工作經(jīng)驗的,而1年工作經(jīng)驗略短了點,拿百度來說,社招的最低級別一般為T4,差不多剛好就是2年經(jīng)驗左右。
這里做下總結(jié),理想的候選者應(yīng)該是這樣的:
1. 扎實的技術(shù)功底,有技術(shù)追求(必須)
2. 態(tài)度、溝通和為人都很好(必須)
3. 2年左右工作經(jīng)驗(基本必須)
4. 名校、名企、高學(xué)歷(非必須,加分項)
基本來說,滿足1和2就能通過面試,3和4都是次要條件,但是一般來說不滿足3就很難滿足1,不要說特例,木有參考意義。
由此可見,技術(shù)是面試結(jié)果的決定因素。那么到底技術(shù)掌握到什么程度才能比較輕松地通過面試呢?說了那么多,好像和Android沒有一點關(guān)系,下面就開始以Android為例來分析下面試過程所需的技術(shù)。
Android面試過程所需要掌握的技術(shù)
一場面試都有一個流程,拿Android面試來說,面試內(nèi)容不可能全是Android問題,里面應(yīng)該會有編程基礎(chǔ)相關(guān)的問題。我對Android面試中的問題做了下分類,如下所示:
一般來說,一個Android應(yīng)用開發(fā)崗位是不需要太強(qiáng)的數(shù)據(jù)結(jié)構(gòu)和算法的,但是這并不意味著候選者可以完全不懂?dāng)?shù)據(jù)結(jié)構(gòu)和算法,所以數(shù)據(jù)結(jié)構(gòu)和算法大家還是要稍微了解下,由于它不是必須的,所以就算面試過程中回答的不好也沒關(guān)系,只要后面的Java、Android相關(guān)的問題能夠完美回答就好。有同學(xué)和我反饋,說面試掛在了數(shù)據(jù)結(jié)構(gòu)和算法,這在社招中應(yīng)該是不多見的,這多半是因為Android的問題也沒有很好地回答出來,這就是社招和校招的不同之處,校招看基礎(chǔ),社招看技術(shù)深度和業(yè)務(wù)。
關(guān)于設(shè)計模式和架構(gòu),其實中高級面試對這個的要求并不是特別高,熟悉下常見的設(shè)計模式基本就ok,比如單例模式、工程模式、觀察者模式等。
接下來主要描述下面試過程中對Android技術(shù)的要求。我對Android的技術(shù)類別做了一下劃分,如下所示:
對于大部分面試者來說,大家的目標(biāo)崗位應(yīng)該是中高級,中級崗位(百度T4)需要掌握的知識點是:基本知識點、深入知識點;高級崗位(百度T5)需要掌握的知識點是:基本知識點、深入知識點、基本知識點的細(xì)節(jié)和系統(tǒng)核心機(jī)制。
1.基本知識點
比如四大組件如何使用、如何創(chuàng)建Service、如何進(jìn)行布局等。這類知識是需要熟練掌握的,并且也沒什么難度。
2.稍微深入的知識點
比如AIDL、Binder、多進(jìn)程、View的繪制流程、事件分發(fā)、消息隊列等。這類知識對于高級開發(fā)者來說也是必須掌握的,然而相信很多候選者在面試之前并不能對這些問題了如指掌。這些問題基本都是面試過程中很常見的問題,也是高級崗位所必須掌握的問題,不搞定這些問題無法達(dá)到百度的高級工程師的標(biāo)準(zhǔn),因此也不可能通過面試。
3.基本知識點的細(xì)節(jié)
比如Activity的啟動模式和標(biāo)記位、Service同時處于start和bind狀態(tài)時的停止問題、AsyncTask的同步異步問題以及使用時的限制等,這種問題還有很多。這類知識點,大家在開發(fā)過程中可以并不會去注意,這會導(dǎo)致一個問題,那就是開發(fā)應(yīng)用沒問題,但是在面試時面試官只要稍微問下細(xì)節(jié)或者特殊情況,就hold不住了。 這類問題也是高級開發(fā)者所需要掌握的,有些面試官喜歡問一些看似刁鉆的問題,但是候選者如果回答不了也是不好的。
4.系統(tǒng)核心機(jī)制
比如主線程的消息循環(huán)、主線程如何和AMS如何跨進(jìn)程交互、SystemServer進(jìn)程中的各種Service的工作方式、AsyncTask的工作原理等。這類知識對于高級開發(fā)者也是建議掌握的,因為它們可以讓開發(fā)者理解Android的運(yùn)行體系。 這類問題并不是所有的Android面試都會涉及到,但是技術(shù)含量高的大公司有可能涉及此類問題。
5.瑣碎的知識點
此類知識點我把它們定義為一些重要但是沒有什么技術(shù)難度的問題,比如如何打開一個網(wǎng)頁、如何打電話、如何發(fā)短信、如何定位、多點觸控等,這類問題往往不好記憶,但是需要的時候去查一下就能立馬搞定。這類問題基本上不會出現(xiàn)在面試過程中。
大家結(jié)合自己對Android的學(xué)習(xí)過程以及面試經(jīng)驗,在面試中遇到的問題是不是都是包含在上面的5個分類之中呢?對于1和5相信所有人都沒有問題,但是對比2、3、4中的內(nèi)容,大家是不是都能很好地Cover呢?換句話說,如果2、3、4中的內(nèi)容大家都能很好地掌握,面試中的問題還能難倒我們嗎?在前面的分析中提到,技術(shù)是覺得面試是否成功的關(guān)鍵因素,那么在面試前要做的就是把技術(shù)搞好,同時注意溝通和態(tài)度,這樣的話通過面試豈不是很簡單的事?
麥子學(xué)院:讓最前沿的IT技能觸手可得
少年 關(guān)注我們的微信公眾號 麥班長:maibanzhang
帶你輕松高薪就業(yè)