(学生)面试问题 - 为机器人实验室编程

时间:2010-07-14 09:57:46

标签: c++ opengl

我的机器人实验室正在寻找程序员来处理我们目前的一些项目。

我们确定了要求(主要是c ++以及使用openGL和3D的经验),但由于明显的资金限制,我们无法聘请Great Developers。相反,我们将选择有才华的学生,为他们的论文/论文提供项目,并希望从他们的一方获得一些新的想法和创造力。我们也可以支付刚毕业的学生(第一份工作经验)。

所以我的问题是:

  

根据您的经验,您是如何发现才华横溢的学生(计算机科学家或工程师)的?你问过什么问题?还有什么能帮助你找到一个原来是优秀程序员的候选人? (注意:他们可能对特定语言知之甚少,但可能有很快学习的能力)

或者,如果您是受访者,

  

有哪些问题让你跳上了潮流?或者,如果你有一个糟糕的经历,那么 - 回想起来 - 是一个明显的警告信号你忽略了吗?

请注意,我正在寻找一个有争议的答案。我们可以整天谈论什么对我们最好,从不同意。

相反,我正在寻找您的经验中的故事。轶事,故事,提示,一切都会有所帮助。


背景:

更多背景:在这里为学术界工作与为私营部门工作(这里=意大利)略有不同。 “销售”产品没有“最后期限”;相反,它是所有基于概念的证明。你开始研究的任何东西都没有保证功能。

漫画最佳描述:reinventing the wheel

我正在考虑为他们的采访做编码问题,但我的所有同事都在嘲笑我(太可怕了,没有人会再次为我们工作,没有人真正知道如何编码等)。

编码方面,研究人员完成的编程很丑陋。我正在努力使版本控制系统不断使用,人们不得不被追赶报告错误并记录他们的代码,所有都是编码的 - 所以它的工作原理很少我们回去旧代码'修复错误'。基本上一旦它有点工作,项目就会关闭,人们就会开始研究另一个项目。

很多都经过彻底改造和重写(仅仅是因为没有人知道已经存在)。人来人往,未来不确定,但我们玩机器人,所以非常酷:)

此外,由于人手不足,没有人可以关注你并引导你进入你的项目。充其量只是你必须提出计划,背景资料和工作原型。

因此,我们正在寻找以下人员:

  • 有一些入门背景
  • 可以高度独立
  • 想要在新领域学习和建立自己的专业知识

5 个答案:

答案 0 :(得分:3)

实际上,这是我最好的建议:

在学生中招募。

因为你在学术机构工作,我认为你或你的同事都在教书。这为您提供了大量关于潜在新员工能力的信息 - 他们学习的速度,他们的动机,他们的优缺点,他们为实验室任务和项目提供的代码如何,等

答案 1 :(得分:2)

首先,在行业中,编码问题非常普遍 - 如果没有提出编码问题,我会担心!

我已经负责大约十年的技术面试了。是的,我问编码问题。但问题本身并不是重点。我更感兴趣的是了解候选人是否能够思考并阐明他们的想法。

我问的一个问题(假设简单的早期事情已经顺利)是关于继承heirachies。没有一个正确的答案,虽然有很多错误的答案。但重要的是他们如何处理这个问题,他们提出的观点是赞成一种设计而不是另一种设计。

背景知识很有用,因为它表明他们对你工作的领域感兴趣 - 但真正可以获得知识。情报更为重要。

然而,很有可能拥有无法与之合作的聪明人!我还没弄清楚如何确定他们是谁。

答案 2 :(得分:1)

我在学生时做过这样的项目:即4个月的项目,半工作。这本身并不是关于机器人。

我认为最明显的要求是动机/激情。由于他们主要是靠自己,你需要他们有点独立,能够自己思考,这首先需要动力。

为了确定候选人是否有动机,首先向他们询问项目本身。如果他们只是粗略地看了一眼,他们可能没有动力。还要看看他们的经验/课程:CS中的可选课程,他们已经完成的项目等等......任何表明他们真正关心CS /开发的东西,并不是因为他们听说它支付得好。 / p>

然后是能力问题。就像你说的那样,发现那些聪明到能够自己解决问题和做事情的人可能并不容易。再一次,您可以向他们询问过去的项目,让他们详细说明他们面临的问题以及他们如何解决这些问题。

最后,我同意你的看法,他们的能力有一些示范。他们最初可能会有点紧张,所以我最后会这样做,一旦面试已经开始,你可能有机会让他们以前面的问题放松一下。

你不一定需要他们来做编码问题,我认为最重要的是推理。尝试选择与您所在地区工作相关的问题,例如您过去真正拥有的问题,并让他们分析问题。如果可能的话,他们应该带头并在这里问你关于这个问题的问题。

  

我们遇到的问题是机器人无法分析相机拍摄的图像,无法正确判断移动物体本身,您是否知道如何做到这一点?

然后你需要让他们考虑解决方案。你需要一块白板,让他们大声思考,这样你就可以跟随他们的反思。你可能需要不时地推动它们以使它们保持正常,它们对你的输入的反应也是一个关键点,因为你希望它们能够接受批评并建立在它上面,否则你可能会在之后指导他们。

坦率地说,尽量避免向他们询问快速排序算法,内部排序或基数排序......如果他们需要排序,他们只需启动计算机并浏览互联网。另一方面,让他们分析他们不知道的现有算法(例如,5种中位数)并检查他们是否理解其工作原理,这是值得的。如果他们需要自己工作,他们也需要能够自己学习:)

答案 3 :(得分:0)

正如其他人所说,试着雇用那些有动力的人!

对于硕士论文的学生,我更加强调了解基本技能(编程,知道如何使用版本控制),因为他们没有足够长的时间来学习一切。

如果他们主要是靠自己工作而你对语言没有特殊要求,我就不会过多关注语言问题。但是每个体面的程序员都能很好地了解至少一种语言,获取样本或他们以前的工作,或者让他们编写一些简单的应用程序来测试他们不会吮吸。

我更关注算法和数据结构。询问每个程序员应该知道的基本内容 - 何时使用列表以及何时使用向量,为什么通过首先迭代列来对行主矩阵求和是不好的,基本的复杂性分析问题等等。这将解决许多问题。坏杂草。

或许也可以提出一些设计问题,例如:什么是“耦合”以及它为什么不好,问问他们是否知道什么是设计模式等等。

如果他们要使用任何像OpenGL这样的3D东西,请检查申请人是否掌握了线性代数和坐标系变化。根据我的经验,学习API很简单,围绕变换的工作方式进行了解决。

显然,如果你除了他们执行任何真正的机器人特定,你也应该检查这些知识。例如。估计(理解简单的EKF和粒子滤波器是我的书中的要求),控制理论,模式识别,机器学习,视觉或任何对特定任务有用的东西。

如果我雇用某人从事理论工作,我可能会放松CS /编程技巧,更多地关注数学知识。拥有扎实数学技能的人可以轻松掌握CS,编程就是编程。

询问参考资料或查看以前的一些工作。许多优秀学生毕业后已经有了一些有趣的项目。

答案 4 :(得分:0)

我不确定这在大学中有多普遍,但我会在成绩单上寻找一个游戏编程(或机器人)课程,作为一名学生,候选人成功完成了一个团队的项目。它会要求候选人描述该项目的工作原理(重要的技术细节)以及他在团队中的作用。真正判断一个人是否擅长某事的唯一方法就是看看他们尝试时会发生什么,而且因为你在学术界,招募学生,这应该不是问题。