返回联盟成员

Aoang’s Blog

Aoang · aoang.x2ox.com

思考、记录与分享

56
篇收录文章
访问博客
https://aoang.x2ox.com/
Aoang’s Blog 首页截图正在生成网站截图

最新文章

AI 模型的选择与应用:谁干杂活,谁啃硬骨头

「你们现在用哪个模型?」这个问题我不太敢直接回答了。因为答案听起来像在敷衍:有的活给便宜模型,有的活给推理能力更强的模型,代码审查还要按风险升级,需求文档也有自己的分工。听的人多半觉得这是折腾,但真正跑过一段时间的人知道,这不是收藏模型,而是在控制账单和返工。团队刚把 AI 引入…

关于打磨产品的一些思考

一个产品怎样才算「打磨好了」?这个问题听起来像是在问圆角该用 8px 还是 12px,动画该持续 200ms 还是 300ms。可真正使用一个产品时,让人放弃的通常不是圆角不够圆,而是另一批更朴素的问题:不知道下一步该点哪里,表单填错后内容全部消失,弱网下按钮毫无反应,服务出了故…

AI 带来的变革:能力变便宜之后,什么会变得更贵?

改革春风吹满地,世界人民真争气;齐心合力跨世纪,A 不 AI 没咋地。AI 有没有「咋地」,2026 年已经不太需要争论。写代码、做客服、整理资料、生成图片、分析合同、起草营销方案,许多原本需要专门软件或专门人员才能开始的工作,如今在一个对话框里就能得到像模像样的第一版。真正值得…

sync.Mutex:抢人锁难

sync.Mutex 看起来只有两个方法:Lock 和 Unlock。它的零值可以直接用,结构体也只有一个状态字段和一个信号量字段,于是很多人会把它当成一颗无害的螺丝:需要保护数据时拧上,结束时拧下。真正的故事要长得多。一次没有竞争的 Lock,可能只是对一个 32 位整数做 C…

Go 的舒适圈:它适合解决什么,又该把什么交给别人?

每门语言都有舒适圈。Python 坐在数据和自动化旁边很自在,Java 走进大型企业系统像回自己家,C 靠近硬件时几乎不用换鞋。Go 的位置比较微妙:它没有 C 那样贴近机器,也没有 Java 那么丰富的应用框架,更没有 Python 在 AI 领域的库山库海,却在云基础设施、网…

代码审查指北

写代码的人,十有八九都干过一件事:把 PR 往群里一丢,然后祈祷「这次能一次过」。但代码审查 (Code Review) 从来不是走个过场。它是一套让代码库整体健康随时间改善的机制,Google 用它来维护代码和产品的质量。说到底,代码审查就是除作者之外的其他人,来检查这段代码的…

DNS 协议基础

DNS 到底是个啥?一时间似乎没办法答上来,不是不知道,而是因为「DNS」这三个字母背后藏的东西太多了。它可以一句话讲完:DNS(域名系统,Domain Name System) 是互联网的电话簿,负责把人类好记的域名翻译成机器认识的 IP 地址。但真把它掰开揉碎,你会看到一套分…

PostgreSQL 参数介绍与调优

PostgreSQL 调优最像什么?我觉得像给一个正在发烧的人调空调:温度计都没看,先把旋钮从 26°C 拧到 16°C,动作很果断,病因却可能毫无变化。网上流传着许多「生产环境必改参数」:shared_buffers 设为内存的四分之一,work_mem 往大了加,机械盘把 r…

Vue 与 React:从设计入门到复杂工程的取舍

Vue 和 React 到底该选哪个?这个问题像「咖啡和茶谁更好」一样常见,也一样容易吵歪。有人拿下载量当选票,有人拿跑分当判决书,还有人把自己最熟悉的那套写法包装成架构真理。最后框架还没选,会议先开了两天。先说结论:Vue 更像一套经过编排的前端应用方案,React 更像一组围…

软件依赖管理:省下代码之后,代价才刚刚开始

你有没有见过这样的代码审查?某位同事为了在 Go 服务里把字节数格式化成 64 GB,执行了一次 go get。业务代码只多出一行 import,看起来人畜无害。可等 go.mod 和 go.sum 提交上来,模块图里又多出十几个谁也没审查过的间接依赖。你问他为什么,他会很无辜地…

