【问题标题】:(student) interview questions - programming for a robotics lab(学生)面试问题——机器人实验室的编程
【发布时间】:2011-03-15 18:35:53
【问题描述】:

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

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

所以我的问题是:

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

或者,如果你是受访者,

问了哪些问题让您加入了这个行列?或者,如果您有过糟糕的经历,那么回想起来,什么是您忽略的明显警告信号?

请注意,我不是在寻找有争议的答案。我们可以整天谈论什么对我们最好,但永远不会达成一致。

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


背景:

更多背景知识:在这里为学术界工作与为私营部门工作(这里 = 意大利)略有不同。 “销售”产品没有“截止日期”;相反,它都是基于概念验证的。你开始做的任何事情都不能保证它是有效的。

漫画最能描述它:reinventing the wheel

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

在编码方面,研究人员完成的编程是……丑陋的。我正在努力让一个版本控制系统持续使用,人们必须被追查以报告错误并记录他们的代码,一切都是这样编码的,所以我们很少回去旧代码来“修复错误”。基本上,一旦它有些工作,该项目就关闭了,人们开始从事另一个项目。

Lots 被一遍又一遍地重新发明和重写(只是因为没有人知道它已经存在)。人来人往,前途未卜,但我们和机器人一起玩,很酷:)

此外,由于人手严重不足,没有人可以跟随您并指导您完成项目。充其量你是必须提出计划、背景资料和工作原型的人。

因此,我们正在寻找符合以下条件的人:

  • 有一些背景知识可以开始
  • 可以高度独立
  • 确实想要学习并在新领域建立自己的专业知识

【问题讨论】:

  • 谨防那些动作僵硬、语气单调、断断续续的申请者!您可能会冒被机器人渗透的风险;)
  • 哥们,你指定的背景好吓人!!!
  • 听起来和我写论文的大学系一模一样,除了机器人部分。
  • 您可能应该将此作为 wiki 问题,因为没有正确答案...
  • Matthieu:好的,谢谢 :) 现在是社区维基

标签: c++ opengl


【解决方案1】:

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

在你的学生中招募。

由于您为学术机构工作,我假设您或您的同事任教。这为您提供了有关潜在应聘者能力的大量信息——他们学习的速度有多快,他们的积极性如何,他们擅长什么和不擅长什么,他们为实验室任务和项目上交的代码是什么样的,等等

【讨论】:

    【解决方案2】:

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

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

    我提出的一个问题(假设前面的简单内容进展顺利)是关于继承继承的。没有一个正确的答案,尽管有很多错误的答案。但重要的是他们如何处理这个问题,他们提出的观点支持一种设计而不是另一种。

    背景知识很有用,因为它表明他们对您工作的领域感兴趣 - 但确实可以获得知识。智能更为重要。

    但是,很可能有无法共事的聪明人!我还没弄清楚如何确定他们是谁。

    【讨论】:

    • “智能但无法使用”绝对正确。
    【解决方案3】:

    我在学生时代做过这样一个项目:即4个月的项目,半天工作。这与机器人本身无关。

    我认为最明显的要求是动力/热情。由于他们大部分时间都是独立的,因此您需要他们在一定程度上独立并能够独立思考,这首先需要动力。

    为了确定候选人是否受到激励,首先要向他们询问项目本身。如果他们只是粗略地看了一眼,他们可能没有动力。还要看看他们的经验/课程:CS 的选修课程、他们做过的项目等等……任何表明他们真的很关心 CS / 开发的东西,而不仅仅是因为他们听说它的报酬很高。

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

    最后,我同意你的观点,即展示他们的能力是必要的。刚开始他们可能会有点紧张,所以我会在最后这样做,一旦面试已经开始,你可能有机会让他们通过这种方式放松之前的问题。

    你不一定需要他们做编码问题,我认为最重要的是推理。尝试挑选与您所在领域工作相关的问题,例如您过去确实遇到过的问题,并让他们分析问题。如果可能,他们应该带头在这里向您询问有关问题本身的问题。

    我们遇到了一个问题,机器人无法分析相机拍摄的图像,它本身无法正确确定移动的物体,您知道该怎么做吗?

    然后您需要让他们考虑解决方案。你需要一块白板,让他们大声思考,这样你就可以跟随他们的反应。您可能需要不时地轻推他们以使他们保持正轨,他们对您的意见的反应也是这里的关键点,因为您希望他们能够接受批评并以此为基础,否则您之后可能会遇到指导他们的问题。

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

    【讨论】:

      【解决方案4】:

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

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

      如果他们主要靠自己工作,而您对语言没有特殊要求,我不会过多关注语言问题。但是每个体面的程序员至少都相当了解一种语言,获得一个示例或他们以前的工作,或者让他们编写一些简单的应用程序来测试他们不烂。

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

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

      检查申请者是否对线性代数和坐标系变化有扎实的掌握,特别是如果他们要使用 OpenGL 等任何 3D 东西。以我的经验,学习 API 很简单,让您了解转换的工作原理。

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

      如果我雇用某人从事理论工作,我可能会放松 CS/编程技能,并更多地关注数学知识。数学功底扎实的人会很容易上CS,而编程就是编程。

      请求参考或查看之前的一些工作。许多优秀的学生在毕业后已经有一些有趣的项目要展示。

      【讨论】:

        【解决方案5】:

        我不确定这在一般大学中有多普遍,但我会在成绩单上寻找一门游戏编程(或机器人技术)课程,其中候选人作为学生成功地与团队一起完成了一个项目。它会要求候选人描述该项目是如何工作的(重要的技术细节)以及他在团队中的角色。真正判断某人是否擅长某事的唯一方法是看看他们尝试时会发生什么,既然你在学术界,正在招收学生,那应该不是问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-08
          • 1970-01-01
          • 2022-11-11
          • 1970-01-01
          • 2016-08-25
          相关资源
          最近更新 更多