当前位置: 首页 > news >正文

小白的Node.js学习笔记大全---不定期更新

Node.js是什么

  • Node. js 是一个基于 Chrome v8 引擎的服务器端 JavaScript 运行环境
  • Node. js 是一个事件驱动、非阻塞式I/O 的模型,轻量而又高效
  • Node. js 的包管理器 npm 是全球最大的开源库生态系统

特性

单一线程

Node.js 沿用了 JavaScript 单一线程的执行特性。即在 Node.js 中,JavaScript 的执行线程与其他线程之间同样也是无法共享状态的。

单一线程的最大好处是不用像多线程编程那样处理很容易产生 bug 的同步问题,它从根本上杜绝了死锁问题,也避免了线程上下文交换所带来的性能上的开销。当然了,单一线程的执行方式也有它自身的弱点,譬如,它无法充分发挥多核处理器的性能、一个错误就会导致整个程序崩溃,以及当某一任务执行大量计算时会因长期占用处理器而影响其他异步 I/O 的执行。

事件驱动

在 Web 开发领域,JavaScript 如今在浏览器端正承担了越来越重要的角色,其事件驱动的编程模型也逐渐深入人心。

当然了,这种编程模型虽然具有轻量级、松耦合等优势,但在多个异步任务的场景下,由于程序中的各个事件是彼此独立的,它们之间的协作就成为了一个需要我们费心解决的问题。

异步编程

在 Node.js 中,大部分 I/O 操作都是以异步调用的方式来进行的。Node.js 的开发者们在其底层构建了许多异步 I/O 的 API,包括文件读取、网络请求等。

这样一来,我们就可以很自然地在语言层面上实现并行的 I/O 操作,使得程序中的每个调用都无须等待之前的 I/O 调用结束,从而提高程序的执行效率。

例如,如果我们想要读取两个相互不依赖的文件,如果采用的是异步 I/O,其耗费的时间只取决于读取较慢的那个文件,而如果采用同步 I/O 的话,其耗时就是两个文件的读取时间之和了,异步操作模型带来的优势是显而易见的。

当然了,由于异步编程也会导致代码的编写顺序与其具体执行顺序的不一致,对于很多习惯同步思路编程的人来说,阅读和维护这样的代码会是一个不小的挑战。

常见概念

let、const、var的区别

(1)块级作用域: 块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:

内层变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
(2)变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。

(3)给全局添加属性: 浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。

(4)重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。

(5)暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。

(6)初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

(7)指针指向: let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。
(8)const对象的属性可以修改吗:

const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。对于基本类型的数据(数值、字符串、布尔值),其值就保存在变量指向的那个内存地址,因此等同于常量。
但对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,就完全不能控制了。

海量源码、教程资源扫描下方二维码获取

在这里插入图片描述

相关文章:

小白的Node.js学习笔记大全---不定期更新

Node.js是什么 Node. js 是一个基于 Chrome v8 引擎的服务器端 JavaScript 运行环境Node. js 是一个事件驱动、非阻塞式I/O 的模型,轻量而又高效Node. js 的包管理器 npm 是全球最大的开源库生态系统 特性 单一线程 Node.js 沿用了 JavaScript 单一线程的执行特…...

第二周晨考自测(2.0)

1.冒泡排序 冒泡排序是数组解构中的常见排序算法之一。规则如下:先遍历数组,让相邻的两个数据进行比较,如果前一个比后一个大,那么就把这两个数据交换位置,经过一轮遍历之后,最大的那个数字就排在数组最后…...

计算机视觉之三维重建(三)(单视图测量)

2D变换 等距变换 旋转平移保留形状、面积通常描述刚性物体运动 相似变换 在等距变换的基础增加缩放特点 射影变换 共线性、四共线点的交比保持不变 仿射变换 面积比值、平行关系等不变仿射变换是特殊的射影变换 影消点与影消线 2D无穷远点 两直线的交点可由两直线的…...

docker 批量快速删除容器和镜像

一、批量删除镜像 如果你想要批量删除 Docker 镜像,可以使用各种命令。以下是一些示例: 1. 删除所有镜像: docker rmi $(docker images -q) 2. 删除所有未标记的镜像(即 <none> 镜像): docker rmi $(docker images -f "dangling=true" -q) 请注意…...

【数据分析入门】Matplotlib

目录 零、图形解析与工作流0.1 图形解析0.2 工作流 一、准备数据1.1 一维数据1.2 二维数据或图片 二、绘制图形2.1 画布2.2 坐标轴 三、绘图例程3.1 一维数据3.2 向量场3.3 数据分布3.4 二维数据或图片 四、自定义图形4.1 颜色、色条与色彩表4.2 标记4.3 线型4.4 文本与标注4.5…...

mongodb.使用自带命令工具导出导入数据

在一次数据更新中&#xff0c;同事把老数据进行了清空操作&#xff0c;但是新的逻辑数据由于某种原因&#xff08;好像是她的电脑中病毒了&#xff09;&#xff0c;一直无法正常连接数据库进行数据插入&#xff0c;然后下午2点左右要给甲方演示&#xff0c;所以要紧急恢复本地的…...

