当前位置: 首页 > 科技观察

我面试程序员的经验:一个能一网打尽的技术问题

时间:2023-03-15 21:56:06 科技观察

我面试程序员的心得:一道技术题,一口气能抓到是连环杀手还是精神病患者。2、技术专家面试:判断应聘者是否是一名优秀的程序员。3、大老板面谈:确定应聘者愿意接受多少。我面试两种类型的人:实习生和准雇员。实习生只需要通过上面的第二步,其他人需要通过所有步骤。在那家公司工作的两年时间里,我进行了200多次技术面试,这对我来说是一次丰富的学习经历,我也逐渐摸清了其中的精髓。这里有一个很重要的前提,请记住,在法国你不能轻易解雇一个人,雇错一个人,你会后悔一辈子。找到最佳人选很关键,不能出错,这是一个乏味的过程,但我很享受。特殊专业抽签式技术题2008年,我进行了第一次技术面试。当时公司已经有一套工作流程供我参考:面试时间为1小时,候选人有30分钟回答15个问题。一个测试问题,然后我们花15分钟讨论他们的回答,再加上另外15分钟回答有关工作的问题。我很快意识到这样的问卷有多糟糕,我的意思是,如果你尽力而为,你找不到比这更糟糕的事情了。我们公司大约50%的项目都是用Java写的,所以考题非常偏Java,由5道小题组成,后面是10道针对特定Java框架的极难题,比如我们经常用到的题是:类和对象的区别。或者Struts2中execAndwait拦截器的用途是什么?哎呀,我什至不能自己解释这些问题或添加任何内容,每次面试我都祈祷候选人不要用它们来对付我!对面试官来说很讽刺,不是吗?无论如何,我都会快速(2-5分钟)浏览他们的答案,然后花时间讨论他们的简历,这浪费了很多时间,所以我决定改进它。我在网上对比了上百道面试题,当时我认为一定要考对题,才能真正展现人才的优秀,俗话说“好马配好鞍”。随处回答的广泛技术问题经过大约一个月的研究,我在网上搜索问题并提炼出前50个问题,我认为这些问题是很好的问题,因为它们可以用任何语言回答。都能回答出来,而且难度在稳步上升。我将这50个问题分成5组,每组10个大问题,并随机分发。示例:什么是单例?你什么时候使用它/不使用它?这个问题好多了,我觉得很明显,好问题通常会得到好的答案,我练习了几个星期,但不知怎的,这不太奏效,我觉得我做得很好,但是结果不太好。是的,这些问题可以测试一个人是否熟悉编程理论,但到最后我还是不知道这个人是否会编程,并且到最后我不确定这样招聘员工是否比使用以前的粗略好struts2的问卷到底好多少。想了很多,发现有两个很大的问题:1.问题太宽泛了,没法讨论SQL、前端细节等话题,不针对某一种语言。2.问题太短,10个一般问题太窄了,我无法通过任何其他方式判断此人是否是一名优秀的程序员。我需要的是更多问题,而且这些问题必须针对应聘者申请的职位。面试问题经典:100,000个为什么当我继续深入挖掘并创建一个完全自动化的测试工具(在实习生的帮助下)时,事情变得有点失控:测试经理(QM)。这个工具让招聘流程变得完美:在初次面试之后,HR选择了三个与职位描述相关的主题,之后该工具自动生成了一组选择题,其中有3*20=60个随机但具体的问题,难度其中符合应试者的经验水平。示例:(javascript)vari=0;functiona(){vari=2;我++;}一个();警报(我);=>0?2?3?之后,该工具会绘制一个小图表,生成并发送电子邮件给HR直接显示结果,而不是一堆无用的指标。多么让我引以为豪的工具!我热切地等待候选人测试系统!在内部系统中选择了某些答案后,我坐在HR旁边,看着候选人的实时分数。QM使我们的一切变得更容易,在我们对自己的开发人员进行测试之前它看起来很完美......好吧,情况比我们想象的还要奇怪,我们中的许多最优秀的开发人员将获得与那些人相同的分数我拒绝了,这才是正确答案,QM被证明是无效的!我花了很多时间构建这个工具,我也花了很多时间意识到我犯了一个巨大的错误:我们想要自动化结果,这迫使我们只能设置多项选择题。用户只需要选择一个答案,那么问题就变成了技术问题居多,结果就是我们根本不具备测试软件开发的能力!这是一个艰难的局面,但最后我承认该工具适得其反并显示了错误的印象。在要求程序员在面试中编码8个月后,我做了更多研究并观察了一些美国公司筛选候选人的过程,此时我决定采用另一种方法:只编码。这就是程序员获得报酬的方式,那么为什么不直接告诉我他们是如何编码的呢?你会发现这很合乎逻辑......经过前几个月的课程,现在考试很简单了:我会给你三道算术题,你需要在30分钟内解决它们。考生可以选择任何语言并使用电脑作答(无需互联网连接)。这些是您可以在网上找到的经典问题:一个算法问题通常涉及字符串操作(例如反转句子中的单词),另一个问题涉及循环(例如计算斐波那契数列),最后一个问题涉及集合(例如列表排序).示例:打印出数字1-100。对于3的倍数,打印出foo。对于5的倍数,打印出bar。对于3和5的倍数,打印出foobar。一切都变得更加清晰和美好。我可以非常直观地看到谁在代码中缩进、注释、遵循约定、寻找解决方案等。我可以看出这个人过去的编程量,通过和他们讨论问题的答案我也可以获得很多信息。我认为考生应该对这些试题感觉良好,因为我已经尽力减轻他们的所有压力,他们可以慢慢来,选择他们想要的语言,寻求建议等。起初,我对结果感到很兴奋,并持续了几个月,然后,我又一次意识到我遗漏了一些东西……好像出了什么问题……事实上,我实际上可以依靠它来弄清楚那些可以做什么的人解决算法问题,但他们真的是我要找的优秀程序员吗?请大家想一想,一个程序员的水平是不是由他能不能解决一道数学题来定义的?是不是看他能不能写出一个复杂度为O(nlogn)而不是O(n^2)的排序?可以清楚地记得,我刚开始学编程的时候,windows3.1还没有,QBasic语言是在MSDOS5.0上承载的,它有自己的帮助信息,包括所有的函数和关键字,就像一本完美的离线手册。还记得那时候编程的独特感受,挥之不去,每次按下F5,看到自己写的程序在眼前执行,每一行代码,每一个提示,甚至是颜色,还是难解决问题......我真的在天堂。我记得在每个命令前加上行号,用可怕的GOTO填充我的代码,并且每天都学习新的和令人兴奋的东西。我喜欢编程,我会日以继夜地写游戏,解决问题,给我的父母和朋友看。时光飞逝,我从QBasic到Pascal再到VB,通过2400bps调制解调器和家庭电话线为我们的BBS(AtomicBBS)编写游戏。我不是很好,事实上我的代码很糟糕!但我爱它!!我不能失去它……我猜有些人在第一次驾驶飞机、驾驶船只、抽大麻、进食时会肾上腺素激增,对我来说,这就是编程、编译和运行。25年前我就有了这种感觉,它从未离开过我。我为编程而生,我永远是一名程序员。我始终相信,一个热爱编程的人,不仅会在工作中编程,他们在家里也会不断地创造乐趣,这是一种爱好。有多少次我在工作中因为糟糕的Eclipse而感到失望,只有当我回到家编写RubyonRails代码时才找到快乐和放松!回到上一个话题,经过一年的尝试和失败,我完全放弃了技术测试。我会坐在求职者旁边,花5到10分钟阅读和评论简历,不问任何问题,然后我会查看简历,看着求职者的眼睛说,“我们还有大约30分钟,可以吗?你能告诉我你写过的最成功的项目吗?”这个简单、独特且客观的问题是关键。有些人会含糊地回答他们以前的工作或学校项目,而另一些人会突然活过来,即使他们一开始有点依恋,并热情地谈论他们写的游戏,他们制作的网站,他们将自豪地向我展示贡献的开源项目和开发的工具。我常常被他们滔滔不绝的谈吐所吸引和着迷,然后我向他们询问这些最喜欢的项目的所有细节。这是他们的孩子。还有一件事让我难以忘怀:我仿佛能看到他们眼中的光芒,仿佛能看到他们小时候编写运行第一个helloworld程序的场景,很快我就意识到我们有东西在共同点,我们都是程序员。他们中的绝大多数人没有接触过我们正在使用的struts或其他特定框架,但是当他们进入工作时,他们将永远成为金牌程序员。他们学得很快,他们写出更好的代码,他们用创造力和正能量激励他人,他们是真正的程序员。