提一個白板面試很重要但常被忽略的東西:寫Test case
由前面回文可以看出來有人看到題目就躍躍欲試想要把演算法實作出來給面試者對答案,
但是在實際動手寫code之前應該要先想好有哪些問題要解決,還有可能會發生的意外,
這樣寫出來的code才會比較robust,也不需要一直塗塗改改而讓面試者扣你分.
以這題為例子,首先要考慮的就是正負數的分布狀況,所以有幾個基本的 Test case:
1. [-3, -2, -1] 全負數
2. [1, 2, 3] 全正數
3. [-3, -1, 2, 4, 5] 正負數都有
然後就是物件或陣列的常見corner case:
4. [] 空陣列
5. NULL
6. [0] 一個元素的陣列
再來是integer的常見corner case:
7. [INT_MIN, INT_MAX]
列出test case除了能夠讓你的演算法設計更經得起考驗,還能夠跟面試者討論如何處理
例外,表現出你具備與團隊合作且提出不同解法的能力,例如測資6就可以問說有沒有記
憶體限制(可否使用long或浮點數來處理),或是需不需要丟exception等等這種沒有
標準答案的問題,然後根據面試者的spec修改你的API design。
雖然說有些corner case是跟程式語言本身有關,但是大方向不變,只要能夠提出該語言
的一些限制並提出解決方案,基本上就能說服面試者你有足夠的知識去解決問題。