【面试题】Node.js高频面试题

简述 Node. js 基础概念 ?

Node.js是一个基于Chrome V8引擎的JavaScript运行环境。它使得JavaScript可以在服务器端运行,从而进行网络编程,如构建Web服务器、处理网络请求等。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,尤其适用于数据密集型实时应用。

**主要特点**:

1. **异步I/O**:Node.js几乎所有的API都是异步的,如读写文件、网络请求等。这种非阻塞的方式可以确保Node.js在等待I/O操作完成的同时,能够处理其他任务,提高了整体的运行效率。
2. **事件驱动**:在Node.js中,当一个异步操作完成时,会触发一个事件。开发者可以监听这些事件,并在事件触发时执行相应的回调函数。
3. **单线程**:Node.js运行在一个单线程上,但这并不意味着它不能处理并发请求。实际上,由于其异步和事件驱动的特性,Node.js能够高效地处理大量并发连接。

**应用场景**:

* **Web服务器**:Node.js可以很容易地构建一个高性能的Web服务器,如Express.js就是一个基于Node.js的流行Web框架。
* **实时聊天应用**:由于其异步和事件驱动的特性,Node.js非常适合构建实时聊天应用,如Socket.IO就是一个基于Node.js的实时通信库。
* **数据流处理**:Node.js可以轻松地处理大量的数据流,如文件上传/下载、视频流等。

**例子**:

假设我们要读取一个文件并将其内容发送给客户端。在传统的同步I/O模型中,我们需要等待文件读取完成后才能继续执行后续操作。但在Node.js中,我们可以使用异步I/O来处理这个任务。当文件读取操作开始时,Node.js并不会等待它完成,而是立即执行后续的代码。当文件读取完成后,会触发一个'read'事件,我们可以在事件回调函数中发送文件内容给客户端。这种方式可以确保即使在等待文件读取的过程中,Node.js也能处理其他的请求或任务。

简述Node. js的运行原理 ?

**Node.js** 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它的主要特点是采用事件驱动、非阻塞I/O模型,使其轻量且高效,尤其适用于数据密集型实时应用。

1. **单线程与非阻塞I/O**:


    * Node.js 是单线程的,但它通过事件循环(Event Loop)和非阻塞I/O操作来实现高并发。这意味着Node.js不会为每个请求创建一个新的线程,而是使用一个主线程来处理所有的请求。
    * 当一个请求到达时,Node.js会开始处理它,但如果遇到需要等待的操作(如读取文件、数据库查询等),Node.js不会阻塞主线程等待这个操作完成,而是将这个操作放到后台去执行,并继续处理其他请求。
    * 当后台操作完成后,它会发出一个事件通知Node.js。这时,Node.js会将这个事件的回调函数放入事件队列中,等待主线程空闲时执行。

2. **事件循环(Event Loop)**:


    * 事件循环是Node.js的核心机制,它负责监听事件队列,并执行相应的回调函数。
    * 当主线程空闲时,事件循环会查看事件队列中是否有待处理的回调函数,如果有,就取出并执行。
    * 这种方式确保了Node.js能够高效地处理大量的并发请求,而不会因为等待I/O操作而阻塞主线程。

3. **应用场景**:


    * 由于Node.js的上述特性,它非常适合用于构建高并发的网络应用,如实时聊天、在线游戏、WebSocket服务器等。
    * 例如,一个简单的实时聊天应用,当用户发送消息时,服务器需要立即将这个消息广播给所有在线的用户。使用Node.js,我们可以轻松地实现这个功能,因为Node.js能够高效地处理大量的并发连接,并且能够在消息到达时立即通知所有在线的用户。

总的来说,Node.js通过事件驱动和非阻塞I/O模型,实现了轻量级、高效率的运行环境,特别适合用于构建高并发的网络应用。

简述Node.js 用到了哪些技术?

1. **JavaScript**:
   Node.js最基础的技术就是JavaScript。它是一种解释型、动态类型的脚本语言,非常适合用于Web开发。与传统的JavaScript运行在浏览器端不同,Node.js允许JavaScript在服务器端运行,从而为开发人员提供了统一的语言环境。

2. **V8 JavaScript 引擎**:
   V8是Google开发的开源JavaScript引擎,Node.js正是基于V8引擎构建的。V8引擎以其高性能和即时编译(JIT)技术而闻名,这使得JavaScript代码在Node.js中执行得非常快。