从 Redis 到 Dragonfly

把 Dragonfly 说成「多线程版 Redis」,就像把 PostgreSQL 说成「支持 SQL 的文件系统」:不能算完全错误,但几乎解释不了任何工程现象。Redis 的核心优势并不只是快,而是把复杂的数据结构、事务语义和网络并发压进一条可预测的串行执行流。十几年里,大量客…

Go map:从 hmap 到 Swiss Table

Go 的 map 太常用了,以至于很多人不再把它当作数据结构。写一行 m[key],编译器和 runtime 就替我们完成了哈希、探测、比较、扩容和内存管理。代码很短,代价却不短。更麻烦的是,网上关于 Go map 的文章经常混着两个时代:Go 1.23 及以前的 hmap、bu…

社会工程学之身份欺诈

冬天来了,万物凋零。又到了坏人们泛滥的季节,城市的乌烟瘴气中蕴含着难以形容的善意与陷阱。对于游泳爱好者而言,冬天的去处是一个值得研究的课题。很多普通健身房的泳池因为维护成本与客流不成比例,纷纷选择关闭;剩下那些苦苦支撑的,往往基础设施糟糕——从更衣室出来到下水的那段路,足以让你冻…

换行符 CRLF 的历史与演变

我们每天都在使用文本文件。它的换行看似简单,背后却隐藏着一段跨越百年的通信和计算机历史。从早期的电报机到现代的网络协议,一个看似微不足道的字符组合 CRLF(回车和换行)是如何塑造我们数字世界的?本文将深入探讨换行符的起源、不同操作系统的选择,以及为什么一个简单的文本文件在不同系…

译:简单性

在 2009 年 5 月,Google 举办了一场内部的「设计巫术(Design Wizardry)」小组讨论会,演讲者有我和 Jeff Dean、Mike Burrows、Paul Haahr、Alfred Spector、Bill Coughran。以下是略加编辑的我的演讲记…

HTTP/3 与 QUIC:换掉 TCP 之后,网络真的更快了吗?

HTTP/3 最容易被说成一句话:「HTTP 改用 UDP,所以更快。」这句话不能说完全错,毕竟 HTTP/3 的确运行在基于 UDP 的 QUIC 之上;可它省略的部分,恰好比留下来的更多。UDP 没有可靠传输、拥塞控制、连接状态和加密。倘若只把 TCP 删掉,再把 HTTP …

博客重构

一次从 Hexo 到 Next.js 的重构,用现代前端工程化的复杂性,换取了未来的低维护性、高性能和可扩展性。Next.js SSG + @content-collections + Cloudflare Pages 的组合,最终实现了在此前所期望的理想状态:将精力从折腾系统转…

Go 的 Goroutine 与协程

很多文章把协程解释成「比线程轻的东西」,把 async/await 解释成「暂停一下再继续」,再把 go func() 解释成「启动一个异步任务」。这些说法不能算错,但它们没有回答最关键的问题:到底保存了什么上下文,谁负责保存,谁决定什么时候恢复?如果不回答这个问题,进程、线程、…

如何管理项目中的 Protobuf

后端从单体切到微服务之后,很多团队会发现一件尴尬的事:业务代码分得清清楚楚,服务边界画得明明白白,可那份被所有服务共同引用的 .proto 文件,却成了没人说得清该归谁管的东西。「Proto 代码到底放哪里?」是社区里反复出现的经典讨论,也是一个存在已久的老问题。各方答案大致归成…

源代码托管怎么选:Gerrit、GitLab、GitHub 与 Gitea

源代码托管平台看起来都差不多:建仓库、提变更、跑流水线、开 Issue。于是选型很容易变成截图对比:谁的功能更多、界面更新、免费额度更大。等真正迁移,才发现 Git 仓库只是最容易搬走的那一层,代码审查记录、流水线、权限、制品、机器人和团队习惯早已长在平台里面。Gerrit、Gi…

输入关键词搜索博客名称、作者或域名。

Esc 关闭回车查看全部结果

删除确认

即将删除「」。此操作不可恢复

请输入 以确认: