序
首先,每家公司都有不同的公司文化,對技術人員的要求都不盡相同。有的公司希望你踏踏實實幹,不需要你很多稀奇古怪的想法,只要按部就班完成功能即可;有的公司則樂意看到員工的創造力,多嘗試新技術,用不同方式完成任務。因此,面試者不可能都滿足每家公司的要求。
其次,程式設計師一般比較內斂,平時碼字多說話少,不容易表達清楚自己的想法和描述事情。不僅是面試者,面試官可能跟你差不多經驗,他也會緊張,有時提問題也比較模糊。因此,在面試中,面試者沒搞清楚面試官問題的意圖,又急著回答,最終導致雙方沒能互相瞭解。這樣往往影響到公司對面試者的評價。
那麼我們如何才能在面試中發揮正常水平?
筆者希望你從以下幾方面入手,來應對面試中各種場景:
1.構造自己的知識框架;
2.搞清楚求職意向;
3.搞清楚面試問題;
4.自信地回答每個問題;
5.瞭解公司和員工。
1.構造自己的知識框架
學習新技術,實踐中累積經驗,永遠是程式設計師最基本、最重要的事情。而且,技術面試官最關心的也是你的技術、經驗如何。然而,面試官關注哪些技術點,你未必會清楚,特別對於畢業生來說。
當然,每家公司的產品不同,對技術的要求也不同,每個面試官對技術點側重點也因人而異。有些公司做直播、美圖、視訊剪下,很可能要求面試者具備 音視訊及圖片處理的經驗;有些公司做理財產品,要求熟悉NDK....
儘管如此,業界對某個技術崗位的技術圖譜,還是有一定共識的。我接下來給大家講講,我們公司及我個人對不同工作年限的面試者,有怎樣的要求。
首先,Java基礎一定要好,多執行緒、執行緒鎖、佇列、堆疊、連結串列等資料結構必須懂,什麼時候用什麼資料結構,設計模式能說上幾個。其次,四大元件逃不掉,自從Google出了RecyclerView,對ListView就不太要求了,Handler會用就好。第三,會用幾個流行開源庫,網路請求retrofit、okhttp、volley等至少會用一個,圖片處理Glide、Fresco、Picasso等至少會一個,資料庫GreenDAO、ORMLite等至少會一個(筆者還是鍾情與AFinal、XUtils這兩款)。
筆者對java基礎、資料結構、設計模式尤其看重,因為這些是基本功,所謂“基礎不牢、地動山搖”。會使用四大元件、網路圖片資料庫開源庫,能滿足日常開發就OK了。
1-3年
如果是1年經驗,多執行緒、設計模式、資料結構還是需要在面試時提問的;四大元件、RecyclerView、handler簡單用法就不問了;開源庫使用會問,而且需要講講上家公司使用情況。
2到3年經驗,java基礎就不問了,會更著重問開源庫使用情況,筆者要求面試者讀過某些開源庫原始碼,butterknife應該熟悉,對於各種資料來源,如何選用合適的持久化方式,最好會寫SQLite,而不是會用開源庫就了事。這時候面試官更多地問工作經歷,而不會摳程式碼細節。
對於這個階段的工程師,面試官很可能會問平時關注什麼技術公眾號、簡書、掘金等,用不用Google搜尋(千萬別說用百度,用Bing也好)。
3-5年
這階段面試官主要問工作經歷,在團隊做了什麼,如何跟產品、設計溝通,上一家公司開發流程是怎樣。開源庫使用情況會順帶問一下,不摳細節。程式碼風格方面,會不會MVP、MVVM等。
筆者對4、5年經驗面試者,更看重平時的學習和開發習慣,必須固定從某個渠道獲取技術諮詢,最好寫技術筆記,用什麼翻牆,會不會寫單元測試,有沒搞過外掛化、元件化,有沒用intelliJ寫demo的習慣、懂不懂一點後端技術....
到了這個階段,招來的工程師是不需要“帶”,甚至是新人懂更多新技術。筆者希望這個人是一名好的戰友,跟團隊一起扛專案,為大家排憂解難。因此,會更加綜合考慮工程師素質、人品,跟自己是否合得來。
這時候不僅僅是APP主管做技術面試官,通常CTO也會面試一下,主要是問工作經歷,對自身技術發展的定位等。
5年以上
筆者現在剛好5年經驗,團隊也沒有5年以上的安卓工程師。相信5年經驗以上的讀者,也不會看這篇文章,哈哈哈。
Android工程師技術圖譜
2.求職意向
所謂求職意向,就是想去什麼公司、喜歡怎樣的公司文化、期望拿多少薪水、五險一金怎麼樣、加班不加班、交通方不方便、有沒其他福利、妹紙多不多......這些都是你投簡歷時必須考慮的東西。
筆者希望,同志們在跳槽的時候,多想想當前的環境,和想跳槽到哪裡,而不是覺得現在同事不好、老闆不好、薪水低,就受不了要換個環境。如果是你自身人品問題,導致同事看你不爽呢?那換什麼環境都一個鳥樣。如果就覺得產品老是改需求為難你,有沒想過是自己技術不夠好,程式碼不夠靈活,或者未實踐過某些功能,改需求要花很大力氣?如果是自身經驗問題,應該多跟同行交流,多看技術文章,而不是跳槽了事。
3.搞清楚面試問題
筆者在上面提到過,無論是面試官,還是面試者,大家都是程式設計師。程式設計師交談能力稍微欠缺一點,而且技術問題,有時不太好描述,導致面試官提的問題,未必是他本意或者他想通過這個問題得到更深層的答案,也可能面試者緊張只記住部分。總之,搞清楚面試官想從你這裡瞭解什麼,至關重要。
正如第1節所說,筆者會關心你的哪些技術問題。讀者可以事先在小紙條上,寫下面試可能問到的技術點,等待面試官時,回憶一下這些關鍵詞。那麼,在面試中,只要關鍵詞對上了,就很容易get到面試官想問你什麼了。
如果面試官說的問題,你不清楚,可以禮貌地說,讓面試官描述具體一點,或者把你認為他可能想問什麼,跟面試官確認。不用怕面試官覺得你很蠢,你這麼說,面試官一般都先懷疑自己是不是沒表達清楚,而不會質疑你智商的。
對於我司這種小廠,一般會看著面試者的簡歷來提問,所以第一個面試官的問題,基本都能從你的簡歷上找出來。例如,你開源了個專案,面試官會問“這個庫有什麼用”、“是否在專案中使用過”之類。如果是CTO,會提更加發散性思維的問題,綜合考察你對開發的理解,以及未來可能在團隊充當什麼位置。
小結一下,1.預測面試可能提到的問題;2.沒理解清楚問題,大膽提出來;3.面試通常圍繞你的簡歷、自我介紹來提問,想想你剛才說了什麼,簡歷上寫了什麼,問題自然清晰起來。
4.自信地回答每個問題
上一節提到,面試提問通常圍繞簡歷、自我介紹來說,自我介紹囊括你懂哪些技術,人品如何,是面試官對你的第一印象。。因此你的自我介紹和簡歷是成敗重要因素。如果你懂一項很牛逼的技術,但並沒在簡歷和自我介紹中表達出來,那面試官就不會問你,除非你中途說你懂這個技術。
每個人都喜歡聽故事,筆者看很多公眾號的文章,都離不開講故事、例子來說明問題和論證觀點。因此,你在面試中,多說說以往的經歷,一些很難的技術如何落實執行,中途出現過什麼變卦,你如何化險為夷......會讓面試官對你印象更加深刻,更多地瞭解你是怎樣的一位工程師,甚至會覺得你是一位喜歡分享技術的人,他可能很樂意跟這種人一起工作。
而且,這些故事都是真實發生的,你講自己的經歷時,也會緩解自己的緊張。
千萬不要不懂裝懂,這是筆者最討厭的一類人。例如,面試官問你:“你用過阿里巴巴的atlas未?” 如果你只是跑過demo,千萬別說:“我有用過,還可以。” 這種話,面試官勢必追問你,跟其他框架對比怎樣?有沒在專案中實踐過?你應該如實回答“hello world了一下”“沒有在專案中使用”,然後補充一些對atlas的觀點,這樣有理有據才能說服人家。光說“還可以”而實際不太懂,給人印象非常不好。
總之,自我介紹把工作經歷說詳細,用以往實踐經驗回答問題,這種方式更討好。
5.瞭解公司和員工
去面試前,一定要對公司做好功課,把公司的APP下載來玩玩,瀏覽一下官網。因為HR好很可能問,你是如何知道我們公司的,還有技術面可能會問到對他家APP技術層面的看法。不過小心不要說“APP很卡,不好用”這類話,面試官會很不爽;可以用“這個頁面可以優化”積極的詞語代替。
薪金、福利、公司文化這些從網上找不到的資訊,必須親口問HR。如果希望瞭解技術相關的問題,例如你想了解APP團隊有沒做外掛化之類,可以在技術面快結束的時候問面試官,只要不是機密(例如我司跑步演算法),技術問題一般會回答你的。
如果你要面試主管之類的職位,可以問CTO他們希望你改進公司哪些方面問題,解決哪些技術瓶頸。
更多地瞭解該公司,你才能綜合評價自己是否適合在那裡工作。所以,面試者提問是必不可少的環節。
最後
總之,面試是一個公司與面試者互相瞭解的過程,它是雙向的。在面試中,把握好“公司想了解你什麼”,你如何把“自己是一位怎樣的工程師”表達清楚,這就算是成功的面試了。
祝讀者們面試愉快!