軟體工程師面試有一個重要環節,就是如何驗證面試者技術能力,此時你就需要準備技術面試題目。
在《提升程式設計師的面試力》這本書裡面提到,技術題目不外乎評估面試者:
以及作者認為技術題目有四種不同鑑別度,用一種比較淺顯易懂說法:
在找面試問題時,會遇到不合時宜情況,或者不合公司需求。這時候就需要重新設計。現今題目滿坑谷,你可以不用一定要從零開始打造題目。你可以挑選幾個中意的,合成起來重新排列,加點產業相關性,就變成專屬題目。並且記得你是想要篩選哪種程度。
首要問題,你預計讓面試者花多久時間作答。
每個人專注力有限,有些人可以觀賞 150 分鐘電影,有些人 30 分鐘短劇就差不多了。成年人平均專注時間是 15 分鐘左右。有研究顯示學習新事物時間需要 30-50 分鐘。30 分鐘太短,50 分鐘以上又太長。
你會需要安排幾種時間:
通常全部時間會耗費 1.67 倍真正作答時間。如果給面試者半小時作答,整場面試仍須耗時 50 分鐘左右。
軟體工程師在撰寫函式(function)時,初步就是要先決定輸入以及輸出是什麼。例如需要一個取代字串函式,我只知道需要一個輸入字串,以及輸出一個字串,那可能先寫作:
function replace(input: string): string
接著在根據需求修改。說不定發現不是要取代文字,而是要將數字取出,那就變成:
function extract(input: string): number
在設計面試題目時也是,先思考初步參數以及答案,接著發想繼續修改。你要思考的是:
舉例來說,一開始題目是可能是:
讀取網頁,輸出內容。
接著你指定特定網址,避免變數太多:
讀取 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 。
作答方式
定義什麼是完成作答,口述、虛擬碼或是實際程式碼,有交付即可還是要通過測試等等。不同作答方式,影響評鑑呈現能力面向。
撰寫題目與作答是兩回事,實際寫才知道會遇到什麼狀況。所以設計完題目後,務必要親手下去作答,在此中你可以觀察:
假設題目是撮合演算法,那這裡有個名詞是撮合演算法?以及如果當作答者不清楚時,可以詢問面試官嘛?還是可以上網查?還是認為那是應該要具備的?
接著在時限內,答案完成度如何,如果沒有完成,可以繼續作答,測量完整作答時間長度,作為基準指標。這裡要注意可能會有偏誤,可能是你擅長或有深入了解的題目,所以要注意題目內容是否過於偏門。
最後就是在設計題目時,不論題目內容、難易度、冷熱門之類的,都要回歸職務人選需求,想要藉此評鑑、篩選對象是誰、應該具備何種能力。避免使用錯誤的漏斗篩出不合宜對象。