IndexError: tensors used as indices must be long, byte or bool tensors

运行出现报错。修改数据格式 输出sample_ids的值&#xff0c;可以看到数据类型是 torch.int32 解决 需要将sample_ids类型转为long&#xff0c;修改方式&#xff1a; idx idx.type(torch.long)或 idx self.tensor(idx, dtypetorch.long)参考&#xff1a; IndexError: tenso…...

设计模式 : 单例模式笔记

文章目录 一.单例模式二.单例模式的两种实现方式饿汉模式懒汉模式 一.单例模式 一个类只能创建一个对象,这样的类的设计模式就称为单例模式,该模式保证系统中该类只能有一个实例(并且父子进程共享),一个很典型的单例类就是CSTL的内存池C单例模式的基本设计思路: 私有化构造函数…...

深度优先搜索算法

目录 4.1 二叉树的最大深度&#xff08;简单&#xff09;&#xff1a;深度优先搜索 4.2 对称二叉树&#xff08;简单&#xff09;&#xff1a;递归 4.3 岛屿数量&#xff08;中等&#xff09;&#xff1a;深度优先搜索 4.4 岛屿的最大面积&#xff08;中等&#xff09;&…...

k8s ----POD控制器详解

目录 一&#xff1a;pod控制器 1、Pod控制器及其功用 2、pod控制器类型 3、Pod与控制器之间的关系 二&#xff1a;Deployment 三&#xff1a;SatefulSet 1、StatefulSet组成 2、为什么要有headless&#xff1f; 3、为什么要有volumeClaimTemplate&#xff1f; 4、实现…...

ReactNative进阶(三十四):ipa Archive 阶段报错error: Multiple commands produce问题修复及思考

文章目录 一、前言二、问题描述三、问题解决四、拓展阅读五、拓展阅读 一、前言 在应用RN开发跨平台APP阶段&#xff0c;从git中拉取项目&#xff0c;应用Jenkins进行组包时&#xff0c;发现最终生成的ipa安装包版本号始终与项目中设置的版本号不一致。 二、问题描述 经过仔…...

MySQL索引ES索引

MySQL MySQL索引的种类 按照索引列值的唯一性:索引可分为唯一索引和非唯一索引; 唯一索引:此索引的每一个索引值只对应唯一的数据记录,对于单列唯一性索引,这保证单列不包含重复的值。对于多列唯一性索引,保证多个值的组合不重复。主键索引是唯一索引的特定类型。该索引…...

webSocket 聊天室 node.js 版

全局安装vue脚手架 npm install vue/cli -g 创建 vue3 ts 脚手架 vue create vue3-chatroom 后端代码 src 同级目录下建 server: const express require(express); const app express(); const http require(http); const server http.createServer(app);const io req…...

iptables防火墙(SNAT与DNAT)

目录 1 SNAT 1.1 SNAT原理与应用 1.2 SNAT工作原理 1.3 SNAT转换前提条件 2 SNAT示例 ​编辑 2.1 网关服务器配置 2.1.1 网关服务器配置网卡 2.1.2 开启SNAT命令 2.2 内网服务器端配置 2.3 外网服务器端配置 2.4 网卡服务器端添加规则 2.5 SNAT 测试 3 DNAT 3.1 网卡…...

第 359 场 LeetCode 周赛题解

A 判别首字母缩略词 签到题… class Solution { public:bool isAcronym(vector<string> &words, string s) {string pf;for (auto &s: words)pf.push_back(s[0]);return pf s;} };B k-avoiding 数组的最小总和 贪心&#xff1a;从 1 1 1开始升序枚举&#xff0c…...

【开源项目】Stream-Query的入门使用和原理分析

前言 无意间发现了一个有趣的项目&#xff0c;Stream-Query。了解了一下其基本的功能&#xff0c;可以帮助开发者省去Mapper的编写。在开发中&#xff0c;我们会编写entity和mapper来完成业务代码&#xff0c;但是Stream-Query可以省去mapper&#xff0c;只写entity。 快速入…...

微信小程序picker组件的简单使用 单选

<picker mode"selector" range"{{classData}}" bindchange"bindClassChange" value"{{classIndex}}" range-key"className"><view class"picker">{{classData[classIndex].className || 请选择班级}}…...

python、numpy、pytorch中的浅拷贝和深拷贝

