10分钟技术面试[关闭]


37

我必须非常迅速地对数十名应届生进行快速评估。我与他们每个人都有30分钟的会面时间(两三天内)。我想用大部分时间来讨论非技术方面的问题。因此,我计划使用10分钟来解决技术问题。他们所有人都面临同样的问题。

他们都已经被录用了(他们是学生),我需要知道的是准备培训的平均水平。

理想情况下,must be progressive为每个级别设置难度。我将平均,并且我也会对每个问题进行平均。

如果您只有10分钟的时间问10个问题,那么您的前10名是什么?


6
关于工作的更多背景信息?这是系统管理员职位还是程序员职位,是低级编程还是高级编程?您的商店中是否有任何特定的语言或技术?这些都会决定我的问题清单。
克里斯,2010年

4
什么样的训练?编程?一般的IT?
亚当·李尔

3
我扭转了这一点,在个人资料上花了10分钟,在技术资料上花了20分钟。
Kyralessa

1
我知道,那是大多数人会做的。但是我相信不同的方法。

3
候选人的10分钟太少了
-Zzz

Answers:


55

此处详细阐述埃里克·利珀特答案的三个问题:

问题1:

在1-10的等级中,您如何评价自己(在此处命名技能)?他们回答[n],介于1到10之间的数字。

问题2:

您可以从[n + 1]级的人那里学到什么?

问题3:

[n-1]级的人可以向您学习什么?

您决定中最重要的因素是确定学生(实际)将自己放置在何处,这三个问题将帮助您快速确定。它还有助于识别可能会受到Dunning-Kruger效应(在任一端)折衷的人,但这是另一个主题。

如果有人可以在SO上找到对此方法的引用并编辑此帖子以包含链接,我将非常感激。

无论如何,那应该在十分钟之内。


5
哇!非常不寻常的指标。我从来没有那样想过自己。谢谢!
安德鲁·АндрейЛисточкин,2010年

显然,候选人回答了10个以避免第二个问题。
右折叠10:52

4
@WTP十是骗人的。
Tim Post

1
太好了 如果雇主问我这个问题,那么我可以在短短几分钟内向我解释更多有关我自己的信息,这比我通常在1小时的面试中获得的机会要多。
fearofawhackplanet 2011年

28
  1. 什么是课程?
  2. 什么是静态方法?
  3. 什么是继承?
  4. 什么是多态性?
  5. 什么是主键?
  6. 什么是外键?
  7. HTTP GET和HTTP POST有什么区别?
  8. 什么是网络服务?
  9. 命名一些数据结构。
  10. 对象/关系映射器的目的是什么?

随意提出替换建议,此列表有很大的改进空间。


1
静态方法除了C ++以外,还有许多其他语言,与此处无关。我实际上发现这对许多学生来说是一个很难理解的概念-询问他们是否理解它或要求定义是找出他们是否理解的一种糟糕方法。
凯特·格雷戈里

3
请记住,该问题在十分钟内指定了十个问题。如果三十分钟之内只有十个问题,我想提高难度,并提出更有意义的开放式问题。
埃里克·威尔逊

3
我很喜欢您列表中的问题1-8,尽管我可以将问题9或10替换为“为什么接口很重要”和/或“为什么抽象类很重要?”。(按顺序)
妮可(Nicole

7
所有的OO问题如何?
递归

3
嗯,这些都是语言功能问题。我不太相信它们对抵制更多受理论约束的事情很重要。
Andres Jaan Tack

20
  1. 解释指针!
  2. 什么是封包?
  3. 您在业余时间使用哪些语言,为什么?
  4. 谈谈交易!
  5. 解释器和JIT有什么区别?
  6. 解释编译器的基础知识。
  7. 进行递归时在内存级别上会发生什么(拥有TCO时会有什么不同)
  8. OO编程的重要概念是什么(为什么重要)?
  9. 您在家中正在寻找什么新东西,为什么会很有趣?
  10. 解释进程和线程之间的区别。

20
对于那些不熟悉.net(或编程)的人,我认为其中大多数都不是好问题-即使他们知道答案是每个问题1分钟...
FinnNk 2010年

9
我同意这些问题对学生来说似乎更像是“你有多怪异”的问题,而不是“你知道/学到了什么”的问题。
hyprsleepy

5
在这次考试中,我会非常失败,主要是因为我从未学习过CS或使用过C。因此,这可能有助于确定谁在课堂上关注了谁,以及谁为娱乐而编程,但是我不知道这是否会对您有所帮助OP的上下文。
埃里克·威尔逊

3
大多数人会误解其中的大多数。
递归

4
好问题,但一分钟内无法回答。
zvrba

16

我对学生的经历几乎是从零开始的-我发现人们在大学学到的东西和有用的是两个完全不同的集合。

但是当您有机会与他们交谈时,不接受它是很愚蠢的。

我的假设是,他们的背景几乎没有共同点,因此我在回避特定于语言的问题。我对此的一个例外情况是假设他们已经在网络上做过一些事情,但是如果他们是嵌入式专家或其他专业人士,那么这个问题可能会被等同起来。

您已经要求他们进步,这是我尝试过的,但是如果我对没有共性的假设是正确的,那么对/错问题相对棘手,并且他们的很多能力将来自于他们对更一般的答案的良好程度问题是。

无论如何...

1)您接触过哪些语言和技术?您花了50多个小时来进行实际编程(其中不包括讲座,实验时间等,但包括您单独编码的项目和作业)中的多少个(以及哪些)。

