前言
其實關于面試一直是一個老生常談的話題,尤其是前端崗位的面試。個人自己的面試和被面試經驗來說,大部分情況下的面試者都喜歡問一些知識收集型的問題,比如:
- 浏覽器差異與檢測
- CSS hack
- 如何解決跨域
當然不是說這類問題不應該問,如果候選人的項目背景有寫解決過類似的問題時;
适當追問有多少種不同的解決方案,為什麼選擇其中某種——能很好的考察候選人在積累知識過程中的深度、廣度還有思維模式~
但是對于一些初級崗位的候選人或者畢業不久的校招生,問這類問題無非是增加尴尬。
那麼要怎麼做
如果非要問初級職位候選人一些知識收集型的題目,推薦問一些比較基礎的,比如:
- HTML5新增了哪些tag,和input類型
- CSS選擇器有多少種,優先級排序
- JS閉包,浏覽器的事件模型
這些問題的最大價值在于考察候選人對這個職位的重視程度。
更好的方式
比起知識收集型問題,推薦問開放式的問題,比如:
- 大家都熟知的,一個頁面從輸入 URL 到頁面加載完的過程中都發生了什麼事情?
- 談一下你所知道的(頁面)性能優化方法?
關于手寫代碼
當然相對推崇的方式是考察候選人手寫代碼的能力,比如:
- 前段時間很火的,翻轉二叉樹,https://leetcode.com/problems/invert-binary-tree/
-
面試雜談
不過說實話,手寫代碼個人認為是挺變态的,如果不是當時這道題火了我也不會去做。
如果臨場再讓我手寫,未必能一次性跑過,是以實作一些相當簡單的排序算法個人認為會是一個不錯的方式~
其它情況
有些情況下,由于初級崗位往往需要先經過一輪電話面試做初篩,沒法考察候選人的手寫代碼能力。
而且對于一些準備充分的題霸,知識收集型問題和開放式問題都不太适用,我會選擇問數學題。
舉個很簡單的例子:x ^ 3 = 3,估算x的值,精确到小數點第1位(^是次方);
其實這是一道非常非常簡單的題目,但在實際的面試過程中,不到20%的人能在不提示的狀态下快速估算出答案,這個通過率對于初篩還是比較合适的;
先賣個關子,你算出來了嗎?
為什麼要問這種題目
- 能在網上搜到的答案或方案的問題都不能算是好問題,實際工作中我們常常會遇到一些沒有現成解決方案的問題,或者說國外有解決方案但是自己水準不夠,不能通過快速閱讀英文,比如去:google、quora、stackoverflow來找答案解決的問題
- 我們都學過根号2 ≈ 1.414,根号3 ≈ 1.732,是以對于這種變種題,往往可以快速判斷候選人的應變能力~
- 數學是一切學科的根本,尤其是計算機
延伸
上面這道題其實太簡單了,覺得沒有難度的同學可以算一下類似的一道題:2 ^ x = 10,估算x的值,精确到小數點第1位~
- 提示思路1:
- 3 < x < 4
- 2^3.5 ≈ 8*1.414 > 10
- 提示思路2:
- 題目轉換為估算 2^x=1.25
- 能否估算 2^(1/4) 和 2^(1/3)
- 提示思路3:
- 5/4=1.25
- (5/4)^3=125/64=1.953125近似于2
- 答案:
- 2^(1/4) < 1.25 < 2^(1/3)
- 3.25 < x < 3.3333
補充
最近學到另外一種面試技巧,就是不設具體的問題,從對所需候選人能力的一些範疇上定義出,需要一個啥樣人的大概架構~
常見的範疇:
- 代碼掌控力
- 工程化能力
- 解決問題能力
- 技術廣度
- 技術敏銳度
- 技術影響力
把這個架構的目标同步給候選人~然後讓他講述自己的工作經曆~并把經曆往架構上套,然後說服面試官雇傭自己~
友情連結
常見面試題;
- FE-interview
- Front-end-Developer-Questions
- Front-end-Developer-Interview-Questions
- node-interview
順便安利一下leetcode,不忙的時候解解各類經典題目
支援多種語言包括js,當場跑case,難易可選,能看通過率、耗時還有解法讨論~