1、Python中的浅拷贝和深拷贝 import copya [1, 2, 3, 4, [11, 22, 33, [111, 222]]] b a c a.copy() d copy.deepcopy(a)print(before modify\r\n a\r\n, a, \r\n,b a\r\n, b, \r\n,c a.copy()\r\n, c, \r\n,d copy.deepcopy(a)\r\n, d, \r\n)before modify a [1, 2…...

EasyRecovery14数据恢复软件支持各类存储设备的数据恢复

EasyRecovery14数据恢复软件专业数据恢复软件支持电脑、相机、移动硬盘、U盘、SD卡、内存卡、光盘、本地电子邮件和 RAID 磁盘阵列等各类存储设备的数据恢复。 目前市面上有许多数据恢复软件&#xff0c;但褒贬不一&#xff0c;而且数据恢复软件又不是一款会被经常使用的软件&a…...

玩机搞机----面具模块的组成 制作模块

root面具相信很多玩家都不陌生。早期玩友大都使用第三方卡刷补丁来对系统进行各种修复和添加功能。目前面具补丁代替了这些操作。今天的帖子了解下面具各种模块的组成和几种普遍的代码组成。 Magisk中运行的每个单独的shell脚本都将在内部的BusyBox的shell中执行。对于与第三方…...

从RNN到Mamba:一个算法工程师的‘长文本’建模踩坑与选型指南

从RNN到Mamba&#xff1a;一个算法工程师的‘长文本’建模踩坑与选型指南 当处理长达数万token的日志序列时&#xff0c;传统RNN的梯度消失问题让模型难以捕捉跨时段的异常模式&#xff0c;而Transformer的二次方复杂度又让显存迅速耗尽。这种困境促使我开始系统评估结构化状态…...

别再只用DataParallel了!PyTorch单机多卡训练保姆级教程(从DP到DDP实战避坑)

从DataParallel到DDP&#xff1a;PyTorch单机多卡训练深度优化指南 当你的模型参数突破1亿大关&#xff0c;单卡训练时间从几小时延长到几天时&#xff0c;多GPU并行训练就从一个可选项变成了必选项。但面对PyTorch提供的DataParallel(DP)和DistributedDataParallel(DDP)两种方…...

为什么92%的Spring Cloud Function项目仍在忍受秒级冷启动?这4个被忽视的Classloader陷阱必须立即修复

第一章&#xff1a;冷启动问题的云原生本质与量化归因冷启动并非单纯的应用延迟现象&#xff0c;而是云原生架构中资源按需供给、隔离边界强化与运行时环境动态构建三者耦合引发的系统性效应。其本质在于容器编排层&#xff08;如 Kubernetes&#xff09;与函数计算平台&#x…...

嵌入式Linux实战:全志T3+vsftpd实现轻量级文件传输(含WinSCP连接教程)

嵌入式Linux实战&#xff1a;全志T3vsftpd实现轻量级文件传输&#xff08;含WinSCP连接教程&#xff09; 在物联网设备开发中&#xff0c;文件传输是一个看似简单却充满挑战的环节。当你的开发板是全志T3这样的资源受限平台时&#xff0c;如何在有限的存储和内存条件下搭建一个…...

Phi-4-reasoning-vision-15B在金融图表分析中的实战:趋势识别与异常定位

Phi-4-reasoning-vision-15B在金融图表分析中的实战&#xff1a;趋势识别与异常定位 1. 金融图表分析的挑战与机遇 金融从业者每天需要分析大量图表数据&#xff0c;从K线图到财务报表&#xff0c;从趋势分析到异常检测。传统的人工分析方法存在三个明显痛点&#xff1a; 效…...

Qwen2-VL-2B-Instruct在Qt桌面应用中的集成:开发跨平台图像分析工具

Qwen2-VL-2B-Instruct在Qt桌面应用中的集成&#xff1a;开发跨平台图像分析工具 1. 引言 如果你是做桌面应用开发的&#xff0c;特别是用C和Qt的&#xff0c;最近可能也注意到了AI模型带来的新机会。很多开发者都在想&#xff0c;怎么把这些强大的AI能力&#xff0c;比如看图…...

暗黑破坏神2终极单机优化:PlugY生存工具包完整指南

暗黑破坏神2终极单机优化&#xff1a;PlugY生存工具包完整指南 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 厌倦了暗黑破坏神2单机模式的储物空间限制&#xff1f…...

龙虾为啥越养越贵,越用越蠢?极客老王揭秘Agent落地真相

进入2026年3月&#xff0c;科技圈的舆论风向标发生了一次剧烈偏移。曾经被誉为开启“AI代驾”时代的超级智能体OpenClaw&#xff08;俗称“龙虾”&#xff09;&#xff0c;在经历了一年的野蛮生长后&#xff0c;正陷入一场空前的信任危机。根据最新的行业调研数据显示&#xff…...

FPGA开发实战:GT收发器配置避坑指南(附8B10B与64B66B编码对比)

FPGA开发实战&#xff1a;GT收发器配置避坑指南&#xff08;附8B10B与64B66B编码对比&#xff09; 在高速数字电路设计中&#xff0c;GT收发器作为FPGA与外部世界的高速数据通道&#xff0c;其配置的精确性直接决定了系统稳定性。本文将深入探讨GT收发器配置中的关键细节&#…...

【风电功率预测】到了2026年,企业为什么总输在“最后一公里”?从气象到功率再到电力交易,少赚的钱到底丢在哪

2026年&#xff0c;风电行业已经进入一个非常现实的新阶段。过去&#xff0c;很多企业讨论风电功率预测&#xff0c;核心问题还是“预报准不准”。而到了今天&#xff0c;这个问题虽然仍然重要&#xff0c;却已经不是决定收益高低的唯一变量。真正拉开差距的&#xff0c;是企业…...