提一个白板面试很重要但常被忽略的东西:写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是跟程式语言本身有关,但是大方向不变,只要能够提出该语言
的一些限制并提出解决方案,基本上就能说服面试者你有足够的知识去解决问题。