当前位置: 首页 > 后端技术 > Node.js

译文:Top30最常用的Nodejs面试题の01-10

时间:2023-04-03 16:26:58 Node.js

作者?DhanjivPandey?本文来源?授权中文翻译?作者twitter?译者主页这个问题在今天依然没有过时。#Q-01:什么是Node.js?简单来说,Node.js就是运行在服务器端的JavaScript。是一个构建在ChromeJavaScript运行时之上的平台。Node.js是一个事件驱动的I/O服务器端JavaScript环境。基于谷歌的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。Node.js是单线程的,并使用基于事件循环的并发模型。它不会阻塞代码执行(译者:非阻塞I/O模型),而是注册一个允许应用程序继续运行的回调。这意味着Node.js可以在不创建多个执行线程的情况下处理并发操作,因此它可以很好地扩展(译者:处理并发操作和扩展之间有什么直接关系?)。它是构建在分布式设备上运行的数据密集型实时程序的完美选择。以下是使用Node.js的最佳领域:调用I/O流应用程序数据密集型实时应用程序(DIRT)(译者:什么是DIRT?基于JSONAPI的应用程序单页应用程序(SPA))同时也不适合那些占用大量CPU的大型应用。#Q-02:Node.js的主要功能是什么?让我们来看看Node.js的一些关键特性。异步事件驱动IO有助于处理并发请求——Node.js的所有API都是异步的。这个特性意味着,如果Node.js收到某个Input/Output操作的请求,它会在后台执行该操作并继续处理其他请求,而不用等待上一个请求的响应结果。更快的代码执行-Node.js使用V8JavaScript引擎,与谷歌浏览器使用的引擎相同。Node对JavaScript引擎进行了包装,这使得V8引擎更快,因此Node.js中的请求处理也更快(译者:Node这么酷吗?我明白了)。单线程但高度可扩展-Node.js为其事件循环使用单线程模型。对这些事件的响应可能会或可能不会立即到达服务器。但是,这并不妨碍其他操作。从而使Node.js具有高度可扩展性。传统服务器创建有限数量的线程来处理请求,而Node.js创建一个线程来处理大量此类请求。Node.js库使用JavaScript语法——从开发人员的角度来看,这是Node.js的另一个重要特性。大多数开发人员已经精通JavaScript。因此,对于熟悉JavaScript的开发人员来说,在Node.js中进行开发变得更加容易。Node.js有一个活跃的、充满活力的社区——一个活跃的社区,它始终使Node.js与Web开发的最新趋势保持同步。无缓冲-Node.js应用程序从不缓冲任何数据。它们只是简单地以块的形式输出数据(译者:Buffering的意思是缓冲,对吧?)。#Q-02:请解释一下我们什么时候使用Node.js什么时候不使用?我们什么时候应该使用Node.js?使用Node.js非常适合开发需要较少CPU使用率的流式或基于事件的实时应用程序,例如聊天应用程序。游戏服务器。Node.js非常适合需要同时处理数千个用户请求的服务。适用于协作环境。适用于多人协同工作的环境。例如,他们发布他们的文件,通过签出和签入这些文件来修改它们。比如他们发布他们的文档,通过checkout和checkin修改(译者:这句话看不懂)。Node.js通过为文档的每次更改创建一个事件循环来支持这一点。Node.js的“事件循环”特性允许它同时处理多个事件而不会被阻塞。广告服务器。同样,我们的服务器可以处理数千个从中央主机下载广告的请求。Node.js是此类任务的理想解决方案。流媒体服务。使用Node.js的另一个理想场景是作为多媒体流服务器,其中客户端向服务器发送请求以从服务器下载不同的多媒体内容。.总而言之,当您需要高并发性但需要较少的CPU时间时,最好使用Node.js。最后但同样重要的是,由于Node.js在内部使用JavaScript,因此它最适合构建也使用JavaScript的客户端应用程序。什么时候不使用Node.js?无论如何,我们可以将Node.js用于各种应用程序。但它是一个单线程框架,如果应用程序需要长时间运行,我们不应该使用它。如果服务器正在进行一些计算,它将无法处理任何其他请求。因此,当需要较少的CPU密集型时间时,Node.js是最佳选择。#Q-04:Node.js开发可以使用哪些IDE?下面列出了最常用于开发node.js应用程序的IDE:Cloud9是一个免费的基于云的IDE,支持使用流行的编程语言(如Node.js、PHP、C++、Meteor等)进行应用程序开发。它提供了一个强大的在线代码编辑器,使开发者能够编写、运行和调试应用程序代码(译者:Cloud9是亚马逊提供的云编辑器)。JetBrainsWebStormWebStorm是一个轻量级但功能强大的JavaScriptIDE,非常适合使用Node.js进行客户端和服务器端开发。IDE提供的功能包括智能代码完成、导航、自动化和安全重构。此外,我们还可以使用IDE中提供的调试器、VCS、终端和其他工具。JetBrainsInteliJIDEA。它是一个强大的IDE,支持使用Node.js、Angular.js、JavaScript、HTML5等主流技术开发Web应用程序。为了让IDE能够进行Node.js开发,我们必须安装Node.js插件。它提供的功能包括语法突出显示、代码帮助、代码完成等。我们甚至可以运行和调试Node.js应用程序并直接在IDE中查看结果。它的JavaScript调试器提供条件断点、表达式计算和其他功能。KomodoIDE是一个跨平台的IDE,支持使用Node.js、Ruby、PHP、JavaScript等主要编程语言进行开发。它提供了多种功能,包括语法高亮、键盘快捷键、可折叠窗格、工作区、自动缩进、代码折叠和内置浏览器的代码预览。Eclipse它是一种流行的基于云的IDE,用于使用Java、PHP、C++等进行Web开发。您可以使用Node.js插件轻松利用EclipseIDE的功能(译者:Eclipse是基于云的吗?愚蠢)。Atom是一个集成了HTML、JavaScript、CSS和Node.js的开源应用程序。它在Electron框架之上工作,使用Web技术开发跨平台应用程序。Atom预装了四个用户界面和八个语法主题(深色和浅色)。我们还可以安装Atom社区创建的主题,或者根据需要创建我们自己的主题。(译者:VSCode不会写吗???VSCode炸了!)#Q-05:解释一下Node.js是怎么工作的?Node.js应用程序在调用时创建一个线程。每当Node.js收到请求时,服务器会在处理下一个请求之前完成其处理。Node.js通过使用事件循环和回调函数并行处理多个请求来异步工作。事件循环是处理外部事件并将其转换为回调函数的函数。它会在适当的时候调用所有事件处理程序。这样,在处理单个请求时,很多工作都在后台完成,因此如果处理未完成,新的传入请求不必等待。在处理请求时,Node.js会为其附加一个回调函数并将其移至后台。现在,只要它的响应准备就绪,就会调用一个事件来触发关联的回调函数来发送此响应。让我们以杂货店送货为例。通常情况下,送货员会去每个房子送包裹。Node.js的工作方式相同,一次处理一个请求。当任何房屋未打开时就会出现问题。送货员不能在一所房子前停下来等它开门。他做的下一件事是打电话给房主,让他在开门时打电话。与此同时,他将在其他地方送货。Node.js的工作方式相同。它不会等待请求处理完成(房屋开放)。相反,它附加了一个回调函数(房主的调用)。每当请求处理完成(房屋开门)时,都会调用一个事件来触发相关的回调函数发送响应。总而言之,Node.js不会并行处理请求。相反,所有需要大量时间执行的后端进程,如I/O操作、繁重的计算任务,都与其他请求并行运行。,Node.js不会并行处理请求(单个线程一次处理一个请求)。所有的后台进程,例如I/O操作,需要大量时间执行的繁重的计算任务,都与其他请求并行运行(译者:这句话看不懂)。#Q-06:说明REPLREPL在Node.js中代表“ReadEvalPrintLoop”。这是一个简单的程序,它接受命令,计算它们,最后打印结果。REPL提供了一个类似于Unix/Linuxshell或窗口控制台的环境,我们可以在其中输入命令,系统以输出作为响应。REPL执行以下任务:READ它读取用户的输入,将其解析为JavaScript数据结构,并将其存储在内存中。EVAL它执行数据结构。PRINT它打印评估命令的结果。LOOP它循环执行上述命令,直到用户按两次Ctrl+C。#Q-07:Node.js是完全基于单线程的吗?是的,Node.js确实在一个线程上处理所有请求。但这只是Node.js设计理论的一部分。事实上,它使用事件和回调来处理比单线程机制更大的异步请求。此外,Node.js的优化设计利用JavaScript和C++来保持性能。JavaScript由GoogleChromev8引擎在服务器端执行。c++lib的UV库通过后台处理非顺序I/O。为了进行实际说明,我们假设100个请求在Node.js队列中排队。按照设计,Node.js事件循环的主线程将接收所有事件并将它们转发给后台工作程序执行。一旦后台工作者处理完请求,注册的回调将在事件循环线程上得到通知,将结果返回给用户。#Q-08:如何在Node.js中获取Post数据?以下是使用Node.js获取Post数据的代码片段:app.use(express.bodyParser());app.post('/',function(request,response){console.log(request.body.user);});#Q-09:如何在Node.js中发起Post请求?下面是使用Node.js发出Post请求的代码片段:varrequest=require('request');request.post('http://www.example.com/action',{form:{key:'value'}},function(error,response,body){if(!error&&response.statusCode==200){console.log(body)}});#Q-10:Node.js中的回调是什么?我们可以将“回调”称为异步等效函数。Node.js大量使用回调并在任务完成时触发回调。Node.js的所有API都是以支持回调的方式编写的。例如,假设我们有一个读取文件的函数,当它开始读取文件时,Node.js立即将控制权返回给执行环境,以便执行下一条指令。文件读取操作完成后,它会调用回调函数,将文件内容作为参数传递。所以文件I/O,没有阻塞或等待。此功能使Node.js具有高度可扩展性,使用它您可以处理大量请求,而无需等待任何函数返回所需的结果。例如,假设我们有一个读取文件的函数,当它开始读取文件时,Node.js立即将控制权返回给执行环境,以便执行下一条指令。文件读取操作完成后,它会调用回调函数,将文件内容作为参数传递。因此,不会因文件I/O而阻塞或等待。此功能使Node.js具有高度可扩展性,使用它可以处理大量请求,而无需等待任何函数返回预期结果。#待续...