強行解釋一波面試造火箭

桃翁發表於2019-03-20

文章首發於個人部落格

很多人總是抱怨面試官問一些平時不常用的知識點,比如演算法呀,網路(TCP)等等,也就是大家常說的:面試造火箭,工作擰螺絲。

但是有沒有想過為什麼整個前端圈,或者絕大部分面試,不僅是前端,各種職位都是這樣呢?難道就沒人來解決這個問題嗎?

我覺得,事實上,這是一種合理的行為,並不是因為存在即合理,而是本來就應該這樣,接下來我以兩個方面闡述我的觀點。

一、 考驗對專業知識的掌握的紮實程度

在張鑫旭的十問十答裡的一個問題是,「前端開發基礎紮實的標準是什麼?」

這裡面他對「紮實」的解釋我覺得很適合來答這個問題。

「扎」其實可以理解為深度,你可以想象一個用一根針,扎你的皮膚,對一個點的壓力,可以讓你痛不欲生。

那麼如何理解知識的深度呢?

我還是拿前端面試來舉例,比如考一個快速排序,很多人就覺得這有什麼好考的嘛,平時又用不到,引擎底層已經寫好了 sort 方法,什麼數量級用什麼排序底層也已經實現好了,沒必要考了呀。

但是其實面試官並不是想考你快排的程式碼是如何寫的,說實話,花個十分鐘,最多半小時,一個快排的程式碼你肯定可以記住。但是其實考察快排的真正原因可能不僅僅是考察程式碼,而是考察它的思想,分而治之(分治法),劃分演算法的運用。

另外可能會再問你,它的時間複雜度是多少,如何計算等這些問題,這些問題也不是來考你這一個演算法的計算,而是通過這一個演算法來看你知道怎麼算時間複雜度不?以此來引導你為什麼快速排序快,為什麼同樣是分治法的歸併排序沒有這麼快。等等相關的演算法方面的知識。

面試官所考察的問題只是各種底層思想的一個運用,通過這個例項應用來考察對底層思想的理解程度。所以很多時候大廠的面試總是從淺入深的問問題,直到把你問到不知道為止。

再談談「實」,實則可以理解為滿,考察知識的廣度。

想象一下什麼樣的情況你才會說一個東西實,給你一晚裝滿的米飯,並且還壓一壓,再放進去一些米飯,直到壓不下去了為止,這個時候你會說滿滿的一晚米飯,很實在。

所以對「實」的理解就可以理解為滿,全。

如何來體現你對知識的廣度呢,也就是實。

比如可以考察一些你平時不常用的,但是你也許會用到的知識點。比如一些簡單的演算法和資料結構,連結串列呀,網路裡面的 tcp/ip 協議族呀,函數語言程式設計呀等等,一些 html5 的特性(比如 web-compoennt)等等。

你可能在平時程式設計中沒用到,或者大多數前端工程師平時不會用到,但是這些是基本功是需要知道的,比如 React 原始碼中就用到一些簡單的資料結構,連結串列(Fiber 樹就是用連結串列的結構存的,是一個單連結串列,以及裡面還有迴圈列表的增刪改查),如果不知道樹可以用連結串列存,如何對連結串列進行操作,那麼可能你看原始碼就很成問題。裡面還有一些位運算等,位運算平時也不常用吧,但是 fb 的工程師就用它來解決實際問題。

再比如 web-component,這已經是 w3c 提出的一個前端元件化的標準了,我國也有大佬用 web-component 實現了一些庫,比如騰訊出的 OMI。

地址: github.com/Tencent/omi

所以狼叔在 「2019 大前端技術趨勢深度解讀」裡提到可能他是下一代框架的標準。

我們前端變化得快,新東西也多,如何不跟上時代,多瞭解(主要了解,不是每個新東西都要去深究,因為你沒那麼多時間,大多數時間還是要用在平時用得到的地方)一些新東西。跟不上時代,也行就會慢慢的被淘汰,所以現在前端招聘基本上都會需要你會一門框架,不管是 React 、Vue、Angular,這些都是趨勢,資料驅動,不再是以前拿起 jQuery 就是幹了。

小節

在工作中常用的知識點,那些是最重要的,那麼大家都會這些,如果你不知道點,別人不知道的東西,這些東西比別人掌握得更深一點,面試官為什麼要你? 也許你還是個雙非(非985、211)。

我覺得在任何領域都適合一個定律,就是「T」字形發展,先把專業搞深一點,然後往兩邊擴充套件。

二、醉翁之意不在題

另外面試官也許會考你一些軟技能,考你的不僅僅是面試題完成了那麼簡單。這點注意,越簡單的題越不簡單(好好理解這句話)。

我拿我自己的經歷來舉例,之前做小米的筆試題(是那種把題目發給你,兩天內做好了發給他)的時候,有一道題是:求最大公約數的題目。

很多人看到這道題覺得很簡單嘛,幾行程式碼就搞定了,當時跟我一起做筆試題的幾位競爭者也是,他們就寫了一個演算法。

而我當時想到,我覺得面試官在檢查這道題的時候如果看程式碼還是有點麻煩,所以我就寫了一個介面,介面上提供了可以點選的數字,還有輸入框,還有幾個計算按鈕,一個結果框,使用者可以通過點選數字,或者在輸入框裡輸入數字進行計算最大公約數,還做了一些錯誤提示等。

這相當於做了一個應用,一個可以給使用者使用的應用,所以最後因為這道題,我被錄取了。

我被錄取的原因,這些都是進去之後,老大告訴我的,當時很驚訝,竟然是因為這個。

所以之後我就越來越注重使用者體驗,多一些思考,讓別人用自己做的東西的時候更舒服,更方便。

我期望的面試官

宣告:我沒當過面試官,所以以上內容大多是我思考(猜測)的,也可以用說用一種合理的解釋,來解釋了現在這種現象。

我期望的面試官是這樣的,或者說如果我以後當了面試官我會怎麼做。

  1. 作為面試官不是把面試者考倒,而是儘量挖掘面試者擅長的地方,然後去打破砂鍋問到底的看對擅長的地方研究有多深,考察深度。
  2. 在考察的時候先考察廣度,再考察深度,從廣度的問題中提取擅長的點,然後再問下去。

一些小提示

  1. 一般面試官不會因為你某道題沒答出來就否定你的。
  2. 面試官不喜歡簡歷上寫的啥都會,一問每個知識點都掌握得很淺。
  3. 對於平時常用的框架,至少要知道核心原理。

這些是之前我們組面試官在討論的時候提到的,希望能給大家幫助。

我是桃翁,一個愛思考的前端er,想了解關於更多的面試相關的,請關注我的公號:前端桃園

強行解釋一波面試造火箭

相關文章