3. **事件驱动和非阻塞I/O模型**:
   Node.js采用了事件驱动和非阻塞I/O模型,这意味着Node.js能够轻松处理高并发连接,而不会为每个连接消耗大量内存。这种模型特别适用于数据密集型实时应用,如聊天服务器、实时分析等。

4. **单线程与异步编程**:
   Node.js是单线程的,但并不意味着它不能处理并发。相反,通过异步编程模式(如回调函数、Promises和async/await),Node.js能够有效地管理并发操作,避免线程切换和锁竞争的开销。

5. **Node.js核心模块**:
   Node.js提供了一组核心模块,如`fs`(文件系统)、`http`(HTTP服务器)、`path`(路径处理)等,这些模块使得开发人员能够轻松地与操作系统进行交互,构建网络应用等。

6. **npm(Node Package Manager)**:
   npm是Node.js的包管理器,它允许开发人员搜索和安装第三方模块,这些模块可以扩展Node.js的功能。npm拥有庞大的社区和丰富的软件包资源,是Node.js生态系统中不可或缺的一部分。

7. **Express.js 或其他框架**:
   虽然Express.js不是Node.js核心的一部分,但它是最流行的Node.js Web应用框架之一。Express.js提供了简洁的API来创建Web服务器和路由,从而简化了Web应用的开发过程。

**应用场景举例**:

* **实时聊天应用**:利用Node.js的事件驱动特性,可以轻松构建一个实时聊天服务器,能够同时处理数以万计的用户连接。
* **RESTful API服务**:使用Express.js,可以快速搭建一个提供RESTful API的后端服务,为移动应用或前端Web应用提供数据接口。
* **数据流处理**:Node.js非常适合处理数据流,比如从传感器或日志文件中读取数据,进行实时分析或转换。
* **构建工具**:像Webpack这样的构建工具也是基于Node.js构建的,它们用于将前端资源(如JavaScript、CSS)打包成浏览器可优化的格式。

简述Node.js 技术架构 ?

**1. Node.js核心架构**

Node.js的核心是一个事件驱动、非阻塞I/O模型,使其轻量且高效,尤其适用于数据密集型实时应用。其核心主要由以下几个组件构成:

* **V8引擎**:这是Google开发的开源高性能JavaScript引擎,用于解析和执行JavaScript代码。
* **libuv库**:这是一个高性能的事件驱动I/O库,用于处理非阻塞I/O操作,使得Node.js可以处理高并发连接。
* **内置库**:Node.js还提供了一系列内置库,如`fs`(文件系统)、`http`(HTTP服务器)等,使开发者能够轻松地进行各种操作。

**2. 工作原理**

当一个请求到达Node.js服务器时,它不会为每个请求创建一个新的线程,而是使用一个单线程来处理所有请求。这个单线程会不断地从事件队列中取出事件并处理,直到队列为空。这种事件循环机制使得Node.js能够高效地处理大量并发请求。

**3. 应用场景**

Node.js因其非阻塞I/O和事件驱动的特性,在以下场景中特别受欢迎:

* **实时聊天应用**:如WhatsApp、Socket.IO等,它们需要实时地处理大量用户之间的消息传递。
* **RESTful API**:Node.js可以快速地构建和部署RESTful API,为前端应用提供数据支持。
* **流处理**:在处理视频、音频或其他大数据流时,Node.js的非阻塞I/O特性可以确保数据的高效传输和处理。

**例子**:想象一下你正在开发一个实时聊天应用。当用户发送一个消息时,这个消息会被推送到服务器,服务器再广播给所有其他用户。由于Node.js的非阻塞特性,即使有成千上万的用户同时在线,服务器也能高效地处理这些消息,确保每个用户都能实时地接收到新的消息。

简而言之,Node.js的技术架构使其成为一个高效、轻量且适用于高并发场景的技术选择。

简述Node. js的使用场景是什么?

Node.js的使用场景非常广泛,主要得益于其异步I/O和非阻塞的特性,这使得它在处理高并发、I/O密集型任务时表现出色。以下是Node.js的一些主要使用场景:

