自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(686)
  • 收藏
  • 关注

原创 在 Flutter + GetX 中实现 Design Tokens 的完整方案

根据论文中的分层管理结构(基础Token → 语义Token → 组件Token),在 Flutter 中应建立对应的三层架构:根据论文中"动态主题支持:只需修改Token值,即可实现全局主题切换"的理念,使用 GetX 实现主题状态管理:根据论文中"多品牌场景:创建品牌扩展层Token"的建议,实现品牌定制功能:根据论文中"组件Token:组件级变量"的理念,在 UI 组件中正确使用 Design Tokens:在 中配置资

2025-11-24 16:04:02 161

原创 巧妙浏览器事件监听API:addEventListener的第三个参数

优先使用配置对象形式,替代传统布尔值,增强代码可读性移动端滚动相关事件必加,提升滚动流畅度一次性操作(如表单提交、引导弹窗)用once: true,简化监听器管理组件化开发中,用signal实现监听器批量清理,避免内存泄漏事件委托场景中,合理利用capture阶段优化事件响应顺序addEventListener的第三个参数,从简单的布尔值进化为功能丰富的配置对象,背后是Web标准对开发效率与性能优化的不断追求。很多时候,我们并非不会用API,而是忽略了它的进阶能力。合理运用capture。

2025-11-24 16:03:42 517

原创 包及其导入

Scala 包的定义必须与文件系统目录结构一致(否则编译器无法找到代码),这一点和 Java 完全相同。通过package关键字声明包,放在文件最顶部,一个文件只能声明一个 “主包”(但可嵌套子包)。scala。

2025-11-24 15:39:59 344

原创 uniapp 项目接入 sentry监控

本项目使用进行错误监控和上报,支持 H5、小程序、APP 多平台。Sentry 会自动捕获未处理的异常,同时提供手动上报接口用于业务错误和异常。在.env文件中配置在中配置各环境的确保中调用了确保中配置了onError钩子确保用户登录后调用了。

2025-11-24 15:38:23 616

原创 使用Highcharts创建3D环形图

透明度:利用为每个扇形生成半透明色,视觉更柔和。两段引导线:启用两段式;控制第二段长度;控制第一段拐点位置(可以传百分比字符串);控制线条颜色与粗细。居中与图例:,确保图例与图形协调摆放。Highcharts 的 3D 环形图兼具表现力与稳定性。生产落地的关键在于:正确初始化 3D 模块、保证容器尺寸稳定、强制图心与半径、为数据点绑定颜色、合理管理生命周期与更新流程。结合本文的实战代码与优化建议,你可以快速在任意页面构建高质量的 3D Donut。

2025-11-24 15:36:31 854

原创 Generator 在 JavaScript 中的应用与优势

Generator 天生是迭代器生成器,无需手动实现next()方法,即可轻松构建复杂的遍历逻辑(如无限序列、条件遍历、嵌套结构扁平化等)。

2025-11-24 15:35:33 359

原创 Vue3 组合式函数:能否作为模块级全局状态管理?

创建文件,作为全局状态模块:javascript运行// useGlobalUser.js(模块级全局状态组合式函数) import { ref, computed } from 'vue';// 模块作用域的响应式状态:闭包缓存,仅初始化一次 const user = ref(null);// 全局用户状态(ref 确保基本类型响应式) // 计算属性:派生状态(是否登录) const isLogin = computed(() =>!!

2025-11-24 15:35:02 620

原创 React 自定义 Hook:能否作为模块级全局状态管理?

模块作用域和React Hook 的执行机制。普通自定义 Hook(如useCounter)通常是 “组件私有” 的,因为它们的useState是在组件调用 Hook 时初始化的,每个组件调用一次 Hook,就会创建一个独立的状态。而全局状态自定义 Hook的核心差异是:将useState的初始化逻辑,通过模块作用域 “提升” 到了模块层面,使得所有组件调用 Hook 时,复用同一个useState的结果。

2025-11-24 15:33:59 697

原创 从随机排序到公平洗牌:JavaScript随机抽取问题的优化之路

避免使用Array.sort(() => 0.5 - Math.random()):这种方法随机性差,性能低。优先使用Fisher-Yates算法:它能提供均匀的随机性和高效的性能(O(n)时间复杂度)。注意数组副本:在洗牌时应该创建数组副本,避免修改原数组。根据场景选择随机源:普通场景用Math.random(),加密场景用crypto.getRandomValues()。大数据用蓄水池抽样:从海量数据中随机抽取少量元素时,蓄水池抽样算法更高效。

2025-11-24 15:32:51 474

原创 Kuikly Compose vs. Jetpack Compose:一套代码实现真正的全平台原生渲染

Kuikly Compose 让 Compose 的优雅语法真正突破了 Android 的边界,为开发者开启了一扇通往"Kotlin 全栈跨端"的大门。无论你是现有的 Compose 开发者想要扩展技能边界,还是正在为多平台开发的技术选型而苦恼,Kuikly Compose 都值得你深入了解和尝试。

2025-11-24 15:31:13 462

原创 vue3 的专属二维码组件 vue3-next-qrcode 迎来 4.0.0 版本

在现代 Web 应用开发中,二维码已经成为不可或缺的功能之一。无论是分享链接、支付场景还是身份验证,二维码都扮演着重要角色。今天给大家介绍一个功能强大的 Vue 3 二维码组件库 ——,它不仅支持基础的二维码生成,还提供了 LOGO、GIF 背景、SSR 等高级特性。

2025-11-23 16:01:44 534

原创 浅谈Tree Shaking

(摇树优化)是一种通过静态分析消除 JavaScript 中未使用代码(Dead Code)的优化技术。想象一棵树(代码库): 🌳 整棵树 = 完整的代码库 🍂 枯叶 = 未使用的代码 🤝 摇树 = 构建工具分析 ✨ 结果 = 只保留需要的代码。

2025-11-23 16:01:10 265

原创 掌握 JS 中迭代器的未来用法

(原型方法):让开发者可以像操作数组一样直接在迭代器实例上链式调用方法,提高代码简洁性和内存效率(静态方法):提供了创建和组合迭代序列的工具方法,增强了迭代器的创建和操作能力这些提案共同丰富了 JavaScript 的迭代器生态,使得处理各种数据结构和数据流变得更加高效和便捷。代码更简洁:直接在迭代器上链式调用方法,使代码更加清晰易读内存效率更高:避免了不必要的数组转换,特别适合处理大型数据集迭代器 API 标准化:提供了一套统一的 API 来操作各种迭代器与函数式编程范式更契合。

2025-11-23 15:59:17 257

原创 使用 LocalStorage 实现本地待办事项(To-Do)列表

是 Web Storage API 的一部分,用于在浏览器中长期存储数据。持久性:除非用户手动清除,否则数据不会过期。键值对存储:只能存储字符串类型的数据(key 和 value 都是字符串)。同源策略:只有同协议、同域名、同端口的页面才能共享同一个。由于只能存字符串,因此我们通常会配合和来存储和读取对象或数组。的基本用法:存储字符串、配合JSON处理复杂数据;事件委托:高效处理动态生成元素的交互;函数式编程思想:封装细节、关注输入输出;DOM 操作优化:批量更新而非逐个操作。

2025-11-23 15:58:02 356

原创 浅入理解流式SSR的性能收益与工作原理

流式 SSR(Streaming Server-Side Rendering)是一种将服务端渲染和流式传输结合起来的技术。与传统的 SSR 不同,流式 SSR 可以在服务端渲染的同时,逐步将渲染结果传输到客户端,实现页面的渐进式展示。在流式 SSR 中,服务端会根据客户端的请求,逐步生成页面内容,并将它们作为流式数据流式传输到客户端。客户端可以在接收到一部分数据后,就开始逐步显示页面,而不需要等待整个页面渲染完成。这种方式可以有效提高页面的加载速度和用户体验。(流式 SSR 的页面加载过程)

2025-11-23 15:56:51 709

原创 谈谈最进学习(低延迟)直播项目的坎坷与收获

协议选型无优劣,适配场景是关键: 互动场景选 WebRTC,低延迟直播选 SRT/RTMP,跨平台兼容选 LL-HLS;开源工具的力量:SRS 这类成熟框架节省了底层开发成本,聚焦业务逻辑即可快速落地;实践出真知:从手动封装组件到踩坑 SRS 配置,每一步试错都加深了对直播技术栈的理解。

2025-11-23 15:54:46 443

原创 纯Monorepo vs 混合式Monorepo

纯 Monorepo 是 “高效联动派”:适合高频改公共库、小团队协作,用 “一次提交” 省时间;混合式 Monorepo 是 “稳定灵活派”:适合分工明确、公共库稳定的场景,日常稳定 + 紧急联动两不误。不用纠结 “必须选哪种”,小团队可以先从纯 Monorepo 起步,团队变大分工明确后,过渡到混合式;也可以直接用混合式,兼顾稳定和灵活 —— 核心是让模式适配你的开发节奏~

2025-11-23 15:54:17 390

原创 JS 引擎赛道中的 Rust 角色

本文将深入探讨 Rust 在 JavaScript 引擎赛道中的角色,分析当前主要的 Rust 实现的 JavaScript 引擎,以及它们如何影响未来 JavaScript 的执行效率和安全性。例如,类似 Tauri 这样的基于 Rust 的桌面应用框架,通过使用 Rust 和 Webview2,成功解决了 Electron 的包体积大、内存占用高的问题 4。与传统的基于锁的并发模型相比,Rust 的所有权系统提供了更细粒度的并发控制,减少了死锁和资源争用的可能性。

2025-11-23 15:52:14 544

原创 Vue3 自定义指令深度解析:从基础到高级应用的完整指南

自定义指令是 Vue.js 中一个强大而灵活的特性,它允许开发者直接对 DOM 元素进行底层操作。Vue3 在保留自定义指令核心概念的同时,对其 API 进行了调整和优化,使其更符合组合式 API 的设计理念。本文将深入探讨 Vue3 中自定义指令的定义方式、生命周期钩子、使用场景和最佳实践,通过丰富的代码示例和清晰的流程图,帮助你彻底掌握这一重要特性。等),Vue 还允许我们注册自定义指令,用于对普通 DOM 元素进行底层操作。全局指令在整个 Vue 应用中都可用。在 Vue.js 中,指令是带有。

2025-11-23 15:51:06 391

原创 [特殊字符] 阿里云 Linux 服务器 Let‘s Encrypt 免费 SSL 证书完整部署指南

步骤命令/操作状态1. 安装 Nginx✅2. 配置站点创建✅3. 安装 Certbot✅4. 申请证书✅5. 设置自动续期+ 添加任务✅6. 测试续期✅🎉完成!你的网站现在拥有免费、自动更新的 HTTPS 加密。

2025-11-23 15:50:29 410

原创 STM32从零实战:深入理解RCC时钟与按键控制LED的底层原理

时钟是基础:理解RCC是掌握STM32的第一步模块化设计:良好的代码结构让后续开发事半功倍状态机思维:复杂的逻辑用状态机分解会变得清晰调试能力:学会用简单方法验证硬件工作状态。

2025-11-21 14:27:00 279

原创 Nacos 配置刷新踩坑:复杂嵌套 Map 为什么刷不上?

这个问题其实挺常见的,特别是现在微服务架构里,配置都是动态管理的。如果你的配置结构比较复杂,又要支持热更新,基本都会遇到类似的坑。我们这个方案在生产环境跑了几个月了,还挺稳定的。每次在 Nacos 里调整库存预警规则,都能立即生效,也没出过什么幺蛾子。不过说实话,这个的写法还是有点繁琐的,特别是嵌套层级深了以后。如果你有更优雅的方案,欢迎交流。对了,还有一点忘了说。如果你的配置类是在其他 Bean 里通过@Autowired注入使用的,那个 Bean 最好也加上,不然它持有的可能还是旧的配置实例。

2025-11-21 14:26:30 633

原创 Groovy:告别 Java 痛点,纵享丝滑编程

Groovy 以动态特性和函数式编程风格著称,常被视为 Java 的“动态增强版”。它完全兼容 Java 语法,又在此基础上简化了冗余写法、补充了强大特性,轻松解决 Java 开发中的诸多痛点。本文将从 7 大核心实战场景出发,带你快速掌握 Groovy 精髓,迈入高效编程的大门。在 Java 开发中, 堪称程序员的“噩梦”。为避免空指针,我们往往需要编写大量 或 这样的判断分支,代码冗余且繁琐。而 Groovy 通过 安全导航操作符(?.) 和 空值默认操作符(?:) ,让判空操作变得极为简洁,无需冗

2025-11-21 14:25:59 346

原创 RustFS会取代MinIO吗?深度对比与迁移策略全解析

