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

时间:2010-03-22 12:22:32

标签: javascript

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

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

请提供答案,以便中级和临时JavaScript程序员可以采访更有经验的人,为我提供很少的高级问题的答案。 请避免公开提问

请保持一个面试问题/答案 SO答案 ,以获得更好的阅读体验和更轻松的面试准备。

8 个答案:

答案 0 :(得分:118)

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

  

在JavaScript中,var x = 1x = 1之间有什么区别?尽可能多地回答您的问题。

新手JS程序员可能有关于locals与globals的基本答案。中级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特定的内容,例如测试,工作流程,版本控制等,以确定他们是否是一名优秀的程序员

答案 1 :(得分:91)

基本JS程序设计

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

OOPS JS

  • 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

答案 2 :(得分:24)

询问“这个”。这是一个很好的问题,可以成为JavaScript开发人员的真正考验。

答案 3 :(得分:17)

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

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

答案: 良好的编码器代码,伟大的编码器重用。已经有数千个工时涌入这些库中,以便从浏览器特定的实现中抽象出DOM功能。没有理由自己完成所有不同的浏览器DOM头痛只是为了重新发明修复。

答案 4 :(得分:11)

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

没有一个真正的答案,但你正在寻找一个答案,谈论Progressive Enhancement的一些策略。

  

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

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

答案 5 :(得分:6)

询问accidental closures如何导致IE中的内存泄漏。

答案 6 :(得分:6)

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

您可以决定实际使用测试框架是否真的有必要,但会话可能会告诉您很多关于此人的专业知识。

答案 7 :(得分:0)

中级程序员应该掌握他们的工具。

如果他通过上面的技术手机屏幕问题,让他在现场勾勒出一些愚蠢的东西,就像一个ajax url shortner。然后在他的投资组合上烧烤他。没有惊人的投资组合=这个领域的中级开发人员,而不是你想要负责你闪亮的新项目的人。