Home avatar

你好, 我是 Snow.Z

Go 里该不该用 Map/Filter/Reduce:从 lo、slices 到迭代器

Go 进入泛型时代后,集合处理基本分成两派:

  • 函数式风格:用 samber/lo(或类似库)把集合操作写成 Map/Filter/Reduce
  • 循环派:继续用 for,把分配、错误处理、提前退出都放在一眼能看全的循环里。

从 Go 1.21 起,标准库通过 slices / maps 新增了一批工具函数;但 Map/Filter/Reduce 仍然不在其中。原因不在于做不出来,而是 Go 更看重三点:读起来直观、性能开销可见、错误处理显式

在 MacOS 上提速 Rust 编译

MacOS 下做 Rust 开发时,如果你突然发现“编译怎么慢得离谱”,很可能不是项目本身的问题,而是系统安全机制在拖慢每一次新产生的可执行文件启动。

TL;DR:编译过程中会生成并运行大量临时可执行文件(build script、proc-macro 等),而 macOS 的 XProtect/执行校验会在“首次运行/文件变化”时触发扫描。把你常用的终端/IDE 加入 系统设置 → 隐私与安全性 → 开发者工具(Developer Tools),可以显著减少这类验证带来的阻塞。

Web 身份鉴权技术方案

Web 身份鉴权是 Web 应用安全的第一道防线,也是所有需要验证用户身份、管理权限、保障数据完整性系统的必备能力。

这个领域最容易混淆的是两个概念:

  • Authentication(认证):你是谁,通常发生在登录与会话建立阶段
  • Authorization(授权):你能做什么,发生在每一次资源访问与操作之前

客户端在请求头携带账号与密码,服务端校验通过后返回资源。它胜在实现成本低,但缺点也很“硬”:

zsh 启动提速,延迟加载 Conda 和 NVM

随着工具链越来越多,Shell 启动变慢几乎是必然的。对很多人来说,condanvm 是两个高频“罪魁祸首”:它们的初始化脚本会做不少检查与环境注入,但你并不会每次开一个新终端就用到它们。

为什么 Apple Silicon 如此之快?

在真实的使用体验和各种测试中,M 系列芯片的 Mac 性能几乎吊打 Intel 系列的 Mac,大家不禁要问,这到底是怎么做到的?

本文将以 M1 芯片为例,尽力把 Apple 在 M 系列芯片上施展的黑魔法一一讲明白。我想很多人都会有这样的疑问:

再谈软件质量:关于事故的思考

线上系统做久了,会越来越确信两件事:

  • 系统失效存在必然性:复杂系统里,“偶发”只是时间问题。
  • 事故处理的第一优先级永远是止损与恢复服务,其次才是调查原因:先把影响面控制住,再谈复盘与改进。

接受“必然会出事”不是消极,而是把目标从“让事故不发生”改为“让事故发生时不扩散、可定位、可恢复”。工程上这对应三类能力:隔离、降级、恢复。

Notion Integrations 开发:实现一个自动格式化工具

Notion 没有内建“中文与英文/数字之间自动加空格”的格式化能力(飞书文档有类似的小组件)。为了把排版这件事自动化,我用 Notion 的 Integrations + API 写了一个小工具:扫描页面的文本块,把需要加空格的位置统一修正,并回写到 Notion。