如何在面试中发现优秀的程序员

Programming Interviews Exposed 3rd Edition 程序员面试宝典, 是你成功获取各大公司offer的必备修身秘籍。 立即下载

英文原文: Finding awesome developers in programming interviews

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

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

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

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

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

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

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

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

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

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

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

  发现隐藏的时间

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

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

  经验的密度

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

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

  第三部分:验证经验

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

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

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

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

  编码问题

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

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

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

  更进一步

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

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

Programming Interviews Exposed, 4th Programming Interviews Exposed, 4th Programming Interviews Exposed, 4th Programming Interviews Exposed, 4th 立即下载

相关推荐

Programming Interviews Exposed Coding Your Way Through the Interview(4th) epub

Programming Interviews Exposed Coding Your Way Through the Interview(4th) 英文epub 第4版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

技术开发人员如何准备面试

 前段时间总结去年下半年的工作时,要求总结项目之外的工作或贡献,对我来说有一部分工作是为部门招聘而做的面试工作,看过50份以上的简历(这些都是通过笔试的),面试20人以上,其中招到3人,这也是不小的贡献,呵呵。废话不说,先说我是怎么面试或面试者要在面试之前要做哪些准备。 1、  清楚自己提交的简历的内容中提到的技术技能这可能很可滑稽,有人说自己的简历还不知道什么内容呀!你别说,面试

pursuer_zhao的专栏 5229

Programming Interviews Exposed: Coding Your Way Through the Interview,4E

By 作者: John Mongan – Noah Suojanen Kindler – Eric Giguere ISBN-10 书号: 111941847X ISBN-13 书号: 9781119418474 Edition 版本: 4 出版日期: 2018-04-17 pages 页数: 384 Introduction Chapter 1:Before the Search Chapter 2:The Job Application Process Chapter 3:The Phone Screen Chapter 4:Approaches to Programming Problems Chapter 5:Linked Lists Chapter 6:Trees and Graphs Chapter 7:Arrays and Strings Chapter 8:Recursion Chapter 9:Sorting Chapter 10:Concurrency Chapter 11:Object-Oriented Programming Chapter 12:Design Patterns Chapter 13:Databases Chapter 14:Graphics and Bit Manipulation Chapter 15:Data Science,Random Numbers,and Statistics Chapter 16:Counting,Measuring,and Ordering Puzzles Chapter 17:Graphical and Spatial Puzzles Chapter 18:Knowledge-Based Questions Chapter 19:Nontechnical Questions

如何在面试中发现优秀程序员

导读:找工作时人们总喜欢把简历写得漂亮一点,给面试官留下好印象。那么如何能在漂亮的简历中找出真正可用的优秀程序员呢?面试的问题很重要。本文作者详细介绍了他在面试中的经验,与大家分享,帮你招到优秀的程序员。他将面试大体分为三部分:在第一部分里,我们要做的是看应聘者的简历上写的是否符合实际情况。在第二部分里,我们要评估一下候选者究竟有多少实际经验。最后,我们要用一些问答选项或编程问题来测试这些经验。<br />我曾在一次面试中要求一个很有经验的嵌入式软件开发人员写出一个反转一段字符串并输出到屏幕上的程序。他在这

447

Programming Interview Exposed 4th edition 原版

Programming Interviews Exposed is the programmer’s ideal first choice for technical interview preparation. Updated to reflect changing techniques and trends, this new fourth edition provides insider guidance on the unique interview process that today's programmers face. Online coding contests are being used to screen candidate pools of thousands, take-home projects have become commonplace, and employers are even evaluating a candidate's public code repositories at GitHub—and with competition becoming increasingly fierce, programmers need to shape themselves into the ideal candidate well in advance of the interview. This book doesn't just give you a collection of questions and answers, it walks you through the process of coming up with the solution so you learn the skills and techniques to shine on whatever problems you’re given.

2023 年全国网络安全行业职业技能大赛-电子数据取证分析师-决赛WP_2023网络安全行业赛取证