2)描述您编写过的最复杂的程序。是什么使它复杂?

3)您在大学期间曾教过什么(与编程有关),您真的认为自己没有正确理解?如果您认为自己了解所有内容(此时检查他们的成绩),那么请谈论一个您不知道如何编写代码以及如何开始考虑它的应用程序或应用程序元素。

4)面向对象编程的基本原则是什么?

5)在1分钟内尽可能多地告诉我有关关系数据库的信息

6)对于Web应用程序,请描述一种用于维护页面之间有关用户的信息的方法。您所描述的机制存在哪些优点和缺点。

7)选择一个计算中常用的功能,并简要地说明它在程序级别(例如加密,压缩)的工作方式。还要说明您必须如何使用要实现它的功能(在这里我要寻找的事实是,尽管您可能知道某些东西是如何工作的,但最好为它获取一个库)。

编辑:重组并添加了几个额外的问题,以使它更加符合最初的要求。


6
我喜欢这个列表,我还要补充一个问题:您在大学里教过什么,您看不到任何实际的现实用途?这可以为他们的想法提供一些有用的指示。
glenatron

2
如果他们有什么好处,那么问题2之后的10分钟就到了:-)
肖恩·帕特里克·弗洛伊德

当您问到OOP的“宗旨”时,您是在暗示OOP是一种宗教吗?
compman 2011年

@compman-显然不是。宗旨可以适用于宗教,但不仅限于此,还可以适用于任何组织,运动或专业。
乔恩·霍普金斯

8

如果这些是学生,并且您希望能够衡量他们在学业中的位置,那么实际上应该没有任何棘手的问题或使他们难以思考的问题。我的建议是只专注于基础知识-让他们解释如果反射还没有完全赶上对象和继承的速度,说明反射是如何工作的,没有什么意义。

以下是一些可以使用的示例问题,您可以从核心知识类别中开始,然后根据它们回答问题的方式来回走,就像自适应测试的工作方式。

基本原理

  1. 什么是基本程序流控制命令?
  2. 什么是基本的逻辑运算?
  3. while和for循环之间有什么区别?

核心

  1. 简要说明面向对象的编程。
  2. 简要解释继承的概念。
  3. 简要说明数据库如何运行。
  4. 什么是enum用于和什么时候使用它的关键字?

高级

  1. 关于C#泛型或C ++模板,您能告诉我什么?
  2. 您能告诉我有关运算符重载的哪些信息?
  3. 类和结构之间有什么区别?
  4. 关于.NET中的反射,您能告诉我些什么?

6

如果没有对我上面的评论的回答,通常来说这些都是我想到的事情,但是我不确定我会考虑这些技术问题。

  • 您使用了哪种类型的版本控制?
  • 您是否熟悉诸如敏捷,瀑布,tdd之类的软件开发方法?
  • 软件文档的目的是什么?
  • 静态和动态类型语言之间的区别?

5
“为什么意大利面条编码样式有用?” -终极
冠军

哈哈,是为了欺骗他们?
billy.bob,2010年

@ m.edmondson现在,请举一个不可避免地要破坏抽象的案例;)
mlvljr 2010年

