频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

3.2 解决问题

作者: John Mongan等著,王海鹏译 出处:机械工业出版社华章公司  2008-02-20 13:26    砖    好    评论   进入论坛
阅读提示:《程序员面试攻略》提供了50个面试场景,并且深入分析了各种解决方案。第三章主要讲的是编程问题的解答思路,本小节告诉我们编码问题的面试过程。本小节告诉我们 解决问题。

3.2   解决问题

现在是解决问题的时候了,但不要立即跳进去。要记住,您需要完全理解这个问题。您应该先尝试一个例子,然后再关注于解决问题的算法。然后,您需要解释您的解决方案,并进行编码。下面是这个过程的步骤:

基本步骤

解决一个面试问题的最佳方式就是按照一定的方法来解决它。下面是建议的步骤:

1. 确保您理解了这个问题。您最初对问题的假定可能是错误的,或者面试考官的解释可能非常简短,难以完全理解。如果您对问题不理解,就不能展示您的技能。如果对问题本身有疑问,不要犹豫,应该询问面试考官。先要弄清楚问题,然后再开始解决问题。面试考官可能故意不把事情说清楚,目的是要确定您是否能找到并理解真正的问题。

2. 当您理解了问题之后,请尝试一个例子。这个例子可能让您找到解决问题的好方法,或者帮助您搞清楚一些还没有透彻理解的地方。从一个例子开始也展示了您在解决问题时的方法和逻辑。如果您不能立即找到解决方案,例子将是很有帮助的。

确保您在解决问题之前理解了问题,然后从一个例子开始,强化您的理解。

3. 关注您用来解决问题的算法。通常,这需要花较长的时间,并需要更多的例子。可以预期情况是这样的。在这个过程中,互动是很重要的。如果您静静地站着,盯着白板,面试考官就无法了解您是取得了积极的进展,还是一筹莫展。要与面试考官交谈,告诉他们您在做什么。例如,您可以这样说:“我在想是否能够将值保存在数组中,但我认为这不行,因为我不能够在数组中快速地按值查找。”这展示了您的技能,这是面试的关键,同时也可能会得到面试考官的暗示,他可能会说:“您已经很接近正确的解决方案了。您真的需要按值来查找元素吗?也许您可以…”

解决问题可能需要很长的时间,您可能很想在找到确切的解决方案之前就开始编码。请不要这样做。想一下您愿意与什么人一起工作:是长时间考虑问题然后一次就写出正确的代码的人,还是急忙开始解决问题,编码时犯一些错误,根本不知道自己在做什么的人?这不是一个困难的决定,不是吗?

4. 在确定了算法以及打算如何实现之后,请向面试考官解释您的解决方案。这让他们有机会在您开始编码之前评估您的解决方案。面试考官可能会说:“听起来不错,开始编码吧。”或者说:“好像有点不对,因为您不能够用这种方式在哈希表中查找元素。”不论是哪种情况,您都将得到有价值的信息。

5. 当您编码时,对自己在做的事情进行解释是很重要的。例如,您可能说:“现在,我把数组全部初始化为零。”这种做法让面试考官更容易跟上您的编码思路。 在编写代码之前和编写代码过程中,要向面试考官解释您在做的事情。要多说话!

6. 如果有需要,就提问。如果您问的是那些通过查手册能得到答案的问题,一般不会因此而受到惩罚。当然,您肯定不能问“这个问题怎样解决?”这样的问题。但您可以问这样的问题:“我不记得了,我要用本地日期格式打印该用哪一个格式字符串?”虽然最好是不要问这些问题,但这样问也不会出什么事。

7. 写完代码后,马上用例子走一遍,检查代码的正确性。这一步表明您的代码至少在一种情况下是能工作的。这也展示了您在这个过程中的逻辑,以及您检查代码和查错的愿望。这个例子也能帮您消除解决方案中的一些不太重要的小缺陷。

8. 确保针对所有的出错情况和特殊情况对代码进行检查,特别是边界条件。许多出错情况和特殊情况会被程序员忽略,在面试中忘记这些问题表明您可能在工作中忘记这些问题。例如,如果您动态地分配了内存,要确保检查分配没有失败(如果时间不允许您进行全面检查,至少要解释您会检查这种失败)。处理出错情况和特殊情况会给面试考官留下深刻印象,并帮助您正确地解决问题。

尝试一个例子,然后检查所有的出错情况和特殊情况。

当您尝试了一个例子,并对代码的正确性感到满意之后,面试考官可能会就您写的代码问一些问题。一般情况下,这些问题集中在运行时间、其他可能的实现以及复杂度等方面。如果面试考官不问这些问题,您应试主动提供这些信息,表明您已考虑了这些问题。例如,您应该说:“这个实现的运行时间是线性增长的,这是这个问题的最佳解决方案,因为我必须对所有的输入值进行检查。动态内存分配会稍微降低一点速度,递归算法也增加了一些开销。” 当您被卡住时 您应该预计到可能会在某个问题上被卡住,这是面试过程的一个重要部分。面试考官希望看到当您无法立即找到问题的答案时,会做出怎样的反应。遇到这种情况时,放弃或灰心丧气是最糟糕的反应。您应该表现出对问题的兴趣,并继续尝试解决它:

?回到例子。尝试执行这个任务,并分析您正在做的事情。尝试从特殊的例子扩展到一般情况。您可能需要使用非常详细的例子。这样做是可以的,因为这向面试考官展示了您锲而不舍地解决问题的精神。 当其他方法都失败了的时候,回到特定的例子。尝试从特定的例子扩展到一般的情况,从而找到解决方案。

?尝试不同的数据结构。也许链表、数组、哈希表或二分查找树能帮上忙。如果您遇到了不常见的数据结构,想想它与更常见的数据结构之间的相似性。使用正确的数据结构常常会使问题变得容易。

?考虑程序设计语言中较少使用或更高级的特性。有时候解决问题的关键就是使用这样的特性。

有时候不同的数据结构或高级的语言特性是解决问题的关键。 即使您没有被卡住,也可能遇到一点问题。您可能没有想到一种优雅的或明显的实现方式,编写了过多的代码。几乎所有的面试编码问题都有简单的答案。您很少需要编写超过15行的代码,几乎从来不会超过30行。如果您开始写很多代码,可能弄错了方向。

【责任编辑:雪花 TEL:(010)68476606】

回书目   上一节   下一节
专题
程序员如何成长?
程序员面试攻略 第2版
微软出价446亿美元收购雅虎
Use Case入门与实例
UML嵌入式设计
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本