標籤:

你遇到過哪些高質量的Android面試?

Android面試中你是怎麼把面試官帶到溝里去(被帶到溝里去?)?類似這種:

關於Java面試,你應該準備這些知識-續(20170324更新)


謝邀。

我回答的角度偏向於:如何組織一場高質量的Android面試。這兩年參與的面試非常多,說一下個人的經驗和看法,以下的回答主要針對社招:

  • 需要獲得的是什麼?

站在面試官的角度,一場面試下來我們需要獲得的信息是什麼?我認為最重要的是兩點:候選人的技術能力,與團隊的契合度。技術能力很好理解,契合度主要包括團隊風格和候選人風格是否契合,團隊目標和候選人預期是否一致,團隊能否滿足候選人的發展等。如果兩邊沒有足夠的默契,實際上對於團隊和個人都是一種傷害。

  • 誰去面試

這個選擇很重要,社招的同學背景,技術棧的差別非常大,如果不是對於候選人的工作比較了解,很難對候選人做出準確的評價。在我們實際的面試中,一般會對根據候選人的情況,對候選人的大致級別,基本能力和技術範圍有個預判。在我們組的面試中,我會在首輪Cover大部分的T2,如果候選人對UI方面特別擅長,一般會找 @RxRead 幫忙,如果預判是更高階的,則會交給更資深的工程師。

  • 面試的內容

前面 @Seasoninthesun 提到了根據候選人的技術點深入下去,我在實際的面試中也是這樣的。我的面試內容和技術相關的一般包括3個部分:基礎知識,候選人之前的工作,技術擴展。基礎知識之前提了很多,這裡不展開說,候選人之前的工作主要考察工作價值,技術深度和解決問題的能力,技術擴展主要考察候選人的技術熱情,主動性等這類。這裡我想提一點,除了基礎知識之外,沒有什麼問題是一定會問的,即使一場面試下來,一個和Android相關的問題都沒有,我覺得也很正常。

  • 對於開發者的建議

很多同學都想向更高階進階,但在實際的工作中,這是很困難的。我見過技術上很強的人都是用大型項目,不斷解決其中的困難和問題,慢慢喂出來的,小公司本身的開發工作在技術上就有很大的局限性,大公司里也不是每個人都有機會或者能力承擔更核心的工作。那麼在機會到來之前,好好完成手上的工作,打好基礎,把自己做的東西都搞通搞透,也是一種對自己負責任的表現。

面試的過程是一個相互交流和相互選擇的過程,也希望每位我們面試過的同學,都能從中有所收穫。


從三月底到現在,差不多每個星期都會面試一位應聘者,大部分為工作經驗在2-5年的,其中既有來自小型創業公司的,也有來自攜程甚至BAT的,所以我基本上算是跟各種類型的求職者都溝通過。

由於我自己曾經遇到過非常糟糕的面試官,所以易地而處時我經常思考的一個問題是如何能夠在短時間內最大化地考察出應聘者的真實水平。

經過一段時間的摸索,我發現針對求職者的項目經歷中涉及到的技術點深入下去,是一個不錯的方式。

舉個栗子,你說你做過自定義View,那我們就聊聊觸摸事件分發機制,很少有人能夠說清楚Activity中為何會有dispatchTouchEvent();

事件分發機制算簡單的了,如果回答上來了,就繼續問View的測量過程,不要說完整說清楚這個過程,就是能夠說到LayoutParams和MeasureSpec的都很少,更不用說wrap_content需要額外處理這個很重要的細節了;

又比如,你說你當初用了volley,那你在做技術選型時有什麼考慮,你知道volley有什麼缺點嗎,以及為什麼有這樣的缺點。

什麼,你用的是okhttp, 那你知道okhttp的原理是什麼,相對之前的網路請求框架的優勢是什麼。

其實如果對於http協議比較了解,也看過這些庫的源碼的話,基本都能夠回答上來,不過到目前為止也就遇到一個從百度出來的回答得比較好。