嗯,我不认为这是不可避免的;-)
billy.bob 2010年

4

我知道您正在尝试根据他们不了解的内容来构建培训,并且您计划为不同组的学生准备几个“培训”。由于只分配了十分钟的时间,所以为什么不列出要考虑的内容,并提出一些具体问题。因此,您计划教他们C#。询问他们是否很了解。询问他们是否使用了任何最近的功能(LINQ,可为空的类型,泛型等)。如果您的培训中有数据库内容,请提出一些有关此问题。最后,您可能会看到您计划的主题是不必要的,因为他们都知道,每个人都需要其他一些主题,依此类推。这比尝试提出与您所要解决的问题都不相关的问题更为实用。


+1-这就是我想说的。只需问他们需要为他们做的培训中包括什么。
mouviciel 2011年

4

向他们询问FizzBu​​zz问题

他们知道如何编码吗?他们使用什么语言?他们为什么要像以前那样编码?他们使用递归了吗?循环?其他方法/功能?指针?

您还可以将该问题用作其他问题的基础(即,为什么/不使用递归?如何使用指针编写此内容?)

它不包含所有内容,但可能会让您了解他们的编码技能


1
哦,是的,我向社区中的某人许诺,我会问这个问题。这将是最后一个问题,我将与大家分享结果。

1
@Pierre 303:我曾经要求人们编写一个可以验证邮政编码的函数。我向您保证,这与FizzBu​​zz一样具有启发性。
Scott Whitlock,2010年

1
您让我有机会提出我从提出该问题中得到的一些结果。在6或7次采访中,没有人能够回答。他们中的大多数是应届生,但是其中有8年的经验!所以我有点困惑……

4

十个问题:

  1. 显示一个对数组值求和的for循环。然后问这段代码是做什么的。[他们可以阅读基本循环吗?]

  2. 让他们写一个for循环,打印出数字1到10,并用逗号分隔。[除了“他们可以这样做吗?” 您可以判断他们的代码有多重复。]

  3. 显示一段包含两个引用的代码,ab指向两个不同的对象,它们的整数字段x设置为,例如75。然后重新分配:a = b;,,b.z = 9;然后询问的值a.z。[他们了解参考文献吗?]

  4. 显示两个嵌套的for循环(使用index ij),从某个表达式累加值。在最里面的循环中,有两个计算:double x = Math.pow(2.0, i)double y = x * j。要求他们提高代码效率。[他们知道简单的循环依赖吗?]

  5. 询问他们代码示例A中有什么问题。(请参阅下文。)[他们可以从逻辑上思考吗?]

  6. 询问他们代码示例B中有什么问题。(请参阅下文。)[还有逻辑思维。]

  7. 要求他们反转这种情况:(s != null && s.Length != 0)不使用!。[他们知道德摩根定律吗?]

  8. 在杂志上显示一段类似于旧Lint广告的代码:要求他们查找错误。例如,重载equals而不是覆盖它。[他们是优秀的语言律师吗?这些问题主要是为了检验经验:您以前看过这个问题吗?]

  9. 他们可以描述如何通过排序数组执行二进制搜索吗?

  10. 他们能否描述排序方法的实现方式?

这些似乎“太短了”,但是我相信,对于评估学生,您可能会发现十分钟很紧。您确实希望看到他们进行一些编码。(根据一条评论,听起来您将执行FizzBu​​zz。)

如果您可以假设自己是一名更坚强的学生,那么您还想问一些经典,例如递归,反向链接列表,也许还可以使用高级通配符,例如解释XOR列表,或者他们可能有什么直觉为什么排序一组数字比未排序更容易压缩。

代码示例A:

if (m != null)
    a = m;
else
    a = null;

代码示例B:

if (x != 0 || x != 1) {
    ...
}

3

当然,您会以错误的方式进行操作。确定要放置每个学生的分组

例如

No previous programming experience
Familiar with procedural constructs like variables, loops, branching
familiar with basic object orientated constructs like classes, interfaces, events, inheritance
familiar with using Generics/Templates
familiar with creating Generics/Templates

等等。当您确定了取决于课程材料的合适分组时,找出要问的问题将是微不足道的。


3

学生已经被录用了,您想建立一个培训计划,所以其中的一部分就是弄清楚他们可以学习多快(和/或他们知道什么:谁在乎哪个?)。为什么不选择一些简单,中等和困难的问题,并事先给他们。如果可以轻松地(被某些人)学习,为什么还要用他们可能不知道的问题伏击他们呢?

