Node.js 翻译 -- 面试题

2,167 阅读3分钟
翻译系列第一篇我们选择来搞一下 Node.js 面试题
第一个:What is an error-first callback?

通俗地讲,回调函数的第一个参数一般都是 error 对象,我们可以用它来检测当前操作是否异常,后面可选的参数用来传递数据,我们来看一段非常常见的 fs模块的读文件操作:

fs.readFile(filePath, function (err, data) {
if (err) {
//处理异常
}
//后面你就可以用 data 对象了
});
第二个:How can you avoid callback hells?
你可以有以下选项:
1. 模块化: 把回调函数拆分成独立的方法
2. 用 Promises
3. 用 ES6 开始引入的 Generators yield

这个问题算是常规问题,如果回答出后面,也算对 ES6、7这些较新的内容有所关注。

第三个:How can you listen on port 80 with Node?
这个其实也是一个线上部署的考验题目,解决方案也很简单,借助 nginx,考验面试者是否有真实的线上部署相关的经验。
第四个:What's the event loop?

大家都知道 Node.js 是单线程的,当然 Node.js 也可以用 libuv 来使用多线程。 每一次的 I/O 操作都需要一个回调函数,一旦操作完成,他们被扔到事件循环里面来执行。

第五个:What tools can be used to assure consistent style?
有很多可选的:
1. JSLint
2. JSHint
3. ESLint
4. JSCS

当团队化多人编码的时候,这些工具非常有用,他们会用一些静态分析来找出一些常见的错误,可以按照代码规范来加强多人的代码质量。这个对大型或者团队化编程的都是必须的。

第六个:What's the difference between operational and programmer errors?

运行错误严格意义不算 bug,而是系统的一些问题,比如我们用 request 来操作 HTTP 请求,但是请求超时了或者硬件坏了。 反而,编程中出现的错误才是真正的 bug. 分析错误的类型可以帮助你来安排bug的优先级

第七个:Why npm shrinkwrap is useful?

其实这个问题非常棒,对于稳定的打包环境,我们很多时候需要固定一些依赖包的管理,而且在我们的微博,我们也讨论过这个问题,当时也有同学提到了 npm shrinkwrap,我们来看看 npm 官方的说明:

这个其实很能看出面试者是否有真实的 Node.js 的实战和线上操作经验。
第八个:What's your favourite HTTP framework and why?

其实这个问题没有什么标准答案。它的目的就是了解一下面试者对于某一个 HTTP 框架的使用和理解的深度。估计90% 以上的答案是 Express.js,只是简单地给出这种答案没有太深的分析,比如3.X 和 4.X的区别,或者一些真实的实战案例说明的化,其实答的就是不好的。

更多内容请查看原文:
blog.risingstack.com/node-js-int…
Tip:关于Node.js的面试:
To 面试官:其实还是要看候选人的综合资历,和学习新技术的方式方法和热情程度,切勿因为某一个技术细节不很理想而全盘否决
To 候选人:切勿盲目自大地夸大自己的知识面和技术深度,因为资深一点的面试官很容易就会察觉你的深度和广度,任何面试宝典只是一面镜子,来发现你自身的不足,你应该积极地表现出你的优点和特点。