Pro JavaScript程序员面试问题(含答案)


131

有什么好的问题可以确定申请人是否真的是专业的JavaScript(浏览器方面)开发人员?

这些问题可以区分某人是否不是特定的JavaScript程序员,但实际上是在进行专业的JavaScript开发,面向对象,可重用和可维护的JavaScript。

请提供答案,以便中级和特别的JavaScript程序员可以采访经验更丰富的人,并为我提供的一些高级问题的答案很少。请避免公开问题

请为每个SO答案保留一个面试问题/答案,获得更好的阅读体验并简化面试准备。


21
绝对不要让中间JS开发人员采访本来应该更高级的人!那太疯狂了。让某人有资格进行面试。
詹姆斯

22
@JP-因此,如果您的高级开发人员退出,那么您就被搞砸了?
tvanfosson

15
@JP我想雇用比我更好的人。这是一家小型初创公司,所以我没有更好的选择,除非我使用外部帮助……但之后我将不得不采访他;)
Janusz Skonieczny 2010年

13
@JP:如果您只是雇用最多的人,那么有一天您将被愚蠢的白痴所包围。总是尝试雇用比你更好的人。
Gumbo 2010年

1
@Nick:问题在于这个问题的范围太广,没有正确的答案(请参阅常见问题的评论)。它非常适合博客文章,但不适用于此问答格式。在过去,我们可能已经迁移到软件工程,但是在程序员mods带来无数人身伤害的威胁之后,我们不得不改变自己的方式。
迈克尔·迈尔斯

Answers:


118

因为JavaScript是一种很小的语言,但是却具有难以置信的复杂性,因此您应该能够提出相对基本的问题,并根据其答案找出它们是否真的那么好。例如,我用来衡量面试其余部分的标准第一个问题是:

在JavaScript中,var x = 1和之间有什么区别x = 1?尽可能舒适地回答尽可能多的细节。

JS新手程序员可能对本地变量与全局变量有基本的答案。中级JS专家肯定应该有这个答案,并且应该提到函数级范围。任何自称为“高级” JS程序员的人都应该准备谈论本地变量,隐含全局变量,window对象,函数作用域,声明提升和作用域链。此外,我很想听听有关[[DontDelete]],提升优先级(参数vs var与vs function)和的信息undefined

另一个好问题是要求他们编写一个sum()函数,该函数接受任意数量的参数,然后返回它们的和。然后,要求他们使用该函数(未经修改)对数组中的所有值求和。他们应该编写一个如下所示的函数:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

他们应该像这样在您的数组上调用它(上下文apply可以是任何东西,我通常null在这种情况下使用):

var data = [1,2,3];
sum.apply(null, data); // 6

如果他们有这些答案,他们可能知道他们的JavaScript。然后,您应该向他们询问有关非JS特定内容的信息,例如测试,工作流,版本控制等,以了解他们是否是优秀的程序员


4
好问题。Small nitpick:我相信您的意思是“返回结果”,而不是“返回i”。专业提示:在发布之前建立一个不错的测试环境以测试代码;-)
MisterMister 2010年

4
哇,这是一个愚蠢的错误。发布之前,我在jsFiddle中测试了我的大部分代码,但是没有测试这一部分。谢谢:)
bcherry 2010年

5
sum函数应能对非数字类型具有弹性,而不会引发错误。另外,它应该能够将数字作为字符串来处理,以增加信用。
阿巴达巴2012年

2
+1是关于发现自己是否是优秀程序员的绝妙提法。
Demonslay335

3
这行代码:for(i = 0,l = arguments.length; i <l; i ++)很糟糕,因为arguments.length将在每次迭代时求值。如果在for循环之前分配l = arguments.length,则更好。对?
thomallen 2014年

94

基本的JS编程

  • Scope of variable
  • 什么Associative Array啊 我们如何使用它?

OOJS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • 什么difference between private variable, public variable and static variable啊 我们如何在JS中实现这一目标?
  • 如何add/remove properties to object在运行时?
  • 如何实现inheritance
  • 怎么extend built-in objects办?
  • 为什么extending array is bad idea

