分类为“技术”的页面如下
从 Vibe Coding 到 SDD
在 AI 辅助开发的浪潮中,“Vibe Coding” 虽然听起来很酷,但本质是依靠直觉和 AI 的模糊理解——你在和 AI “对暗号”,能不能跑通全靠运气。
为了让这种开发模式从「玄学」走向「工业级可靠」,SDD(规范驱动开发) 应运而生,而 OpenSpec 正是落地这一理念的开源框架。
如果你熟悉 TDD(测试驱动开发),会发现 SDD 其实是 TDD 思想在 AI 时代的延伸:先定义"什么是正确的",再让 AI 去实现。
Vercel 上的 Next.js 架构:CDN、Serverless 与 RSC 原理
RSC(React Server Components)是一套组件渲染范式:把只用于展示的组件留在服务端执行,结果序列化成 RSC Payload 发到浏览器;只有需要交互的部分才被打包到客户端。常见的一个误区是认为「Server Component 必须直连数据库」,其实 RSC 的能力边界只是「可以在服务端执行 Node API」,数据从数据库来还是从后端服务来完全是架构选择。
HBM4E 详解: SK 海力士凭什么抢跑下一代内存
2026年6月18日,SK海力士正式宣布已向主要客户(以英伟达为主)交付12层堆叠 HBM4E 工程样品,这是目前已知业界最先进的 HBM4E 产品之一。从 JEDEC 发布 HBM4 标准规范(2025年4月)到工程样品落地,只用了一年出头,节奏远超预期。本文深入解析 HBM 家族的技术演进路径、HBM4E 的核心突破点,以及当前 SK 海力士、三星、美光三家的竞争态势。
马斯克的闭环战略:从 Tesla 到 Starship 的完整拼图
回看埃隆·马斯克从电动汽车、火箭发射,一路布局到全球卫星网和深空飞船的整个历程,你会发现这绝不是一个连环创业者"东一榔头西一棒槌"的跨界投机,而是一场长达二十多年、逻辑极其严密的"人类多行星生存"终极闭环战略。
用本地 Stub 解决 Go Proto 冲突
在 Go Monorepo 项目中,引入一个内部 RPC 依赖本该是一件简单的事——加一行 require,配一个 replace,代码编译通过,似乎万事大吉。但服务一启动,直接 panic:
panic: proto: file "validate/validate.proto" is already registered
panic: proto: file "common.proto" has a name conflict over trpc.myservice.common.Team两个 panic,两个不同的 proto namespace 冲突。这是 Go protobuf 生态中一个经典的「传递依赖地狱」问题。
本文记录一次真实问题的根因分析和解决方案:如何通过手写一个本地精简 Stub,以最小代码代价绕过 proto 注册机制,彻底消除冲突。
Pulsar 与 Kafka 核心区别深度解析
Pulsar 是 Apache 旗下的分布式消息队列,由 Yahoo 开源,专为云原生时代设计;Kafka 是 LinkedIn 开源的老牌消息队列,以高吞吐量闻名。两者在架构、设计哲学和适用场景上有显著差异。
google.protobuf.Value 用法与最佳实践
在 Go 后端开发中,google.protobuf.Value 是一个经常被提及但容易被误用的类型。它属于 Protobuf 的 Well-Known Types(内置类型),设计初衷是解决动态类型问题——即在静态的 message 定义中承载任意的 JSON 兼容数据。
本文从 Go 后端开发者的视角出发,系统讲解 Value 的设计理念、Golang 实战用法,以及常见的最佳实践和避坑指南。
一个基于 TradingAgents 框架打造的股票分析 Skill
TradingAgents-CN-Skill 是基于 TradingAgents 框架的中文股票分析 Skill。用户输入股票截图、文字描述或股票代码,Agent 自动完成 4 位分析师 + 2 轮多空辩论 + 风控三方辩论 + 五级评级,输出完整 PDF 报告。
CUDA 并行计算原理解析:GPU 加速的本质
2006 年,NVIDIA 推出了 CUDA(Compute Unified Device Architecture)——一套针对自家 GPU 的并行计算平台和编程模型。在此之前,GPU 的职责单一,仅限于图形渲染;CUDA 的出现,使得开发者可以用熟悉的 C/C++ 语言直接调用 GPU 的算力。
大语言模型训练、深度学习推理、科学计算——这些涉及 TB 级数据处理的任务,底层几乎都运行在 CUDA 之上。本文以中立视角,剖析 CUDA 的核心设计,并透过一个实战例子展示其并行计算模型。
OpenClaw 内置引擎 + 硅基流动免费模型开启向量搜索
上一篇《OpenClaw 的 QMD 记忆引擎:从尝鲜到放弃》里,我因为 2 核 4G 服务器跑不动 QMD 的 3 个本地 LLM 模型,切回了内置引擎。当时以为内置引擎只有关键词搜索——其实不是。
OpenClaw 的 QMD 记忆引擎:从尝鲜到放弃
OpenClaw 有一套内置的 Memory 系统,基于 SQLite 实现,开箱即用。但对于需要更高搜索质量、更广索引范围的场景,OpenClaw 提供了一个更强大的选项——QMD Memory Engine。
本文梳理 QMD 的核心概念、架构原理、配置方法,以及它在 OpenClaw 记忆体系中的实际角色,最后与 OpenViking 方案做对比。
Next.js 照片博客性能优化:回源协议与 HTTP/3 升级
上一篇文章记录了将照片站点从 Vercel 迁移到腾讯云 Lighthouse 的过程。迁移完成后,站点功能正常、性能也有明显提升。但在对 Nginx 日志和响应时间做进一步分析后,发现回源架构和协议层面还有优化空间。
Harness Engineering 入门:让 AI Coding Agent 稳定工作的工程实践
最近在研究 AI Coding Agent 的工程化实践,绕不开两个概念:Harness Engineering 和 OpenSpec。两者都跟 AI 写代码有关,但解决的问题完全不同。写篇文章梳理一下。
OpenViking × OpenClaw:给 AI Agent 装上长期记忆
最近给 OpenClaw 装上了 OpenViking——字节跳动火山引擎开源的 AI Agent 上下文数据库。装的过程很顺,但有一个隐藏代价直到我翻官方文档才意识到,本文把这个关键点讲清楚。
Hugo 博客搜索方案对比与踩坑记录
之前给博客加了搜索功能,调研了几种方案,踩了不少坑,记录一下。
方案对比
| 方案 | 索引大小 | 搜索体验 | 配置复杂度 | 中文支持 |
|---|---|---|---|---|
| Fuse.js | ~50KB | 需手动实现 UI | 中 | 一般 |
| Lunr.js | ~50KB | 需手动实现 UI | 中 | 一般 |
| Pagefind | ~20KB(按需加载) | 自带 UI | 低 | 需配置 |
| Algolia | 免费额度内 OK | 极佳 | 高 | 好 |
Hugo 博客迁移:GitHub Actions + 腾讯云 COS + EdgeOne CDN
本文记录了将 Hugo 博客从 Vercel 迁移到 GitHub Actions + 腾讯云 COS + EdgeOne CDN 的过程,最终实现了增量同步、并发保护、精准缓存清理的自动化部署流水线。整个 workflow 的编写和迭代主要借助 WorkBuddy(Claude Opus 4.6)完成,OpenClaw 做一些终端辅助。
将 Next.js 照片博客从 Vercel 迁移到腾讯云 Lighthouse
本文记录了将基于 exif-photo-blog 的照片站点从 Vercel 全家桶迁移到腾讯云 Lighthouse 自托管的过程,迁移中借助 WorkBuddy(Claude Opus 4.6)和 OpenClaw(MiniMax-2.5)完成代码改造、脚本编写和问题排查。
Superpowers + OpenSpec:AI 编程黄金搭档工作流
AI 编程工具层出不穷,但真正的问题不是"AI 能不能写代码",而是"如何让 AI 按照软件工程的标准流程开发"。2026 年,两个开源项目——Superpowers 和 OpenSpec——形成了一套被业内称为"黄金搭档"的开发范式。
龙虾帮龙虾:用一只 AI 修另一只 AI
在腾讯云轻量服务器上部署 OpenClaw 后,cron 全面报错、配置混乱、内存虚高。让 OpenClaw 自己查了几轮没什么进展,于是换 WorkBuddy 上的 Claude Opus 接手——全程没手动敲一行命令。
一文读懂 AG-UI 协议:AI Agent 与前端交互的新标准
在 AI Agent 应用开发中,如何让前端与后端 Agent 高效通信一直是个难题。AG-UI 协议的出现就是为了解决这个核心问题。本文将详细介绍 AG-UI 是什么、为什么这样设计,以及它与以往流式输出的区别。
什么是 AG-UI ?
AG-UI(Agent User Interaction Protocol)是一个开放、轻量级、基于事件的标准协议,用于规范 AI Agent 与前端应用之间的通信方式。
它由 CopilotKit 提出,来源于 LangGraph、CrewAI 等项目的生产实践经验,旨在解决 Agent 特有的交互模式问题。
AI Coding 能力评估:三个维度看清开发者的 AI 协作水平
对 AI 说"帮我写个用户注册功能",它给出了一套完整的注册、登录、验证码、邮箱验证、数据库迁移脚本——然后你发现,你其实只想要一个接口。
同样是使用 AI Coding,不同开发者之间的表现差异巨大。有人能让 AI 在几分钟内完成一天的工作量,有人却总是在 AI 的错误方向上浪费半天。
本质差异不在于 AI 工具,而在于使用者的能力。 本文从三个维度评估:需求分析与拆解、编程基础与工程实践、AI 协作与交互。
Go 语言 Goroutine 泄露:实战案例分析与排查指南
在 Go 语言开发中,Goroutine 泄露是一个非常隐蔽但致命的问题。它通常发生在一个 Goroutine 被启动后,因为某种逻辑阻塞(比如等待一个永远不会关闭的 Channel 或获取不到锁)而永远无法结束,导致内存逐渐耗尽。
和内存泄漏不同,Goroutine 泄露更难发现——因为 Goroutine 本身占用很小(通常只有几 KB),但成千上万个泄露的 Goroutine 会形成"蚂蚁搬家"效应,最终拖垮整个服务。
本文将分享 4 个实战中非常典型的 Goroutine 泄露案例,并提供排查工具和预防原则。
K8s Service 与 Istio 流量管理
Kubernetes (K8s) 的 Service 是修路并挂牌子,而 Istio 的路由则是专业的交警和智能导航。虽然它们最终都能帮你找到对应的 Pod,但处理流量的方式完全不在一个维度。
Go 1.26 栈内存优化:深入理解 slice 的栈分配与逃逸
Go 语言以高效的垃圾回收(GC)著称,但在追求极致性能的路上,内存分配始终是绕不开的话题。2026年2月发布的 Go 1.26 带来了一个重要的编译器优化:现在可以在更多情况下将 slice 的后备存储分配在栈上,而不是堆上。
这意味着当你在函数内创建一个 slice 时,如果它不会逃逸出函数作用域,Go 1.26 会直接把它放在栈上,无需经过堆分配。这不仅减少了 GC 压力,还提升了缓存局部性,是一个"免费"的性能提升。本文将深入讲解栈与堆的区别、逃逸分析的原理,以及如何写出更高效的 Go 代码。
MCP 完全指南:从协议原理到 Go 服务开发实战
MCP(Model Context Protocol)是 AI 与大模型交互的桥梁,让 AI 能够调用外部工具和资源。本文详细介绍 MCP 的核心概念、三种传输模式的区别,以及如何用 Go 开发自己的 MCP 服务。
MCP(Model Context Protocol,模型上下文协议)是一个标准化协议,旨在增强大语言模型(LLM)与外部应用之间的交互。
Next.js 核心渲染模式解析:SSG、ISR、SSR、CSR
在 Next.js 开发中,选择合适的渲染模式是提升应用性能的关键。本文详细解析 Next.js 的四种核心渲染模式。
什么是渲染模式?
渲染模式决定了页面何时生成 HTML以及由谁来生成。不同的模式在性能、实时性和 SEO 方面各有优劣。
解决部署时新旧构建产物切换导致的静态资源 404
问题现象
在构建部署过程中,访问页面时出现 404 错误,刷新后消失。这不是代码问题,而是部署时新旧构建产物切换导致的资源 404 —— 典型的 Next.js 部署原子性问题。
提升 RAG 召回率的最低成本方案:3 个 Query 改写范式
跑过 RAG 的同学大概率踩过这个坑:Embedding 模型选得很好、向量库也没问题,但召回质量就是不行。
排查一圈下来,原因往往出乎意料——不是 Embedding 不行,而是用户的问题太"糙":
"这个东西怎么用?" ← 缺主语
"为什么我那个又不行了?" ← 全是代词
"性能怎么样?" ← 完全没头没尾
"a 和 b 哪个好?" ← 缺上下文向量数据库检索原理:从 Embedding 到最近邻搜索
在 AI 时代,向量数据库是 RAG(检索增强生成)系统的核心基础设施。但它究竟是如何工作的?为什么能实现"语义搜索"而非传统的关键词匹配?本文用通俗的方式解释其背后的原理。
基于 Elasticsearch 标签的推荐系统设计
背景
在内容平台中,如何让用户快速找到感兴趣的知识是一个核心问题。基于标签的推荐是一种简单而有效的方案——通过分析用户的兴趣标签,与知识内容的标签进行匹配,实现个性化的内容推荐。Elasticsearch 凭借强大的倒排索引和灵活的查询能力,成为构建标签推荐系统的理想选择。本文将介绍一种基于 Elasticsearch 标签的推荐系统设计方案,涵盖标签匹配、用户画像构建、以及推荐算法的实现。
Go 并发进阶:WaitGroup vs ErrGroup 详解
Go 语言提供了丰富的并发原语,本文详细介绍 sync.WaitGroup 和 golang.org/x/sync/errgroup 的区别和使用场景。
简介
Go 的并发模型以 goroutine 和 channel 为核心,但在实际项目中,我们经常需要协调多个 goroutine 的执行。这就涉及到两组常用的工具:
- sync.WaitGroup:Go 标准库,简单同步
- errgroup:Go 扩展库,功能更强大
基于 LangChain 的结构化输出实践
在 AI 应用开发中,让大模型稳定地输出我们想要的格式是一个常见需求。本文介绍如何使用 LangChain 的 Golang 版本 langchaingo 实现 Prompt Template,并结合主流 LLM 的 JSON Mode 实现可靠的结构化输出。
什么是 Prompt Template
Prompt Template 是将提示词模板化的技术,通过占位符动态注入变量,让同一套提示词可以处理不同输入。类似于 Web 开发中的模板引擎。
10 个另辟蹊径的 MySQL 慢查询优化
做业务开发的同学,大概都有过被 MySQL 慢查询折磨的经历——明明索引建了、数据量也不大,接口却总是超时。常规的加索引、加缓存套路固然有效,但有时候换个思路反而能四两拨千斤。本文整理了项目中几个真实慢查询案例的优化思路,部分方案稍显「偏门」,但亲测有效。
MySQL 是如何执行一条 SQL 的
一条看似简单的 SELECT * FROM user WHERE id = 1;,在 MySQL 5.7 内部其实穿越了多层组件、多个内存数据结构、多种日志,才最终把结果返回给你。本文以 MySQL 5.7 为基线(其核心机制在 5.7 / 8.0 之间高度一致,差异点会单独标注),从一名数据库内核工程师的视角,把这条链路完整拆开。
MySQL vs Elasticsearch:使用场景深度解析
在做系统设计时,数据库选型是一个关键决策。MySQL 和 Elasticsearch 是两种不同定位的存储方案,今天结合实际项目经验,系统性地对比一下它们的适用场景。
MySQL 和 Elasticsearch 的定位差异
| 特性 | MySQL | Elasticsearch |
|---|---|---|
| 定位 | 关系型数据库 | 分布式搜索和分析引擎 |
| 数据结构 | 行存储,B+树索引 | 倒排索引,文档型 |
| 擅长 | 事务、关联查询、结构化数据 | 全文搜索、聚合分析、海量数据 |
| 数据模型 | Table(表) | Index(索引),Document(文档) |
MySQL 死锁:根源剖析与线上治理实战
在分布式高并发的后端架构中,数据库死锁(Deadlock)就像一个幽灵。尽管 InnoDB 引擎具备全自动的自救回滚机制,但频繁出现的死锁报错(错误码 1213)不仅会吞噬系统吞吐量,更是代码健壮性不足的显性信号。本文去掉生活化的类比,直接从资源竞争的结构本质出发,层层递进地拆解 MySQL 死锁的底层逻辑。
gRPC HTTP Transcoding 注解详解
背景问题
gRPC 以其高效的二进制序列化(Protocol Buffers)和强大的流式通信能力,已成为微服务间通信的主流选择。但在实际项目中,我们常常面临一个尴尬的局面:
- 内部服务用 gRPC 通信,高性能
- 对外开放 API 需要提供 HTTP/RESTful 接口,方便前端和其他语言调用
- 维护两套服务成本太高
有没有一种方式,可以让 同一个 gRPC 服务同时支持 gRPC 协议和 HTTP/RESTful 调用?
这就是 gRPC HTTP Transcoding 要解决的问题。
DDD 分层架构的依赖关系
DDD(领域驱动设计)架构中,Infrastructure 层可以依赖 Domain 层吗?
答案是:可以,而且在现代 DDD 架构实践中,Infrastructure 依赖 Domain 是推荐的做法。
但这需要区分两种不同的分层架构模型来理解。
深入理解 Redis 事务与原子性
Redis 事务是一组命令的集合,通过 MULTI 和 EXEC 命令来执行。事务中的所有命令都会序列化,按顺序串行执行,不会被其他命令插入。本文深入解析 Redis 事务的特性和原子性问题。
Laravel Redis::throttle 限流组件解析
在调用第三方 API 时,经常会遇到 QPS 限制。如果请求频率超过限制,API 会返回错误。此时我们需要限流 + 重试机制来保护下游服务。
本文详细介绍 Laravel 中 Redis::throttle 的实现原理。需要注意的是:Laravel 的实现实际上是固定窗口计数器,而非标准的令牌桶算法。
本周阅读清单 20191130
Uber 的 Go 指导规范
https://github.com/uber-go/guide/blob/master/style.md使用 JWT 保证服务间通信的安全
https://abekthink.github.io/backend/json-web-token/MySQL 查询对大小写不敏感
https://www.jianshu.com/p/408daf82ac71服务流量限制(漏桶、令牌桶)
https://chai2010.cn/advanced-go-programming-book/ch5-web/ch5-06-ratelimit.html为什么推荐 InnoDB 引擎使用自增主键?
https://blog.csdn.net/zheng0518/article/details/76302167MySQL 唯一性索引与 NULL 字段
https://yemengying.com/2017/05/18/mysql-unique-key-null/
本周阅读清单 20190808
PHP 正则 preg_match 匹配长度限制
https://learnku.com/articles/7193/php-regular-preg-match-matching-length-limit深悉正则(pcre)最大回溯/递归限制
http://www.laruence.com/2010/06/08/1579.htmlRedis 的内存优化
https://cachecloud.github.io/2017/02/16/Redis内存优化Content-Disposition 的 filename 与 filename 区别*
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-DispositionRedis Scan 命令原理
https://segmentfault.com/a/1190000018218584Redis 字典的遍历 dictScan 算法
http://www.langdebuqing.com/redis%20notebook/redis源码解读:字典的遍历dictScan.html
Laravel 中为何不使用 blpop 取队列?
Redis 的 list 数据结构常用来做消息队列,通常使用的命令有 lpop/rpop ,还有带阻塞版的 blpop/brpop 等。blpop 的优点是避免一直轮询占用资源,而且支持多个列表作为参数并按照顺序弹出数据,如 blpop high low 30,可以更方便实现队列的优先级。
Laravel 中间件原理
Laravel 的中间件机制提供了一种管道的方式,每个 HTTP 请求经过一个又一个中间件进行过滤,Laravel 内置了很多中间件,比如 CSRF 机制,身份认证,Cookie 加密,设置 Cookie 等等。
深入理解 PHP 写时复制机制
一个例子:
<?php
$foo = 1;
$bar = $foo;
echo $foo + $bar;变量 $foo 赋值给变量 $bar,这两个变量具有相同的值,没有必要新申请内存空间,他们可以共享同一块内存。在很多场景下 PHP 的 COW 对内存进行优化。比如:变量的多次赋值、函数参数传递,并在函数体内修改实参等。
深入理解 TCP 三次握手
TCP 三次握手是建立可靠连接的基础。本文从握手过程、序列号机制、安全性等角度,深入分析为什么 TCP 需要三次握手而不是两次,以及围绕这个过程的各种边界情况和攻击手段。
软件设计:先整体后细节
《黑客与画家》(Hackers and Painters)一书作者保罗·格雷厄姆(Paul Graham)提出了一个重要观点:如果一开始就纠结细节而看不到整体,往往花费大量时间却达不到预期效果。正确的做法是先有一个整体的轮廓,再逐步完善各个部分。
Laravel Redis 队列原理分析
使用 Supervisor 开启多个进程处理队列任务时,是否会导致重复消费同一个任务?本文从源码角度分析 Laravel Redis 队列的工作原理。
Laravel 队列实践指南
使用 Laravel 消息队列处理异步任务,Redis 作为队列驱动,Supervisor 监控进程异常中断并自动重启,这是 Laravel 处理队列任务的标准配置。但在生产环境中,为了保证系统可靠性,还需要注意以下几点。
Golang 值传递与引用传递深度解析
在 Golang 中,函数之间传递变量时总是以值的方式传递的。无论是 int、string、bool、array 这样的内置类型,还是 slice、map、channel 这样的引用类型,在函数间传递变量时,都是以值的方式传递。
使用 Docker 搭建 Laravel 本地开发环境
Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,但 Docker 相比虚拟机占用体积更小、启动更快,是更好的选择。
登录安全:重放攻击与防御策略
现在的应用系统中,大部分密码存储都是采用 md5 加密后存储,常用的登录基本流程如下:
- 前端 web 页面用户输入账号、密码,点击登录
- 请求提交之前,web 端首先通过客户端脚本对密码原文进行 md5 加密
- 提交账号、md5 之后的密码
- 后端验证账号与密码是否与数据库中的一致
这种流程看似安全,但实际上存在重放攻击风险!
使用 Supervisor 管理 Laravel 队列进程
Supervisor 是一个 Python 写的进程管理工具,有时一个进程需要在后台运行,并且意外挂掉后能够自动重启,就需要这么一管理进程的工具。在 Laravel 开发中,也经常使用到队列监听,可以配合 Supervisor 来管理 Laravel 队列进程。
Nginx 基于 User-Agent 实现多环境测试
在团队开发中,经常会遇到多个需求同时需要测试的情况。假设只有一个测试服务器,如何让多个开发人员同时测试不同的 git 分支?
一个解决方案是:基于 User-Agent 进行分流。
Laravel 分割 routes.php 路由文件的一种方式
Laravel 的路由功能很强大,路由规则默认都定义在 routes.php 文件中,但是随着项目越来越大,我们需要的定义的规则越来越多,如果几百上千个路由都定义在一个文件中,如何去维护?如果不同的人都在同一个文件定义路由,这就造成了冲突,因此我们有必要将 routes.php 文件分割成多个文件,可以按照功能模块来划分。
PHP 7 安装和开启 OPcache
鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启OPcache:
记得启用Zend OPcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快
优化 Laravel 网站打开速度
Laravel是一个功能强大的框架,组件很多,代码也很庞大,它的易用方便是牺牲了性能的,即便如此它仍然是一个优秀的框架,但在正式环境下要做好优化提升网站的打开速度。
Nginx SSI 使用指南
这是最早期的 SSR 方式之一——服务端在返回 HTML 前完成页面组装,客户端直接拿到完整页面,而非空壳再客户端渲染。
相信很多人在浏览网页时都遇到过这样的情况:本地在开发环境运行正常的页面,部署到测试环境后却发现部分内容缺失。比如导航栏、页脚、公用组件等内容本地看不到。
如果你遇到这样的情况,先检查一下页面源码中是否有类似这样的代码:
<!--#include virtual="/new/ssi/script.html"-->这就对了——这就是 SSI(Server Side Include)在起作用。本地没有配置 SSI,所以包含的内容没有渲染出来。
Redis 严重安全漏洞 CVE-2025-49844 解析
2025年10月3日,Redis 官方发布了一个严重的安全公告,披露了一个关键的远程代码执行(RCE)漏洞 —— CVE-2025-49844,也被称为 “RediShell”。该漏洞 CVSS 评分高达 10.0(严重),影响所有支持 Lua 脚本的 Redis 版本。
MySQL 使用 CRC32 做索引优化查询
给字符串类型的字段建立索引效率不高,但如果需要经常查询这个字段,可以通过 CRC32 转换来提高查询效率。
假设有一个字符串字段 sys_trans_id,需要频繁查询。可以新增一个整型字段 sys_trans_id_crc32 来存储 CRC32 的值,并在这个字段上建立索引。
PHP进程管理:pcntl_fork的原理与实战
在PHP中,除了传统的同步执行方式,我们还可以通过fork(分叉)进程来实现并行处理。本文将详细介绍PHP中进程管理的基础知识,特别是pcntl_fork函数的用法与背后的原理。
什么是Fork?
Fork是Unix/Linux系统中创建进程的基本方式。当一个进程调用fork()时,操作系统会复制当前进程(父进程),创建一个新的进程(子进程)。这两个进程将并行执行后续的代码。
PHP PDO prepare 预处理详解:如何安全地防止 SQL 注入
PDO(PHP Data Objects)是 PHP 数据库操作的统一接口,提供了预处理语句(Prepared Statements)功能,是防止 SQL 注入的最佳实践。
深入理解 PHP 内存管理:栈、堆与 zval 机制
PHP 是一种脚本语言,在运行时会将代码加载到内存中执行。理解 PHP 的内存管理机制,对于写出高效的 PHP 代码至关重要。本文将深入探讨 PHP 中的栈(Stack)、堆(Heap)以及 zval 内存管理机制。
Linux发明人Linus Torvalds自传摘录
除了程序员,大概很少人知道Linux操作系统。
它的发明者Linus Torvalds,知道的人就更少了。
他本人也很低调,深居简出,很少出席公众场合或接受媒体采访,通常只在专业开发者的邮件列表中发言。提起他的名字,人们的第一反应往往是"哦,传说中那个22岁就发明Linux的芬兰大学生……",其他就一片空白了。
他的自传《Just For Fun》出版于十年前(2001年),已经几乎被遗忘了。
Go map 底层换用 Swiss Table 性能提升近 50%
在 2024 年 11 月 5 日的 Go compiler and runtime meeting notes 中,我们注意到一个重要信息:来自字节的一位工程师在两年多前提出的「使用 Swiss table 重新实现 Go map」的建议即将落地,该 issue 已经被纳入 Go 1.24 里程碑。