1. **Web应用与开发**:Node.js是构建Web服务器和Web应用的理想选择。它不仅可以处理静态文件,还可以构建复杂的API和服务端渲染的页面。例如,Express.js是一个基于Node.js的轻量级Web应用框架,它提供了丰富的功能和中间件,使得Web开发变得更加简单和高效。
2. **实时通信应用**:由于Node.js的事件驱动和非阻塞I/O模型,它非常适合构建实时通信应用,如聊天应用、在线协作工具、实时数据流处理等。Socket.IO是一个基于Node.js的实时通信库,它提供了WebSocket和长轮询的支持,使得开发者可以轻松地构建实时应用。
3. **后端API服务**:Node.js可以轻松地构建RESTful API服务,这些服务可以与前端应用、移动应用或其他后端服务进行交互。通过使用诸如Express.js这样的框架,开发者可以快速地构建和组织API路由,并处理各种HTTP请求。
4. **数据流和文件处理**:Node.js对于处理大量数据流和文件非常有效。例如,它可以用于处理上传/下载、视频流、日志文件等。Node.js的异步I/O特性确保了在处理大量数据时不会阻塞其他操作。
5. **命令行工具**:Node.js也可以用于构建命令行工具和应用。由于其跨平台的特性,开发者可以使用Node.js构建一次并在多个操作系统上运行的命令行工具。
6. **物联网和嵌入式系统**:随着物联网和嵌入式系统的兴起,Node.js也被广泛应用于这些领域。它可以用于构建与硬件交互的应用、收集和处理传感器数据、实现远程控制等。

总的来说,Node.js的使用场景非常广泛,几乎涵盖了Web开发、实时通信、API服务、数据流处理、命令行工具以及物联网等多个领域。

简述Node.JS的异步I/O原理? 

Node.js 的异步 I/O 原理与其底层架构和 JavaScript 的事件驱动模型紧密相关。以下是异步 I/O 原理的简要概述:

1. **非阻塞 I/O**:
   - 在传统的同步 I/O 模型中,当一个 I/O 操作(如读取文件)发生时,线程会阻塞,等待操作完成。这意味着在等待期间,线程无法执行其他任务。
   - Node.js 采用的是非阻塞 I/O 模型。当 Node.js 发起一个 I/O 操作时,它不会等待操作完成,而是立即返回,继续执行后续代码。这种非阻塞的特性使得 Node.js 能够同时处理多个 I/O 操作,从而提高系统的吞吐量。

2. **事件驱动架构**:
   - Node.js 是基于事件的。当一个 I/O 操作完成或发生某种情况时,会触发一个事件。例如,当文件读取完毕时,会触发一个 'read' 事件。
   - 开发者可以为这些事件注册回调函数。当事件被触发时,Node.js 会调用相应的回调函数来处理事件。这种方式允许 Node.js 在单个线程中高效地处理大量并发事件。

3. **事件循环(Event Loop)**:
   - 事件循环是 Node.js 的核心机制,负责监听事件队列并执行回调函数。
   - 当 Node.js 启动时,它会初始化一个事件循环。这个循环会持续监听事件队列,检查是否有待处理的事件和对应的回调函数。
   - 如果有待处理的事件,事件循环会取出事件及其回调函数并执行。执行完毕后,事件循环继续监听事件队列,处理下一个事件。

4. **底层实现**:
   - Node.js 的底层使用了 libuv 库来实现事件循环和异步 I/O。libuv 是一个高性能的事件驱动 I/O 库,提供了跨平台的支持。
   - 对于不同的 I/O 操作(如文件系统操作、网络请求等),Node.js 提供了相应的异步 API。这些 API 内部使用了 libuv 提供的异步 I/O 功能,从而实现了非阻塞的 I/O 操作。

5. **应用场景**:
   - 异步 I/O 使得 Node.js 非常适合处理 I/O 密集型任务,如网络请求、文件读写等。在这些场景中,Node.js 能够高效地处理大量并发请求,而不会因 I/O 阻塞导致性能下降。
   - 例如,在构建一个 Web 服务器时,Node.js 可以同时处理多个客户端请求,而不会因为某个请求的 I/O 操作阻塞其他请求的处理。这使得 Node.js 成为构建高性能 Web 应用的理想选择。

解释为什么要推荐用 Node. js?

推荐使用Node.js有多个原因,这些原因涵盖了技术特性、生态系统、性能以及适用场景等方面。

1. **技术特性**:
   - **JavaScript语言**:Node.js允许使用JavaScript进行服务器端开发,这意味着前端和后端可以使用同一种语言,从而简化了开发过程。
   - **事件驱动和非阻塞I/O**:Node.js采用事件驱动和非阻塞I/O模型,使其轻量且高效,尤其适用于数据密集型实时应用。
   - **单线程与异步编程**:尽管Node.js是单线程的,但通过异步编程它可以处理高并发连接,而无需为每个连接创建新的线程。

