程序员面试金典(第6版)
上QQ阅读APP看书,第一时间看更新

第1章 面试流程

在大多数顶尖科技公司和许多其他公司的面试中,算法和编程问题占最大一部分。这些问题可以归类为问题解决型题目(problem-solving question)。面试官希望测试你解答未见过的算法题目的能力。

很多时候,你或许只能够在一场面试中完成一道题。45分钟并不长,在这样短的时间内很难解决几个不同的问题。

整个解题过程中,你应该尽可能地大声讲解你的思考过程。有时面试官或许会中途打断你,想给你一些提示。没关系,这十分常见,而且这并不意味着你表现得很糟糕(当然不需要提示则会更好)。

面试结束后,面试官会对你的表现有一个基本的印象。或许,他会为你的表现打一个分数,但是,分值实际上并不代表一个定量的评价。从来没有一个表格能列出不同的表现应该获得多少分,面试成绩并不是这样得出的。

其实,面试官一般会根据以下几个方面对你的表现做出评价。

❑ 分析能力:你在解决问题的过程中是否需要很多帮助?你的解决方案优化到了什么程度?你用多长时间得出了解决方案?如果不得不设计或者架构一个新的解决方案,你是否能够很好地组织问题,并且全面考虑不同决策的取舍?

❑ 编程能力:你是否能够成功地将算法转化为合理的代码?代码是否整洁且结构清晰?你是否思考过潜在的错误?你是否有良好的编程风格?

❑ 技术知识、计算机科学基础知识:你是否有扎实的计算机科学以及相关技术的基础知识?

❑ 经验:你在过去是否做出过良好的技术决策?你是否构建过有趣且具有挑战性的项目?你是否展现出魄力、主动性或者其他的重要品质?

❑ 文化契合度、沟通能力:你的个人品质和价值观是否与公司和团队相契合?你和面试官是否沟通顺畅?

这些方面的权重会根据不同的题目、面试官、职位、团队和公司有所变化。对于一个标准的算法题目,面试的表现基本上完全取决于前三个方面。