数据库取证工具里面可以恢复删除掉的数据带红叉的就说删除过的,game库下面announcement_detail表里面update_time字段使用sql语句时间戳最大为1513243355转换时间为2017-12-14 17:22:35。

2401_89791684的博客 2092

面试开发人员的有效方法

伯乐在线 写道 "Alan Skorkin是一名软件开发人员,这是他分享的另一篇有关面试和开发人员的文章(中文)。Skorkin 认为,“当要雇佣开发者时,传统的面试方法显得力不从心,这是必须要面对的现实。为什么不行?原因也许在面试官,因为面试也是一门技术,即便有丰富的阅历,如果提问题时问不到点子上,即使能够提出比较好的问题,他也不知道该从开发人员的回答里提取哪些信息。”Skorkin提出一种新颖...

weixin_33736048的博客 222

招标文件智能解析系统开发文档

本系统是一个基于OCR与大语言模型的招标文件智能解析平台,专门用于处理和分析招标文件,自动提取关键信息并进行结构化展示。

警世龙的技术博客 1925

开发人员 面试_开发人员面试指南

开发人员 面试by Dave Smith 戴夫·史密斯(Dave Smith) 开发人员面试指南 (A developer’s guide to interviewing) 备用标题:如何面试公司 (Alternate title: How to interview a company) Have you ever been in a job interview, and the inter...

3046

JPA - @MappedSuperclass - 基类注解

目录前言代码示例 前言 @MappedSuperclass注解一般作为基类的注解,表眀该类是映射的超类,继承于它的子类实体在映射时会自动添加到子类实体的对应数据库表中,用于共同的属性代码复用和模型分离。 代码示例 BaseEntity.java import lombok.Getter; import lombok.Setter; import javax.persistence.MappedSuperclass; import java.util.Date; @Getter @Setter @Ma

Maggieq8324的博客 2064

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 375

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

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

本博客除普及前沿技术及代码实践案例,还主要分享工作中使用比较前沿的技术栈与心得 1453

AU混响终极指南:从‘干声’到‘空间感’,用总音轨和发送技巧打造专业人声

本文详细介绍了如何在Adobe Audition(AU)中使用混响效果器,通过总音轨和发送技巧将‘干声’转化为具有专业‘空间感’的人声。从混响基础原理到总线架构设置,再到精细控制和自动化调整,全面解析了提升音频质量的实用技巧,适用于音乐制作、播客和内容创作。

weixin_30512089的博客 331

如何在面试中发现优秀程序员(转)

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

走向架构师之路 2万+

基于Simulink的异步电机参数在线辨识与自适应控制仿真

本文基于Simulink平台,详细介绍了异步电机参数在线辨识与自适应控制系统的仿真实现。针对异步电机运行中参数时变问题,采用模型参考自适应系统(MRAS)实时辨识转子电阻和互感,并结合自适应PI控制策略动态调整控制器参数。通过搭建完整的矢量控制(FOC)仿真模型,验证了系统在稳态辨识、参数摄动和动态响应等工况下的性能:参数辨识误差<1.2%,转速跟踪误差<20rpm,动态响应时间<10ms。文章还提供了详细的Simulink建模步骤、核心代码实现及性能分析,为高级电机控制系统的设计与优化提

amy_mhd的博客 72

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

本文为使用 STM32Cube IDE 的 STM32 Blue Pill 入门教程。 在本文中,我们将介绍如何控制 STM32 Blue Pill 的 GPIO 引脚。以及开发环境搭建。 本系列文章将重点介绍采用 ARM Cortex-M 的 BluepellSTM32F103C8 微控制器以及如何使用 STM32CubeIDE 对其进行编程。 STM32CubeIDE是STM32官网提供的IDE

视觉与物联智能 1067
上一篇: 遇到问题时,如何跟客户沟通
下一篇: Benefits of software localization
emenahs
博客等级 码龄14年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值