https://avatars.githubusercontent.com/u/18242685

lihuu's blog

Xcode 注释标签(Annotation Tags)与最佳实践指南

本指南适用于 Swift / SwiftUI / macOS/iOS 应用开发,帮助你在工程中正确、优雅、专业地使用 Xcode 支持的注释标签,提高代码可读性、可维护性和团队协作效率。


1. Xcode 支持的注解标签一览表

以下标签是 Xcode 原生支持 的,它们在导航栏、Issue Navigator 中具有特殊行为。

注解标签 Xcode 行为 用途 官方支持
// MARK: 在导航栏创建分组 Section 组织代码结构 ✔ 是
// MARK: - 分组 + 分隔线 更强的视觉分割 ✔ 是
// TODO: 出现在 Issue Navigator → Todos 待办事项 ✔ 是
// FIXME: 出现在 Issue Navigator → Todos 待修复的问题 ✔ 是
// WARNING: 构建时出现黄色警告 ⚠️ 强调重要问题 ✔ 是
// ERROR: 构建时报红色错误 ❌ 阻止构建(调试用) ✔ 是
// NOTE: 普通注释,无特殊行为 补充说明 ✔ 是
/// 文档注释(Quick Help 支持) 类型/方法/属性文档 ✔ 是
/** ... */ 多行文档注释 长段落说明 ✔ 是

2. 注解标签详解

2.1 // MARK: —— 代码分区(最常用)

用于将大型 Swift 文件分块,让导航结构更清晰。

从 Cloudflare 11.18 全局崩溃事件深度剖析:分布式系统中的容错哲学与配置管理实践

引言:当蝴蝶效应遭遇分布式系统

2025 年 11 月 18 日 11:20 UTC,作为支撑全球 20% 互联网流量的基础设施巨头 Cloudflare 遭遇了自 2019 年以来最严重的全球性服务中断。这次事故的起因极具讽刺意味:并非精心策划的网络攻击,也非复杂的硬件故障,而是一次旨在"提升安全性"的 ClickHouse 数据库权限优化——为了实现更细粒度的查询权限控制,工程师将用户访问的表元数据从单一的 default 数据库扩展到了底层的 r0 数据库。

从编程哲学到微服务架构:控制与逻辑的分离之道

编程的本质,是对复杂度的驯服。 人类在构建系统时,总会在“秩序”与“自由”之间寻找平衡: 我们希望系统可控,却又希望它具备足够的灵活性。

而“控制与逻辑的分离”,正是这场平衡的核心哲学。


一、从程序语言看“控制”与“逻辑”的两极

在最原始的机器世界里,程序员手动控制一切:寄存器、内存、跳转指令。 那时没有“逻辑”,只有“控制”;系统完全依赖人的思维去维持秩序。

JPA 中的 FilterDef 与伪删除机制:从理念到实战

在企业级应用中,数据删除往往不是"真的删除"。在多数情况下,我们更倾向于**伪删除(Soft Delete)**通过标记字段的方式,将记录逻辑上设为删除状态,而非从数据库物理移除。

本文将从伪删除与真实删除的对比出发,带你深入理解 JPA 中的 @FilterDef@Filter 注解如何优雅地实现伪删除逻辑,同时介绍 Hibernate 6.4+ 引入的 @SoftDelete,帮助你构建更安全、可维护的数据层。

Vibe Coding 实战指南:与 AI 共创、保持流畅、持续成长

Vibe Coding 是一种与 AI 协作的开发方式:你负责方向与感受,AI 负责生成与辅助;通过“明确意图 + 精准上下文 + 迭代互动”形成顺畅的共创节奏。

什么是 Vibe Coding?

  • 强调“节奏感 + 意图驱动 + 互动流”,而不是“让 AI 全权代写”。
  • 短反馈循环推进:构思 → 生成 → 运行 → 观察 → 调整。
  • 通过对话式协作保持创造力与稳定产出。

核心理念

  1. 清晰愿景:先搞清楚要做什么、为什么做(产品与用户视角)。
  2. 分步构建:把复杂功能拆小做,频繁落地可运行增量。
  3. 精准上下文:只给 AI 必要文件与约束,避免信息噪音。
  4. 持续调整:感觉不对就回退与重生,保持节奏,而非死磕。