在2025年全球存储性能基准测试中,RustFS与MinIO在相同硬件环境下展开正面较量。MinIO采用的AGPLv3许可证存在“传染性”风险,衍生作品可能需要开源。与MinIO基于Go语言不同,RustFS利用Rust语言的​。这种设计彻底避免了Go语言GC导致的性能抖动,使RustFS在7×24小时持续高负载下保持稳定性能。RustFS采用“元数据集群+数据存储集群”分离架构,通过双层Raft组实现高性能分布式存储。RustFS对MinIO的挑战,不是简单的“替代”关系,而是。

2025-11-21 14:24:54 881

原创 kotlin 中 return@key 用法

是 Kotlin 特有的语法;它表示“从名为find的 lambda 表达式中返回”;避免与外层函数混淆,是一种显式的局部返回方式;如果你在其他地方看到类似写法如return@map,也是同样的道理。

2025-11-21 14:24:00 347

原创 Dubbo入门实战:从零搭建分布式服务调用

在api模块中定义接口:注意:所有在网络上传输的对象都必须实现Serializable,否则会报序列化异常。Dubbo上手不难,理解核心概念、配好注册中心、掌握Provider和Consumer的配置就能跑起来了。实际使用中要根据业务场景选择合适的负载均衡和容错策略,生产环境务必做好监控。

2025-11-21 14:23:21 827

原创 SpringBoot 内置定时任务

