Nestjs权限管理RBAC与ACL2025/05/19
本文介绍了Nestjs的权限管理方案,包括RBAC和ACL的比较,以及如何选择合适的权限管理方案。
使用国内镜像加速 Rust 安装与更新2025/04/17
本文介绍了如何通过配置国内镜像来加速 Rust 的安装与更新。由于 Rust 官方服务器位于国外,直接安装可能会因网络问题导致速度缓慢或失败。通过设置环境变量(如 RUSTUP_UPDATE_ROOT 和 RUSTUP_DIST_SERVER)为国内镜像地址(如清华源、中科大源等),可以显著提升安装和更新的效率。
比较requestAnimationFrame、nextTick 和 requestIdleCallback2025/03/19
requestAnimationFrame、nextTick 和 requestIdleCallback 是 JavaScript 中三种任务调度机制,分别用于处理渲染同步任务、DOM 更新后逻辑和空闲期任务。本文将详细介绍这三种函数的定义、执行时机、用途以及适用场景。
营销活动前端安全方案探索2025/03/18
本文详细介绍了数据可信性验证的多种技术手段,包括数字签名机制、不可逆数据映射、DOM防篡改监控、视觉防伪技术、HTTPS强制加密、请求时效性控制、运营端验证体系以及行为异常检测和代码混淆加固等。通过这些措施,可以有效防止数据篡改、重放攻击和中间人攻击,确保数据的完整性和安全性。特别是在中奖结果展示和用户操作过程中,多重验证机制和防伪技术能够显著提升系统的安全性和可信度。
React框架的宏观结构2025/02/20
本文深入探讨了React框架的宏观结构,重点分析了任务调度循环和Fiber构造循环的关系。任务调度循环负责优先级管理和增量渲染,确保应用在高优先级任务(如用户交互)下保持响应性。Fiber构造循环则通过构建和更新Fiber树,反映组件层次结构,优化渲染过程。两者紧密结合,任务调度循环决定何时执行Fiber构造循环,确保在16ms帧时间内完成渲染,避免阻塞主线程。这一机制显著提升了React在复杂应用中的性能和流畅度。
让你的VSCode极简和高效2025/02/16
本文介绍了如何通过安装Apc Customize UI++扩展和编辑settings.json文件,来定制VSCode的UI元素,使其更加极简和高效。包括颜色自定义、滚动栏自定义、APC自定义UI设置以及其他个性化设置,帮助用户打造一个更清洁和简约的编码环境。
MacOS外接键盘时修改§键为`2024/07/31
在macOS Sonoma 14.5中,外接NIZ MICRO 82键有线键盘时,反引号键被识别为§键。通过排查发现键盘被识别为ISO布局。由于macOS原生不支持修改反引号键,使用Karabiner-Elements插件进行自定义按键设置,成功将§键改为反引号键。参考了多篇文档和教程,最终解决了问题。
Whistle + SwitchyOmega使用实践2024/06/07
本文详细介绍了 Whistle 和 SwitchyOmega 两个工具的安装配置和使用实践。Whistle 是一个基于 Node 实现的跨平台 web 调试代理工具,而 SwitchyOmega 是一个浏览器插件,用于快速切换不同的代理配置。文章涵盖了工具的安装步骤、HTTPS 证书配置、常见配置策略以及如何将配置跟随项目的方法,特别适合前端开发人员在日常开发中进行接口调试和跨域问题解决。
TS体操练习2024/05/23
本文记录了 TypeScript 类型体操练习题的解答过程,包括简单和中等难度的多个练习题。涵盖了 Pick、Readonly、TupleToObject、Exclude、Awaited 等类型实现,并对 infer、协变和逆变等重要概念进行了说明。这些练习有助于加深对 TypeScript 类型系统的理解,提升类型编程能力。
gin框架binding:"required"无法接收零值的问题2024/05/13
本文探讨了 Gin 框架中使用 binding:"required"
标签时无法接收零值的问题。由于 Gin 的参数校验基于 validator,当字段被标记为必填时,会拒绝接收零值(如 int 的 0,string 的空串,bool 的 false)。文章提供了一个简单的解决方案:通过将字段类型定义为指针类型来解决这个问题,使得必填字段既能保证参数必传,又能正常接收零值。
设计模式之——依赖反转2024/05/12
本文介绍了面向对象设计中的依赖反转原则(Dependency Inversion)。文章首先解释了依赖反转的核心概念:高层模块应该依赖于抽象接口而非具体实现。随后通过 TypeScript 中的实际例子,展示了如何使用接口和依赖注入来实现依赖反转,以 useStorage
方法为例说明了如何通过抽象接口实现代码的解耦和扩展。最后总结了依赖反转带来的好处,包括代码解耦、可扩展性和可测试性的提升。
设计模式之——策略模式2024/05/06
本文详细介绍了策略模式的概念、原理和实际应用。策略模式作为一种行为型设计模式,通过将对象和行为分离,实现了算法的灵活切换。文章通过结构图解释了策略模式的核心组成,并以电商支付方式和复杂条件判断优化为例,展示了策略模式在实际开发中的应用场景。特别介绍了使用 Map 数据结构来替代复杂的 if/else 逻辑,提供了更清晰、可维护的代码组织方式。
vue-router 导航守卫学习笔记2024/04/29
本文详细介绍了 Vue Router 中的导航守卫机制。文章系统地讲解了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫以及组件内守卫的使用方法和应用场景。特别说明了守卫的执行时机、参数传递、组件实例访问等关键点,并通过实际代码示例展示了各类守卫的具体实现。最后通过完整的导航解析流程,帮助读者深入理解 Vue Router 的导航守卫机制。
浏览器渲染原理2024/03/31
本文深入探讨了浏览器的渲染原理和完整流程。从 HTML 解析开始,依次介绍了样式计算、布局、分层、绘制、分块渲染、光栅化到最终的合成等八个关键步骤。文章详细解释了每个阶段的工作原理,包括 DOM 树和 CSSOM 树的构建、布局树的生成、图层的划分以及 GPU 加速等核心概念。同时还讨论了重排(reflow)、重绘(repaint)和合成等性能优化相关的重要概念,为前端开发者提供了全面的浏览器渲染机制理解。
Charles抓包原理与HTTPS加密2024/03/28
本文深入探讨了 Charles 抓包工具的工作原理和 HTTPS 加密机制。文章首先介绍了对称加密和非对称加密的基本概念,然后详细解释了 HTTPS 的连接建立过程(TLS握手)和通信过程。接着讨论了数据完整性验证的重要性,包括数字签名和数字证书的作用。最后通过分析 Charles 的抓包策略,说明了它如何通过伪造证书来实现 HTTPS 请求的拦截和解密。文章对于理解网络安全和抓包工具的工作机制提供了全面的参考。
JS的事件循环2024/03/26
本文深入探讨了JavaScript的事件循环机制。首先介绍了浏览器的多进程架构,包括浏览器进程、网络进程和渲染进程的职责分工。重点阐述了渲染主进程的工作原理和消息队列机制,详细解释了JavaScript的异步编程模型。同时,文章还探讨了任务队列的优先级机制,以及计时器的精确性问题。通过本文,读者可以全面理解JavaScript的单线程特性和事件循环的工作原理。
React Fiber详细解析2024/03/25
本文深入解析了 React Fiber 的核心实现原理和工作机制。文章首先介绍了 Fiber 产生的背景,解释了传统 React 更新机制存在的性能问题。随后详细阐述了 Fiber 的设计思路,包括 Fiber Node 的结构、任务调度机制、优先级计算、双缓存树的实现等核心概念。同时介绍了 Fiber 如何通过时间分片和可中断的调和过程来提升应用性能,以及如何通过 requestIdleCallback 和 requestAnimationFrame 来实现与浏览器的调度协作。通过本文,读者可以全面理解 React Fiber 架构的设计思想和实现细节。
React Fiber 源码阅读(一)2024/03/24
本文深入探讨了React Fiber架构下的useState工作原理,从源码调试环境的搭建开始,详细分析了useState的初始化和更新机制。通过断点调试和源码分析,揭示了React如何通过dispatcher管理hook状态,以及state更新时Fiber节点的调度过程。文章重点讲解了mountState、dispatchSetState等核心函数,并探讨了React的eagerState优化策略。
深入了解React Fiber:让你的应用更快、更流畅2024/03/20
React Fiber是React 16中引入的新协调算法,它通过将渲染任务分解为可中断的小单元(Fiber),实现了基于优先级的调度和时间切片技术。这种改进使React能够更高效地处理大型组件树,提升应用的响应性和渲染性能。Fiber架构支持中断和恢复渲染任务,允许高优先级更新抢占低优先级更新,同时引入了并行渲染和错误边界等新特性,为开发者提供了更强大的性能优化手段。
设计模式之——工厂模式2024/03/19
工厂模式是一种创建对象的设计模式,它通过将对象的创建和使用分离,由工厂类负责创建对象并返回。在前端开发中,工厂模式常用于动态创建组件,如创建一系列具有相同样式和行为的按钮或表单。使用工厂模式可以提高代码的可读性、可维护性和可重用性。
V8引擎的垃圾回收2024/03/15
本文深入解析V8引擎垃圾回收机制,采用分代回收策略将堆内存划分为新生代与老生代:新生代使用Scavenge算法实现快速回收,老生代采用标记-清除-整理算法保障内存效率。通过并行回收、增量标记和并发回收三重优化方案,有效解决Stop-The-World性能瓶颈问题。内存管理基于可达性算法精准识别活动对象,配合写屏障技术实现并发标记。性能优化方面通过对象晋升策略控制内存碎片,并充分利用多核优势实现并行回收。
OpenSSL介绍及原理2024/03/12
OpenSSL 作为开源的加密工具包,完整实现了 TLS/SSL 协议栈并提供跨平台支持。其核心功能基于密码学算法库构建,包含 RSA/ECDSA 密钥对的生成与管理机制,支持通过命令行工具创建证书签名请求(CSR)并进行证书验证。该工具包采用模块化架构设计,内置 X.509 证书处理引擎,可完成证书链的生成、签名和安装全过程。通过抽象不同操作系统的加密接口,OpenSSL 在 Linux、Windows 和 macOS 平台均保持一致的 API 行为。
Node.js 的 Event loop2024/03/11
Node.js 事件循环通过六个阶段协调异步操作:定时器阶段处理 setTimeout/setInterval 回调;I/O 回调阶段处理系统级操作;轮询阶段等待新I/O事件并执行对应回调;检查阶段执行 setImmediate 注册任务;关闭回调阶段处理 socket 关闭等清理工作。与浏览器事件循环相比,Node.js 新增了 setImmediate 和 process.nextTick 机制,其中 nextTick 拥有最高优先级在当前阶段末尾立即执行,这种分层调度机制使 Node.js 能够高效处理高并发 I/O 操作。
Typora + PicGo上传图片到七牛云2024/02/19
Typora通过PicGo-Core实现自动化图床上传,采用七牛云存储方案。核心配置包含accessKey/secretKey密钥对认证、bucket存储空间指定、CDN域名绑定及区域代码设置,通过JSON配置文件实现多平台参数预设。工作流程实现本地Markdown编辑与云端图片存储无缝衔接,支持批量上传和版本管理。
OSI七层模型和TCP/IP四层模型2024/02/16
OSI七层模型定义网络通信的完整框架,包含物理层至应用层的分层架构,各层明确功能划分。TCP/IP四层模型作为实际应用标准,精简整合OSI层次,形成网络接口层-网络层-传输层-应用层的结构。对比分析两者对应关系:TCP/IP应用层对应OSI应用/表示/会话三层,网络接口层整合数据链路与物理层功能。典型协议示例包括物理层的以太网、网络层的IP协议、传输层的TCP/UDP、应用层的HTTP/FTP等。
接口幂等性2024/01/23
本文阐述接口幂等性的核心概念与实现方案。幂等性指多次执行产生相同结果的特性,在分布式系统中尤为重要。涵盖接口重复提交、消息重试等典型应用场景,详细解析数据库唯一主键、乐观锁、Token令牌、请求序列号四种技术方案,对比各方案优缺点及适用场景,为构建可靠分布式系统提供实践指导。
博客后台应用的CI/CD2024/01/12
本文详细记录了博客后台应用从手动部署到自动化CI/CD的改造过程。通过GitHub Actions实现构建流水线自动化,解决GLIBC版本兼容性问题,完善PM2部署脚本实现服务平滑重启,最终构建完整的持续集成/持续交付工作流。
单页面应用vercel部署刷新404问题2024/01/08
本文解析单页面应用(SPA)在Vercel部署时遇到的404问题及其解决方案。详细阐述SPA路由机制与传统多页面应用的区别,Vercel静态托管服务特性及路由重写规则原理。通过配置vercel.json实现路径重定向,确保任意路由请求均返回index.html,由前端框架接管路由解析,从根本上解决刷新页面404错误。
前端加密2024/01/02
本文深入解析前端加密技术实现方案,详细比较AES、DES等对称加密算法特性及适用场景。通过CryptoJS库实战演示加密流程,涵盖密钥处理、加密模式选择及数据填充方案,提供完整的加密解密函数实现。文章还解析流加密与块加密的核心差异,帮助开发者构建安全可靠的前端数据加密方案。
eggjs + axios 实现node中台上传图片2023/12/27
本文详细介绍了基于eggjs框架实现图片上传中台服务的完整技术方案。客户端部分使用axios配合FormData实现多文件上传,封装了超时机制和统一请求头配置;服务端通过ctx.request.files接收上传文件流,结合fs模块读取文件内容,通过form-data库二次封装请求实现文件转发。
pm2部署nextjs + go应用2023/11/22
本文详细介绍了使用PM2进程管理工具部署Next.js与Go应用的完整流程。首先解析PM2核心功能包括进程守护、负载均衡和日志管理,随后分步骤阐述Go应用在Linux环境下交叉编译、依赖安装与PM2托管运行方案,最后讲解Next.js项目构建优化技巧及PM2集群模式配置要点,为全栈应用部署提供标准化操作指南。
Linux安装Go环境2023/11/20
本文详细介绍在Linux系统中安装Go语言的两种方式:通过yum包管理器快速安装适合简单场景,以及手动安装方式便于版本控制和环境管理。重点讲解手动安装时的环境变量配置要点,包括GOROOT、GOPATH等核心参数设置,确保开发环境正确初始化。
Go换源2023/11/14
本文详细介绍了为Go语言配置国内镜像源的方法。主要包括通过go env命令永久设置GOPROXY代理,以及临时导出环境变量两种方式。适用于Go 1.13及以上版本,操作步骤涵盖Linux、MacOS等系统环境,可有效解决国内开发者模块下载缓慢的问题。
【译】如何使用webpack bundle analyzer2023/03/17
本文深入解析webpack bundle analyzer的可视化分析原理,指导如何通过插件配置生成构建报告,并详解在React、Next.js等框架中的集成方案。文章提供两种配置方式(插件/CLI)实现按需分析,结合具体框架的适配方案,帮助开发者精准定位构建体积问题,实施有效的模块打包优化策略。
JS模块化2023/01/16
本文系统梳理JavaScript模块化演进历程,从IIFE、命名空间到现代模块规范,重点解析CommonJS、AMD和ES Module的核心特性与差异。通过对比同步加载与异步加载机制、值拷贝与引用绑定的区别,揭示不同模块规范在前端工程化中的适用场景,帮助开发者深入理解模块化设计原理并做出合理的技术选型。
source-map介绍2022/04/04
本文系统解析source-map核心功能,详细对比eval、source-map、hidden-source-map等7种生成模式的差异特性。通过分析行映射精度、构建速度、文件体积等维度,说明开发环境推荐使用cheap-module-source-map的原因。结合生产环境实际需求,给出禁用source-map的安全建议及性能优化方案,帮助开发者合理运用调试工具提升工程化效率。
裸眼3d?--网页陀螺仪浅析2021/09/21
本文深入解析DeviceOrientationEvent技术原理,详解alpha/beta/gamma陀螺仪参数计算方式。针对移动端浏览器兼容性问题,对比分析iOS与Android系统的权限处理差异,提出基于https的安全部署方案。通过3D视差效果实现案例,演示如何通过设备旋转数据驱动网页元素空间变换。
常见排序算法汇总2021/08/20
本文系统梳理十种常见排序算法,从比较类与非比较类两大分类切入,解析冒泡排序、快速排序、归并排序等经典算法的核心原理。通过时间复杂度、空间复杂度及稳定性对比,结合JavaScript实现示例,揭示各算法在不同数据规模下的性能差异与适用场景,为开发者的算法选型提供实践指导。
mysql练习题2021/08/12
本文整理了50道MySQL经典练习题,涵盖数据库表结构设计、多表关联查询及复杂业务场景的SQL实现。内容包含完整的建表语句、示例数据,以及针对不同难度级别的查询解决方案,涉及成绩分析、教师课程关联、学生选课统计等实际案例。通过窗口函数、子查询、连接查询等多种技术手段,帮助开发者系统掌握SQL语句优化和复杂数据处理技巧。
git commit规范2021/07/22
规范的git commit message包含header、body和footer三部分。header由type(必须)、scope(可选)和subject(必须)组成,body详细说明改动内容,footer用于不兼容变更或关闭issue。提交类型(type)包含feat新功能、fix错误修复、docs文档修改等11种规范类型,每种类型对应不同的开发场景。示例显示如何规范描述功能新增、BUG修复、文档更新等不同开发场景的commit message。
Ngrok内网穿透2021/07/03
Ngrok内网穿透技术通过建立安全通道实现本地服务外网访问,包含客户端(ngrok)和服务端(ngrokd)架构。原理是通过专用隧道(tunnel)将内网服务映射到公网服务器,生成临时访问地址。免费版配置流程包含注册ngrok.cc平台、开通免费隧道、下载客户端配置ID等步骤,最终实现外网临时访问本地开发环境。