再舉個栗子,你說在項目中用到了熱修復,那你知道現在主流的熱修復技術都有哪些,各自的原理是什麼,各自的優缺點又是什麼,以及你為什麼採用這個方案而不是別的。

這其實算是非常簡單的問題了,但是昨天面試時那個哥們竟然說tinker採用的是dex分包的方案,對於AndFix和Robust也是一問三不知。

其實我覺得Android包含的知識點非常多,即使是P7甚至P8的大佬,也會有不知道的地方,所以有不會的知識點不丟人,但是至少對於自己曾經在項目中用過的東西,應該要熟練吧!


我曾經當過面試官

小公司,就我一個Android開發,所以趕鴨子上架,讓我當面試官。

面試對象:一位近40歲的碼農

背景:10年工作經驗,簡歷上非常花哨,做過各種Android開發。

簡介:說實話,當人事把簡歷遞到我面前的時候,我稍稍的驚呆了一下。這個工作經歷比我長一倍還多的「大牛」,要知道面試他的是我這麼個菜鳥級別的開發,會不會特鄙視我,以至於鄙視我們公司。偶們公司雖然小,但是我還是很有公司榮譽感的一個人。

所以,我先給自己定了幾條:

1. 不能問一些簡單的弱智白痴問題,必須要有深度,絕對不能讓「大牛」感到:「面試官的問題很Low!」的感覺。

2. 盡量少說話,不然萬一問了「大牛」一個問題,「大牛」回答後,反問我一個,我回答不上來,那更糗。

3. 還有幾個,當時想出來的,現在想不起來了。。。。

綜上,我上google,找技術群,搜了很多java和Android面試題,然後剔除那些我自己搞不太清楚的問題,戰戰兢兢的準備了幾個自以為既不冷門,又稍有深度的問題。

面試過程:

我: 簡述Handler消息機制。

「大牛」: 嗯?

我: (一定是問題沒描述清楚,怎麼上來就這麼緊張,嗯,放鬆)就是說一下Handler發送和接收消息的實現,尤其是Message的消息載體的工作流程。

「大牛」:這個,額,不太清楚。。。

我:(趕緊換一個方向)Service和IntentService有什麼區別?

「大牛」: Service和什麼?

我: IntentService。

「大牛」: 沒用過。。(他開始有點不好意思)

我: (哦,沒事,這個可能確實太冷門了)那Service和Activity之間的通訊怎麼實現?

「大牛」: 這個,通信,額,你指的是?

我: 就是傳值,比如Service裡面某個後台任務結束,怎麼通知當前活動Activity,並且把結果傳遞出去?

「大牛」: 哦,這個,啊,想想。。。

沉默10s後。。。

我: 額,比如用廣播的方式?(我都尷尬的主動給了他一點提示)

「大牛」: 哦,對,廣播,Broadcast之類的。

我: 那還有其他方式嗎?

「大牛」:嗯,廣播,額。。。(又是10s後)比如?

我: 介面回調。。。(算了不糾結這個,他知道廣播,那順便問個這個),那Context 的sendBroadcast和LocalBroadcastManager 的sendBroadcast有什麼區別?

「大牛」: 這個沒聽說過。。。

。。。。

後面的問題,我從MVP、MVVM等流行結構框架問到多線程同步,然後再問點擊事件分發,到自定義View,再聊動畫效果實現,基礎的ArrayList、HashMap底層實現,final static關鍵字用法,進階的設計模式裡面單例模式和觀察者模式的實現,java類載入、內存分配,他沒有一個問題能確確定定的回答出來,要麼「不知道」、「沒用過」,要不支支吾吾的說不出個123。

哦,對了,聊的過程中,他反覆說自己用過什麼什麼第三方的庫:什麼ImageLoader、什麼OKgo、什麼Pull2RefreshListView等等等等顯得自己很能幹。

