共 112 篇文章
软件设计:先整体后细节
《黑客与画家》(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 里程碑。