第 3 章 编程问题的解答思路
编写代码通常是面试中的实质内容。这是您展示自己能够胜任这项工作的机会。这些问题是面试过程中的重头戏,大多数计算机公司和软件公司以此来决定是否雇用应聘者。许多公司只会给参加面试的应聘者中不到十分之一的人员提供工作邀约。这些编程问题通常很难。如果每个人(或者大多数人)都能很快地回答某道题目,那么公司就不会再用它,因为它不能反映出应聘者的差距。许多问题都需要一个小时的时间才能解决,所以如果您不能马上找到答案也不必沮丧。几乎没有人能马上找到答案。 这些面试问题很难!有些问题的目的只是想看看您在不能立即找到解决方案时如何处理。
3.1 面试过程
编码问题的要点是确定您是否能编码以及是否能做得多好。它是面试中最重要的部分,因为您写的代码和提供给招聘者的答案将在很大程度上决定他们是否推荐您得到这个职位。
面试场景
您通常需要当着面试考官的面来解答问题。他会给您一支记号笔和一块白板(或者是纸和笔),并要求您写一些代码。面试考官可能会要求您在写出代码之前先对问题进行一些分析和说明。一般会要求您编写一个函数或一个方法,但有时候您需要写一个类定义或一系列相关的代码模块。无论是哪种情况,您都需要写一些代码,可能是用真正的编码语言或某种伪代码。
面试问题
面试考官提出的问题有非常具体的要求。它们要比较短,这样就能够比较快地解释和解决。但它们又必须比较复杂,这样就不是每个人都能解决。因此,不太可能向您提出实际项目中的问题。几乎所有具有价值的实际项目中的问题都需要很长的时间来解释,更不用说解决的时间了。这在面试中是不能考虑的。许多面试问题需要一些技巧,或不太常用的语言特性。
这些问题通常禁止您使用最常用的方式来完成工作,或者不允许您使用理想的数据结构。例如,您可能遇到这样的问题:“写一个函数确定两个整数是否相等,不能使用比较运算符。” 这纯粹是一个愚蠢的、故意制造的问题。几乎所有的编程语言都有比较两个整数的方法。但是如果您的回答是“这是一个愚蠢的问题。我一直使用等于操作符。我从来没遇到过这个问题”,那您可能搞错了方向。实际上,如果您这样回答就失败了。面试考官是在寻找另一种比较两个整数的方法(提示:使用位操作符)。
您可以描述解决问题的更好的方法,但解决问题时只要按要求做就可以了。例如,如果要求您利用哈希表解决某个问题,您可以说:“使用二分查找树会更容易一些,因为这更容易取得大的元素,但是让我们来看看我如何用哈希表来解决这个问题…” 许多问题包含奇怪的限制条件,使用到不常用的语言特征,看起来愚蠢而造作。您必须遵守游戏规则。真实项目的编程很少是没有任何限制的。能够在特定的限制条件下工作是软件开发的一项重要技能。 问题常常会越来越难。这不是一个严格的规则,但您可以预期,随着您答对的问题越来越多,问题会变得越来越难。通常,不同的面试考官相互之间会交流他们所问的问题,您能回答的问题以及您不能回答的问题。如果您回答了前面的面试考官的所有问题,但被后来更难的问题难住,这可能表明前面的面试考官对您的回答留有深刻的印象。
使用哪种语言
如果您申请的职位有特定的语言要求,您就应该了解这些语言,并用它们来解决遇到的问题。如果您申请的是一般的编程或开发职位,只要对C#、Java和C++等主流语言有全面的了解就可以了,虽然熟悉C语言在很多情况下也是有用的。您的面试考官可能允许您使用其他流行的语言,如JavaScript、PHP或Perl。如果让您选择,您就选择最熟悉的语言,但要预计到有些问题可能要求用特定的语言来解决。面试考官不太会同意您使用非主流的语言,如Lisp、Python、Tcl、Prolog、COBOL或Fortran,但如果您是其中一种语言的专家,不妨问一问是否可以采用它。 在您去面试之前,要确保自己完全了解了将要使用的这种语言的用法和语法。例如,如果您已经有几年没用C++写过程序了,您至少应该翻阅一下一本好的C++参考指南,重新熟悉一下这门语言。
关于选择语言还有最后一个建议:不论是否正确,许多人认为Visual Basic是一种非主流语言。除非您应聘的职位要求您使用这种语言,否则最好避免在面试中使用它。但是情况在变化,所以请注意当前的语言流行趋势。例如几年前,我们可以说JavaScript是一种非主流语言,但随着AJAX(Asynchronous JavaScript and XML的缩写)成为开发基于浏览器的响应式应用程序的核心技术,业界改变了对JavaScript的看法。
关键是互动
您在面试中编写的代码可能是面试考官能看到的您的代码的惟一例子。如果您写的代码很丑陋,面试考官会认为您写的代码都很丑陋。这是您展示自己最好的代码的机会。请花一些时间让代码变得健壮而优美。
请复习您打算使用的语言,写出自己最好的代码。
编程问题既是为了看看您写的代码有多好,也是为了看看您是怎样解决问题的。如果所有的面试考官都是想了解您的编程能力,他们就会给您一张写有问题的考卷,过一个小时再回来看看您做得怎样,就像在编程竞赛中一样。面试考官想看的是您在处理编程问题的各个阶段的表现。
面试中的问题的解决过程是高度互动的,如果您遇到困难,面试考官通常会通过一系列的暗示,引导您得到正确的答案。当然,您需要的帮助越少,他们对您的印象就越好,但在这个过程中表现出智慧,对得到的暗示作出良好的反应也是非常重要的。
即使您以前曾遇到过这个问题,所以立刻就知道了问题的答案,也不要脱口而出。将答案分解为具体的步骤,并解释每一步后面的思考过程。重要的是向面试考官展示您理解了该问题背后的概念,而不是展示您记住了某个编程难题的答案。
如果您知道这个问题的相关信息,即使这对当前的问题并不是直接适用,您可能想在答题过程中说出来,以展示您的一般编程知识。在回答这些问题时,要展示出您不只是一个书呆子式的程序员。要展示出您在这个过程中很有逻辑,具有计算机的一般知识,并能够很好地沟通。
要多说话!要随时解释您在做什么!否则,面试考官就不知道您是如何解决复杂的编程问题的。
| 回书目 上一节 下一节 |
|
· C语言之基础自测获奖名.. · Linux服务器架设自测获.. · 边界网关安全防护自测.. · Cisco CCNA最新真题自.. · 我在美联储监管银行 书.. · 我在美联储监管银行 目.. |
· 我在美联储监管银行 前.. · 入侵的艺术 目录 · 入侵的艺术 前言 · 网管员全真面试题自测.. · 子弹的本质—— 形势没.. · 学习大量的词汇—— 对.. |
|
||||
| · Windows Server 2008 · SQL Server 2008/2005.. · 打造安全网络环境 · 网络安全产品检验规范 · 华为、贝恩资本22亿美.. · 社会工程学与网络安全 · 离职员工安全隐患 · 杀毒软件评测专题 |
· Sun以10亿美元并购开源.. · 中间件应用技术专题 · 杀毒软件优化和使用技巧 · 信息安全等级保护专题 · 补丁自动分发管理策略.. · 杀毒王牌 · AMD Phenom三核处理器.. · 国际文档格式标准开战 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · 路由器设置与口令恢复 · Linux 集群技术专题 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · 常用交换机典型配置 · 路由器设置与口令恢复 · Linux 集群技术专题 · VPN技术 |
|||