应用科学计算工作的面试测试

时间:2010-01-18 23:39:44

标签: c++ selection scientific-computing

您是否知道一个好的目标问题/测试来检查申请人的科学计算工作?

(事实上,这个测试是在候选人通过面试之后进行的。)

1)他们需要聪明。 (编辑,感谢Trent的话)

第二)他们将不得不主要处理编程(C ++和Python,使用科学库),数字和数学,还涉及工程和物理主题。此外,类似C或类似Fortran的风格期望...使用O.O.概念会很好。

申请人可以访问编译器,工具,图书馆和互联网。测试持续时间不应超过4小时。

12 个答案:

答案 0 :(得分:15)

找到聪明人,他们将能够适应您的特定要求。这比试图找到满足你所有“复选框”的人要好得多。

答案 1 :(得分:5)

但你仍然应该测试他们是否参与计算。在面试的编程测试中有任意数量的帖子。不要担心您的特定域名,只要看看他们是否可以编码。

总是令人大开眼界;永远无聊。最好是给它一个较小的测试并与它们讨论,而不是一个大的测试。问他们为什么做出各种选择等等。然后你会看看他们是否可以清楚地解释自己

答案 2 :(得分:5)

嗯,一个简单的问题是要求某人使用他们希望使用的任何库来解决一个简单的ODE系统。我所知道的所有图书馆都不够简单,以至于可以在测试期间学习它们。例如,为x=1:10dx/dt = -k (x^2/x)求解此系统。

更难的是要求某人解决僵硬的 ODE系统。在这里,算法的选择变得重要,“猜测”可能不起作用。例如,大多数Michaelis-Menten方程都很僵硬。

dS/dt = - vmax * S/(Ks + S)

其中dS是底物耗尽率,vmax和Ks是常数(你可以给候选者)。选择错误的求解器会导致相当灾难性的结果,正如我亲眼发现的那样。

这两个问题本身都没有任何好处,因为几乎任何人都可以通过试验和错误来解决,只需要4个小时来解决它。但作为更大测试的一部分,它们可能很有用。

编辑:它证明了什么?那么,在科学计算中,ODE无处不在。如果你在某些方面没有至少轻易地处理它们,那么你知道这是一个很大的漏洞。我只是试着按照要求回答这个问题。 “向申请人提出科学计算工作的具体问题是什么?”要解决问题,申请人必须知道

1)基础微积分。

2)某种科学计算库(MATLAB,SciPy,GSL)。

3)如果问题被恰当地询问(例如,如果他们被要求计算加速率),则还测试领域知识(在这种情况下为物理学)。

我认为这会检查所有方框:)

答案 3 :(得分:5)

我可能会后悔这一点,但这是我对FWIW的一般建议

1)采访候选人而不是工作规范。

在你的规范中有一套最基本的'Essential',你不会妥协,看看候选人并看看他们带来了什么其他技能 - 他们甚至可能带来你不认识的技能需要

2)考试候选人

测试可能是一些口头问题,书面测试等等。这并不重要,但你肯定需要了解候选人知道什么以及他们不知道什么。

3)让候选人写代码

您可以通过他们如何处理问题,如何实施问题以及更重要的是他们如何解释他们对您所做的事情来了解更多关于某人的信息。请记住,这是你雇用他们做的事情,这是他们一天中大部分时间都在做的事情

4)不要问很多'记忆问题'

要求某人记住std :: algorithm的确切格式或System.Xml.XmlDocument中的所有方法都没有用处。人们使用docs和Intellisense - 克服它。

5)请问开放式问题

提出一些没有“正确”或“错误”答案的问题 - 通过这种方式,您可以让候选人有机会提出他们的意见,而您正在进行对话,而不是一个美化的“勾选清单” 。双向对话有帮助,因为它允许候选人放松,同样重要的是,它可以让你放松。进行讨论可以告诉你很多候选人,他们是否听取了你的意见,他们如何回应反驳?

6)看看他们是否已完成研究

总是询问候选人他们是否听说过您的产品/团队/游戏/公司。如果他们不能告诉你他们申请的公司最简单的一点,那么你很可能不希望他们在贵公司工作。毕竟输入谷歌需要30秒,所以对这个人来说是残酷的。相信我。

7)不要自己面试

你可能超级聪明,你可能知道你想要什么,你可能认为你可以读人,但软件开发主要是一种协作努力,所以进入一些人而不只是进入另一位经理或高级编码器 - 引入您的团队并听取他们的意见。重要的是,赶上后来讨论候选人,同时你的想法仍然很新鲜。

8)不要急于面试

分配面试的时间在很大程度上取决于你面试的职位类型,即初级,经验丰富,高级,但总是在你认为自己需要的时间长达半小时。这给你提供了呼吸的空间,如果你早点完成,那就好了。如果需要,请进行第二次面试。我经常做两次采访 - 第一次是技术性的,第二次更侧重于个性和团队。

您可能觉得不合适或者没有时间,但不要打折。如果你觉得你第一次没有从候选人那里得到足够的东西而且仍然有可能让他们回来。如果他们想在你的公司/团队工作那么他们就会回来。

9)要求提供证据

如果一位候选人说“为......的发展作出了重大贡献”,那么就问他们他们做了什么,详细地说,他们从经验中学到了什么以及他们将再做些什么。如果他们不能给你证据和细节,那么他们很可能没有“显着贡献”。要注意一直使用“我们做过”的候选人。当然,开发是在团队中完成的,但他们必须能够说出他们贡献的内容以及描述团队的努力。

10)要做好诚实坦率的准备。