您会发现,与大多数人的想象相反,即使有手头的问题,许多学生也不会做得很好这样,您将了解学生,他们的知识和学习能力。


2

创建5个简单的流程图构造和单独的答案列表。要求他们将图片与短语匹配。

画出以下内容:

  1. 如果构造
  2. 如果其他构造
  3. 循环执行
  4. 直到循环
  5. 案例陈述构造

让他们解释1和2之间的差异。
让他们解释3和4之间的差异。
请他们提供一个案例声明构造何时适用的示例。


1

我不确定是否可以在10分钟内完成10个问题。也许给他们5分钟时间,告诉您他们对.net的了解。然后准备一份可能包含20个主题的清单,从他们提到的内容中选择2或3个,从他们没有提及的内容中选择2或3个。

例如,您可以开始:

简短地告诉我(您有5分钟的时间),从创建到运行,如何在Visual Studio中生成一个简单的C#项目。

然后在那之后:

好的,请告诉我更多有关以下内容的信息。这将是快速解决方案,每个答案1分钟,所以不要尝试太详细,我只想对您熟悉的事物有所了解。

然后从后续问题中提出5个问题:

  • 解释什么是课程。
  • 抽象类和接口之间有什么区别?
  • 简要说明.Net中垃圾回收的工作原理

    ....

  • 如果遇到问题,如何调试?

  • Yadda-yadda-我确定您可以从其他答案中选择一长串

1

我相信“自我评估”!如果您向某人解释确切的情况,例如,他会发现自己:“您将必须使用带有100多个表和500K多个记录的数据库编写SQL ...,这些数据库必须在4秒钟内运行...”。如果您问他:“您认为可以做到吗?” -您会得到正确的答案。

我将针对学生的期望花5个问题,并对5个技术性更高的问题进行回答:

  1. 您对这次培训有什么期望?
  2. 您的级别是多少(这应特定于域)?
  3. 您希望在这次培训中看到/学习什么(指出3个最重要的要点)?
  4. 如果我们进行练习,您会觉得对您更有用吗?(车间,多项选择)?
  5. 您对老师有什么期望?

比您可以解决一些技术问题,例如(应根据主题)。以OOP为例:

  1. 什么是封装?
  2. 什么是界面?
  3. 多态性?
  4. 子类型?
  5. 动态绑定?

1

我正在寻找解决问题,强烈的学习习惯,专业发展和广泛的方法知识。

  1. 我可以看一下你的投资组合吗?
  2. 您最近读过的三本技术书是什么?为什么?
  3. 哪项编程文字改变了您最大的思考方式?为什么?
  4. 您如何将a定义chicken为对象?它与其他有birds什么关系?如何mammalsanimals
  5. 您能用外行的术语解释(REST,多态,关系代数,解析器设计,MVC)中的任何一种吗?
  6. 您自己构建的最有趣(或最好)的软件是什么?
  7. 您能从最喜欢到最不喜欢描述您精通的语言吗?是什么让您最不喜欢的语言感到沮丧?

我希望开发人员能够:

  • 足智多谋
  • 正确掌握基本概念
  • 渴望掌握先进的概念
  • 跟踪成功和失败(从中学习)
  • 不断学习,周到
  • 简单沟通复杂问题
  • 在讨论常见的教条式问题时表现出平衡和逻辑

1
我很少从头到尾阅读编程书籍。他们提供了更好的参考和澄清材料。
Andres Jaan Tack

您是对的:有些文本是您看不懂的(参考资料),但是有许多令人难以置信的内容将改变您的思维方式。例如:Tufte的视觉解释,或“选择悖论”,或“编程语言语用学”(或Hofstadter的任何作品)。
布鲁斯·奥尔德森,2010年

“有许多令人难以置信的内容将改变您的思维方式”,这不仅限于技术/编程书籍。而且,我没有投资组合,我所有的工作都是安全系统,我会被搞砸。
NimChimpsky

为开放项目或非营利组织贡献时间。在雇用某人之前,先查看真实的工作非常重要(您最终将展示自己的真实工作)。投资组合与良好的简历一样重要。
布鲁斯·奥尔德森

1

