iT邦幫忙

2024 iThome 鐵人賽

DAY 8
1
IT 管理

坐到對面開始提問:面試官新手指南系列 第 8

面試官新手指南:如何設計技術面試題

  • 分享至 

  • xImage
  •  

評價技術能力

軟體工程師面試有一個重要環節,就是如何驗證面試者技術能力,此時你就需要準備技術面試題目。

在《提升程式設計師的面試力》這本書裡面提到,技術題目不外乎評估面試者:

  • 分析能力:例如如何解讀問題?如何比較方案?如何排除錯誤?
  • 程式能力:例如是不是真的會寫程式?結構性如何?風格如何?
  • 專業知識:例如演算法資料結構?設計模式?電腦科學知識如何?

以及作者認為技術題目有四種不同鑑別度,用一種比較淺顯易懂說法:

  • 入場券:設定能力下限值,篩選掉最差程度者,只要具備基本能力即可過關。常見例子可能是撰寫九九乘法表程式。
  • 高手證明:篩出一定水準以上面試者,題目是需要仔細思考才能解答。
  • 專家認證:與高手證明型問題差不多,不過是限制在特定領域或行業,用意是找出特定領域專家。
  • 通識能力:你認為面試者可能要懂或從事工作會需要的知識,以前端工程師為例,他也許不用去讀瀏覽器程式碼,但如果他不會使用瀏覽器開發工具,對你是個問題。

在找面試問題時,會遇到不合時宜情況,或者不合公司需求。這時候就需要重新設計。現今題目滿坑谷,你可以不用一定要從零開始打造題目。你可以挑選幾個中意的,合成起來重新排列,加點產業相關性,就變成專屬題目。並且記得你是想要篩選哪種程度。

設計一道題目

第一步:設定作答時間

首要問題,你預計讓面試者花多久時間作答。

每個人專注力有限,有些人可以觀賞 150 分鐘電影,有些人 30 分鐘短劇就差不多了。成年人平均專注時間是 15 分鐘左右。有研究顯示學習新事物時間需要 30-50 分鐘。30 分鐘太短,50 分鐘以上又太長。

你會需要安排幾種時間:

  • 真正作答時間:就像考試時間一樣,你預計讓面試者有多長時間專注在作答上。通常會在 30-50 分鐘之間。
  • 作答前後緩衝時間:會需要預留前後時間進行佈置或現場回饋等等。前後各需要 10-15 分鐘不等。

通常全部時間會耗費 1.67 倍真正作答時間。如果給面試者半小時作答,整場面試仍須耗時 50 分鐘左右。

第二步:給定初步參數以及答案

軟體工程師在撰寫函式(function)時,初步就是要先決定輸入以及輸出是什麼。例如需要一個取代字串函式,我只知道需要一個輸入字串,以及輸出一個字串,那可能先寫作:

function replace(input: string): string

接著在根據需求修改。說不定發現不是要取代文字,而是要將數字取出,那就變成:

function extract(input: string): number

在設計面試題目時也是,先思考初步參數以及答案,接著發想繼續修改。你要思考的是:

  1. 題目參數是什麼?一段文字?單純說明?
  2. 要怎麼獲得這些參數?複製?下載?呼叫 API?或其他?
  3. 答案內容、格式是什麼樣子?原始碼即可?展示輸出結果?
  4. 答案要如何交付給你?壓縮後郵寄?直接部署預覽?

舉例來說,一開始題目是可能是:

讀取網頁,輸出內容。

接著你指定特定網址,避免變數太多:

讀取 http://example.com/exam2024 ,輸出內容。

這樣好像可以直接開起來就好,所以又改成:

以程式方式讀取 http://example.com/exam2024 ,輸出內容。

想一下用 JSON 交付好了:

以程式方式讀取 http://example.com/exam2024 ,輸出 JSON 格式。

接著請面試者直接寄送就好:

以程式方式讀取 http://example.com/exam2024 ,輸出 JSON 格式。
並將輸出之 JSON 檔案,寄送至 hr@example.com 。

就有一個題目雛形。

第三步:補充資訊或增加限制

這步重點在於調整題目難易度。前面提到題目有四種鑑別度,所以你可以:

  • 單一難易度:直接將題目調整至特定難易度一刀論斷。
  • 多層難度:題目直接設計多種難易度評估,請面試者依序或自行揀選難易度作答。
  • 彈性難度:隨著現場面試表現,由面試官調整難易度。

以上面例子來說,如果是多層次難易度,可能是設計成:

以程式方式讀取下列網址,並輸出 JSON 格式: 

1. http://example.com/exam/easy_level
2. http://example.com/exam/mid_level
3. http://example.com/exam/hard_level
4. http://example.com/exam/ohmygod_level

並將輸出之 JSON 檔案,寄送至 hr@example.com 。

而調整題目難易度方式不外乎:

資訊多寡

題目資訊提供的越多,作答者素材就越多,減少思考複雜度;反之,當題目資訊越少,作答者就需要想辦法取得資訊,除了仰賴自身素養,不外乎詢問面試官、從題目資訊演繹歸納、查資料,會影響作答時間。

例如增加資訊:

以程式方式讀取 http://example.com/exam2024 ,輸出 JSON 格式。
注意事項:
1. 此網站為前後端分離。
2. 存取頻繁時可能遇到 429 錯誤。
並將輸出之 JSON 檔案,寄送至 hr@example.com 。

條件限制

要求只能特定方式作答,或者答案一定要具備特定形式。這限制可能是隱含或明示在題目,或面試官現場加減。

例如增加限制:

請使用 shell 腳本(zsh, bash, fish 不限),讀取 http://example.com/exam2024 ,在終端機畫面中輸出 JSON 格式。
並將腳本檔案,寄送至 hr@example.com 。

作答方式

定義什麼是完成作答,口述、虛擬碼或是實際程式碼,有交付即可還是要通過測試等等。不同作答方式,影響評鑑呈現能力面向。

親手下去寫

撰寫題目與作答是兩回事,實際寫才知道會遇到什麼狀況。所以設計完題目後,務必要親手下去作答,在此中你可以觀察:

  • 題目資訊是否充分,有什麼內隱知識或領域知識需求?
  • 如果題目資訊不充分,可以用什麼方式取得資訊?
  • 是否可以在時限作答完畢?第一版作答完成度如何?
  • 題目內容是否過於限定特定領域或過於偏門?

假設題目是撮合演算法,那這裡有個名詞是撮合演算法?以及如果當作答者不清楚時,可以詢問面試官嘛?還是可以上網查?還是認為那是應該要具備的?

接著在時限內,答案完成度如何,如果沒有完成,可以繼續作答,測量完整作答時間長度,作為基準指標。這裡要注意可能會有偏誤,可能是你擅長或有深入了解的題目,所以要注意題目內容是否過於偏門。

最後就是在設計題目時,不論題目內容、難易度、冷熱門之類的,都要回歸職務人選需求,想要藉此評鑑、篩選對象是誰、應該具備何種能力。避免使用錯誤的漏斗篩出不合宜對象。


本系列文同步發表於個人網站


上一篇
面試官新手指南:面試題目來源
下一篇
面試官新手指南:測試技術面試題
系列文
坐到對面開始提問:面試官新手指南11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言