bullMq在NestJs中的应用
简介BullMQ 是一个强大的基于 Redis 的队列管理库,它可以帮助我们在 NestJS 应用中处理后台任务、消息队列和作业调度。在实际项目开发中,消息队列是一个几乎不可或缺的组件,主要基于以下几个原因: 延时队列需求:在业务中经常需要处理延时执行的任务。 事件触发处理:比如玩家登录、升级等行为触发的后续操作,这些都需要可靠的消息处理机制。 消息可靠性:直接在消息监听器中处理业务逻辑风险较高,特别是对于一些关键操作(如支付)。消息队列提供了消息持久化能力,确保即使处理失败也可以重试。 系统解耦:通过消息队列,可以实现业务逻辑的解耦,提高系统的可维护性和扩展性。 性能优化:提供消息缓存机制,避免系统过载,实现更好的性能表现。 为什么选择 BullMQ?BullMQ 具有以下优势: 高性能:基于 Redis 实现,具有出色的性能表现 可靠性:支持任务重试和错误处理机制 功能丰富:提供作业进度追踪能力 并发处理:支持多进程并发处理任务 灵活调度:支持延迟任务和重复任务处理 事件系统:完善的事件监听和处理机制 框架集成:与 NestJS 框架完美集成 配置...
算法初学
LeetCode 算法题解集锦这是一个算法学习笔记,包含了各种常见的算法题解和实现思路。主要涵盖数组、字符串、链表、树结构和动态规划等经典算法类型。 目录 数组算法 字符串算法 链表算法 树结构算法 动态规划 数组算法数组是最基础的数据结构之一,这里收集了一些常见的数组操作算法题目。 题目列表旋转图像123456789101112131415161718192021222324252627282930313233343536// 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。// 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。// 输入:matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]// 输出:[[7, 4, 1], [8, 5, 2], [9, 6, 3]]function rotate(matrix) { const n = matrix.length; // 步骤1:沿对角线翻转 for (let i = 0; i...
React 图片动画加载技术详解
图片加载动画的挑战开发过程中,我遇到了一个常见的问题:页面初始加载时,多张图片未完成加载会导致动画效果丢失。这不仅影响了用户体验,也降低了页面的交互质感。 解决方案:动态监听与懒加载我们的解决方案包含两个核心策略: 图片加载监听:确保所有图片加载完成后再触发动画 滚动懒加载:延迟加载动画,提高初始页面响应速度 代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950useEffect(() => { const onLoad = () => { gsap.utils .toArray(".section-image-friends") .forEach((image: any, index) => { // 交替方向,创建更生动的视觉效果 const direction = index % 2...
Hexo博客自动化部署:GitHub Actions实践指南
背景介绍为什么选择 GitHub Actions 持续集成与部署的必要性 自动化工作流的价值 Hexo 博客部署的痛点 所需工具 Node.js npm GitHub Personal Access Token GitHub Actions 工作流配置触发条件 推送到主分支 手动触发部署 权限配置 最小权限原则 contents: write 的作用 部署步骤1. 生成 Personal Access Token在 GitHub 中生成 Personal Access Token 的步骤如下: 进入 GitHub Settings 点击 “Developer settings” 选择 “Personal access tokens” 点击 “Generate new token (classic)” 选择必要的权限,至少包括 repo 和 workflow 生成并复制 Token 2. 配置 GitHub Actions TokenHexo 博客通常涉及两个 GitHub 仓库: 博客源码仓库(用于管理 Hexo 配置和文章) 博客展示仓库(GitHub...
Git 使用:git revert 与 git reset 的差异
引言在使用 Git 进行版本控制时,git revert 和 git reset 是两个可能会用到的命令,但是现对于极其频繁的 push,pull,merge 指令来说,这两个命令的使用频率就非常低了,所以我就专门建了一个项目来做测试,各种提交 commit,然后各种 revert,reset,merge,以此来学习这两个命令,建议读者也这样做,纸上得来终觉浅,绝知此事要躬行,此处仅仅抛砖引玉。 git revert命令概述 git revert 用于撤销某个提交的更改,并生成一个新的提交来记录这个撤销操作。 这个命令感觉非常好用,因为他很安全,主要的做法就是把原先的提交反向操作,然后生成一个新的提交,这样就保留了历史记录,同时又撤销了更改。所以这个 revert 是可以重复执行的,只是增加一些提交记录罢了,本身的代码都可以回溯,对应到 gitTortoise 中,就是按钮 revert change by this commit 这按钮,记住,这个的意思是 revert 你点击的这个按钮 实验下来是这样的,如果有 6 个提交,点击最开始的第一个提交,选择 revert...
使用 FFmpeg 将 MP4 转换为 WebP
引言在现代 Web 开发中,WebP 格式因其高效的压缩率和良好的图像质量而受到广泛欢迎。本文将介绍如何使用 FFmpeg 将 MP4 视频转换为 WebP 格式。 转换步骤基本命令 仅仅是记录一下,对于 ffmpeg 也是试水,这个软件过于强大,摸个毛 H.264(AVC) 和 H.265(HEVC) 是两种视频编码标准,主要差异如下: 压缩效率:H.265 比 H.264 更高效,能够在相同质量下提供更小的文件大小 视频质量:H.265 通常提供更好的视频质量,尤其是在高分辨率视频上 计算复杂度:H.265 的编码和解码过程更复杂,需要更多的计算资源 兼容性:H.264 是更广泛支持的编码标准,许多设备和平台都支持 H.264 一般的 mp4 都是 h264 格式,可以通过查看视频的详情: 1ffmpeg -i input.mp4 输出: 1Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR...
React Hooks 学习笔记
引言React Hooks 是 React 16.8 引入的特性,让我们可以在函数组件中使用状态和其他 React 特性。本文将记录学习 React Hooks 的心得体会。 基础 HooksuseState状态管理的基础 Hook: 最常用的就是 setState,日常代码书写中,特别容易出现魔术字。虽然符合直觉,但需要时刻准备重构。在工程化中,应尽可能通过常量来替代魔术字,方便代码阅读,尤其是多人协作时。一个规范的变量命名和统一的常量管理,能极大提升代码的可维护性、可读性和可扩展性。 这是最简单的应用了。这里需要注意的是对象和数组的更新,如果需要修改,需要使用函数式更新,否则可能会出现数据残留的问题。 123456789const USER_FUNCTION_MAP = { prohibit: "prohibit",};const [state, setState] = useState(USER_FUNCTION_MAP.prohibit);setState((prev) => ({ ...prev, ...
nestjs文件上传
引言在开发 Web 应用时,文件上传是一个非常常见的需求。本文将详细介绍如何在 NestJS 框架中实现文件上传功能,包括普通上传和大文件分片上传两种实现方式。 文件上传实现方案1. 分片上传实现对于小型文件的分片上传,我们可以直接将文件存储在内存中。通过 FileInterceptor 拦截器,我们可以轻松获取到包含文件 buffer 的文件流: 12345678910@Post('file/uploadFile')@UseInterceptors(FileInterceptor('file'))async uploadCommonChunk( @UploadedFile() file: Express.Multer.File, @Body('index') index: number, @Body('hash') hash: string, @Body('dir') dir: string,) { return await...
从Egg.js到Nest.js谈起
引言在 Node.js 后端开发的演进过程中,从最初的 Express.js,到 Koa.js,再到现在广受欢迎的 Egg.js 和 Nest.js,每一个框架都代表着不同的开发理念和实践方向。今天,我们就来聊聊 Egg.js 和 Nest.js 这两个优秀的框架。 如何选择? 选择 Egg.js 的场景 团队主要使用 JavaScript 需要快速开发 重视开发约定 需要中文社区支持 项目规模中等 选择 Nest.js 的场景 团队熟悉 TypeScript 项目架构复杂 需要依赖注入 考虑微服务架构 大型项目 开发心得在使用 Egg.js 和 Nest.js...
再学python
实战项目示例:股票数据分析这里是一个使用Python获取和分析股票数据的实际例子,展示了Python在数据处理方面的强大能力: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import akshare as akimport pandas as pdfrom datetime import datetimedef get_stock_data(): print("正在获取股票数据,请稍候...") # 获取上证所有股票的实时行情 try: stock_zh_a_spot_df = ak.stock_zh_a_spot() print("数据获取成功,正在处理...") print("可用的列名:", stock_zh_a_spot_df.columns.tolist()) ...





