当前位置: 首页 > 面试题库 >

无法理解node.js

赵嘉赐
2023-03-14
问题内容

对于没有JS经验的人,您对学习Node.js有什么建议?

我在论坛上阅读了很多有关事件驱动,非阻塞,异步,回调等内容的信息,但我不知道那是什么!

在哪里可以学习基础知识,以便理解所有术语以及将来的node.js?

谢谢!


问题答案:

您提到的概念(事件驱动,非阻塞,异步,回调)不是特定于JavaScript的,在更一般的上下文中理解它们非常有价值。它们都围绕着优雅地处理我们无法控制的资源。

想象一下,等待来自TCP连接的数据,等待操作系统删除文件,或等待用户单击按钮。如果您以逐步的方式对此进行了编程(逐步是 同步的
),那么您将沿着“执行步骤1”,“执行步骤2”,“执行步骤3”进行导航,直到您点击步骤“等待发生的事情”。此时,您的程序将停止并拒绝让步,直到它接收到数据,接收到删除确认或单击按钮为止。换句话说,调用将
阻止 程序继续进行。考虑到可能还有其他TCP连接,文件操作和UI操作需要我们注意并且不依赖于我们等待的项目,因此这效率很低。

在许多情况下,最好指示我们对资源感兴趣,并在资源更改时在分步说明之外接收通知。从您的概念列表:

  • 事件是我们感兴趣的资源的变化-我们的TCP连接收到了一些数据,文件删除完成,或者用户单击了按钮。
  • 异步调用告诉OS或运行时我们对使用资源做一些事情感兴趣。它们是 非阻塞的 -我们的程序可以在等待资源更改的同时处理其他事情。
  • 回调是资源更改时要执行的功能。异步资源调用通常接受一个或多个对回调函数的引用(一个用于成功,一个用于错误等)。资源更改时,运行时将调用适当的回调。

我们可以通过使用node.js重命名文件来说明这些概念:

var fs = require('fs');

// args (current file name, new file name, callback function)
fs.rename('/tmp/hello', '/tmp/world', function (err) {
  // this occurs when the rename is complete
  if (err) throw err;
  console.log('rename complete');
});
console.log('step after rename');

第三个参数可能看起来很奇怪。这是一个未命名的(匿名)函数,重命名完成后将被调用。

请注意,由于fs.rename是异步的,因此无法确定我们是否会首先看到“重命名完成”或“重命名后的步骤”消息。这就是事件驱动/异步编程的缺点-
如果我们有一组复杂的相互依赖的任务,我们需要非常小心以确保依赖于任务的任务在依赖于它们的任务之前完成。异步调用完成的顺序可以更改的事实可能导致非常细微的错误。

也可以看看:

  • 事件驱动的编程教程
  • 闭包 -一流函数的更复杂操作

编辑每个唐纳德的要求:

了解node.js的最好方法是下载,构建,安装和使用它。你需要:

  • Mac OS或Linux。如果您对Cygwin感到满意,也可以选择这样做,但是如果您正在运行Windows,我发现在虚拟机中运行Linux更容易。
  • Git-不是必需的,但是它使获取代码存储库变得容易。
  • 一种调试应用程序的方法。最初,将调试信息写入控制台可能会起作用。最终,您将需要强大的调试功能。
  • 一个想法-您想对node.js做什么?如果您对它的功能概述感兴趣,请浏览其API。

大多数教程关注于node.js快速构建Http服务器的能力:

  • Node.js事件(显示下载存储库,构建和安装的简单版本)
  • 游戏大厅
  • 具有html模板的Http服务器

请记住,node.js填补了一个非常特殊的领域-它旨在构建网络程序。对于其他类型的程序,它可能不是正确的工具。



 类似资料:
  • 问题:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。 您可以假设每个输入都有一个精确的解决方案,并且您可以不使用相同的元素两次。 例子: 给定nums=[2,7,11,15],target=9, 因为Nums[0]Nums[1]=2 7=9,返回[0,1]。 使用for循环后,我无法理解这些步骤。我是Python新手,请有人帮助我。

  • 每次我运行< code>pip时,都会出现以下警告。 警告:旧脚本包装程序正在调用pip。这将在未来版本的pip中失败。请看https://github.com/pypa/pip/issues/5599寻求解决潜在问题的建议。为了避免这个问题,您可以使用“-m pip”调用Python,而不是直接运行pip。 请帮我理解一下。Pip警告 编辑1。我尝试重新安装pip,但警告仍然存在。此外,我还附上

  • 在维基百科中,背包的算法如下: 我在网上找到的所有例子的结构都是一样的<我无法理解的是,这段代码是如何考虑到最大值可能来自较小的背包这一事实的?E、 如果背包容量为8,那么最大值可能来自容量7(8-1)<我找不到任何逻辑来考虑最大值可能来自较小的背包。这是错误的想法吗?

  • 问题内容: 我正在尝试使用numpy中的arpgpartition,但似乎出了点问题,我似乎无法弄清楚。这是正在发生的事情: 这些是排序数组的前5个元素 但是当我使用 当我认为应该得到与排序数组相同的结果时? 当我使用3作为参数时,它可以正常工作 这对我来说没有多大意义,希望有人可以提供一些见解? 编辑:重新解释这个问题,因为argpartition是否保留k个分区元素的顺序更有意义。 问题答案:

  • 在调试模式下运行服务器时,我会在下面发布错误日志。请帮我理解这份报告

  • 为什么我在输出中得到一个额外的1*1,这有点倒退?有点像递归初学者,希望得到详细的答案。 输出