当前位置: 首页 > 科技观察

Node.js10道常见面试题

时间:2023-03-12 04:03:17 科技观察

如果你想找一份Node.js相关的工作,但又不知道从何下手来检验你对Node.js的掌握程度。本文提供了这样一个Node.js面试问题列表,通过检查Node.js编程中的一些主要细节来帮助您评估您对Node.js开发的掌握程度。在进入正文之前,需要提前声明两点:这些问题只是Node.js知识体系的一部分,并不能全面考察面试者的实际开发能力。现实开发中遇到的问题需要即兴发挥和团队合作,所以可以尝试结对编程。Node.js面试问题列表什么是错误优先回调函数?你如何避免回调地狱?你如何使用Node监听80端口?什么是事件循环?可以使用哪些工具来确保风格一致?算术错误和程序员错误有什么区别?为什么npm有用?什么是存根?给个使用场景?什么是测试金字塔?当我们谈论HTTPAPI时,我们如何实现它?您最喜欢的HTTP框架是什么?为什么?现在,让我们依次回答这些问题。什么是错误优先回调函数?错误优先回调函数用于传递错误和数据。第一个参数应该总是一个错误对象,用于检查程序中是否发生错误。其余参数用于传递数据。例如:fs.readFile(filePath,function(err,data){if(err){//handletheerror}//usethedataobject});解析:该题目的主要作用是考察受访者对Node中异步操作基础知识的掌握情况。如何避免回调地狱可以有以下方法:模块化:将回调函数拆分成独立的函数使用Promises使用yield计算生成器或Promises解析:这个问题有很多答案,看你使用的场景,比如ES6、ES7或一些控制流库。Node里怎么监听80端口有陷阱!在类Unix系统上,您不应尝试监听端口80,因为这需要超级用户权限,因此不建议让您的应用程序监听此端口。目前,如果你想让你的应用程序监听80端口,你可以这样做:让你的Node应用程序监听大于1024的端口,然后在它的前面使用一层定向代理(比如nginx)。说明:本题用于考察受访者是否有运行Node应用的实际经验。什么是事件循环?Node在单线程上运行,至少从Node.js开发人员的角度来看是这样。在底层,Node通过libuv实现多线程。Libuv库负责执行NodeAPI。它将不同的任务分配给不同的线程,形成一个事件循环,将任务的执行结果以异步的方式返回给V8引擎。可以简单的用下图来表示。(图片来自网络)每一个I/O都需要一个回调函数——一旦执行,就被推到事件循环中执行。如果需要更详细的解释,可以参考这个视频。也可以参考这篇文章。说明:这个用来查看Node.js的底层知识,比如什么是libuv,它有什么作用。可以使用哪些工具来确保风格一致?您可以拥有以下工具:JSLintJSHintESLintJSCS-在团队开发中推荐,这些工具对编写代码很有帮助,可以帮助执行给定的风格指南,并通过静态分析捕获常见错误。解析:用于考察受访者是否有大型项目开发经验。算术错误和程序员错误的区别算术错误不是bug,而是系统相关的问题,比如请求超时或者硬件故障。程序员的错误就是所谓的错误。解析:本题与Node关系不大,用来考察面试官的基础知识。为什么npm包管理器有用此命令锁定包依赖项的版本,以便您可以准确控制安装包时将使用的每个依赖项的版本。–npmjs.comnpm在你开发Node应用时非常有用,它可以帮助你确定你的依赖的具体版本号。解析:可以考察面试官对npm命令的使用基础知识和Node.js开发的实践经验。什么是存根?例如,使用场景Stub是用于模拟组件/模块的函数或程序。存根可以为测试用例中的函数调用提供封装的答案。当然,你也可以在断言中指定如何调用Stub。例如文件读取场景,不想读取真实文件时:varfs=require('fs');varreadFileStub=sinon.stub(fs,'readFile',function(path,cb){returncb(null,'文件内容');});期望(readFileStub).to.be.called;readFileStub.restore();分析:用于测试被访者是否有测试经验。如果面试者知道Stub是什么,那你可以继续问他是怎么做单元测试的。什么是测试金字塔?当我们在谈论HTTPAPI时如何实现它?测试金字塔是指:我们在写测试用例的时候,底层的单元测试应该远远多于上层的端到端测试。当我们谈论HTTPAPI时,我们可能会涉及:有很多模型的低级单元测试但是当您需要测试模型如何交互时,您需要减少集成测试解析:本文主要考察受访者的测试经验。对于您最喜欢的HTTP框架及其原因,没有完美的答案。本题主要考察面试者对自己使用的Node框架的理解,考察能否给出选择该框架的理由、优缺点等。