首页 > 编程语言 >如何在面试中,发现优秀程序员 【旧文新解】

如何在面试中,发现优秀程序员 【旧文新解】

时间:2024-08-07 22:56:05浏览次数:14  
标签:问题 经验 程序员 面试 应聘者 开发人员 旧文 新解 简历

       作为一位身经百战,面试无数人的世界500强外企技术面试官,回过头来总结面试,翻看曾经汇总总结的面试经验,发现在瞬息万变的当下依然适用,特地整理拿出来供大家欣赏学习,希望对大家有用。

        我曾在一次面试中要求一个很有经验的嵌入式软件开发人员写出一个反转一段字符串并输出到屏幕上的程序。他在这个题目上挣扎了很久。这个家伙是个很神奇的人。你给他一些没用的零件,他能建造一个机器人,并能用程序控制它在屋里走来走去。他曾经参与过研制卫星,并且这个卫星现在正在轨运行。他只用左脑都比我能干。但是对于这个题目他却从来、从来没机会干过:在屏幕上显示什么东西。

  有些人就有这种技能,能在面试中问出正确的问题,发现优秀的程序员。而有些人却害怕提问,畏首畏尾,问一些从网上拷贝下来的问题,自己没主见,只会跟随其他面试官的意见。但面试对于大多数开发人员来说是一项很基本的技能。一次失败的招聘会给一个组织造成很严重的长期的后果,因为很水的雇员会把其他很水的人也带进公司。另一方面,把优秀的应聘者拒之门外对公司也是一种伤害。

  一场技术性的面试至少包括三个部分。在第一部分里,我们要做的是看应聘者的简历上写的是否符合实际情况。在第二部分里,我们要评估一下候选者究竟有多少实际经验。最后,我们要用一些问答选项或编程问题来测试这些经验。

  第一部分:测试简历的真实性

  有一次我跟一位同事面试一个候选人。当面试完之后,我觉得这个候选人还可以,但不是十分出色。可我的同事看起来很不满意。“他撒谎,他说他会XXX技术,可很显然他根本没有做过这种技术。绝对不能要这种人。”虽然这XXX技术对我们公司并不是很重要,“因为他撒了这个慌,”我的同事继续说,“我就不会相信他在简历上写的任何东西了。”

  应聘人员应该在简历中用一种很积极的色彩来描绘自己。然而,这种积极的描绘应该有个度,过了这个度,就表达的不正确了。在上面的例子中,我并不和我的同事一样觉得这个事很严重,因为我事先就假设了,简历上的任何东西都是假的,除非被证明。如果简历上说,“擅长于XXX技术”,那么我就认为这个应聘者可能仅是知道XXX技术这个名字。如果简历上说,“在一个开发多线程股票交易系统的团队里工作,”那我就会认为应聘者可能只是为这个系统挑选了一下背景的颜色。我的要求一向不严格,除非碰到了一位有十年工作经验、已经不再写代码的家伙。如果有人说他开发了OpenOffice软件的文本格式化工具,或拥有哲学博士学位,那我们就很容易假设他们有什么技能了。假设一无所有。一切都要证实。

  对于简历上每条相关的描述,我会首先估摸一下应聘者的实际情况。然后,我通过下面的交谈来证实。

  • 开发过一个实时操作系统作为练习项目。
    你工作的团队有多大?15个成员?哦,那么,你实际上负责哪部分的?消息队列?很好!请描述一下一个高优先级的任务向一个低优先级的任务发送消息时会发生什么情况?
  • 完全自主开发了一套为无线安全系统使用的音频传输协议。
    你的团队有多少人?只有你?哦,你是如何测试的?你为什么不使用RTP呢?
  • 给XXX引擎修复Bug。
    请你描述一下你曾发现过的一个特别有挑战性的bug,以及你是如何修复它的。

  第二部分:发现实际的经验

  拥有更多的经验是一个优秀人才的很好的指标。有经验的开发人员都是从犯错误中成熟的。他们知道何时该,何时不该使用设计模式。他们有第六感,能感觉到需求的哪一部分需要修改,哪一部分要保持原样。他们知道何时该偷懒,何时该考究。是真实的经验让优秀的开发者和平庸的开发者之间的差距大的无法跨越。

  并非所有的经验都是等效的。很有可能,对于某个人,他通过多年的工作,在很多的任务中写或重新无数的代码,犯了许多的错误,就能获得扎实的技能。而另一种情况,一个人会在十年的时间里只在一个项目里修改了一行代码,没有学到任何新的东西。

  发现隐藏的时间

  很多伟大的程序员都是在他们大学的第二年就开始编程了。当他们离开学校时,他们就已经有了几年的工作经验了。还有,有些很神奇的程序员在他们很小的时候就开始学习编程的艺术了。我也认识好几个人在他们十几岁或更小时就写出来一些不算小的程序了。这些信息你是在简历上找不到的,需要你在面试中把它们引诱出来。

  • 你是怎么进入到软件开发这一行的?
  • 你曾经学过的第一种编程语言是什么?

  经验的密度

  很多神奇的程序员只是在他们工作的时间里编码。这很好,工作生活很平衡,你没有理由不雇佣这样的人。然而,在工作和学习之余做一些个人的编程项目是一个优秀的人才的很好的指标。有业余编程经验的应聘者很明显有更丰富的经验,更适合公司。没有个人项目?这里有其他几点也能做这方面的指标:

  • 在很小的团队或小组里工作。
  • 参与过很多各种各样的项目。
  • 对一个大型项目的各个抽象层面上都有很详细的了解。
  • 在一个项目组里作为主要开发者。

  第三部分:验证经验

  在对应聘者有了一个基本的真正经验水平的感觉后,就开始对他们进行重要的实际编程经验的验证了。几分钟的时间对于一个真正的测试肯定是很不充分的,但也只有这样了。我们可以通过对编程开发的各个领域进行提问来认识应聘者对这些知识掌握的深度和广度。当然了,你对应聘者技能水平的看法会由于你自身的经验水平而有所偏向。对于你不太熟悉的领域你不可能对答案做出正确的判断。所以我们一般同时会有好几个面试官。

  工作职务的不同会有不同的面试主题。然而,下面几个领域是很常见的:

  • 数据结构和算法
  • 多线程
  • 字节操作
  • 内存分配
  • 对象,继承,设计模式
  • 递归
  • 汇编知识和程序运行原理

  我选择的每个领域都有一个精心挑选的很基础的问题(“什么是一个信号?”)。问题很基础,只要应聘者在这个领域做过一些工作就能回答上这些问题。每个领域都有一些其它的较深入的问题。候选人对这些问题的回答能证明他们到底是不是专业。例如,如果你问一个有经验的嵌入式软件开发人员如何把0x4c转化成二进制,他写出一个4×16+12,这就不是很对了。

  编码问题

  在完成了上面的步骤后,我通常就已经能认定了这个候选人是否能过关,如果还有困难,那编码问题会帮我扫除最后的障碍。这个很重要,即使在电话面试里也不能漏过。为了行之有效,在面试之前,你要好好的思考和计划要提出的编码问题。问错误了,回答也就没意义了。

  首先,问题的选择必须基于应聘者的工作经验之上。如果你想起来3D飞机,想把所有问题都围绕着它进行,这样会有很妙的问题。但你还是省省吧,吃午饭时跟同事说说还行。如果招聘的工作跟3D图形没一点关系,那这个候选人就肯定被不公平的排除掉了。

  问题必须精确的表达出来。“写出一个用来移动一摞卡片的函数”,这个表述就十分的含混不清。要给出功能性标题,避免误解,这种事情经常发生。如果你不小心,面试者有可能回答的是一个比你提出的问题更难或者更简单的问题,而不是你想要问的。如果回答的是更难的问题,那还好,除非难题让他目瞪口呆。如果回答的是更简单的问题,那没有什么用处。为了防止浪费大量的时间,在他们答题的几分钟后问一下他们的答题纲要,看看他们的理解是否在正确的方向上。

  更进一步

  上面的指导并不能解决所有问题。这些主要是针对工作经验。你也许会错过一些没有多少经验但有非常大的潜力的优秀程序员。特别是当面试官想通过一些不用编码的难题来考察应聘者解决问题的能力的时候。

  这里所说的这些面试技巧都是要基于一种假设、可能性、内部直觉。假设候选人是一个很出色的开发人员。那一个出色的开发人员应该具有哪些品质呢?你没法直接的测量这些品质,所以你需要想:一个具有这些品质的优秀开发人员对这样一个特定问题进行快速回答的可能性是多少?你不可能通过面试对一个候选人进行100%正确的评价,但通过尽量周全的提问,你会做到很接近这个结果。

