※ 引述《sorryla (Mr.东)》之铭言:
: 提一个白板面试很重要但常被忽略的东西:写Test case
: 由前面回文可以看出来有人看到题目就跃跃欲试想要把算法实作出来给面试者对答案,
: 但是在实际动手写code之前应该要先想好有哪些问题要解决,还有可能会发生的意外,
: 这样写出来的code才会比较robust,也不需要一直涂涂改改而让面试者扣你分.
: 列出test case除了能够让你的算法设计更经得起考验,还能够跟面试者讨论如何处理
: 例外,表现出你具备与团队合作且提出不同解法的能力,例如测资6就可以问说有没有记
: 忆体限制(可否使用long或浮点数来处理),或是需不需要丢exception等等这种没有
: 标准答案的问题,然后根据面试者的spec修改你的API design。
: 虽然说有些corner case是跟程式语言本身有关,但是大方向不变,只要能够提出该语言
: 的一些限制并提出解决方案,基本上就能说服面试者你有足够的知识去解决问题。
我想从“流程”这个角度来补充 sorryla 的建议 :)
1. 拿到题目,解读
2. 用“自己的话”复述、解释一次题目,与出题者确认自己对题目的理解是正确的
3. 找出该题目中
3.1 前提(precondition) / 假设(assumption) / 默认(given)
3.2 歧义(ambiguity) / 特殊情形(edge case)
3.3 基本盘(baseline) / 理智测试(sanity test)
4. 与出题者
* 确认 (3.1), (3.3)
* 讨论 (3.2) 的处理方法/要求
5. “从 (1) 拿到的题目” 加上 “从 (4) 得到的资讯” 才是 完整的题目;视
情况重复 (2)
6. 边解题边视情况描述 why & how (所谓 "thinking out loud", 清楚地解释你
的想法)
7. 写好后视情况代入 (3.2) 与 (3.3) 来检查正确性
8. 做好心理准备
* “只要不是 O(n) 解就QQ” XD
* 讨论时间、空间复杂度(time & space complexity)
* 各种取舍(trade-off) 、变型题
# 软技能 vs. 硬实力
软技能 (沟通、应对、协商、说服、等等) 会用在多处,例如 (2), (4), (6), (8)
若单压重注在“硬实力+刷题”,我觉得风险相对较高。
硬实力会需要软技能的辅助来展示、表现。