大多数候选人略微过度推销自己。这很好,他们的简历是让他们接受采访的原因。但是,如果你认为候选人没有完全了解他们的经历,那么就这么说吧。确保你探索优势和劣势。太多的采访最终成为一个细长的销售交易所。是的,候选人知道UDP的来龙去脉,但是他/她知道什么时候他们做出了错误的决定以及他们如何处理这个问题,这很棒!问他们上一次他们错了或他们做出的最后一个错误的决定。小心不要太过沉重或者判断力 - 错误是完全自然的,我们大多数人一直这样做,这就是我们处理它的重要性。

11)不要自信地接受。

在了解你的东西和认为你比其他人更好之间有一个很好的界限。在像编程这样的知识型专业中,这总是对我们所有人的诱惑。我同意杰夫阿特伍德的观点。一个优秀的程序员知道编码很难,他们会犯错误,很多时候他们的代码很糟糕。糟糕的程序员不会 - 他们认为其他人的代码很糟糕。警告Emptor。

答案 4 :(得分:3)

我可以想到您可能想要涵盖的几点:

答案 5 :(得分:2)

我认为你最好尝试与这个人讨论一个问题,看看他们在面对这个问题时如何推理。他们想到了什么算法,他们熟悉哪种解决问题的方法?他们看到了什么可能的陷阱?

通过允许此人与您讨论,您可以适应他们的特定技能,并且拒绝对测试感到紧张的候选人的风险也会降低。你也可以很好地感受到这个人是否适合你的团队 - 你不希望有人真正善于解决面试类型的问题,但不能讨论其他解决方法或其他方法。

答案 6 :(得分:2)

测试他们的数学。关于他们应该具备的任何特定领域数学知识的一些简单问题是非常客观的,并且可以快速筛选出90%没有业务的申请人甚至在该领域。

我们经常以一些基本的线性代数问题开始我们的申请人。如果有人不知道什么是跨产品,那么继续采访就没有多大意义了。

一位(好)老板我曾经喜欢开始电话屏幕采访问题,“第八个到底是什么?”令人惊讶的是有多少人犯了这个错误。 (Flubbing它不会结束手机屏幕,但它是一个非常强烈的预测,通常会有一些严重的问题。)

答案 7 :(得分:2)

以前的答案似乎都没有提到特定领域的知识 - 你在从事科学的哪一部分(在21世纪已经相当大)?我与一组从事计算EM问题的地球物理学家合作。有很多优秀的科学计算人员,我们不会两次看,因为他们的领域远离我们的领域。

我建议训练具有正确领域知识和错误编程知识的人比反之亦然更容易。

答案 8 :(得分:1)

  

“说服我你是对的   这份工作的人“

通过这个问题,您可以测试一名优秀程序员所需的所有技能:

  • 智能
  • 创造力
  • 通信
  • 自我激励

......唯一没有经过考验的是团队协作能力,但无论如何这都很难进行测试。

P.S。至于知识,你总是可以要求这个人以“他知道的最可重用的方式”实现一个循环环形缓冲区,无需访问互联网,无论是在python还是C ++中。真正的“可用”代码更多地讲述了人们及其编码文化,而不是大量的复选框问题。

答案 9 :(得分:1)

这是一个相当有趣和困难的科学问题,但如果你的候选人真的很好,它可以在四小时内解决。如果没有,您可以要求他们描述解决方案而不是实施解决方案,或者判断不完整的解决方案。除了良好的编程技能外,还需要高中水平的物理学。

在中央供暖系统中,有一个水管循环网络,由作为树状结构连接的管道对组成。在叶子处有散热器,每个散热器需要发出相同的加热功率P(常数)。在根部,进入网络的水(管道对的热管)被加热到温度T1(恒定)。树的内部节点是管道对,每个都被假定为一定长度(常数len)。

热管中消散(损失)的热量是U * len *(T1-T0),其中T0是室温(常数),U是传热常数(W /(m * K))。由于这种功率损失,水在到达散热器之前会冷却下来(即使温度略低也意味着散热器发出的功率要小得多)。

每个散热器都有一个调节流量(kg / s)的阀门。流量和温度一起决定了散热器辐射的功率。您可以使用以下功能:

radiatorPower(flow, temperature) -> power

实现将网络描述为树的数据结构和算法,以确定每个辐射器所需的流量,以使辐射功率(流量,温度)等于P.

请注意,回水冷水的温度由发出的功率控制,不能直接控制或测量。还要注意,在树的每个分支处,管道对承载的水在节点的所有子节点(散热器或其他管道对)之间分开。管道热损失方程在所有管道上使用初始T1,因为假设树中较高管道的热损失对于热损失计算并不重要(T1> T0且损失很小)。 p>

Water specific heat: c = 4190 J/(kg*K)

答案 10 :(得分:0)

我认为你应该向他询问他的经历。 关于问题:不要问语言特征问题(例如a = b ?? c ?? d),程序员应该对团队中的算法,解决问题和良好的沟通技巧有所了解(这非常重要,真的)

答案 11 :(得分:0)

我认为不需要进行具体的测试。只是让一些已经在该领域工作并与申请人聊天的聪明人。也许还包括像Kornel Kisielewicz建议的东西。向他或她询问以前的项目,使用的技术,他/她喜欢什么,不喜欢什么等。如果面试官很聪明,他们将能够判断他是否适合这份工作。

我曾接受过一次软件开发人员的采访。聊了一会后,他们说:“在你的简历中,你说你很了解C ++和Java。告诉我们你们之间所知的所有差异,不仅限于语言本身。”从那里它流动得很好,你很容易在适合的时候提出问题。就像我说C ++通常被翻译成机器代码而Java转换为字节代码时,他们会问什么字节代码意味着什么,这两种方法的优点和缺点等等。