引用英文原文:Finding awesome developers in programming interviews

标签:问题,经验,程序员,面试,应聘者,开发人员,旧文,新解,简历
From: https://blog.csdn.net/jym3344/article/details/141003128

相关文章

  • 人工智能时代,程序员如何保持核心竞争力?
    人工智能时代,程序员如何保持核心竞争力?随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工作,也有人认为AI是提高效率的得力助手。面对这一趋势,程序员应该如何应对?是专......
  • 人工智能时代,程序员如何保持核心竞争力?
    引言AI工具的出现,不仅仅是给社交、教育、自动驾驶等领域带来了新的想象,如今AI编程工具,如代码自动生成器、智能代码助手(例如GitHubCopilot)、错误检测工具等,也在编程领域变得越来越普及。 同样的,近些年来被AI代替的恐慌,也不仅仅是出现了小部分行业中,连程序员也涉及在内。 3......
  • AI 汹涌而至!三波冲击下将淘汰大部分程序员
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    最近到处都能听到“人工智能会不会在不久的将来取代程序员”的争论。本人的观点为:人工智能将会取代程序员,本文将对此予以阐述。(注:此处所言的取代程序员,意指大多数,并非百分之百的完全取代,亦非一次性......
  • “码农接单坊”:构建全球程序员与技术需求的桥梁
    摘要在数字化时代,技术项目的高效实施与创新发展离不开高效的人才匹配与资源对接。本文深入探讨了“码农接单坊”这一专业的程序员在线接单与服务交流平台,通过分析其目标客户、平台定位、技术架构、核心功能及优势,揭示了其在连接全球程序员精英与项目需求方中的重要作用。同时,......
  • 人工智能时代,程序员如何保持核心竞争力?
    人工智能时代,程序员如何保持核心竞争力?随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工作,也有人认为AI是提高效率的得力助手。面对这一趋势,程序员应该如何应对?......
  • 面向-Windows-程序员的-C---软件互操作教程-全-
    面向Windows程序员的C++软件互操作教程(全)原文:C++SoftwareInteroperabilityforWindowsProgrammers协议:CCBY-NC-SA4.0一、准备介绍本章介绍了软件互操作性项目。我们先简要了解一下先决条件。接下来是项目概述。最后,我们描述了项目的主要组成部分以及它们是如何组......
  • 2024最全 Java 面试八股文(程序员必备)
     一、Java基础篇1.接口和抽象类的区别相似点:(1)接口和抽象类都不能被实例化(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法不同点:(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,(2)抽象类可以有构造方法,而接口没有(3)抽象类中的成员变......
  • 一直让 PHP 程序员懵逼的同步阻塞异步非阻塞,终于搞明白了
    大家好,我是码农先森。经常听到身边写Java、Go的朋友提到程序异步、非阻塞、线程、协程,让系统性能提高到百万、千万并发,使我甚是惊讶属实羡慕。对于常年写PHP的我来说,最初听到这几个词时,脑袋一直处于蒙圈状态,回过头来看着自己手上同步阻塞的PHP代码,心想着「异步、非阻塞、线......
  • 程序员副业探索之电商
    在腾讯广告工作期间,我主要负责小程序电商与广告业务,见证了互联网电商行业的剧变,特别是众多电商公司纷纷拥抱私域流量,直播带货成为新风尚,广告投入也在持续增加。通过这些经历,我积累了不少关于互联网电商的经验,并萌生了尝试电商副业的想法。在小红书上,女装博主们凭借独特的穿搭分享......
  • 编程心流指南:探索程序员的创造力巅峰
    简介:心流是一种全神贯注和高度专注的状态,它可以使程序员在编程过程中获得最佳的创造力和工作效能。本文将探讨如何达到心流状态,尽情享受编程的乐趣,以及如何克服干扰和提高自我管理能力,让你的思维能够更深入,创造出令人惊叹的代码。让我们一起来探索吧!找到适合的挑战:挑选适合自......