如何写代码(面试者)

  1. 与面试官沟通,完全理解题目意思(用自己的理解,复述一遍题目)
  2. 提出一个 brute force 的算法,提出它的缺点,并主动分析 trade off
  3. 提出一个更加优化的算法,并主动分析 trade off,并和面试官沟通确认算法正确性
  4. 分析题目,和面试官探讨一些边界情况,特殊情况该怎么处理。
  5. coding (注意代码规范,变量函数的命名等)
  6. 分析复杂度、构造 corner case 和 special case 的判断
  7. 关于时空复杂度的分析,测试用例的构造,优化的思路等等。
  8. 有扩展也可以主动提出(譬如你觉得 avl 或者红黑树能够更加优,但是来不及写)

算法题和智力题的认知(面试官)

重要的不是那个解题的答案,而是解题的思路和方法。解难题的过程更重要:

  • 对知识的应用和理解 —— 用一些基础的数据结构和算法
  • 解题思路和想法
  • 有没有一些经验
  • 如何讨论交流的 —— 当作伙伴一起解题、讨论

Leetcode 高频率题目

LeetCode 开了个会员,截了一些高频率题目分享给大家资源分享牛客网

逻辑与智力题目

  • 边数是 3*4 的网格,从左下角的 A 点走到右上角的 B 点,一共有多少种不同的走法?
    • 这类题目其实有很多变化,如果候选人很轻松完成了回答,面试官就可以适当加大难度,比如 3*4 的网格有一个点不能经过,那么会是什么结果?这类题目看似简单,实则分辨率很高,可以充分挖掘候选人的潜力。

A7 / (A3 * A4)

再谈“我是怎么招聘程序员的”(下) | 酷 壳 - CoolShell