🔍 登录 注册
分类:
标签: 共 1222 篇文章

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管理的 ![image.png](http://e.cdn.z

大 大苹果 2023/12/1 👍 0 ⭐ 0 💬 0

前端开发

## 前端开发 当前以及未来的前端开发,一定是:组件化、模块化 - 有利于团队协作开发 - 便于组件的复用:提高开发效率、方便后期维护、减少页面中冗余代码 ## 如何规划组件 ### 业务组件:针对项目需求封装的 - 普通业务组件“没有啥复用性,只是单独拆出来的一个模块“ - 通用业务组件“具备复用性” ### 功能组件:适用于多个项目“例如:UI组件库的组件” - 通用功能组件 ## 因为组件化开发,必然会带来“工程化”的处理 也就是基于webpack等工具“vite/rollup/turbopack...” - 实现组件的合并、压缩、打包等 - 代码编译、兼容、校验等 --- ## React的工程化/组件化开发 我们可以基于webpack自己去搭建一套工程化的架子,但是这样非常的麻烦、复杂;React官方,为我们提供了一个脚手架; create-react-app - 脚手架:基于它创建项目,默认就是把webpack的打包规则已经处理好,把一些项目需要的基本文件也都创建好了!!

大 大苹果 2023/12/1 👍 0 ⭐ 0 💬 0

Mysql 表被标记为崩溃,最后一次自动化修复失败

当 MySQL 日志中出现“表被标记为崩溃且自动修复失败”的提示时,通常表示 MySQL 在启动过程中检测到某个表的文件系统或存储引擎层出现了问题。这种情况通常会导致表无法正常使用,需要手动进行修复。以下是处理这种情况的一些步骤和方法: ### 1. **查看具体错误信息** 首先,需要查看 MySQL 错误日志以获取更多的错误信息。这可以帮助确定崩溃的表和具体的问题。 ```bash # 查看 MySQL 错误日志 tail -f /var/log/mysql/error.log ``` ### 2. **修复表** 不同的存储引擎有不同的修复工具,以下是常用的修复方法: #### **使用 `myisamchk` 修复 MyISAM 表** 如果崩溃的表使用的是 MyISAM 存储引擎,可以使用 `myisamchk` 工具来修复表。 1. 停止 MySQL 服务: ```bash sudo systemctl stop mysql ``` 2. 使用 `myisamchk` 修复表:

大 大苹果 2024/8/11 👍 0 ⭐ 0 💬 0

消息队列重复消费问题?

在分布式系统中使用 RabbitMQ 时,如何确保一个消息只被消费一次,避免重复消费的情况?

大 大苹果 2024/8/11 👍 0 ⭐ 0 💬 0

RabbitMQ 标准队列

RabbitMQ 标准队列(Classic Queue)是消息传递系统中最基本的队列类型,消息按先进先出(FIFO)的顺序存储和传递。以下是标准队列的常见应用场景和详细说明: ### 1. **任务队列(Task Queue)** - **场景描述**:在后台处理任务时,如图像处理、视频转码、数据分析等,需要将任务分配给多个工作节点进行处理,避免阻塞主应用。 - **应用说明**:在任务队列中,每个任务都会被推送到 RabbitMQ 的标准队列中,多个消费者从队列中获取任务并处理,任务处理完毕后删除队列中的消息。 - **举例**: - **应用**:电商网站后台处理订单数据,如生成发货单、发送确认邮件等。这些任务可以异步处理,以提高系统的响应速度。 - **代码示例(Node.js)**: ```javascript // 生产者:将任务添加到队列 const amqp = require('amqplib/callback_api'); amqp.connect('amqp://localhost', func

大 大苹果 2024/8/11 👍 0 ⭐ 0 💬 0

RabbitMQ的队列类型

在 RabbitMQ 中,队列是消息存储的核心组件,不同类型的队列可以满足不同的业务需求。以下是一些常见的 RabbitMQ 队列类型和它们的应用场景: ### 1. 标准队列(Classic Queue) - **描述**:这是 RabbitMQ 中最常见的队列类型,也是默认的队列类型。消息按照先进先出的顺序进行处理。 - **应用场景**:适用于一般消息传递的场景,没有特殊的消息顺序或持久化需求。 ### 2. 镜像队列(Mirrored Queue) - **描述**:镜像队列会在 RabbitMQ 集群的多个节点上同步消息。即使一个节点出现故障,其他节点也可以继续处理消息。 - **应用场景**:适用于对高可用性有要求的场景,确保消息在节点故障时不丢失。 ### 3. 死信队列(Dead Letter Queue, DLQ) - **描述**:死信队列用于处理无法正常消费的消息。这些消息可能由于多次重试失败、消息过期或者队列满载等原因被转移到死信队列中。 - **应用场景**:适用于需要对无法处理的消息进行特殊处理或监控的场景。

大 大苹果 2024/8/11 👍 0 ⭐ 0 💬 0

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

大 大苹果 2024/8/11 👍 0 ⭐ 0 💬 0

滑动窗口最大值

<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

大 大苹果 2024/8/10 👍 0 ⭐ 0 💬 0

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

大 大苹果 2024/8/10 👍 0 ⭐ 0 💬 0

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` 工具进行分析。 `

大 大苹果 2024/8/10 👍 0 ⭐ 0 💬 0

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

大 大苹果 2024/8/10 👍 0 ⭐ 0 💬 0

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

大 大苹果 2024/8/10 👍 0 ⭐ 0 💬 0