我問他:有沒有開源過什麼自己寫的庫? 他說沒有。那我問他:讀過ImageLoader的源碼嗎?ImageLoader的本地緩存機制是怎麼實現的?他說不知道。我告訴他,你說的所有的庫,我都用過,並且絕大部分我都看過源碼實現,另外,像ImageLoader、Pull2RefreshListView這種庫,我工作兩年後就自己實現過簡易的版本,還分別做過擴展。

最終最終我確定這個所謂的10年工作經驗的「大牛」,就是網上那種「一個經驗用了N年而不是有N年經驗」的人。

回過頭我又仔細看了看他的簡歷,10年過程中,這個人換了8家公司,最長的一家呆了不到2年,最短的半年就不幹了,簡歷里也沒有自己獨立完成過的項目,簡歷上大部分所謂的Android項目,全部都是基礎控制項的簡單羅列,沒用過設計模式,沒用過分層框架設計,跟我第一年參加工作寫出的東西一個鳥樣。

上面寫了我面試別人的一次經歷,談不上高質量,但是我感覺我的問題應該算是基礎並且覆蓋面廣的了,後期又面試了幾個人,說實話都不盡如人意,這些面試者都有一個共同點:任何他們知道的知識點都是停留在知道、用過的層面,具體實現和怎麼擴展優化都答不出來。

再想想這兩年都在說Android開發飽和,我感覺這個說法有欠缺,飽和的是這種初級安卓開發,會簡單的頁面實現,但程序可擴展性和維護性,欠缺考慮,框架結構設計缺失。(當然不是說代碼必須按照條條框框的寫,而是說在合適的地方用合適的方法,某個地方明明一個方法函數就能解決,後期沒有什麼需要擴展的地方,那你非得按照JAVA面向對象思想,寫一個類對象,再用個設計模式一框,那就舍本求末了,這種是我站在小公司的唯一苦逼開發角度來說的,代碼質量重要,但是工作效率也得考慮。就像我提前完成了今天的任務,現在有空刷知乎。。。)

我感覺我現在依然徘徊在初、中級工程師級別,由於各種原因,比如家庭等等,我學習的時間也感覺比剛工作的時候少了好多,精力也差好多,一想到這些,就有種念頭:我可能永遠也達不到那種網上動輒能碼出10000 star開源庫的大牛,或者隨手寫個深入透徹的解惑答疑的技術博客就有N個評論和轉發的神人。所以我又有些動力,努力學習下去,這些人才應該成為自己的目標。

就像我的簽名: 一直在學習,總覺得自己是菜鳥。


我工作3年,面過幾個。

1. UI 線程是幹什麼用的?然後順著這條線開始問 Activity 的啟動過程以及啟動失敗的異常處理。

2. 事件分發流程。然後沿著這條主線問View實現原理,以及 View和主線程的聯繫,事件衝突的處理。

3. 做過什麼酷炫的動畫?沿著這條線問下動畫的基礎以及動畫和View ,主線程聯繫。

4. 用過什麼網路框架,各大網路框架的優缺點。順便考察 HTTP TCP/IP 的基礎。如果用過Okhttp,聊聊源碼,以及問什麼Okhttp比大多數網路庫好。

5.問問 新技術新理念,比如 RN,Rxjava等。

6. 聊聊插件化原理和各大實現方案利弊,順便聊聊路由問題。

7.安全,加固。


一次面試中遇到的幾個問題:

1、Activity的onStop()函數是否一定會被調用?

2、intent傳遞數據的限制,數據類型?數據大小?

3、伺服器正常,app訪問伺服器失敗的原因都有哪些?

4、有沒有關注Android動態?簡單說一下新版本的特性?


Binder機制,Zygote,Android系統啟動流程,Android源碼中的設計模式,插件化原理,熱更新(修復)原理,Android常用GitHub庫源碼(網路,圖片,注入,插件化等方面)


去年七月份集中面試了幾家公司感覺比較牛一點的面試官都更喜歡刨根問的特別細。比如一下:

Handler 在activity中造成內存泄漏的情形,為什麼泄漏以及在內存中的引用關係

觸摸事件的分發機制

