人生第一份工作:硅谷资深技术面试官教你如何拿互联网大厂 Offer( 三 )


在国内的面试中 , 校招和社招的区别是比较大的 。 对于刚毕业的学生来说 , 没有太多项目经验 , 会更看重你的学习能力和技术热情 。
Q5:在面试过程中如遇到不会的算法问题 , 应如何积极应对?
对于一个算法问题 , 我们一般都需要完成如下五步:
1)明确题意
了解面试官想要我们解决一个什么问题 , 有哪些需要处理的边界条件 。
2)描述一个大致算法
从最基础的暴力解法逐步优化到最优解 。 在这一步 , 如果我们没有思路 , 可以不妨从比较小的情况开始考虑 , 找找规律 。 比如说 , 要求求解 n 的情况 , 那我们不妨先看看 n=1 的时候应该怎么解决 , n=2 的时候怎么解决 , 等等 。 这时候 , 先获得一个暴力解法可以确保至少有一个可行的解答 。 并且在说完自己的思路之后 , 面试官也会给出一些提示 。 在描述算法的时候 , 可以利用方框图 , 伪代码等工具 , 方便自己之后的面试过程 。
3)实现代码
这里需要注意命名和格式的规范性 , 处理边界条件 , 并且能够灵活应用子函数 , 使得自己的整体思路更为清晰 , 增加代码的可读性 。 在实现的过程中 , 可以向面试官解释一下每一块代码在做什么 。 如果思路卡住了 , 也要及时交流 , 告诉面试官自己在想什么 , 碰到了什么问题 。
4)跑一个测试
很多人写完代码之后觉得大功告成 , 但其实代码里可能有非常明显的错误 。 这时候需要写一个测试用例 。 如果是上机面试的话 , 可以跑一下代码 , 看看对不对 。 如果是白板面试 , 那么可以自己指定一组输入数据 , 根据代码 , 一步一步的去“运行”自己的程序 , 写出每一步的状态 , 看看能不能跑出预想的结果
5)描述算法复杂度
最后一步需要让面试官知道我们对算法的了解深度 , 以及如何评判一个算法的优劣 。
Q6:有一些面试者自认为表现良好 , 和面试官交流不错 , 为何没有进入下一轮面试?
正如上面说的 , 技术面试并不仅仅是一个你问我答的过程 , 而是一种思维方式 , 以及做事方式的体现 。 很多人还是以为技术面试就是考试 , 面试官出个题 , 我写一下 , 最后点一个运行键 , 答案对了就算过 。 的确不否认算法的结果最终决定面试的成功与否 , 但同样不应该否认面试过程的重要性 。 如果在解答过程中没有做好上述五步的任何一步 , 都有可能造成自我感觉良好但没有通过的情况 。 举个例子 , 比如说面试者第一步没有做到位 , 那么很有可能面试者会漏掉一些边界情况 , 甚至于写的代码和要求的方向不相同 , 这时候 , 你代码写得再好也是南辕北撤 。
Q7:在面试过程中 , 面试者有哪些表现会让面试官印象深刻 , 有哪些表现会影响下一轮面试?
在面试中比较重要的加分项包括这几点:
1)面试者有较好的技术背景
这个和本身的实力有关 , 面试前部分的内容也有提到 , 对自己简历的打磨和准备有关 。
2)能够系统性地去分析和解决一个问题
在前面的内容也有提到 , 能比较好地完成“解题五步走” 。
3)能够快速并且正确的实现最优解法
比较重要的失分项包括这几点:
1)交流有障碍
不明确问题就开始写答案 , 写出来的回答和问题没有太大关联 。
2)没有办法想出解决方案
很容易卡住思路 。 一旦没有想法之后也不会通过合理的沟通获得提示 。
3)代码实现能力差
很多失败的面试者能够想到一些思路 , 但是把思路转化为代码的能力很弱 , 没法写出可以正常运行的解答 。
当面试者了解这些加分项和失分项以后 , 面试官对你的印象就不是非常重要了 。 有些面试者喜欢通过面试官的语气 , 表现 , 甚至是交谈内容 , 来揣测自己的面试情况 , 这个其实我个人觉得没有必要 。 原因在于每个面试官的性格不同 , 有的人就是比较热情 , 有的人就是比较内向 , 通过面试官的反应来揣测自己的面试表现 , 反而可能给自己不利的心理暗示 。 在了解了面试评判的这把尺子之后 , 好好表现自己的实力才是最重要的 。


推荐阅读