2. **生态系统**:
   - **npm(Node Package Manager)**:npm是Node.js的包管理器,拥有庞大的社区和丰富的软件包资源,便于开发者搜索和安装第三方模块。
   - **开源和社区支持**:Node.js是开源的,拥有庞大的开发者社区,这意味着有大量的教程、资源和支持可供利用。

3. **性能**:
   - **V8 JavaScript引擎**:Node.js基于Google的V8引擎,该引擎以其高性能和即时编译(JIT)技术而闻名。
   - **高吞吐量**:Node.js能够处理大量并发连接,具有高吞吐量,适合构建快速、可扩展的网络应用。

4. **适用场景**:
   - **实时应用**:Node.js适合开发实时应用,如在线聊天、实时数据分析和流媒体处理等。
   - **API服务**:Node.js可用于构建RESTful API服务,为前端应用或移动应用提供后端支持。
   - **中间件/代理服务器**:Node.js也常用于构建中间件或代理服务器,以处理请求、响应和数据转换等任务。

5. **前后端同构**:
   - 使用Node.js,前端开发者可以更容易地涉足后端开发,因为他们对JavaScript已经很熟悉。这种前后端同构的开发模式可以提高开发效率和代码复用性。

6. **易于学习和部署**:
   - 对于已经熟悉JavaScript的开发者来说,学习Node.js相对容易。此外,Node.js应用通常也更容易部署和维护。

需要注意的是,虽然Node.js在许多方面表现出色,但它并不适合所有场景。例如,对于CPU密集型任务(如视频编码或大规模数学计算),Node.js可能不是最佳选择。在这些情况下,使用更适合多线程处理的语言(如Java或C++)可能更为高效。

简述Node. js有哪些全局对象?

在Node.js中,全局对象是在任何模块中都可以直接访问的对象,而不需要进行特殊的引入或初始化。以下是一些常见的Node.js全局对象:

1. **global**:这是Node.js中最根本的全局对象,类似于浏览器中的`window`对象。所有的全局变量(除了`global`本身)都是`global`对象的属性。
2. **process**:这是一个提供有关当前Node.js进程的信息并与之交互的对象。它提供了诸如环境变量、命令行参数、进程版本、操作系统等信息,并且可以用来退出进程。


    * 例如,`process.env`用于访问环境变量,`process.argv`用于获取命令行参数。

3. **console**:这是一个用于打印输出到stdout和stderr的对象。它提供了诸如`console.log()`, `console.error()`, `console.warn()`等方法。
4. **Buffer**:这是一个全局可用的类型,用于处理二进制数据。在Node.js中,由于JavaScript原生不支持二进制数据,因此`Buffer`类被引入来处理这种情况。


    * 例如,读取文件时通常会得到Buffer对象,然后可以将其转换为字符串或其他格式。

5. **setImmediate**, **setTimeout**, **setInterval**, **clearTimeout**, **clearInterval**:这些是Node.js中的全局函数,用于处理和控制异步操作。


    * `setImmediate`用于将回调函数排入队列,在当前事件循环结束时执行。
    * `setTimeout`和`setInterval`用于在指定的毫秒数后执行回调函数,或者每隔指定的毫秒数执行回调函数。
    * `clearTimeout`和`clearInterval`用于取消由`setTimeout`和`setInterval`设置的定时器。

6. **__filename**:这是一个包含当前模块文件路径的全局变量。
7. **__dirname**:这是一个包含当前模块目录路径的全局变量。
8. **module** 和 **exports** / **require**:虽然它们通常被视为模块级别的对象,但在每个模块内部,它们实际上是全局可访问的。`module`表示当前模块,`exports`是模块导出的对象,`require`函数用于引入其他模块。

请注意,直接在全局作用域中定义变量(不使用`var`, `let`, `const`)在Node.js中通常是不推荐的,因为这可能会导致代码难以维护和理解。相反,应该使用模块作用域,并通过`exports`或`module.exports`导出需要共享的部分。

简述Node中的process的理解,有哪些常用的方法 ?

在Node.js中,`process`是一个全局变量,它提供了与当前Node.js进程互动的接口。通过这个`process`对象,我们可以获取进程的信息、控制进程的行为,以及与进程进行通信。

