Logback 详解:Java 日志框架的核心与实践
Logback 是 Java 生态系统中使用最广泛的日志框架之一,作为 Log4j 的继任者和 SLF4J 的原生实现,它以其卓越的性能、灵活的配置和丰富的功能成为现代 Java 应用的首选日志解决方案。 1. Logback 简介1.1 什么是 LogbackLogback 由 Log4j 创始人 Ceki Gülcü 开发,设计上分为三个核心模块: 模块 作用 logback-core 基础框架,为其他两个模块提供支持 logback-classic SLF4J 的原生实现,包含核心日志功能 logback-access 与 Servlet 容器集成,提供 HTTP 访问日志功能 1.2 为什么选 Logback性能优势: - 初始化速度比 Log4j 快约 10 倍 - 内存占用更少 - 异步 Appender 吞吐量更高 - 自动重载配置无需重启应用 功能优势: - 原生支持 SLF4J - 条件化配置(if/then/else) - 自动压缩归档日志 - 更强大的过滤器 2. 核心架构2.1 三大核心组件// Logger - 日志记录器...
mybatis
1. 什么是 MyBatisMyBatis 是一个半自动化的持久层框架,它将 SQL 语句从 Java 代码中解耦出来,放在 XML 配置文件或注解中。与 Hibernate 等全自动 ORM 框架不同,MyBatis 不会自动生成 SQL,而是让开发者直接编写 SQL,从而获得更高的灵活性和性能控制。 MyBatis 的核心组件 组件 作用 生命周期 SqlSessionFactoryBuilder 构建 SqlSessionFactory 方法局部变量,用完即弃 SqlSessionFactory 生产 SqlSession 的工厂 应用整个生命周期 SqlSession 执行 SQL 的核心接口 请求级别,用完必须关闭 Mapper 接口 定义 SQL 操作的接口 应用整个生命周期 MyBatis 的工作流程 配置文件 → SqlSessionFactory → SqlSession → Mapper → SQL 执行 → 结果映射 配置文件:mybatis-config.xml 或 Spring Boot 的 application.yml ...
Spring Boot Common Annotations
SpringBoot 的注解系统是其”约定优于配置”哲学的核心体现。这篇文章不讲虚的,只讲实际开发中真正会用到的注解。我会按照功能分类,每个注解都配上最简示例。 1. 核心启动注解@SpringBootApplication这是 SpringBoot 应用的入口注解,一个组合注解,等价于三个注解的叠加: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 它的三个组成部分: @SpringBootConfiguration - 标记为配置类(本质是 @Configuration 的特化) @EnableAutoConfiguration - 启用自动配置机制 @ComponentScan - 自动扫描当前包及子包下的组件 实用主义提示:别自己拆这三个注解,除非你知道自己在做...
Spring Boot Startup
Spring Boot 中的各种原理解析说一说 1. Spring Boot 启动原理1.1 入口点:SpringApplication.run()@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 是一个复合注解: @SpringBootConfiguration // 继承 @Configuration @EnableAutoConfiguration // 开启自动配置 @ComponentScan( excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), ...
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.26Go 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 CodeClaude 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. 自动解引用Rus...
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_list...
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 缓存友好...







