1. 程式人生 > >關於面試的那些事兒(1)

關於面試的那些事兒(1)

老王這周很開心,在公眾號(simplemain)裡發了《有問有答》,收到了很多盆友的提問(還收到很多盆友的打賞,老王在此謝謝大家~)。大家問的比較多的,除了技術的,就是關於面試的。整好老王計劃著六月中下旬給大家聊聊個人對於面試的一些經歷和想法,藉著這次問答就一起來聊吧。

老王到目前為止,參加過的稍微正式一點的面試次數應該不超過3次。因為老王不太喜歡跳槽,對於換工作的事情還是非常非常非常慎重,覺得挑一家好公司並且在裡面能持續的發展比連續的跳更重要(這是老王自己的想法,不一定對哈)。所以,從面試者的角度來講,老王是一個基本沒有面試經驗的人。

不過老王當面試官有幾年的歷史了,從基礎技術面,到高階技術面,再到經理面,大體都做過。總的面過的人估摸著應該有好幾百個了吧(沒有詳細核算)。所以今天聊的內容可能跟很多聊面試的角度不一樣,會從面試官的角度談談關於面試的那些事兒。

提前宣告:接下來聊的是老王自己的見聞和思考,可能帶有一定的主觀性和侷限性,說的東西可能不對或者不符合每個人的預期。如果覺得老王有講的不對的,就多多包含,或者直接關掉這篇文章,但是請勿生氣或者發怒吐槽(因為如果老王這篇文章讓你生氣了,老王會覺得很對不住大家)。如果對你有一些幫助,老王就很開心了~

準備好了嘛,開始吧~

這個話題大體的脈絡,老王準備這樣來組織:

1、面試背後考察的邏輯是怎麼樣的;

2、面試知識點的拆分;

3、面試的流程、風格和技巧;

4、那些年我們做過的一些經典面試題。

第一個話題,其實是我這次想聊的最核心的東西,他是面試的大綱。面試者為了找到一份好的工作,會不遺餘力的準備好面試;同時,面試官為了給企業選到最適合

的人才(注意,這裡是最適合,不一定是最好),也會想方設法的探尋每個面試者的能力上限。那如何來考察面試者呢,就需要一個大綱性的東西,讓面試官來不斷試探面試者(類似於,給了一張地圖,面試官用bfs或者dfs演算法來搜尋這張地圖的邊界)。

第二個話題,是順著第一個話題,將大綱拆分成不同的評估點來評估,組織不同的內容,用來判定面試者的知識水平。

第三個話題,則是第一、二個話題的具體表現。有了大綱和內容,接下來就是怎麼問。不同的面試官風格不一樣,面試的難度不一樣,那作為面試者,我們該怎麼樣去應對?

第四個話題,就是順著第一、二個話題,去看看我們當年的那些面試題都是考察的哪些點。同時,也一起來溫故一下當年的那些經典。

=== function1:面試背後考察的邏輯 ===

老王現在還能想起第一次做面試官的場景:那會兒我的mentor帶著我去做面試,他主面,我旁聽。聽完的結果就是:如果讓我再參加一次面試,我說不定會掛掉……後來,逐步經歷了更多的面試,老王也有了更多體會。最近,又對之前的面試做了一些總結,於是乎畫了兩個圖。



這張圖描述的是為什麼會出現面試這個東西。那到底為什麼呢?

我們把企業和個人看成兩個類(class),他們其實有不同的屬性。對於企業來講,需要關注當前業務的發展和未來人才的儲備。沒有業務,對於企業來講一切都是扯淡(假如沒有錢掙,百度會給你提供免費搜尋服務?)。所以很多企業就把業務的發展看的很重要。而有一些企業,發展到了更大的規模,就需要為未來儲備更好的人才,以備發展之用(其實還是為了業務的發展)。

而對於個人來講,有人會更關注能力的成長,有人會更關注物質(吃飯、買房都是需要錢的,而且一般碼農聚集地房價都很高),還有人可能會更關注企業未來的發展或者是自己所在部門給自己留的上升空間等等。

因此,這兩個類之間,就會產生一個需求的配對,你看重我什麼,而我又看重你什麼。於是乎,產生了相互之間的評判和選擇。大家聽到最多的:BAT不錯、xx公司不行等等,就是我們個人這個類對企業這個類的評判。而面試,則是企業對個人的評判和選擇。

有了這個東東以後,老王就畫了下面這個圖。


那既然企業對業務發展和未來人才儲備,會在不同的階段有不同的需求。因此,就會在面試的時候有區分。老王總結了一下,大體會考察兩個維度、四個象限的內容:

1、技能層面:包括硬技能和軟技能。

A、硬技能:就是大家經常說的面試,基本上就是考察大家計算機的相關知識,包括程式語言、演算法和資料結構、計算機網路等基礎知識;也包括專案經歷、實際遇到過的問題等等;還包括對沒見過的問題的解決能力等。如果硬技能比較強,有可能會是業務領域的專家(通俗的講,就是我們膜拜的大牛)。他們能攻克一個或多個方向上的難點,帶著公司往前飛~

B、軟技能:這個是大家比較少提起,但是確實會考到的一些東西,比如:忠誠度、溝通表達能力、團隊合作能力、邏輯思維能力等等與團隊合作、人員管理相關的一些非技術技能。如果這個方面比較強,那可能更適合做業務的組織者或者管理者,將各種資源(包括人、錢等等)組織起來,一起完成比較大的目標。不過,老王覺得,如果想做好組織和管理,最好也能是技術上的專家(或者至少在技術上不差),否則很容易做出錯誤的判斷(我們經常說的:這個人不懂技術還瞎指揮)。

