解决面试问题的最佳方法就是按照一定的方法来解决它。
(1)确保你理解这个问题。你对问题最初的假设可能是错误的,或者面试官的解释可能太简短或很难完全理解。如果你不理解问题,你就不能证明你的技能。在理解问题前,不要开始解决这个问题。面试官可能会故意模糊一些东西,以判断你是否可以找到并理解真正的问题。在这种情况下,要求澄清问题是正确的解决方案的重要组成部分。
(2)当你理解了问题之后,尝试一个简单的例子。一个特殊的例子可能引导出如何解决一般情况下的问题,或将消去任何剩余的误解。用一个例子来开始同样会展示一个有条不紊的逻辑思维过程。如果你没有马上找到解决方案,例子是特别有用的。
『注意』确保在你开始解决问题前理解它,并从一个例子开始加深理解。
(3)专注于解决问题的算法和数据结构。这可能需要很长的时间,需要更多的例子。这是可以预料的。互动在此过程中是很重要的。如果你站在那儿静静地盯着白板,面试官没有办法知道你是否取得一些进展或根本一无所知。与你的面试官交谈,并告诉他你在做什么。例如,你可能会这样说:“我不知道我是否可以将数据存储在一个数组中,然后对它们进行排序,但我不认为这样可以,因为我不能快速查找数组中的元素的值。”这能展示你的技能,这是面试中的要点,也可能引发面试官给你提供暗示:“你离问题的答案已经不远了。你真的需要查找的元素的值吗?或者你可以……”
这样做可能需要很长的时间来解决问题。在找出一个完整的解决方案前,你可能会忍不住开始编码。抵制这样的做法。想想你更愿意与哪一类人共事:是那些花很长时间思考然后一次就写出正确的代码,还是那些匆忙地开始解决问题,在编码时接连地犯错,并且不知道原因的人。这并不是一个艰难的决定,是吧?
(4)在找出算法和实现方案后,向面试官说明你的解决方案。这会在开始编码前给面试一个机会以评估你的解决方案。你的面试官可能会说:“听起来不错,继续编写代码吧。”或类似这样:“这不完全正确,因为在散列表中你无法以这种方式查找元素。”另一种常见的反应是:“这听起来像是可以解决问题,但有一个更有效的解决方案。”无论是哪种情况,你都获得了是继续编码还是拐回去修改算法的有用信息。
(5)当你在编码时,解释你在做什么。例如,你可以说:“在这里,我把数组元素全部初始化为零。”让面试官更容易理解你的代码。
『注意』在开始编码之前和编码过程中,都要向你的面试官解释你在做什么。要多说话!
(6)如果有需要就提问。如果你问的问题是通过查询参考手册就可以找到答案,一般不会因此失分。你显然不能问这样的问题,例如,“我该如何解决这个问题?”但是如果问这样的问题,“我不记得了——我该使用怎样的格式化字符串,才能打印出本地化的日期。”虽然知道这些东西会更好,但是问这类问题也无伤大雅。
(7)在你写出解决问题的代码之后,立即用一个例子来跟踪代码的运行过程,以验证代码的工作原理。这一步清楚地表明你的代码是正确的,至少这个例子是这样的。这也说明了一个合乎逻辑的思维过程和你检查代码和寻找错误的意图。这个示例也可以帮助你找到解决方案中的小错误。
(8)请一定要用各种出错情况和特殊情况来检查你的代码,特别是边界条件。程序员可能会忽略许多出错情况和特殊情况。在面试中忘记这些情况预示着你在工作中也可能会忘记。如果时间不允许进行广泛检查,至少要说明,你应该检查此类错误。包含出错情况和特殊情况可以给面试官留下深刻印象,并帮助你正确地解决问题。
『注意』尝试一个例子,并且检查所有的出错情况和特殊情况。
当您尝试了一个例子,并对代码的正确感到满意之后,面试官会问你一些关于你写下的代码的问题。这些问题往往侧重于运行时间、不同的实现和复杂度。如果你的面试官没有问你这些问题,你应该主动提出这些信息,表明你认识到了这些问题。例如,你可以说:“这个实现具有线性运行时间,这可能是最好的,因为我需要检查所有的输入值。动态内存分配会略微影响它的运行速度,使用递归也会有一些开销。”
-------------------------------------------------------------------------------------------
以上内容摘自《程序员面试攻略(原书第3版)》
原文书名:ProgrammingInterviews Exposed: Secrets to Landing Your Next Job, Third Edition
作者:(美) JohnMongan Eric Giguère Noah Kindler 著
译者:李秉义 译
书号:978-7-111-44434-3
定价:59.00元
出版时间:2014 年1 月
出版社:机械工业出版社
【编辑推荐】
一本影响了全球数百万程序员的求职面试宝典,Amazon超级畅销书,持续销售近10年
授人以鱼,全面讲解程序员面试时需要掌握的各种编程必备知识和技巧;授人以渔,针对来自全球顶尖IT企业的极具代表性的面试题给出了解答思路,并揭示了这些企业的面试过程