Golang Struct Tag
Struct Tag 是 Go 语言中一个简洁但极其强大的特性。它允许你为结构体字段附加元数据,这些元数据可以被反射读取,广泛用于序列化、ORM、验证等场景。 基本语法 Struct Tag 是紧跟在字段类型后面的反引号字符串: type User struct { Name string `json:"name"` Age int `json:"age,omitempty"` Email string `json:"email"` } 语法规则 使用反引号 ` 包裹,不是双引号 由键值对组成,格式为 key:"value" 多个 tag 用空格分隔 值必须用双引号包裹 type Product struct { ID int `json:"id" db:"product_id" validate:"required"` Name string `json:"name" db:"product_name"` } 核心应用场景 1. JSON 序列化 ...
Golang Versions
1.26 Go 1.26(2026 年 2 月 10 日发布) 是 Go 历史上改动范围最广的一次小版本更新之一!虽然没有像 1.18 泛型那样“颠覆性”,但它在语言体验、性能、工具链和标准库四个维度都做了大量实打实的改进,被很多人称为“史上最舒服的小版本”。 下面我按重要程度给你捋一捋最值得关注的点(基于官方 release notes + blog): 1. 语言层面两处“真香”改动(最实用) new(expr) 终于支持表达式了! 以前想创建一个带初始值的指针超级麻烦: // Go 1.25 及以前 age := yearsSince(born) p := &age 现在一行搞定: // Go 1.26 Age: new(yearsSince(born)), // *int // 或者更爽的 p := new(42) // *int,指向 42 q := new(User{Name: "Hao"}) // *User JSON、Protobuf、配置结构体、optional 参数场景直接起飞,少写一堆...
Claude Code
Claude Code 是 Anthropic 推出的命令行 AI 编程助手,它可以理解你的代码库、执行命令、读写文件,并协助你完成各种开发任务。本文将详细介绍 Claude Code 的使用方法,特别是如何配合自定义模型使用。 1. 安装和配置 1.1 安装 Claude Code Claude Code 原生安装使用了 bun 打包的,性能更好: curl -fsSL https://claude.ai/install.sh | bash 安装完成后,需要配置 API 密钥: claude # 首次运行会提示输入 API 密钥 或者通过环境变量设置: export ANTHROPIC_API_KEY="your-api-key-here" 1.2 验证安装 运行以下命令验证安装是否成功: claude --version 2. 基本使用 2.1 启动交互式会话 在项目根目录运行 claude 命令启动交互式会话: claude 启动后,你可以直接输入自然语言描述你的需求,例如: 帮我创建一个简单的 HTTP 服务器 2.2 执行单次查询 使用 -p 参数执行单次查询并退出: ...
Rust Tips
& 的各种用法 1. 不可变引用(借用) 最基本的形式,用于借用所有权而不转移: fn print_length(s: &String) { println!("{}", s.len()); } // s 在这里归还,不影响原数据 let s = String::from("hello"); print_length(&s); println!("{}", s); // 还能用 2. 可变引用 &mut 需要修改借用内容时使用,同一时间只能有一个可变引用: fn append(s: &mut String) { s.push_str(" world"); } let mut s = String::from("hello"); append(&mut s); 3. 解引用 * 引用存的是地址,* 取值: let x = 5; let r = &x; assert_eq!(*r, 5); // 解引用得到值 4. 自动解引用 R...
Cpp Timeline
C++: 从 C++11 到 C++23 的演进之路 C++ 从 2011 年开始进入了快速发展的时代,每三年一个新标准,带来了大量现代特性。本文将梳理 C++11 到 C++23 的主要特性和常用特性。 C++11 Core Feature Library Concurrency Move semanticsLambda expressionsauto and decltypenullptrHash Tableconstexproverride/finalUniform initializationrange-based forenum classstatic_assertVariadic templatesAlias templatesDelegating constructorsInheriting constructorsRvalue references Smart pointersstd::functionstd::bindstd::unordered_map/setstd::arraystd::tuplestd::forward_liststd::ch...
Java Containers
Java 容器:别只盯着接口,看实现 Java 的 java.util 集合框架(JCF)是每个 Java 程序员的必修课。但如果你只是机械地记忆 List、Set、Map,那你根本不懂容器。容器的本质是数据结构在内存中的组织方式。 1. 核心架构:从混乱到有序 Java 集合框架主要分为两大支系: Collection:存储单值元素。 Map:存储键值对(Key-Value)。 在 Java 21 之前,Java 的有序集合接口设计得一塌糊涂。你想访问第一个元素,List 用 get(0),Deque 用 getFirst(),而 SortedSet 却要用 first()。Java 21 引入了 Sequenced Collections,终于把这套烂摊子统一了。 SequencedCollection:提供了 addFirst、addLast、getFirst、getLast、reversed 等统一方法。 SequencedMap:同理,支持有序的键值对操作。 2. List:连续内存才是王道 ArrayList (默认首选) 本质:动态数组。 优势:CPU ...
Kubernetes 架构与底层实现详解
Kubernetes(K8s)是容器编排的行业标准。本文重点剖析其架构和核心组件底层实现原理。 为什么 Kubernetes? 声明式 API:定义期望状态,系统自动维护 强一致性存储:etcd + Raft 分布式调度与控制器模式 插件化:CRI/CNI/CSI 整体架构 核心概念概览 在深入Kubernetes架构之前,我们需要理解几个核心概念: 概念 定义 作用 Pod Kubernetes中最小可部署单元 包含一个或多个容器,共享网络和存储 Service 为Pod提供稳定网络访问的抽象 通过标签选择器动态发现后端Pod Deployment 声明式应用管理控制器 管理ReplicaSet,实现滚动更新和回滚 Namespace 逻辑隔离单元 将集群资源划分为多个虚拟集群 Node 集群中的工作节点 物理机或虚拟机,运行Pod Cluster 完整的Kubernetes环境 包含控制平面和多个工作节点 Pod详解: Pause容器:每个Pod都有一个根容器,负责共享网络命名空间 应用容器:实际运行业务逻辑的容器 共享资源:同一...
Java juc
JUC 是 java.util.concurrent 的缩写,它是 Java 标准库中一个至关重要的包,专门用于支持并发编程。从 Java 5 开始引入,JUC 极大地简化了多线程开发的复杂性,并提供了更强大、更灵活、更安全的并发工具。 可以毫不夸张地说,掌握 JUC 是从“会用多线程”到“精通并发编程”的必经之路。 一、 为什么需要 JUC ? 在 JUC 出现之前,我们主要依赖 synchronized、wait()、notify() 等关键字和方法来实现同步。但它们存在一些明显的缺点: 不够灵活:synchronized 是非公平锁,且无法中断一个正在等待获取锁的线程,也无法设置超时。 功能单一:它只是一个简单的互斥锁,无法实现更复杂的锁功能,如读写锁。 API 原始:wait()/notify() 的使用非常容易出错,比如忘记在 synchronized 块内调用,或者信号的丢失(notify 在 wait 之前执行)。 性能瓶颈:在 JDK 1.6 之前,synchronized 是重量级锁,性能较差。虽然之后有了锁升级等优化,但 JUC 中的 Lock 在某些场景下...
Java gc
Java 8 (2014年) 是一个里程碑式的版本,其 GC 组合(Parallel GC + CMS/G1)在当时非常经典。但从 Java 9 开始,GC 领域进入了快速迭代和创新的时期,核心目标是:降低停顿时间、提高吞吐量、更好地适应现代大内存和多核硬件,并简化 GC 的使用和调优。 一、核心思想转变:从“选择”到“自适应” 在 Java 8 之前,你需要根据应用场景(吞吐量优先还是低延迟优先)手动选择一个 GC,比如 -XX:+UseParallelGC 或 -XX:+UseConcMarkSweepGC 或 -XX:+UseG1GC。 从 Java 9 开始,一个重要的趋势是 “自适应”。JVM 变得更"聪明",它可以在运行时根据硬件配置和应用行为,动态地调整 GC 的行为,甚至在某些情况下,可以在不同的 GC 算法之间切换,以达到最佳性能。 二、G1 G1((Garbage-First) Garbage Collector (G1GC) - 持续进化,成为默认 G1 在 Java 7 引入,Java 9 中成为 默认的垃圾回收器。它是一个平衡型收集器...
C++ std::print
概述 C++23 引入了 std::print 和 std::println,这是现代 C++ 对格式化输出的重大改进。相比传统的 printf,这些新函数提供了类型安全、性能优异且易于使用的格式化输出方案。 基本用法 简单输出 #include <print> int main() { // 基本输出 std::print("Hello, World!\n"); // 带换行的输出 std::println("Hello, World!"); return 0; } 格式化输出 #include <print> #include <string> int main() { int age = 25; std::string name = "Alice"; // 格式化输出 std::print("Name: {}, Age: {}\n", name, age); // ...