以下是`process`对象的一些常用方法和属性:

1. **process.cwd()**:返回当前Node.js进程的工作目录。
2. **process.chdir(directory)**:改变当前工作进程的工作目录。如果操作失败,会抛出异常。
3. **process.memoryUsage()**:返回一个对象,描述了Node进程的内存使用情况,包括rss(常驻集大小)、heapTotal(堆的总空间)、heapUsed(已使用的堆空间)和external(外部内存使用量)。
4. **process.uptime()**:返回Node程序已运行的秒数。
5. **process.hrtime()**:返回当前的高分辨时间,形式为[秒, 纳秒]的元组数组。它不受时钟漂移的影响,主要用于精确测量时间间隔。
6. **process.kill(pid, [signal])**:向指定pid的进程发送一个信号,如果没有指定信号,则默认发送'SIGTERM'。
7. **process.abort()**:触发node的abort事件,导致node进程异常终止并生成一个核心文件。
8. **process.exit([code])**:终止当前进程并返回给定的退出码。如果省略了code,则默认返回成功的状态码0。
9. **process.exitCode**:一个可以自定义的退出码,当进程正常结束或使用`process.exit()`退出时,这个码会被Node shell捕获。
10. **process.stdout, process.stderr, process.stdin**:这些是标准I/O流,分别代表进程的标准输出、标准错误和标准输入。它们是可写的流(Writable Stream)或可读的流(Readable Stream)。
11. **process.nextTick(callback)**:将回调函数排入队列,在当前事件循环的下一个迭代中执行。这是一种高效的方式来处理需要在当前操作完成后立即执行的任务。
12. **process.on(event, listener)**:监听进程事件。例如,可以监听'uncaughtException'事件来捕获未处理的异常,防止进程异常退出。

`process`对象提供了与Node.js进程的交互方式,让开发者能够更好地了解和控制进程的运行状态和行为。通过这些方法和属性,我们可以获取进程的资源使用情况、处理异常、管理进程的生命周期,以及与进程进行通信。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用DMS肌肉刺激仪的时候肌肉肿了是怎么回事?

当使用DMS(深层肌肉刺激仪)时,肌肉出现肿胀可能有多种原因。以下是对可能原因的分点表示和归纳: DMS治疗过程中的刺激反应: DMS治疗过程中,肌肉受到强烈的刺激,可能会导致局部肌肉炎症、水肿和…

【科普向】【文末附gpt升级秘笈】人工智能领域的风云变幻:从OpenAI到Anthropic的人才流动与技术走向

人工智能领域的风云变幻:从OpenAI到Anthropic的人才流动与技术走向 摘要:人工智能领域的竞争日趋激烈,技术巨头间的人才流动和团队重组成为常态。本文通过分析OpenAI前首席安全研究员Jan Leike加入Anthropic公司这一事件,探讨人工…

vue el-table使用、el-popover关闭、el-image大图预览

1、html <el-table :data"list" :header-cell-style"{ background: #F7F8F9 }"><el-table-column type"index" width"100px" label"序号"></el-table-column><el-table-column prop"pic" l…

socks5 如何让dns不被污染

问题 发现firefox浏览器代理设置成socks5后&#xff0c;查看ip是成功了&#xff0c;但是谷歌等海外的还是无法正常访问。 原因 主要原因是socks5连接虽然是成功了&#xff0c;但是dns还是走国内的&#xff0c;国内的dns解析都被污染了导致没法正常访问 解决 把设置里的 使…

图数据集的加载

原文参考官方文档&#xff1a; https://pytorch-geometric.readthedocs.io/en/latest/modules/loader.html torch_geometric.loader 库中&#xff0c; 该库中包含了多种 图数据集的 加载方式&#xff0c; 这里主要介绍 DenseDataLoader and DataLoader 这两者之间的区别&#…

LeetCode 每日一题 数学篇 2894.分类求和并作差

给你两个正整数 n 和 m 。 现定义两个整数 num1 和 num2 &#xff0c;如下所示&#xff1a; num1&#xff1a;范围 [1, n] 内所有 无法被 m 整除 的整数之和。num2&#xff1a;范围 [1, n] 内所有 能够被 m 整除 的整数之和。 返回整数 num1 - num2 。 int differenceOfSum…

