臨近年關,今年面試跳槽的人特別多,關注個人朋友都知道我不輕易作分享,由於這沒有標準答案,見解也因人而異。但我發現有些面試問題還挺廣泛的,今天就說說我作面試官這幾年的經驗,從面試官的角度去看面試,但願對在準備面試以及想要提高的程序員們有點啓發,如下僅是我的經驗總結:程序員
閱讀候選人的簡歷,這是招聘流程中的第一項工做。候選人的簡歷各式各樣,工程師們通常都比較忙,如何快速的閱讀簡歷又不失重點呢?我根據本身的經驗總結了幾點,供你們參考:面試
首先,對於候選人來說,大公司的工做經歷是很重要的能力,並且級別越高能夠粗略等同認爲越優秀,雖然也會有個例,但通常狀況下,阿里 P8 要比 P7 技術能力優秀,百度的 T7 要比 T6 優秀。可是這種狀況只針對大公司,對於一些小公司,Title 並不與能力劃等號,小公司技術總監的技術能力不如大公司的一個普通的資深工程師的狀況也是常有的事情。算法
其次,有比較有技術含量的項目經歷,我發現有不少工做年限比較長的候選人,簡歷十幾頁,項目大大小小几十個,而不少項目都是 3,5 個月就作完,用到的技術也比較重複、淺顯。對於候選人的技術積累來講,10 年的經驗跟一年的經驗差很少,因此項目不在多,而在於能提現候選人的技術能力。spring
還有,有高質量的開源項目;項目背景比較切合;有在技術網站發表過文章或高質量的技術博客;作過一些業餘項目等,均可以做爲加分項。編程
有些 JAVA 面試官逢人便問 JVM 幾種垃圾回收算法優劣對比,這種文科題目在我看來是沒有太大意義的,一方面沒有區分度,另外一方便容易突擊準備,每每考察不出候選人的真實能力。因此我面試不直接問記憶性問題,也不直接問理論性問題,而是換個問法,將這些記憶性的、理論性的知識融入實踐。安全
好比,有些面試官爲了考察候選人多線程方面的知識,常常會問到的題目好比 ConcurrentHashMap 的實現原理,volatile 關鍵詞的做用等,我以前也屢次拿這些題目當作過面試題,但總結下來發現,大部分候選人都能答得七七八八,區分度很低。我以後換了一種問法,要求候選人將一個線程不安全的類改寫成線程安全的類,這期間涉及到 volatile,lock, 併發容器,Atomic 原子操做,CAS 無鎖編程等,發現只有極少部分候選人給出鎖粒度小,併發度高的代碼,部分候選人在提示下能夠解決,一些候選人則僅能寫出一把 synchorinzed 大鎖的併發度很低的代碼。性能優化
事實很明顯,那些可以給出優秀答案的候選人,一定是有着實踐經驗,而且深刻思考過,真正理解的人,而相反,其餘人可能只是臨時看了幾篇技術博客而已。多線程
白板編程外企面試比較流行,國內有些候選人不怎麼接受,特別是工做年限較長的,一說要寫個代碼,求職者就以爲是在「羞辱」他,以爲不該該從這麼基礎的問起。架構
不過根據個人面試經驗發現,這種拒絕寫代碼的大齡碼農,滿嘴架構,高可用,高性能,分佈式,每每一寫代碼就抓瞎,代碼寫的慘不忍睹。併發
白板編程通常會問哪一種類型的題目呢?舉一個我以前常常用的例子:
「寫一個函數將 ipv4 地址字符串 (僅包含數字,點,空格) 轉化成 32 位整數,另外,數字和點之間的空格是合法的,其餘狀況均爲非法地址,要求輸出合法地址的 32 位整型結果。」
這個題目不須要任何的算法背景和技巧,純粹考察候選人的基本編程素質:邏輯思惟是否清晰,細節是否考慮全面,是否能寫出 bug free 的代碼,是否有計算機思惟能關注時間空間複雜度等。並且在候選人完成代碼以後,我還會要求候選人將代碼講給我聽,固然不是由於我看不懂,而是這樣還能順帶考察候選人的表達能力,溝通能力,畢竟講給別人聽讓別人理解要比單純本身理解難不少。
咱們常常在網上看到說谷歌,微軟等大外企常常會面試智力題目,我認爲智力問題不在於候選人最終是否能提出標準答案,而在於提供一個話題跟面試者討論。考察候選人是不是一個有想法的人,思路是否清晰,邏輯推理能力是否夠強,總結能力是否夠強等等基本素質。
智力問題最好是比較開放性的問題,必定不要太難的問題,也不要是抖機靈的問題。有不少面試官拿數學難題考候選人,但願 45 分鐘答出來標準答案,這自己就是不可能,除非以前候選人已經看過,這樣的問題也就沒有意義了。
固然,智力問題也並非適合全部的公司。通常成熟型的大公司,對候選人能夠接受比較長的培養時間,並且默認聰明的人學習能力都很強,因此對過往技術經驗並不是特別的看中,因此通常喜歡面試算法,智力問題。對於一些創業型公司,更看重候選人的工做經驗,青睞技術多面手,來了就能產出,因此就不適合在智力問題上浪費太多的面試時間。
篩選候選人就是篩選未來與你共事的人,因此爲了更準確的反應候選人在之後的工做中的表現,不妨把面試當作一場與將來同事的技術討論,在討論的過程當中感覺候選人的技術能力。
技術面試就比如打乒乓球,一來一往中感覺彼此的技術實力,面試的過程切忌相似與筆試同樣的一問一答單向溝通。特別是一些開放性問題,架構設計的問題,自己就沒有標準答案,背景又過於複雜開放,若是隻是丟給候選人回答,中間沒有任何溝通交流和引導,候選人是很難抓住重點展示出面試官內心指望的表現。
好比咱們面試過程當中常常會讓候選人介紹某個項目的架構設計,若是面試官能一語中的的提出設計中的缺陷,或者追問架構中的技術難點,深刻的跟候選人討論,這樣一方面能給候選人充分發揮的機會,另外一方面,也會贏來候選人對公司技術的承認。
相信不少工程師隨着面試經驗的積累,即使沒有通過培訓,面試工做也能夠作的很是好,由於畢竟優秀的工程師都邏輯清晰思惟敏銳,而對於正在進階學習的程序員們,則須要經過系統地梳理來提升本身的技術水平和造成架構思惟。
針對當前互聯網公司的技術需求以及結合主流技術,我本身整理了一套系統的架構技術體系。很多公司都很重視高併發高可用的技術,特別是一線互聯網公司,分佈式、JVM、spring源碼分析、微服務等知識點已經是面試的必考題,這些東西可能大家平時在工做中接觸過,可是缺乏的全面系統的學習,加入資源分享羣:854601507,或是關注公衆號:Java資訊庫,回覆「架構」,免費領取架構資料,但願本文能給你們在成長的過程提供一點幫助。
1、工程化專題
2、性能優化專題
3、源碼分析
4、分佈式專題