️ 实战技巧(18 条精华)

1) 明确目标

  • 用需求、用户流程、验收标准描述目标;输入清晰,输出才清晰。

2) 先做 UI/UX 规划

  • 统一设计系统与组件规范;早期就复用按钮、加载态等组件。

3) 熟练使用 Git/GitHub

  • Git 是安全网;每个功能点都要 commit,AI 误改可随时回滚。

4) 选主流技术栈

  • AI 对常见框架帮助更强(示例:Next.js + Supabase + Tailwind + Vercel)。

5) 写好 Cursor Rules

  • 明确技术栈、代码风格、禁用事项;可参考社区模板并持续迭代。

6) 建立「instructions/」文件夹

  • 存放项目约定、示例组件、最佳实践,作为可引用的上下文源。

7) 精细化 Prompt

  • 具体、可验收、边界清晰;不会写就先用大模型辅助打磨再投喂 IDE。

8) 拆解复杂功能

  • 大功能拆 3 ~ 5 小步;每步都能运行与验证,降低走偏成本。

9) 管理上下文

  • 对话过长就开新会话并简述进度与涉及文件,避免上下文漂移。

10) 方向不对就重来

  • 别在错误方向硬修;回退 → 改 Prompt → 重生,速度更快、质量更稳。

11) 精准指明文件

  • 告诉 AI 只修改哪些文件与区域;控制“修改面”,减少副作用。

12) 复用既有组件

  • 显式提及既有组件与风格,AI 会自动对齐一致性与可维护性。

13) 多模型协作审查

  • 用大上下文模型做安全/性能审计,再回 IDE 模型修复,循环迭代。

14) 安全最佳实践(必做)

  • 输入校验与转义;前端不暴露密钥;最小权限与资源级鉴权;
  • 不向用户暴露堆栈;防 IDOR;开启限流与加密;可用 DB 侧 RLS。

15) 快速处理错误

  • 复制报错与日志给 AI;三轮无解就回退重来,别陷入“洞穴”。

16) 系统化调试

  • 让 AI 罗列“最可能原因 Top-N”;加入关键日志 → 运行 → 回传分析。

17) 明确禁止“擅自发挥”

  • 在提示中注明:“不要修改未指明的代码/文件”

18) 建立“常见 AI 误区”清单

  • 把模型高频错误沉淀为 checklist;每次开发前贴给 AI 规避复发。

Prompt 范式(可直接复用)

意图 + 约束 + 上下文 + 验收 四件套:

第 15 章:你做到了!

从第一章的"Hello, World!“到第十四章的高性能 Web 服务,你已经完成了一次史诗级的技术蜕变。

你不再是那个依赖 GC 的 Java 程序员,你现在是能与编译器对话的 Rust 开发者。

但这只是开始。Rust 的世界远比你想象的更广阔、更精彩、更有前途。

准备好探索 Rust 的无限可能了吗?

第 14 章:Spring Boot 用腻了吗?启动时间长,内存占用高,JVM 调优让人头疼?

是时候体验真正的 Web 服务性能了。

Rust 的 Web 框架不需要"魔法",不需要反射,不需要依赖注入的复杂性。它们只需要一件事:让你的 API 快到飞起。

准备好被 Rust Web 服务的性能震撼吧。

Spring Boot:舒适的性能杀手

Spring Boot 的"便利"代价

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;  // 运行时注入,编译期不知道

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        // 每个请求都经过:
        // 1. Servlet 容器
        // 2. Spring MVC 分发器
        // 3. 控制器映射
        // 4. 方法参数解析
        // 5. 反序列化/序列化
        // 6. 异常处理链
        return ResponseEntity.ok(userService.findById(id));
    }
}

看起来简洁?代价是什么?

第 13 章:Java 并发编程的噩梦经历过吗?

synchronized 的性能陷阱、volatile 的语义混乱、ConcurrentModificationException 的突然袭击、死锁调试的绝望时刻…

这些痛苦,Rust 要一次性终结。

Rust 的承诺:无畏并发(Fearless Concurrency)。不是因为并发变简单了,而是因为编译器不允许你犯错。