每日一题——力扣141. 环形链表(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方法2&#x…

【开发日记】ElementUI表单使用原生@submit提交表单数据

使用submit.native.prevent为el-form设置提交方法。 使用native-type为el-button设置原生按钮类型。 示例如下&#xff1a; <el-form class"search" submit.native.prevent"submitSearch"><div classsearch-item>人员ID :<el-input sizemi…

概率论与数理统计,重要知识点——全部公式总结

二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计

QT事件----QPaintEvent绘图事件,QwheelEvent鼠标滚轮事件等; 用事件自定义按键;QT事件过滤器。

一、QT事件 1.1 QPaintEvent绘图事件 QPaintEvent 是 Qt 框架中一个重要的事件类,专门用于处理绘图事件。当 Qt 视图组件需要重绘自己的一部分时,就会产生 QPaintEvent 事件。这通常发生在以下几种情况:1. 窗口第一次显示时:当窗口或控件第一次出现在屏幕上时,系统会生成…

WSDM2024推荐系统和LLM相关论文整理(二)

WSDM 2024接收的论文已经公布&#xff0c;全部收录的论文可前往地址 网址&#xff1a;https://www.wsdm-conference.org/2024/accepted-papers/ 其中推荐系统相关论文三十余篇&#xff0c;下文列举了部分论文的标题以及摘要&#xff0c;更多内容欢迎关注公众号【深度学习推荐算…

RabbitMQ简单使用方法,以异步处理日志为例:

在RabbitMQ中异步记录日志的实现可以分为生产者将日志消息发送到队列&#xff0c;以及消费者从队列中取出消息并记录日志。当搭建好消息队列后&#xff0c;需要确保消费者持续运行&#xff0c;以便随时处理新进入的日志消息。 步骤一&#xff1a;设置生产者发送日志消息到Rabb…

vscode操作git详解

基于 VScode 的 git 详细使用指南【保姆级&#xff01;建议收藏&#xff01;】_vscode git-CSDN博客

Stable Diffusion AI绘画:从创意词汇到艺术图画的魔法之旅

文章目录 一、Stable Diffusion的工作原理二、从提示词到模型出图的过程三、Stable Diffusion在艺术创作中的应用《Stable Diffusion AI绘画从提示词到模型出图》内容简介作者简介楚天 目录前言/序言本书特色特别提示 获取方式 在科技的飞速发展中&#xff0c;Stable Diffusion…

Java-----Comparable接口和Comparator接口

在Java中&#xff0c;我们会经常使用到自定义类&#xff0c;那我们如何进行自定义类的比较呢? 1.Comparable接口 普通数据的比较 int a10;int b91;System.out.println(a<b); 那自定义类型可不可以这样比较呢&#xff1f;看一下代码 我们发现会报错&#xff0c;因为自定义…

策略模式结合Spring使用

1.抽象策略 /*** 支付方式策略* author Linging* version 1.0.0* since 1.0*/ public interface PayStrategy {void pay(BigDecimal money);}2.具体策略 /*** 支付宝* author Linging* version 1.0.0* since 1.0*/ Component("aliPayStrategy") public class AliPa…

uniapp手机屏幕左滑返回上一页支持APP,H5

核心&#xff1a;touchstart"touchStart" touchend"touchEnd" 代码示例&#xff1a; <template><view class"payPasswordSetting" touchstart"touchStart" touchend"touchEnd"></view> </template&g…

LNMP分布式搭建

一、准备三台主机 192.168.100.11 mysql 192.168.100.12 nginx 192.168.100.13 php 二、关闭防火墙及安全策略 systemctl stop firewalld setenforce 0 三、安装nginx&#xff08;192.168.100.11&#xff09; 1、添加nginx源 vim /etc/yum.repos.d/ng…

618必备好物选购清单有哪些?五款精品好物分享

618将近&#xff0c;很多好物都会在这段时间搞活动&#xff0c;许多朋友会在这个时候置办或者置换家居&#xff0c;那么&#xff0c;2024年的618有哪些值得入手的好物呢&#xff1f;今天&#xff0c;将与大家分享一些精选好物&#xff0c;这些好物在618入手绝对是个不错的选择。…

Unity中模拟生成正态分布的一种方式

using System; using System.Collections; using System.Collections.Generic; using Unity.Mathematics; using UnityEngine;public class MathFunction : MonoBehaviour {private void Start(){//key 范围 0-99 表示 0% 到 99%Dictionary<int,uint> m new Dictionary&…