幾大常用布局的對比

多線程多進程通信的一些東西

方法數超限

常用庫源碼如okhttp retrofit解析

jni用法部分

加密演算法以及https原理等

還會問一些項目中用到的設計模式

然後就是框架mvp mvc mvvm異同以及項目怎麼選框架等問題

然後還會問些讓你設計一個什麼系統要怎麼做,比如圖片的三級緩存等引入到底層用的常用的數據結構LinkedHashmap之類的內部實現問題

最後可能會問渠道打包問題如美圖打包以及熱更新的原理問題


匿名了。 雖然感覺匿名也沒啥用。說一次挺不愉快的面試經歷。

先不說遲到了半個小時,我頭一天還是蠻緊張的,畢竟知乎這個每天都在用的平台,想想如果在這工作肯定很激動。問了個蠻簡單的演算法,合併兩個數據,又展開問了些,複雜度等等。我個人認為代碼寫出來的還可以,後面展開提問確實也回答的一般。

之後問了我驗證碼系統怎麼設計。


我面試的是Android開發,確實不知道後端這些東西如何處理。 後來問了相關人士, Session,cookie等等幾個關鍵詞確實沒說出來。可能面試官覺得我太差了? 直接找介面掛了電話,也就沒有下文了。 確實也是我一直只關注了android開發。其他領域甚至一些皮毛都不了解,回家又惡補了一下網路相關知識。

但是我真的覺得這個面試官一點都不尊重我,遲到不說。從頭到尾沒有一個Android相關的問題,我從自我介紹開始就一直在說我一直在做Android 開發相關的學習。 也可能是我對其需求職位不匹配? 最後問過驗證碼的問題,就直接表示出一種不屑,說有事就先這樣吧。 :)


Q:哪一年的高考出題最完美?

A:沒有完美的出題,但都是能把人篩出檔次的考卷。


我前陣子正好都在面試,談談自己的一些看法。

PS:我只是一個三線城市的十八線水平碼農。

首先我想說的是:

面試面試,面的是同事!

面試面試,面的是同事!

面試面試,面的是同事!

先說說我一個面試經歷。

我之前的項目有用到語音識別,當時是客戶估計看到淘寶京東有這樣一個功能說想加上去,於是我們就找了第三方的SDK集成進去。使用也很簡單,就是調用一下start方法,在result方法獲得識別結果。給客戶用了一下他又不想用了。。(這種事常發生)

於是簡歷里就有寫到是用了語音識別功能,面試官就問了這個語音怎麼做的,我也回答說,這個語音當時只是稍微使用了一下,並沒有深入去研究。但他依舊不依不饒開始問我一大堆問題:上傳怎麼做的?有沒有壓縮?怎麼不做成本地識別呢,我覺得本地比在線識別好很多啊,更省流量巴拉巴拉,我只能盡量回答,有些就說不大清楚。

我就搞不懂了,一直問我不清楚的問題,看我為難的樣子很好玩是嗎?

面試為的是篩選面試者是否符合公司需求,能不能勝任這個崗位,還是讓你們這些面試官來刁難人玩的?

順帶說那次的面試官沒有一個是做android的,估計一個是不敲代碼的技術總監,一個是後台,全程沒有問半點android問題,大多問一些後台相關的問題比如用什麼協議傳輸,怎麼和後台交互等和android有點關係的問題,然後就是不斷的刁難問我語音怎麼做的,為什麼不這樣做的。

最後面試自然不了了之,這種面試過程簡直是 * 一般的體驗。

我也曾經面試過幾個人,有個印象比較深刻。

簡歷寫了兩三個項目,我問了一些android的基礎問題,他都回答的非常完整。

但拿項目演示的時候,就只有個畢業項目一般簡陋的Demo,問其他項目情況都說沒裝在手機、這塊不是他負責的、伺服器關了等理由各種敷衍。

大概就是造假工作經驗,估計他覺得前面的問題答得不錯,最後要的薪資比我還高。。

