技术博客文章

Vue 3 工程提效:用 VueUse 组合式工具库落地暗色、本地存储与防抖

为什么直接引入 VueUse VueUse 是一组 SSR 友好的组合式函数集合,覆盖浏览器、传感器、网络、状态等上百个场景。它不绑定框架实现细节,按需引入,能替掉大量样板代码。 1 useDark 一行暗色模式 useDark 自动在 ...

技术test12026-10-0810

Rust 智能指针实战:用 Rc 与 RefCell 处理单线程共享可变状态

为什么需要 Rc<RefCell<T>> 借用检查器默认禁止同一份数据出现多个可变引用。在单线程里,我们确实想让多个持有者共享并修改同一份状态(比如事件总线、DOM 树节点),这时就用 Rc 做共享所有权、用 RefCell 把借用检查推迟...

技术test12026-10-0810

React useRef 实战:DOM 引用、可变值缓存与规避闭包陈旧值

useRef 到底解决了什么问题 useState 存的值每次更新都会触发组件重渲染,而有些值我们只是想“记下来”——比如某个 DOM 节点、定时器的句柄、上一次渲染时的 props。useRef 返回的对象在整个组件生命周期里保持同一个引...

技术test12026-10-0811

Laravel 全文搜索实战:用 Scout 与 Meilisearch 给模型加毫秒级检索

为什么选 Meilisearch Laravel Scout 把“搜索”抽象成模型上的一个可搜索接口,底层可接数据库 like、Algolia 或 Meilisearch。Meilisearch 是开源、开箱即用的本地搜索引擎,毫秒级返回,...

技术test12026-10-089

Go 错误处理进阶:sentinel errors、%w 包装与 errors.Is/As 精准判定

Go 1.13 之后的错误哲学 Go 不靠异常机制,而是把错误当普通值返回。问题在于早年的错误只能比较字符串,一旦底层加了包装就再也比不中。Go 1.13 引入 %w 与 errors.Is/As 之后,错误链才真正可用。 1 定义 se...

技术test12026-10-0810

Vue 3 渲染函数实战:用 h() 与 JSX 写模板表达不出的动态 UI

模板不是万能的 Vue 单文件组件用模板写结构,直观、可读,日常开发几乎都用它。但有些场景模板会显得笨拙:标签名、属性名、子节点数量在运行时才确定;要根据一份配置数组动态拼出完全不同的结构;要做高阶组件把传入的默认插槽包一层。这类"结构本身...

技术test12026-10-0711

Rust 异步共享状态实战:用 tokio::sync 的 Mutex、RwLock 与 broadcast 协作多任务

为什么不能用标准库的同步原语 在标准库里,std::sync::Mutex 的 lock 会阻塞当前线程。但在 tokio 的异步运行时里,一个任务阻塞线程就等于卡住整个线程上调度的一批任务,代价很高。tokio::sync 提供了一套可"...

技术test12026-10-079

React 用 IntersectionObserver 写 useInView 与无限滚动:列表滚动到底自动加载

为什么不直接监听 scroll 事件 做无限滚动最常见的写法是监听 window 的 scroll 事件,然后在回调里算 scrollTop、clientHeight、scrollHeight 判断有没有到底。这个做法有三个麻烦:回调触发极...

技术test12026-10-078

Laravel 用 Cache::lock 实现分布式锁:拦截并发重复提交与超卖

单机锁在多实例下会失效 PHP 进程内用变量做标记来防并发,在 FPM 单进程模型下勉强够用,但一旦上了多台应用服务器或者 Swoole/Octane 常驻内存,进程间的标记互不感知,竞态立刻出现。下单、扣库存、发券这类"同一动作不能被并发...

技术test12026-10-0711

Go 无锁并发实战:用 sync/atomic 与 atomic.Pointer 实现计数器与配置热更新

互斥锁不是并发的唯一答案 一说到共享状态,很多人的第一反应是加 sync.Mutex。锁能解决所有竞态,但代价是串行化:同一时刻只有一个 goroutine 能进临界区,高并发下容易成为瓶颈。当操作只是"读一个数、加一、写回"这种简单动作时...

技术test12026-10-079