在任意的@Component或@Service类中,使用@Scheduled注解定义定时任务,传入 Cron 表达式定义执行规则。@Component public class MyScheduledTasks { // 每两小时运行一次 @Scheduled(cron = "0 0 0/2 * *?") public void runTask() { System.out.println("任务执行了!当前时间:" + new java.util.Date());

2025-11-21 14:22:46 360

原创 [特殊字符] AIGC 时代下的轻量级数据库实践:用 SQLite + LLM 实现“自然语言查数据”

技术角色SQLite轻量、独立、可靠的本地数据库AIGC(LLM)将自然语言翻译为 SQL 的“智能代理”连接人与数据库的桥梁🚀一句话概括“你负责思考问题,AI 负责写 SQL,SQLite 负责存数据。从此,每个人都是自己的“数据库工程师”。

2025-11-21 14:22:12 385

原创 深入浅出 SQL 窗口函数

的核心价值在于「分组排序不聚合」,它解决了传统GROUP BY无法实现的 “组内精细排序” 需求。把数据拆分成独立窗口;ORDER BY决定窗口内记录的顺序;给窗口内记录分配唯一连续序号。

2025-11-21 14:21:34 747

原创 Linux 信号(Signals)机制详解:如何优雅地关闭你的进程?

信号是发送给进程的异步通知,用于通知进程发生了某种事件。每个信号都有一个唯一的数字标识符和一个描述性的名称。信号可以由内核、其他进程或进程自身发送。我们可以通过注册信号处理函数来改变信号的默认行为。这允许我们在收到特定信号时执行自定义代码。通过本教程,我们深入探讨了Linux信号机制以及如何实现进程的优雅关闭。理解信号基础:信号是异步事件通知机制,用于进程间通信和控制。自定义信号处理:通过sigaction函数注册自定义信号处理函数,改变信号的默认行为。优雅关闭模式。

2025-11-21 14:21:00 509

原创 年轻人的第一个 GO 桌面应用:用 Wails 做个学习搭子计时器

【代码】年轻人的第一个 GO 桌面应用:用 Wails 做个学习搭子计时器。

2025-11-20 16:00:06 272

原创 【URP】Unity[RendererFeatures]渲染对象RenderObjects

RenderObjects是URP提供的RendererFeature之一,允许开发者在不编写代码的情况下对渲染管线进行定制。它通过配置参数实现选择性渲染特定层级的物体、控制渲染顺序、重载材质或渲染状态等功能57。

2025-11-20 15:56:43 840

原创 揭秘 JS 继承的 “戏精家族” :原型、原型链与 new

各位 前端er 朋友们,要搞懂 JS 的面向对象和继承逻辑,绕不开原型(prototype)、隐式原型(proto)、原型链这三个核心概念,而new 关键字正是串联起它们、实现实例创建的关键“桥梁”。看到这里就已经觉得很绕了吧,没错。But!这些概念看似抽象,实则是 JS 引擎优化属性复用、实现继承的底层设计——就像家族里各有分工的成员,各司其职又紧密配合,才撑起了 JS 继承的 “大戏”。prototype是每个 “家族长辈”(函数)的 “祖传仓库”,共享属性方法全在这;__proto__

2025-11-20 15:56:06 743

原创 react-grid-layout 原理拆解:布局引擎、拖拽系统与响应式设计

是 React 生态中一个非常流行的、用于构建网格布局的库。它的强大之处在于用简洁的 API 实现了复杂的布局管理。

2025-11-20 15:55:35 465

原创 你的图标还在用 PNG?看完这篇你就会换成 iconfont

前端工程师遇到图标的时候通常会有两个反应:一是“干脆像素党一样把 PNG 全都搞定吧”,二是“又要改图啦,心累”。用 iconfont 的好处是把图标交给“图标管理平台”去维护:你只需把需要的 icon 加到项目里,更新图标只要改 class 或 symbol,不用把整个雪碧图砸了重做。特点:兼容 IE6+ 和现代浏览器,像字体一样使用,大小颜色好调整,但类名语义不明显(直接写编码不太直观)。特点:用类名表示某个图标,语义更直观,兼容 IE8+,本质仍是字体(单色为主)。时不敢随便替换(怕别处也在用);

2025-11-20 15:51:25 574

原创 前端工程化核心知识全面解析

前端工程化是一个不断演进的技术领域,从早期的任务运行器到现代的模块化打包工具,从集中式版本控制到分布式协作开发,每一次技术变革都带来了开发效率和项目质量的显著提升。掌握这些核心知识,能够帮助我们在实际项目中做出更合理的技术选型,构建更健壮的前端应用架构。随着技术的不断发展,前端工程化将继续向着更智能、更高效的方向演进,但扎实的基础知识和核心原理将始终是我们应对技术变化的坚实基础。

2025-11-20 15:50:26 787

原创 Node.js + puppeteer + chrome 环境部署至linux

2,部署一下 puppeteer 的node服务。这里就看看什么版本的 puppeteer 了。本人用的新版本的 "puppeteer": "^24.29.1" node > 18 即可。注意:本人的服务器是cent os7(下面两种方案都可以用, 方案二是因为运维的服务器, 系统不支持方案一, 因此提供docker 的方案)本文采用第二条路就是,单独安装运行chrome服务, 然后,用puppeteer链接本地的chrome服务。如果失败了,配置镜像什么的就好了。有如上的信息,恭喜你,已经安装成功了!

2025-11-20 15:45:06 281

原创 处理耗时较长的任务笔记

以上代码展示了解决前端“长任务”的四个维度的工程化实现。让出主线程 (Yielding): JS 是单线程的,必须通过TimeSlicer(时间分片) 将大任务切碎,给 UI 渲染留出呼吸的时间。并行计算 (Parallelism): 使用WorkerPool将不涉及 DOM 的纯算法逻辑移到另一个线程。优先级调度 (Scheduling): 并不是所有任务都一样重要。确保用户交互(点击、输入)永远优先于数据处理。按需渲染 (Lazy Rendering)

2025-11-20 15:44:34 220

原创 前端高性能优化技术详解

虚拟滚动是一种优化长列表渲染性能的技术。传统的列表渲染会一次性渲染所有数据项,即使它们不在可视区域内,这会导致大量的DOM节点创建和内存占用。虚拟滚动只渲染当前可视区域内的数据项,以及少量缓冲区的数据项,从而大幅减少DOM节点数量,显著提升渲染性能。时间切片是一种将长时间运行的任务分解为多个小任务片段执行的技术,每个片段执行时间很短,不会阻塞浏览器主线程,从而保证页面的响应性和流畅性。这是React Fiber架构的核心思想之一。

2025-11-20 15:42:14 675

原创 JavaScript中的LHS和RHS查询机制详解

LHS查询发生在需要为变量赋值的场景,其目标是找到变量的存储位置。例如在表达式a = 2;中,引擎会对a进行LHS查询,目的是找到可以存储值2的位置。如果a尚未被声明,且当前处于非严格模式,JavaScript引擎会自动在全局作用域中创建一个名为a的变量并赋值。这种机制虽然提供了一定的灵活性,但也可能导致隐式全局变量污染,增加代码维护难度。相比之下,RHS查询的目的是获取变量的值。例如在表达式中,引擎会对a进行RHS查询,以获取其当前值。如果a未被声明,RHS查询失败时,在非严格模式下会返回。

2025-11-20 15:41:16 329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除