這種人想都不想直接pass了。

上個月就遇到一次很不錯的面試,當時是一個android架構師和一個項目經理來面試。

架構師先問了些我項目相關的問題,然後讓我設計一個無限層級的樹狀結構listview。

我答不上來,就簡單說了一下,然後說用recycleview來做,講了點recycleview的優點。

然後問一些基礎java問題,比如list和鏈式結構的增刪改查區別,我就比較詳細的說了一下list和hashMap,通過hashMap的儲存過程來說差異。

回答完這個後他就問了一下前陣子google I/O大會,我有什麼看法等非技術問題。

之後就是項目經理和我說他們現在要做什麼樣的APP,開發團隊的組建和公司的情況。

整個面試大概聊了一個半小時,很友好愉快。到後面我都沒啥問題問了,他還一個勁的說:「沒事慢慢想,想到啥問啥」。。。

公司要招一個人,大概薪資範圍是多少,通知面試或者篩選簡歷的時候就已經要判定是不是符合公司招聘需求,面試的時候進一步了解技術、學習能力、薪資等問題。

想要有高質量的面試,面試者要做好準備,包括從個人工作經驗、項目經驗的介紹。做過的功能點要熟悉,不要一問三不知。

一些深入的問題被問到不清楚不要緊,知識點這麼多,沒有多少人能全部答出來。上家公司面試時問我啟動模式是什麼,我一時短路答不上來,最後還是招我進去了。。很多時候不僅面知識點,還看你的交流和其他方面。

面試官也要做好準備,我很喜歡@Staray Xu的答案,他就為了面試別人做了不少功課。如果沒準備也沒關係,直接把公司的APP或者其他APP拿給他看,讓他說說怎麼做。

那種一個問題一直深入去問的其實體驗很差,說不定面試官自己都不知道答案,問一個兩個還好,大概了解對方的水平。要是整個面試都是在糾結某個問題,被面試的人感覺實際是很糟糕的。


遇到項目問題難以解決?新人適應項目時間長?怕項目延期?


我一般都是直接把一整天的工作內容或者常用的工作內容甩給面試者,不問理論不問其它,能在結果的地方答個八九不離十就行,個人比較過分偏分析過程和邏輯。。。說實話,我技術也他娘不咋地,尤其是說。。。


2014年的一場尷尬無比的面試。廣州4399,安卓開發崗位。

我可能是面試官人生中的第一個面試者,面試官,有點緊張。可能比我還緊張。

面試官:「你先,自我介紹下。」

我,很常規的自我介紹。

面試官:「你用過哪些設計模式?」

我:「單例,工廠,觀察者…」

面試官:「寫個簡單的單例,來看看」

我,寫了一個簡單的單例。

面試官:「額,我們是不是應該先給你做套技術題呢?」

我,一臉懵逼:「…額,是有筆試題,提問可能會更有目的性…」

面試官:「好吧,那你先回去吧……」

然後,我就回去了,然後就沒有然後了。。。

面試的時候最怕,空氣突然安靜。

然而那場面試…會議室異常安靜,當面試官不知道問什麼問題安靜下來的時候,整個氛圍瀰漫著一種緊張的氣息。


簡直膜拜,我現在也在準備招聘這類型的人才。


Android事件分發機制確實很難,最好的方式邊看源碼邊畫流程圖。

還有那個熱更新,我確實不太懂。

Activity生命周期和消息機制必須要熟悉、 Binder, AMS WMS 最好了解下。還有性能優化某一方面,比如內存優化,啟動優化,CPU佔用優化等。


問點底層的東西或者新技術就好,幾句話就知道深淺了


推薦閱讀:

為什麼要學習 Android 開發?
Android Studio編譯慢、卡死和狂佔內存怎麼破?
為什麼就算配置很高的 Android 手機玩遊戲感覺畫面也沒有 iPhone 流暢,而且觸屏感覺比較遲鈍?
如何在android面試中把Activity的生命周期說的很有逼格?

TAG:Android開發 |