Bloom的分类法在这里很有用。您想要了解各种知识水平,从死记硬背到分析。这使您有机会了解他们的技能水平。由于OP一直在寻找要问学生的问题,因此以下列表所假设的知识并不比3年级或4年级学生(我希望)多。

概念性

  1. 什么是堆栈下溢?
  2. 对象和类之间有什么区别?
  3. 函数和方法有什么区别?
  4. 确定快速排序和插入排序的一些优点和缺点。
  5. 描述您编写的程序如何显示所有存储在二进制树中的值。

实际的

  1. 您是否使用了版本控制系统?它以什么方式允许团队成员更有效地协作?
  2. 您的编译器会显示“身份不明的符号”。这意味着什么?
  3. 什么是“细分违规”?
  4. 命名(在此处插入语言)语法或标准库提供的一些数据结构。
  5. 您将如何查找并显示10,000个文件中的所有电子邮件地址?

1

由于他们已经被录用,为了快速评估,我认为应该(连同编程问题)一起询问他们

  1. 您从事的系统配置是什么(PC硬件配置)。
  2. 您是否尝试过在不同的操作系统上测试您的代码(如果在大学期间就曾在项目上进行过测试)。
  3. 您是否喜欢在Windows或Linux中编码(如果它们在OS的其他Windows上都可以使用)
  4. 编码更快/更慢/更好取决于系统?(较高的系统=感觉很不错,因为缓慢的系统需要编译才能全部完成)
  5. 另外,如果询问他们是否至少知道格式化驱动器或安装操作系统以防万一它崩溃/无法引导,则依赖于IT专家寻求帮助(这是要知道他们是否可以正确处理某些操作系统情况)

这些问题只是为了了解他们对编程时使用的系统的了解,


0

从软件堆栈的最低级别开始,然后向上。

  1. 什么是BIOS?
  2. 操作系统的作用是什么?
  3. 什么是多任务处理?什么是动态链接?
  4. 描述如何将源代码转换为适合学生选择的语言的工作程序(C语言的示例答案:预处理器->编译器->一堆目标文件->链接器->可执行文件)
  5. 什么是缓存?估计对L1缓存,L2缓存,RAM,旋转磁盘(即不是SSD)的相对访问时间。
  6. 枚举无需查找文献中的细节即可实现的数据结构。
  7. 您编写的最复杂的程序是什么?是什么使它复杂?
  8. 解释一个自己选择的例子的递归。
  9. 为什么程序崩溃?
  10. 解释什么是关键部分,并举例说明将在何处使用。

4
这些问题中的大多数似乎都来自一本有关操作系统的书,说实话与编程无关。老实说,对于MOST编程工作,您不需要知道任何这些。
布莱恩·哈灵顿

1
有点夸张,但是:如果您不知道操作系统的角色,那么在操作系统级别或数据库级别谈论安全性和访问权限毫无意义。如果您不了解编译过程,则无法调试从A到Z的构建过程。如果您不了解缓存延迟,则最终会得到将DBMS中的所有内容压入平面的代码。文件就足够了。如果你不知道互斥体,你不知道什么对并行编程。其余的应该与编程有明显的联系。
zvrba 2010年

1
(如果您不知道BIOS是什么,则很可能对PC硬件编程
一无所知

4
从对电的基本了解开始。从头开始:从原子物理学开始。然后按照您的方式升级到BIOS。
Dan Rosenstark 2010年

尽管这些都是非常重要且基本的问题,每个程序员都应该知道答案,但我觉得上半部分会浪费您的时间,因为PC 技术人员也需要知道这些。关于您雇用的人是否对编程有所了解,他们不会给您一个好主意。
肯·布鲁姆

0
  1. 字符串是可变的还是不可变的?
  2. 一个类和一个静态类有什么区别?
  3. 什么是指针?
  4. 描述复杂性。
  5. 数组和链表之间有什么区别?
  6. 合并排序和快速排序有什么区别?
  7. 给定一个带有名称,地址,邮政编码和电话号码列的电子表格,描述了如何将电子表格转换为规范化数据库。
  8. 描述异步方法和同步方法之间的差异以及需要处理的方式。
  9. 您如何将信息从服务器端应用程序传递到Web应用程序?
  10. 您首选的语言是什么?在X上使用该语言有哪些原因?(即,为什么要在C#上使用Java,以及一些基本区别是什么?)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.