FFmpeg 参数顺序的隐藏陷阱
AI 建议我调整 FFmpeg 参数顺序来解决 OOM,结果对「首帧」毫无作用。但我却意外发现,这个优化对于「非首帧」有着 54 倍 的性能天差地别。 0x01 前言在排查生产环境的一个 FFmpeg 截帧 OOM(内存溢出)问题时,经历了一段有趣的「反转」剧情。 ...
AI 建议我调整 FFmpeg 参数顺序来解决 OOM,结果对「首帧」毫无作用。但我却意外发现,这个优化对于「非首帧」有着 54 倍 的性能天差地别。 0x01 前言在排查生产环境的一个 FFmpeg 截帧 OOM(内存溢出)问题时,经历了一段有趣的「反转」剧情。 ...

在构建后台管理系统或运维平台时,「实时日志查看」是一个非常高频的需求。传统的做法往往是前端通过 setInterval 每隔几秒轮询一次接口,这种方式不仅时效性差,而且对服务器造成了大量无效请求。 ...
在算法面试中,二分查找(Binary Search) 是一个非常重要的知识点。许多人在实际应用时会遇到边界处理的问题,导致程序出现 bug。本文将总结二分查找的通用模型,并分析常见错误。 ...
数组求和问题(N-Sum)是算法面试中经久不衰的经典题型。从最基础的 Two Sum 到进阶的 kSum,其核心本质往往殊途同归。本文将以资深工程师的视角,系统梳理 2Sum、3Sum、3Sum Closest 及 4Sum 的解题演进之路,探讨如何通过双指针与剪枝策略将时间复杂度压榨至极限。 ...
0x01 问题复现最近在 Code Review 时发现了一个有趣的案例。代码逻辑清晰,测试也覆盖了主要分支,但在生产环境中 errors.Is 的行为与预期不符: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 type Error struct { ErrorCode int Message string } func (e Error) Error() string { return e.Message } var ErrTest = Error{ErrorCode: 100301, Message: "请求失败"} func getErr() error { return ErrTest } func main() { err := getErr() if errors.Is(err, ErrTest) { fmt.Println("ok") } else { fmt.Println("failed") // 实际输出 } } 预期输出 「ok」,实际却输出 「failed」。这个问题暴露了 Go 错误处理机制中一个常被忽视的细节。 ...
0x01 背景在 office-gateway 三期优化过程中,对任务数据实现了缓存机制,旨在提高查询性能。考虑到数据写操作频繁,且当前仅有一个接口负责读取,属于典型的写多读少场景。于是决定选用 GORM 的 Hook 机制来更新缓存。 ...

0x01 传统的错误处理方式在 GORM 的使用过程中,gorm.ErrNotFound 是最基础且使用最广泛的错误类型。作为开发者,我们习惯性地使用这种方式来处理查询未找到记录的情况: ...

0x01 背景过去,我一直在使用 x86_64 架构的 MacBook Pro 进行开发,服务器环境则是 x86_64 架构的 CentOS,因此从未担心过多架构的 Docker 镜像构建问题。 然而,公司最近更新了一批 M1 MacBook Pro。 ...
0x01 RPC 介绍远程过程调用(Remote Procedure Call 缩写 RPC)是一个计算机通信协议,通俗来讲就是调用远程服务上的一个函数,在调用时将对象名、函数名、参数等传递给远程服务器,服务器将处理结果返回给客户端,客户端调用 server 端提供的接口就像是调用本地的函数一样。 RPC 的消息可以通过 TCP、UDP 或者 HTTP 等传输。 ...
0x01 准备工作 安装 delve 项目代码 1 2 git clone git@git.baijiashilian.com:web/demo/go-debug-demo.git git clone git@git.baijiashilian.com:web/gotools/gitlab-tools.git 0x02 调试工具 delvedelve 安装 https://github.com/go-delve/delve/tree/master/Documentation/installation 1 go install github.com/go-delve/delve/cmd/dlv@latest dlv 配置 1 ~/.dlv/config.yml 0x03 调试方式本地调试从源码开始编译并开始调试 1 dlv debug [package] [flags] 调试已经编译好的二进制文件 1 dlv exec ./hello -- args1 args2 编译的时候需要禁用编译器优化:go build -gcflags="-N -l" 编译选项有哪些:go tool compile -h 调试正在运行的进程 1 dlv attach pid [executable] [flags] 调试单元测试 1 dlv test [package] [flags] 远程调试JSON-RPC & DAP 1 dlv --headless --listen 0.0.0.0:2345 <command> <target> <args> 兼容dlv connect、VS Code Go、GoLand ...