redux的基础操作和思想
### Redux相关源码:可以理解为主,但不要求一定都会写 redux不会,虽然也有一些其他的替代方案:mobx,但是基本可以宣告react阵亡了 VUE->Vuex ### Redux生态圈中的知识 - redux react-redux redux中间件 - mobx 类的装饰器 - react-router-dom v5/v6 - redux-saga/dva/umi - fetch及其二次封装 - antd pro > 复合组件通信: > > 1. 父子通信“具备相同父亲的兄弟组件”:props属性 “基于ref” > 2. 祖先和后代“具备相同祖先的平行组件”:context上下文 > > redux/react-redux 也是实现组件之间的通信技术“插件” > > 不管任何类型的组件,都可以基于这种方法,实现组件通信 公共状态管理方案 后期实战开发中,父子组件一般是基于: props/ref/redux其余组件的通信一般都是基于redux管理的 是消息传递系统中最基本的队列类型,消息按先进先出(FIFO)的顺序存储和传递。以下是标准队列的常见应用场景和详细说明: ### 1. **任务队列(Task Queue)** - **场景描述**:在后台处理任务时,如图像处理、视频转码、数据分析等,需要将任务分配给多个工作节点进行处理,避免阻塞主应用。 - **应用说明**:在任务队列中,每个任务都会被推送到 RabbitMQ 的标准队列中,多个消费者从队列中获取任务并处理,任务处理完毕后删除队列中的消息。 - **举例**: - **应用**:电商网站后台处理订单数据,如生成发货单、发送确认邮件等。这些任务可以异步处理,以提高系统的响应速度。 - **代码示例(Node.js)**: ```javascript // 生产者:将任务添加到队列 const amqp = require('amqplib/callback_api'); amqp.connect('amqp://localhost', func
RabbitMQ的队列类型
在 RabbitMQ 中,队列是消息存储的核心组件,不同类型的队列可以满足不同的业务需求。以下是一些常见的 RabbitMQ 队列类型和它们的应用场景: ### 1. 标准队列(Classic Queue) - **描述**:这是 RabbitMQ 中最常见的队列类型,也是默认的队列类型。消息按照先进先出的顺序进行处理。 - **应用场景**:适用于一般消息传递的场景,没有特殊的消息顺序或持久化需求。 ### 2. 镜像队列(Mirrored Queue) - **描述**:镜像队列会在 RabbitMQ 集群的多个节点上同步消息。即使一个节点出现故障,其他节点也可以继续处理消息。 - **应用场景**:适用于对高可用性有要求的场景,确保消息在节点故障时不丢失。 ### 3. 死信队列(Dead Letter Queue, DLQ) - **描述**:死信队列用于处理无法正常消费的消息。这些消息可能由于多次重试失败、消息过期或者队列满载等原因被转移到死信队列中。 - **应用场景**:适用于需要对无法处理的消息进行特殊处理或监控的场景。
RabbitMQ的安装与配置
### 1. RabbitMQ 简介 RabbitMQ 是一个开源的消息代理软件,使用高级消息队列协议(AMQP)。它被广泛用于实现异步通信、分布式系统的消息传递、任务调度和消息队列。RabbitMQ 通过将消息发送者和接收者解耦,提供了可靠的消息传递、负载均衡、持久化和分布式的功能。 ### 2. 安装与配置 #### 2.1 安装 RabbitMQ **在 Ubuntu 上安装:** 1. **安装依赖:** ```bash sudo apt-get update sudo apt-get install curl gnupg apt-transport-https ``` 2. **添加 RabbitMQ 仓库:** ```bash curl -fsSL https://packages.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add - sudo apt-get install software-pro
滑动窗口最大值
<p style="border-width: 0px; border-style: solid; border-color: hsl(var(--sd-border)); border-image: initial; box-sizing: border-box; overflow-wrap: break-word; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-t
Node.js 中使用 GraphQL、WebSockets 和 Serverless
### 在 Node.js 中使用 GraphQL、WebSockets 和 Serverless #### 1. GraphQL GraphQL 是一种用于 API 的查询语言,允许客户端只请求所需的数据。相比传统的 REST API,GraphQL 提供了更灵活和高效的数据获取方式。 ##### 1.1 安装和配置 **安装相关库** ```bash npm install graphql express-graphql ``` **创建 GraphQL Schema 和 Resolver** **示例:`schema.js`** ```javascript const { GraphQLObjectType, GraphQLSchema, GraphQLString } = require('graphql'); const HelloType = new GraphQLObjectType({ name: 'Hello', fields: { message: { type: Gr
NodeJs性能优化
性能分析和优化是确保 Node.js 应用程序高效、响应迅速的关键步骤。以下是关于如何进行性能分析和优化的详细说明,包括使用 `cluster` 模块、负载均衡、缓存(如 Redis)、流和管道的使用。 ### 1. 性能分析和优化 性能分析帮助识别应用程序中的瓶颈,并对其进行优化。 #### 1.1 使用 Node.js 内置的性能分析工具 **1.1.1 `--inspect` 标志** 可以使用 `--inspect` 标志启动 Node.js,并通过 Chrome DevTools 进行性能分析。 ```bash node --inspect index.js ``` 在 Chrome 浏览器中打开 `chrome://inspect` 以连接到调试器。 **1.1.2 `--prof` 标志** 使用 `--prof` 标志生成 V8 性能分析文件。 ```bash node --prof index.js ``` 生成的文件可以通过 `node --prof-process` 工具进行分析。 `
NodeJs安全
### Node.js 安全最佳实践 确保应用程序的安全性是开发中的重要任务。以下是 Node.js 中的一些安全最佳实践,包括如何防止 SQL 注入、XSS、CSRF,以及如何实现认证和授权(如 JWT 和 OAuth)。 ### 1. 防止 SQL 注入 SQL 注入是一种攻击方式,攻击者通过插入恶意 SQL 代码到查询中,可能导致数据泄露或篡改。 #### 1.1 使用 ORM/ODM 使用 ORM(如 Sequelize.js)或 ODM(如 Mongoose)可以有效防止 SQL 注入,因为它们会自动处理参数化查询。 **示例:Sequelize.js 防止 SQL 注入** ```javascript const { User } = require('./models'); // 假设 User 是一个 Sequelize 模型 // 使用参数化查询 User.findOne({ where: { email: req.body.email } }) .then(user => { if (u
NodeJs相关测试框架
编写测试是确保应用程序正确性和稳定性的关键步骤。以下是关于如何使用 Mocha、Chai 和 Jest 进行单元测试和集成测试的详细说明和示例。 ### 1. Mocha 和 Chai Mocha 是一个功能丰富的测试框架,提供了测试套件和测试用例的支持。Chai 是一个断言库,通常与 Mocha 一起使用来编写断言。 #### 1.1 安装 Mocha 和 Chai ```bash npm install --save-dev mocha chai ``` #### 1.2 配置 Mocha 在项目根目录下创建一个 `test` 文件夹,并在其中创建一个测试文件,例如 `test.js`。 #### 1.3 编写单元测试 **示例代码:使用 Mocha 和 Chai 进行单元测试** **计算器模块 `calculator.js`** ```javascript // calculator.js function add(a, b) { return a + b; } function subtra