10 Interview Questions Every JavaScript Developer Should Know
我写过一篇文章叫《 Why Hiring is So Hard in Tech 》, 其中给出评估 技术岗位候选者 的一些 常规原则,以什么是应该和不应该的形式罗列出来,其中有一条:
The best way to evaluate a candidate is a pair programming exercise.
评估候选者最有效的方法是「和候选者结伴的完成编程练习」。
意思是说,与候选人坐一起,让候选人敲键盘,你在旁边多看多听,少说。例如演示例如从Twitter API中提取tweet数据项,并在时间轴上显示出来。
虽然结伴练习很有价值,但是不存在一个单独的练习能决断一切,面对面交谈(的面试)也是一个非常有用的工具 [em] 。不过, 不要浪费时间询问语法或语言怪癖 。你需要看到大局,询问有关架构设计(architecture)和编程范型(paradigms) 等对整个项目有重大影响的经验知识。
EM:临场小练习能测试到能力(种类)是有限的,有很多深层经验或知识只能通过 别的手段探测 到,例如交谈,主题试题;而且没有很具体的答案(检测标准),例如怎么检测候选人 功能编程 的能力?
语法细节和API功能特性的知识 是很容易搜索的,但对于像 软件工程的智慧或 JavaScript开发人员 从经验中获得的 范型特性和习惯用法 这些经验知识,是很难短时间通过搜索学到的。
EM:这里提到了重点,作为招聘方,测试 候选人 的那些 不能在半小时查资料能习得的技能,求职者同样要明白这个道理。
EM:当然,作者提到的工程智慧,和编程经验具体指什么,有待研发
鉴于以上结论,对于Web开发和Javascript方面,我认为以下十个问题用在面试中,能比较有效评估候选人开发实力:
(EM:我不完成同意作者的这十条,并且翻译上有所增删,观点和内容都有,根据个人的看法,实则是我自己将这些问题回答了一遍)
第一,你知道哪两种 编程范型对 JavaScript开发者来很有用?
JavaScript 是一种多范型( multi-paradigm )编程语言,支持过程式编程,面向对象编程,和函数式编程,三种(实质两种)编程范型。JavaScript通过 原型继承( prototypal inheritance) 支持面向对象编程,和 函数作值(所谓一等公民)支持函数式编程。
第二,什么是函数式编程?
函数式编程是使用 纯函数(或数学函数)构造 程序的一种编程范型,纯函数的优点是没有副作用(避免使用共享数据 shared state),和不使用可变数据(mutable data) [em] ;
Lisp(1958年)是最早支持函数式编程的语言之一,并且受到了lambda演算的极大启发。Lisp和很多Lisp家族语言至今仍在流行。
JavaScript 支持函数式编程,并且越来越流行,例如JavaScript社区流行的闭包,高阶函数,函数作参数传递都是 重要表现。
EM:纯函数的优点有待实证,纯函数(功能)和类对象的区别有待分析
第三,传统类继承和原型继承的区别在哪里?
传统类继承是说,类(class)是「一个功能」的模板或设计样板(blueprint),它可以用来派生子类(子类继承父类所有功能,并可以有所扩展),和创建多个对象实例(使用new操作); 通过类继承的设计可实现程序的一种精致的分类层次结构(hierarchical class taxonomies)。
但是,由于子类和父类继承关系是一种白箱复用(父类不是完全封装,对子类可见),最终的类层次结构会高度耦合,这是类继承最大的问题。
与类继承不同,原型继承没有类概念(类是一个抽象的功能的“模子”),一切都是对象实例。「功能代码继承复用」通过 直接连接两个对象实例 实现,例如通过一个特殊的对象工厂函数( factory functions)生成新复用的对象,或复制(Object.create())。一个「目标新对象实例」 [em]可以将需要的功能小对象直接连入其中来实现复用功能,这是一种非常灵活的代码复用方法。

(编辑:鹰潭站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|