談談面試與面試題

發表於2013-05-06

來源:wintercn,作者微博:@寒冬winter

起因,某日電話面試之後滿心鬱悶的我發了兩條微博:

面試的時候問個css的position屬效能刷掉一半的人這是啥情況……

其實這問題我本來打算的是可以順著一路扯到normal flow、containing block、bfc、margin collapse,base line,writing mode,bidi,這樣一路問下去的,奈何第一個問題(親我真的只問了position有哪些取值和行為啊)就悲劇了……

其中的一些回覆讓我認為非常有必要寫這樣一篇文章來說說面試和麵試題的事情。

關於題目

什麼樣的面試題是好的?我認為有三點衡量指標:

  • 區分度
  • 深度
  • 覆蓋範圍

是的,請注意我並沒有使用“難度”這個詞,因為這三個指標都與難度有關係。

css的position屬性有哪些取值,它們的行為是什麼?

這個題目幾乎是我每次必問的,因為這個題區分度、深度和覆蓋範圍都很高。這個題的答案可以分成不同的層級:

  • position屬性常用的取值static、relative以及absolute和它們的基本行為是每個前端都應該掌握的。這包括relative和absolute的定位原點。
  • fixed舊版本IE不支援,但是一個對技術有熱情的工程師也是應該瞭解的。
  • 有過研究工程師可以知道absolute的containing block計算方式跟正常流不同,當然如果沒讀過標準的話,表述方式不一定是這樣。
  • 對CSS佈局有深入研究的工程師會知道position跟display、margin collapse、overflow、float這些特性相互疊加後的行為。

區分度可以讓題目可以適用於入門級到專家級的各種面試者,深度可以保證有深度研究的面試者可以展示他們的才能,覆蓋範圍可以有效地瞭解面試者擅長的方向。

網上抱怨面試官以出難題展示自己技術為樂的聲音頗多,雖然不排除這樣的可能性,但是我認為這樣抱怨的人多半自己沒有做過面試官,實際上多數公司面試往往任務量很大,幾乎不會有什麼玩樂的心情。題目偏、難、怪的情況多半可能是面試官不太負責任隨便從網上搜尋”大公司面試題”來的——圖省事是個比戲弄靠譜的多的動機。

關於過程

比起筆試,面試的最大好處是可以根據面試者的水平調節題目的難度,即使一個題目中,也可以通過提示和追問來調整難度。

一般來說,當面試者遇到困難或者長時間思考時,面試官應當給予提示來節約時間,而當面試者給出的答案不夠具體或者回答得過於輕鬆時,可以適當追問。在我的微博中

其實這問題我本來打算的是可以順著一路扯到normal flow、containing block、bfc、margin collapse,base line,writing mode,bidi,這樣一路問下去的,奈何第一個問題(親我真的只問了position有哪些取值和行為啊)就悲劇了……

我提到了一些我準備的追問內容,這些知識點從前到後越來越細緻,也越來越偏,從最開始的box排布,到後面的行模型,再到文字排版,基本上是網頁排版從整體到細節的順序。

當面試者前面回答的答案足夠完美,我就會進行追問,確保問到我開始不懂或者面試者開始不懂為止,這樣可以大大延展題目的區分度和深度。

關於評判

首先我希望表達的一點,就是面試的評判跟學校裡的考試完全是兩回事,太多的人把面試當做考試而把注意力放在題目上。

事實上面試中未必是所有題目全都回答”正確”就一定會通過或者較高評價。面試是面試官和麵試者雙方”挖掘與展示才能”的過程,參考前面提到的面試過程,全部回答正確的情況很可能是因為面試官不感興趣懶得追問。

對於面試官而言,基本評判原則就是”我要不要這個人做我的同事?”,多數情況下,這個答案會非常清楚。一些題目是充分的,也就是”回答對了說明這個人具有可以依靠的才能”,一些題目則是必要的,也就是”回答錯了說明這個人無法勝任我們的工作”。

在position一題的評判上,我一般認為能夠答對static、relative以及absolute就已經可以達到必要標準。而因為CSS layout是我最擅長的部分(雖然還是很爛……),又考慮到誤差,當面試者能回答80%以上的追問,我就會認為面試者水平遠高於我,在工作中能夠作為CSS方面的專家來依靠。

我在面試中之所以感到沮喪,是因為大部分的人僅僅在position的基本行為上就已經錯了,多數人的回答都是籠統的”絕對定位”和”相對定位”兩個詞,問及具體行為我得到了五花八門的答案,甚至有看上去經歷相當資深的工程師把absolute和relative搞混的。

而微博上一些人說”屬性可以google搜尋”則更離譜,position在CSS佈局中是相當基礎的知識,對它的行為理解深度實際上代表了一個工程師對於CSS佈局系統的理解,這個理解需要長時期的學習,絕對不是可以臨時google得來的。正如同考人英語,若是不認識visibility尚可以解釋說確實沒怎麼用過,而不會寫英文字母v則說明這個人根本沒學過英語。

關於題目型別

面試題有很多種型別:專案細節、知識型問題,開放性問題,案例問題以及傳說中的Funny Question。事實上網路上流傳甚廣的”大公司面試題”,往往是Funny Question,而它們真正的應用,在任何公司都是非常少見和謹慎的。

一些人提到,面試應該更注重“考察能力”。是的,我認為

web前端工程師的競爭力 = web前端知識 + 能力 能力 = 程式設計能力 + 工程能力 + 架構能力

這其中不包括所謂的學習能力,因為我認為學習能力是通過已有知識來體現的,如果一個具有超強學習能力的人來應聘web前端工程師但是他具有如此強的學習能力卻連position這麼重要的屬性都沒學會,那是不是下一步該要求這人附上證明自己沒有精神疾病的診斷書?

工程能力和架構能力一般針對層級較高的工程師,所以一般來講所謂能力考察就是程式設計能力,然後呢,程式設計能力一般考查方式就是案例問題,也就是傳說中的——“算!法!題!”(當然我曾提到,它們與其說是演算法題,不如說是稍微複雜點的小程式,它們之所以看上去不太有用是因為出題的人為了避免理解麻煩剝掉了實際的業務場景,畢竟各個公司的業務都不是一句兩句可以講清楚的)。

所以我估計教育我”考察能力”的各位,真的碰上這種題要罵死我了……

在題目型別的使用上,電話面試中我會以專案細節和知識性問題為主,一般當面面試中會使用案例問題(寫程式或者架構case),開放性問題和Funny Question幾乎不用。

考察能力的問題,一般我會控制在一道左右,最多不會超過兩道題,因為這種問題往往非常消耗精力,過多會引起面試者抱怨。(當然有的公司專門這麼幹,同一天三輪技術面一輪AA面,每一輪都有演算法題——這公司就是萬惡的M$哈哈哈)

PS. position那道題目,我是不怕漏的,如果你要認真準備這道題的答案的話,基本等於學好了CSS的佈局了,有興趣的同學可以寫篇文章並且傳送簡歷到我的郵箱csf178 [at] gmail.com 寫得好的話電話面試可以省了哦~ 阿里無線前端期待你的加入!

相關文章