2、時間層面:包括現狀和未來的潛力。

A、現狀:即當前擁有的能力。比如你現在是一個技術大牛,那可能你現有的能力就是無敵紅線,不論在語言還是架構,都是非常牛逼的。很多公司(特別是創業公司)就非常喜歡這樣的人才,因為可以憑藉他們現有的能力,立馬就能解決實際專案中的問題。這樣的人才,會在業務發展上更適合公司的需求。也有可能會是公司的儲備物件。

B、潛力:有很多同學剛大學畢業(或者正準備畢業),就會比較擔心自己如何去跟那些有多年工作經驗的老鳥競爭。如果談專案經驗,有可能確實相差很遠,不過,如果你有很大的潛質,其實也是你的優勢。很多大型的公司(或者重長期技術發展的公司)就會比較喜歡這樣的人才,他們可能現在缺乏一些經驗,但是有非常大的潛質(比如:一個acm獲獎者,有可能沒有任何專案經驗,但說不定只要出來工作半年左右,立馬就會能量爆棚),後期提升會非常明顯。跟買股票一樣,這些就是潛力股,哈哈哈~這些人才,有可能就是公司未來準備儲備的。

所以,在面試的設計中,老王一般會將面試題按照這四個象限來設計和考察。看看當前的硬技能如何,再測測以後硬技能的潛質。測試覺得不錯以後,就會聊聊軟技能,看看當前水平,同時也會關注未來是否有從事管理方面的能力。

因而,筆試題、面試題才會有不同的難度,不同的型別。其實背後設計的邏輯,是用來判斷面試者在這幾個象限分別有多少的得分,根據不同的得分,來判定這個面試者是否符合當前公司的用人預期。

打比方說:如果有一個面試者,在當前有非常強的硬技能(具體比如說網路知識很強),那如果這個時候,公司在做網路相關的專案,就需要這樣一位技術專家,很明顯,他就是非常適合這個位置。不過如果他溝通表達不是特別好,同時公司這個時候需要的是一位能夠協調溝通各個職位的管理角色,有可能他就不是特別適合。

另外一個例子,如果一個面試者剛剛從學校畢業,專案經驗基本沒有,不過學校學的知識很紮實:演算法、網路、作業系統都學的不錯,同時溝通表達、協調事務的能力都很強,他可能不適合馬上就有產出的職位,但是他可能經過1-2年的歷練,成為一個能獨擋一面甚至把控全域性的核心人物。

以上的這些,就是面試官在面試中要去發現的東東。所以,有些時候,遇到面試官問一些古怪的問題的時候,嫑吃驚,說不定他正在考察你某一方面的能力呢~

那具體怎麼面呢?我們這周先簡單的聊聊。

比如對於當前硬技能,一般就會讓大家寫個演算法,最經典的:二分查詢、快速排序等等。寫基本演算法的目的,就是看大家對語言的掌握、能不能寫碼、以及程式碼質量如何(畢竟公司找你來,你連基本的程式碼都寫不出來,怎麼給公司掙錢嘛,對不對)。接著,一般就會考考基本的資料結構和演算法,比如:陣列和連結串列操作的時間複雜度分析、BFSDFS的對比等等,這個其實是在實際工作中用的到的(JavaArrayListLinkedList至少要知道有什麼不一樣吧)。另外,同時也會問關於作業系統、網路等的基礎知識。如果有實際工作經驗,還會問一些關於資料庫、框架等的知識。那這些問完,基本上能確定面試者的現有硬技能如何。

接下來,會問一些潛力方面的問題。問這個的目的,就是看你能不能在未來有很高的空間。常見的問法,就是把你已有的知識往深了問,或者是利用你以後的知識去解決一個綜合性的問題。比如:搜尋演算法,除了BFSDFS,還有哪些?各自的優缺點是什麼,時間複雜度如何?TCP三次握手是在哪個函式呼叫中完成的?如果一個城市很擁堵,有什麼樣的演算法能比較好的去緩解?等等。如果你能運用現有知識去比較深入的解決問題,那麼基本上能判定未來給你一個全新領域知識的時候,你會比較好的解決。

那關於軟技能,老王一般喜歡聊一些邏輯性比較強的話題。可以看看面試者邏輯思維是否有條理性。寫程式、做管理其實都需要比較強的邏輯思維能力。能比較清晰的推演邏輯的發展。比如,會問一個硬幣連續扔十次,只出現一次正面朝上的概率是多少(這可以是一道概率題,也可以是一道邏輯推演題)。除了邏輯推理,還會著重考察基本的溝通表達、團隊合作的問題。

對於軟技能比較強的面試者,一般還問些管理相關的問題。比如:如何帶人?如何看待業務發展和團隊建設的問題等等。

好了,上面大體上列舉了一些面試的問題以及背後的邏輯,不知道大家是否有所收穫。那具體怎麼樣拆分面試的知識點,怎麼樣出題,老王準備下次詳細的給大家聊聊(後面就是具體乾貨)。

有興趣的朋友就繼續在週日下午關注老王的公眾號(simplemain)吧。

要不了多久,就要開始新一輪的校招了,如果覺得老王的文章對周圍的朋友有幫助,就請毫不猶豫的轉給他們吧,哈哈哈~