面试官|30天完成60多场技术面试,我学到了什么?( 三 )


如何解决问题
优秀的候选人知道如何解决问题(比如排序问题) , 但最好的候选人知道一个问题的多个解决方案 , 并且理解一个解决方案与另一个之间的权衡 。 我表现最好的面试是那些我不仅解决了算法难题的面试 , 而是还提供了替代解决方案并讨论了权衡的面试 。
你要以提供问题的多个解决方案为目标 , 要乐于讨论权衡 , 并且至少要能实现其中一种方案 。
对于技术面试而言 , 要写出清晰的代码 。 大多数面试官既关心你的代码质量 , 也关心你的解决方案的正确性 。 你要尽可能地写模块化代码 , 将可复用的逻辑适当地划分为实用函数、名称变量和方法 , 就像你是 boss 一样 。
如果你被一个问题难住了该怎么办?
有时候你会被难住 。 原因可能有很多:你缺乏必要的知识、你的假设不正确、你遗漏了细节等等 。
我过去以为 , 在这样的时候 , 面试官会基于我想出解决方案的快慢来评价我 。 所以我会很安静地思考 , 不与面试官交流 , 只是思考 。
这就是我们大多数人出错的地方 。 我也明白 , 你需要一个人思考的时间 。 但很抱歉打破你的幻梦 , 你在接受面试时不是你的个人时间 。
是的 , 如果你能自己想出一个解决方案 , 面试官当然喜闻乐见 , 但不要忘了他们也希望看到你能与其他同事合作构想解决方案 。 尽管公司想要技术明星 , 但他们也想要团队合作者 。
因为你的面试官是一个朋友、一个伙伴、一个团队成员 , 他和你是一边的 , 也就意味着你在思考解决方案时应该与他们交谈 。
你应该分享你的思维过程 , 直到你卡住为止;你要充满自信地寻求帮助 , 而不是哭泣般请求帮助 。 这样做时你可能就会揭示出解决方案 , 就像我在接受 Coda 面试时那样 。
如何应对编程挑战
这里的经验教训适用于以在 Hackerrank 和 Codility 等平台上执行编程挑战形式的面试 。 通常这些挑战都是限时挑战 , 比如 45 分钟或更长时间 。
我前面分享的一些经验教训在这里也适用 , 但其它一些却并不适用 , 比如让别人澄清问题 , 因为这里没人可问 。 这里我推荐一些步骤:

  1. 通读并完全理解问题 。
  2. 首先写出能工作的代码 , 即便是暴力搜索算法也行 。 这可能无法通过所有测试案例 , 但优先事项是拿出可工作的代码 , 最好能在前 15-20 分钟完成 。
  3. 使用不同的输入类型测试你的代码 , 因为这有助于你处理边缘案例 。
  4. 优化效率 。
  5. 重复 4 和 5, 直到最后一分钟 。
这里 , 很好地掌握计算机科学基础很关键 。
如何应对居家编程项目
居家编程项目能让你有机会更好地展现自己的才能 , 因为你有更多时间 。 这也意味着这类项目更耗时间 。
一家面试我的公司还为从事居家编程项目的时间提供了大约 68 美元一小时的薪资——说明这个任务很严肃 , 你也应该严肃对待 。 不过在你花时间搞居家项目之前 , 你一定要相当确信你希望进入这家公司 。
永远不要在居家项目的代码质量上松懈自己 。 要针对性地进行你的设计决策 , 即命名规范、代码结构等等都要好好考虑 , 并且要做好准备为你的选择辩护 。
你应该使用什么工具?
在我接受 Course Hero 的面试时 , 我使用了 regex 来解决我本可用更简单的字符串解析算法来解决的问题 。 事实证明 , 这是个糟糕的决定 , 我也没通过面试 。
经验教训:仅使用你非常熟悉而且经验丰富的工具 。
如何进行现场面试
在面试前一晚好好睡一觉 。 面试当天提前到达 , 然后保持微笑(这有助于你展示信心 , 而且更重要的是能让你保持放松并感觉一切都在控制中) 。
直面你的恐惧并接受它——即使失败 , 也不是世界末日 , 毕竟这只是又一场技术聊天而已 。 然后进门 , 开始聊天 。


推荐阅读