DOM和JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

杂项

  • Graceful Degradation V/s Progressive Enhancement

17
这是为了雇用JS Gurus。
安德烈亚斯(Andreas)

22
准备让JS开发人员说出类似这样的内容:JavaScript没有关联数组。但是,JavaScript确实具有对象文字,可以像关联数组一样使用它。同样,可以使用点符号或方括号和字符串来访问对象的属性。
克里斯托弗·帕克

8
这些是自称“ JavaScript开发人员”的人的基线。我认为答案的深度在于您如何衡量他们是否为大师。
Ryan Ore 2013年

8
您的意思是“原型继承”。常见的错误。
wizzard

4
@wizzard,您的意思是“典型错误”:p
Nick


17

(我假设您的意思是浏览器端JavaScript)

问问他,尽管他对JavaScript有无穷的知识,但是为什么使用jQuery,Mootools,Prototype等现有框架仍然是一个好主意。

答:良好的编码人员代码,良好的编码人员可重复使用。这些库中已投入了数千工时,以从浏览器特定的实现中抽象出DOM功能。没有理由为了重新发明修补程序而自己经历所有不同的浏览器DOM难题。


5
@Tim Down:当然,但是,如果您找到有信誉的包装,那么包装的几乎所有部分都将由有能力的人员进行审核。作为开放源代码软件包的用户,您可以在发现错误时提交更正,同时也可以增加自己的专业知识。
PanCrit

没错,知道车轮-但不要总是在不同的地形上使用相同的轮胎。例如。当您只需要Ajax传输等(用于您的项目)时,为什么要使用整个jQuery库-microjs.com
阿里(Ali

1
这个问题的答案本身就是一个问题-为什么我们使用IDE而不是简单的记事本来编辑代码?:)
Navin Israni 2014年

11

询问他们如何在用户关闭JavaScript或JavaScript不可用时如何确保其页面继续可用。

没有一个真正的答案,但是您正在寻找有关渐进增强策略的答案。

渐进增强包括以下核心原则:

  • 所有浏览器都应可以访问基本内容
  • 所有浏览器都应可以访问基本功能
  • 稀疏,语义标记包含所有内容
  • 外部链接的CSS提供了增强的布局
  • 外部链接的JavaScript [[Unobtrusive JavaScript | unobtrusive]]提供了增强的行为
  • 尊重最终用户浏览器的首选项

1
雇用建筑师级JS家伙的最佳问题:)
Navin Israni 2014年

首先,说服我,一个被JS关闭的人值得在真正的网络上投资,而不是在黑暗的网络上投资。这些用户可能对使用浏览器过于偏执或一无所知,并且错误地关闭了JS,无论哪种方式,他们进行转换的机会都微乎其微。
vsync


6

问“您使用什么单元测试框架?为什么?”

您可以决定是否真的需要使用测试框架,但是对话可能会告诉您很多有关人员的知识。


1
作为参考,QUnit令人惊叹:docs.jquery.com/QUnit
Goyuix 2010年

0

中级程序员应掌握其工具的技术知识。

如果他通过了上述技术电话屏幕式的问题,请让他勾勒出一些愚蠢的东西,例如ajax网址缩写。然后烤他的投资组合。没有令人惊叹的投资组合=这个领域的中级开发人员,而不是您想要负责闪亮新项目的人。


4
资产组合充其量是一个很差的指标-在当今世界,JS是企业界公认的工具,项目可能击败您可能会看到的任何资产组合,而公共回购已不是问题。
Ilya Ayzenshtok '16

1
@IlyaAyzenshtok这是我困境的一部分。当我99%的工作是专有的/在薪水墙后面/内部时,我很难炫耀作品集
Spartacus

1
@Spartacus-您可以截取屏幕截图,并在其中解释面试官的规则,并一路过关斩将。对于开源项目,这是面试之前评估一个人以调整与项目中看到的该人的编码水平有关的问题的好方法。
vsync
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.