您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    程序员面试的标准答案并不标准
    时间:2017-03-11 13:25 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    Peter Verhas在技术面试时问了一个看似无关的问题,并得到了一个虽然没错但并不恰当的答案。随后,他宣称,“有时候,我会碰到那些不但不知道答案,还自作 聪明地给出错误答案的候选人。知道错误答案比不知道更糟糕。一些极少数的甚至坚持和试图向我解释我应该如何理解他们的答案。这已经成为了一种个性问题,而 且毫无疑问是面试中要pass掉的人。”我要声明的是,Peter不仅是错了,而且这样的面试条件完全损害了他所就职的公司的利益,我个人绝对不会工作于 有这样一种态度的公司。

    程序员面试的标准答案并不标准

    你可以先去阅读他的原始文章。事实上,用不了多长时间。

    好了,既然你已经了解了材料,那么下面让我们彻底地探讨一下吧。

    问错误的问题

    对于初学者来说,在我看来,整个过程从开始就错了:

    有很多关于Java技术面试的问题,即使是最入门级的新手也能给出正确的答案。当我面对不那么初级的候选人时,我不会问这 些问题来浪费时间。我假定候选人知道正确答案。但是,有时也有一些一开始我就认为是新手的候选人,我会削减面试以避免浪费他/她和我的时间,因此,我会问 一些简单的问题。这些问题的答案通常能揭示知识的真正水平,于是我们就可以在较短的时间内评估其水平。

    但是,伙计们,有一点要清楚的是:如果你是技术面试的面试官,那么你必须要求他们写代码,而不是回答问题。除非他们申请的职位就是用来解答编程问题的(在这种情况下,你面试的是老师,而不是实际的程序员),否则你就得要求他们展示他们的技术能力,而不是他们的口头知识。

    这样做的原因应该是理所当然的,但如果你还不明白的话,我会从逻辑,例子,和类比这三个方面加以论证。

    逻辑:你面试的程序员不是每一个都受过传统训练。他们可能不知道全部的偏好术语。是“getters and setters”还是“automatically-defined properties”亦或是“accessors and mutators”呢?这在某种程度上取决于你是在什么语言下成长的(例如,如果是C ++的话,在相当长的一段时间内更喜欢用后者)。这取决于你阅读的是什么书。这取决于你有没有和其他人讨论过这些——也许是从一本书上学来的,并且是在网 络上阅读相关内容。(StackOverflow最近的民意调查显示,求职者中约三分之一或更多的开发人员自认为“自学成才”。)因为他们没有用对词,你 就要踢掉完全合格的候选人吗?而这还不包括那些因为在面试时过度紧张而导致甚至简单的问题也回答得乱七八糟的人。

    例子:有一个为我工作了两年的开发人员是一个相当有能力的C#开发人员。这是一个能领导小组,能指导一些比较初 级开发人员,并想出一些相当得力的设计的家伙。然后,当潜在客户在会议中要求他讲解静态方法是什么的时候,他完全搞砸了,他牛头不对马嘴地开始谈论起构造 函数和其他一些文不对题的东西。直到他终于意识到自己在说什么的时候,我已经坐在那里用一脸“见鬼了?!?”的表情看了他几分钟。如果按照Peter的标 准,那么毫无疑问他会面试失败。然而,在那次会议之后,他依然为那个客户担任了9个月的团队领导,对于他的技术,他的能力,以及那些静态问题的答案(讽刺 的是,从来没有人谈到这一点!)没有人提出异议。换句话说,在没有面试压力时,他做的很好,他的工作也说明了这一点。

    类比:比方说,如果你要雇佣乐队来为你的婚礼演奏,那么你真的介意他们讲解音乐理论和作曲的能力吗?或者说你更 关心的是他们能不能演奏你最喜欢的舞蹈音乐,能不能演奏你的配偶选择的歌曲,能不能让你的祖父祖母也跑到舞池中跳起来?很多乐队(甚至我敢说是所有乐 队!!)是因为他们的工作表现和/或样带才得到的演出机会,而不是他们回答问题的能力。

    期待错误的答案

    接着,Peter说,

    知道错误答案比不知道更糟糕。一些极少数的甚至坚持和试图向我解释我应该如何理解他们的答案。这已经成为了一种个性问题,而且毫无疑问是面试中要pass掉的人。

    呵呵,真是狂妄自大,索性你就叫“编程面试上帝”得了。我的意思是:

    有这样一个简单的问题:一个类的静态方法能不能调用同一个类的非静态方法?如果你稍微懂点Java,你知道答案是:no, 不能。静态方法属于类,而不属于实例。你甚至可以直接使用类的名称执行静态方法,而不需要任何类的实例。甚至在整个JVM中没有类的一个实例,它也可以运 行。因此,哪里能够调用一个运行连接到实例的普通方法?

    狂妄自大的家伙,没有理由认为静态方法不能调用实例方法,好不好。这里Peter的问题基于这样一个事实,静态方法没有特定对象的引用(通常是“this”引用),这是给出的答案的理由:“没有this,没有方法调用”。

    然而:

    话又说回来,这时出来一个候选人他的回答是:yes。他甚至开始解释这样的情况可能发生在静态方法访问实例的时候。它可能会得到一个实例作为方法参数,并且通过那个引用,它可以调用实例方法。他说的是对的。

    但是:

    这样的回答并不能改变他对Java知之不深的事实,虽然在这个非常特定的问题上,他的回答是对的。

    所以,请原谅我的直言不讳:这个答案可以说是对的,但你也可以说是错的,因为“这个候选人没有深刻地了解Java”?但是反过来我也可以说,这个候选人就是因为充分地理解Java,才能找到一个虽然出乎你的意料、但实际上却是正确的答案。

    接下来会发生什么就显而易见了:对自己的技术自信满满的面试官,准备好了一系列已经规定了答案的问题来询问候选人,如果候选人没有按照他的答案回答,那就被认定为是“不合格”。

    举一个我亲身经历过的例子。几年前我到一家公司去面试一个C ++的职位,当被问到“私有字段能不能从类的外部访问时?”,正常的回答应该是“No,private会把这个字段封装起来,就好像与世隔离了一样。”

    #include <iostream> 

    #include <string> 

    using namespace std; 

    class Person 

    public

    (责任编辑:admin)