简介:作者:wwsun.me来源:http://parking.zunmi.cn/?acct=144site=wwsun.met=1548483779s=27f443e43e5fbc55867bf221ae196141如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度。 本 ...
作者:wwsun.me来源:http://parking.zunmi.cn/?acct=144&site=wwsun.me&t=1548483779&s=27f443e43e5fbc55867bf221ae196141 如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度。 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面。在进入正文之前,需要提前声明两点:
fs.readFile(filePath, function(err, data) { if (err) { //handle the error } // use the data object});解析:这个题目的主要作用在于检查被面试者对于Node中异步操作的一些基本知识的掌握。如何避免回调地狱你可以有如下几个方法:
方向代理指的是以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器, 并且将服务器返回的结果发送给客户端。关于反向代理的更多内容,建议你阅读这篇文章。解释:这个问题用于检查被面试者是否有实际运行Node应用的经验。什么是事件循环Node采用的是单线程的处理机制(所有的I/O请求都采用非阻塞的工作方式),至少从Node.js开发者的角度是这样的。 而在底层,Node.js借助libuv来作为抽象封装层, 从而屏蔽不同操作系统的差异,Node可以借助livuv来来实现多线程。下图表示了Node和libuv的关系。 Libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个事件循环, 以异步的方式将任务的执行结果返回给V8引擎。可以简单用下面这张图来表示。 每一个I/O都需要一个回调函数——一旦执行完便推到事件循环上用于执行。 如果你需要更多详细的解释,可以参考这个视频。 你也可以参考这篇文章。解释:这用于检查Node.js的底层知识,例如什么是libuv,它的作用是什么。哪些工具可以用来保证一致性的代码风格你可以选择如下的工具:
var fs = require("fs");var readFileStub = yinxin.stub(fs, "readFile", function (path, cb) { return cb(null, "filecontent");});expect(readFileStub).to.be.called; readFileStub.restore(); 在单元测试中:Stub是完全模拟一个外部依赖,而Mock常用来判断测试通过还是失败。有关Node.js的单元测试小结,你可以参考这个链接。解析:用于测试被面试者是否有测试的经验。如果被面试者知道什么是Stub, 那么可以继续问他是如何做单元测试的。什么是测试金字塔?测试金字塔指的是: 当我们在编写测试用例时,底层的单元测试应该远比上层的端到端测试要多。 当我们谈到HTTP API时,我们可能会涉及到:
|