- 博客(404)
- 收藏
- 关注
原创 看懂内存地址之后,才算真正入门 Zig:指针、切片与实战
Zig 语言中指针和切片的使用指南 本文深入讲解 Zig 语言中指针和切片的核心概念与使用技巧: 基础指针类型 *T 单项指针(不可为空) *const T 只读指针 *[N]T 固定长度数组指针 [*]T 无长度多项指针(类似C指针) []T 带长度切片(推荐首选) 可选指针 ?*T(可为空) 核心操作 取地址 & 解引用 .* 通过指针直接访问结构体字段 数组与切片 数组 [N]T 包含完整数据 切片 []T 包含指针+长度,更安全 字符串本质是 []const u8 特殊指针 [*:0]const u
2026-08-16 17:22:42
72
原创 别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
文章摘要 ImmutableArray<T>是C#中的不可变数组结构,与IReadOnlyList<T>不同,它确保创建后元素和长度都无法修改。修改操作会返回新数组,保留旧数组不变,适合配置快照、规则表等读多写少场景。 关键特点: 创建后内容不可变,修改操作返回新实例 保留数组优点:连续存储、索引访问快 线程安全读取,适合多线程环境 创建方式:Create、Empty、从集合转换、使用Builder 提供索引访问、Length和遍历等读取操作 "修改"方法如Add、SetItem会返回新数组 与可变集合相比
2026-08-15 17:00:07
183
原创 别只会解析参数:C#.NET Spectre.Console.Cli 命令行工具实战详解
本文介绍了如何使用 C#.NET 的 Spectre.Console.Cli 库构建功能完善的命令行工具。主要内容包括: Spectre.Console.Cli 的核心功能:支持子命令、自动帮助、强类型参数、依赖注入等 与 Spectre.Console 的关系:前者负责命令解析,后者处理终端UI呈现 基本开发流程: 定义继承 CommandSettings 的参数模型 创建继承 Command/AsyncCommand 的命令类 注册并运行命令应用 参数模型设计:位置参数、命名选项、默认值、必填项等配置
2026-08-14 14:22:03
141
原创 别再把命令行参数写成一团:C#.NET System.CommandLine 实战详解
摘要:System.CommandLine 2.0 实战指南 本文介绍如何使用 C#.NET 的 System.CommandLine 2.0 框架构建命令行工具。该框架解决了手动处理命令行参数的痛点,包括参数解析、类型转换、校验和帮助生成等。文章通过一个文件操作工具示例,演示如何: 定义 Option<T> 和 Argument<T> 参数 创建根命令和子命令结构 使用 SetAction 绑定处理逻辑 通过 ParseResult 获取强类型参数值 示例从简单的单文件读取开始,逐步扩展为支持 scan/
2026-08-13 14:47:41
179
原创 别再手写 args[0]:C#.NET CommandLineParser 命令行工具实战详解
这篇文章介绍了如何使用C#的CommandLineParser库来优雅地处理命令行参数。主要内容包括: 该库解决的问题:将字符串形式的命令行参数转换为结构化对象,自动处理参数校验、类型转换、帮助信息等常见需求。 基本用法:通过定义Options类并使用[Option]特性声明参数,然后使用Parser.Default解析参数并映射到对象。 常见参数处理方式: bool类型作为开关参数 设置默认值 处理多值参数 位置参数的使用 自动生成帮助信息的功能。 使用Verb特性组织多个子命令(如git add/pus
2026-08-12 11:15:58
156
原创 Kotlin interface 详解:别再把接口写成空壳和万能开关
本文探讨了Kotlin接口的设计原则与最佳实践。接口应聚焦于定义清晰的行为契约,而非空壳或万能容器。关键要点包括: 接口核心价值在于隔离变化点(如支付、日志等),使调用方依赖稳定契约 抽象函数必须由实现类覆盖,默认实现适合公共逻辑 接口属性通过getter计算,不保存状态 支持var属性但实际字段由实现类提供 通过接口继承实现能力组合 Kotlin接口相比Java更灵活,支持默认方法、属性、多继承等特性,配合委托、密封接口等特性能实现更清晰的设计。良好接口设计应保持单一职责,避免过度抽象或功能混杂。
2026-08-10 14:51:24
218
原创 别让数据库靠手改:Go golang-migrate 从版本脚本到生产发布详解
文章摘要 golang-migrate 是一个数据库迁移工具,通过版本化的 SQL 文件(up.sql/down.sql)管理数据库结构变更,解决生产环境手动改表的问题。它将迁移记录存储在 schema_migrations 表中,支持升级、回滚和版本控制。相比 GORM AutoMigrate,它更适合生产环境,提供变更评审、固定执行顺序和回滚能力。安装支持多种数据库驱动,迁移文件遵循版本号+描述+方向(up/down)的命名规则。常用命令包括 up/down 执行迁移、force 修正版本等,支持 My
2026-08-07 07:56:48
13
原创 别把 GORM 当 SQL 生成器:Go GORM 从模型映射到事务实战详解
Go ORM框架GORM使用指南 本文介绍了Go语言中访问数据库的两种方式:标准库database/sql和ORM框架GORM。重点讲解了GORM的核心功能和使用方法: GORM定位:连接Go结构体和数据库表的工程化封装,不是SQL替代品 适用场景:CRUD操作、模型自动映射、统一处理时间字段和软删除 基础用法:安装配置、模型定义、增删改查操作 核心概念:gorm.DB结构体包含连接池和查询状态 连接配置:支持多种数据库,可优化连接池和事务设置 模型映射:通过结构体tag控制字段属性,支持自动维护时间字段
2026-08-06 17:33:00
161
原创 Java JCommander 实战详解:用注解解析命令行参数
JCommander是一个轻量级的Java命令行参数解析库,它通过注解将命令行参数绑定到Java对象,自动处理类型转换、必填校验和帮助信息生成。核心注解包括@Parameter(定义参数属性)、@Parameters(命令描述)等,支持子命令和动态参数。相比更复杂的Picocli,JCommander更适合简单CLI工具、运维脚本等场景。示例展示了如何快速定义参数类(如HelloArgs)并解析参数,支持基础类型转换(如整型、文件路径等)。新版本依赖坐标已迁移至org.jcommander:jcommand
2026-08-05 10:41:38
211
原创 Java RxJava 实战指南:从 Observable、Flowable 到线程切换和背压处理
RxJava是一个用于JVM的响应式编程库,它将各种异步事件(如网络请求、UI事件等)视为可处理的数据流。其核心思想是通过操作符链式调用来编排事件流,适合处理异步任务组合、线程切换和连续数据处理等场景。RxJava提供多种核心类型(如Observable、Flowable、Single等)以适应不同结果数量的需求,与Reactor类似但生态侧重不同(Android/客户端SDK vs Spring WebFlux)。新项目建议使用RxJava 3,它通过简洁的流水线式代码(创建数据源→操作符处理→订阅执行)
2026-08-04 07:19:16
246
原创 Java WebLogic 实战指南:从 Domain、数据源到 WAR 部署和集群管理
摘要 Oracle WebLogic Server 是一款面向企业级 Java 应用的应用服务器,主要用于银行、保险、电信等传统大型企业系统。相比轻量级的 Tomcat,WebLogic 提供更完整的企业级功能,包括 EJB、JMS、分布式事务、集群管理等。其核心架构基于 Domain 管理单元,包含 Admin Server 和多个 Managed Server。WebLogic 支持 Java EE/Jakarta EE 规范,不同版本对应不同 API 包名体系(javax.* 或 jakarta.*)
2026-08-03 10:04:14
208
原创 Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
本文介绍了Java中的ReentrantLock可重入互斥锁,对比了它与synchronized的差异。主要内容包括:ReentrantLock需要手动加锁释放,提供超时获取、可中断等待、公平锁和多个Condition等特性;解释了可重入概念(同一线程可多次获取同一锁);对比了两者的功能差异;说明了构造方法和常用API;最后通过线程安全计数器示例演示了ReentrantLock的使用场景。强调在简单同步场景用synchronized,复杂控制需求时再选择ReentrantLock。
2026-08-01 15:21:04
202
原创 Java Semaphore 实战指南:用许可证控制并发、限流和资源池
Java并发工具Semaphore摘要 Semaphore是Java并发包中的同步工具,用于控制并发访问数量,类似许可证机制。初始化时指定许可数,线程通过acquire()获取许可,执行完后release()归还。若许可耗尽,后续线程将阻塞或快速失败。 核心用途:限制接口并发、资源池管理、连接数控制等。与QPS限流不同,它控制的是同时执行的线程数量。 常用API: acquire()/release():阻塞获取/释放许可 tryAcquire():非阻塞尝试获取 tryAcquire(timeout):超
2026-07-31 09:25:26
155
原创 Java Reactor Netty 实战详解:从响应式 HTTP 到 TCP 长连接
Reactor Netty 是 Project Reactor 生态中的响应式网络库,基于 Netty 封装了响应式 API(Mono/Flux)。它为 HTTP/TCP/UDP 通信提供高阶抽象,支持连接池、HTTP/2 和监控功能,是 Spring WebFlux 和 Spring Cloud Gateway 的默认底层实现。相比原生 Netty,Reactor Netty 更关注响应式数据处理而非底层字节流,适合高并发 I/O 场景,如实时推送、API 网关等,但不推荐用于 CPU 密集型或阻塞式调用
2026-07-30 10:06:24
233
原创 Java Grails 实战详解:用 Groovy 和 GORM 快速开发 Web 应用
Grails 是一个基于 Groovy 语言的 JVM 全栈 Web 开发框架,整合了 Spring Boot、Hibernate 等核心技术,强调"约定优于配置"理念。它适合快速开发 CRUD 系统、后台管理、REST API 等场景,能显著提升开发效率。相比 Spring Boot,Grails 提供更完整的开发套件,包括 GORM、脚手架和插件体系。项目结构遵循特定约定,自动识别控制器、服务和领域模型。新版本(如 Grails 8)支持 Spring Boot 4 和 JDK 21。通过简单的 CLI
2026-07-29 10:01:59
248
原创 Java Picocli 实战详解:用注解写出好用的命令行工具
Picocli 是 Java 生态中一个强大的命令行工具开发库,通过注解简化参数解析和命令构建。它支持选项(-f/--file)、位置参数、子命令、自动类型转换、帮助文档生成等功能,适合开发各种命令行工具(如开发者工具、运维脚本等)。示例演示了如何用 Picocli 创建简单的问候命令和文件统计工具,展示了核心注解(@Command, @Option, @Parameters)的用法。相比手动解析参数,Picocli 提供更规范、可维护的解决方案,并能自动处理帮助文档、版本信息等通用需求。
2026-07-28 14:20:43
211
原创 Java Undertow 实战指南:从轻量 Web Server 到 Spring Boot 嵌入式容器
文章摘要 Undertow是一个轻量级Java Web服务器,可作为HTTP服务器、Servlet容器和WebSocket支持。它比Tomcat更轻量,适合嵌入式场景,提供灵活的Handler API直接处理HTTP请求。核心模块包括undertow-core(HTTP核心)、undertow-servlet(Servlet支持)和undertow-websockets-jsr(WebSocket)。虽然Spring Boot 3支持Undertow,但Spring Boot 4已移除支持。典型使用场景包括
2026-07-27 07:45:41
185
原创 Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
Jetty是一个由Eclipse基金会维护的Java Web服务器和Servlet容器,支持HTTP请求处理、Servlet运行、WAR包部署及WebSocket等协议。其突出特点是嵌入式设计和可编程性,适用于嵌入式HTTP服务、REST API、微服务等场景。与Tomcat相比,Jetty更侧重嵌入式和工具类应用,而Tomcat常见于传统Web项目。Jetty版本选择需匹配Java和EE规范,新项目推荐Jetty 12.0.x+Java 17+Jakarta EE 10。Jetty支持独立部署和嵌入式启动
2026-07-25 07:48:17
248
1
原创 Java Jersey 实战指南:用 JAX-RS 注解写清晰的 REST API
摘要 Jersey是Jakarta RESTful Web Services(原JAX-RS)规范的标准实现,适用于构建REST API。它通过注解(如@Path、@GET)将Java类声明为HTTP资源,与Spring MVC的Controller类似但使用不同注解。Jersey适合需要标准REST资源模型、兼容Jakarta EE或偏好JAX-RS编程风格的项目。 在Spring Boot中集成Jersey只需引入spring-boot-starter-jersey依赖,并通过ResourceConfi
2026-07-24 07:39:34
235
原创 Java Spring Security 实战详解:从登录认证到 JWT 权限控制
本文介绍了Spring Security框架的核心功能和实现方式。Spring Security主要解决认证、授权和安全防护三大问题,通过过滤器链处理请求安全。文章详细讲解了Authentication(认证)和Authorization(授权)的概念,并展示了请求在Spring Security中的处理流程。针对Spring Boot 3和Spring Security 6,提供了一个基于内存用户的最小可运行Demo,包含两个预定义用户(admin和tom)及其角色权限配置。示例代码展示了如何配置Secu
2026-07-23 09:30:36
246
原创 Java Gradle 实战指南:从 Wrapper、Kotlin DSL 到 Spring Boot 多模块构建
Gradle 是一个灵活、可扩展的现代构建工具,主要用于 Java 项目的构建管理。它通过插件提供构建能力,使用任务组织构建动作,并以 DSL 描述配置。相比 Maven,Gradle 更具灵活性,支持增量构建和多模块工程。项目通常使用 Gradle Wrapper 固定构建版本,确保一致性。Gradle 运行需要 JDK 17+,但可通过 Java Toolchain 指定项目编译 JDK。标准项目包含 settings.gradle.kts(项目配置)、build.gradle.kts(构建脚本)等文件
2026-07-21 10:10:55
217
原创 Java Kafka 实战指南:从 Topic、分区到 Spring Boot 可靠消息处理
Kafka 分布式事件流平台简介 Kafka是一个高吞吐的分布式事件流平台,主要用于异步处理大量事件数据(如订单、日志等)。其核心架构包括生产者、Topic、分区和消费者组,通过分区实现并行处理和负载均衡。Kafka以追加日志方式存储消息,允许多个消费者组独立消费同一批数据。典型应用场景包括系统解耦、削峰填谷、数据管道和实时计算。Kafka保证单个分区内消息有序,可通过消息键确保业务顺序。本地开发可使用Docker快速搭建单节点环境,支持原生Java客户端和Spring集成两种开发方式。
2026-07-20 17:20:57
290
原创 Java Netty 实战指南:从 NIO 线程模型到 TCP 编解码和心跳机制
Netty是一个高性能Java网络通信框架,封装了NIO的复杂细节,适用于高并发、长连接场景如RPC、IM、游戏服务器等。其核心组件包括Bootstrap、EventLoop、Channel和Pipeline,采用事件驱动模型,每个Channel对应一个线程处理I/O事件。本文通过一个TCP示例演示了按行收发消息的实现,使用LineBasedFrameDecoder解决粘包问题,并强调耗时操作应避免阻塞EventLoop线程。Netty简化了网络编程,适合作为自定义协议和实时系统的底层通信框架。
2026-07-19 10:54:47
202
原创 Java Neo4j 实战指南:从图模型、Cypher 到 Spring Boot 关系查询
本文介绍了Neo4j图数据库的核心概念与应用场景。Neo4j通过节点和关系直接建模数据连接,特别适合处理社交网络、推荐系统等关系密集型数据。文章对比了关系型数据库与图数据库在多层关系查询上的差异,展示了Neo4j的路径查询优势。 核心内容包括: Neo4j基本概念:节点、标签、关系、属性 使用Docker快速搭建开发环境 Cypher查询语言基础语法(CRUD操作) Java Driver的集成与基本用法 文中提供了具体的Cypher示例和Java代码片段,帮助开发者快速上手Neo4j在图数据建模和查询方面
2026-07-18 15:08:18
247
原创 Java Jakarta Validation 实战指南:从参数校验到分组、自定义注解和全局异常处理
Jakarta Validation是Java生态中的数据校验标准规范,通过注解方式在模型类上定义校验规则(如@NotBlank、@Email等),结合Hibernate Validator实现校验逻辑,并由Spring Boot集成到Web请求流程中。开发时只需在Controller方法参数添加@Valid注解即可自动触发校验,无需手动编写if判断。常用校验注解包括非空检查(@NotNull)、字符串格式(@Pattern)、数值范围(@Min/Max)、日期(@Past)等,能有效减少重复校验代码。Sp
2026-07-16 13:39:30
242
原创 Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
摘要 SLF4J是Java中常用的日志门面框架,提供统一API解耦业务代码与日志实现(如Logback、Log4j2)。它通过{}占位符优化日志输出,支持多级别日志(TRACE至ERROR)。关键优势在于: 应用代码只依赖SLF4J接口 运行时绑定具体日志实现 推荐异常日志包含完整堆栈 2.x版本新增Fluent API支持结构化日志 Spring Boot项目通常默认集成SLF4J+Logback,无需额外配置。日志级别应根据场景合理选择,生产环境建议以INFO为主,DEBUG仅用于问题排查。
2026-07-15 18:00:06
200
原创 看懂 IL 的关键:C#.NET 栈机执行模型实战拆解
摘要 .NET IL(中间语言)采用栈机模型,其核心在于通过计算栈隐式操作数据。与C#显式变量和表达式不同,IL指令(如add)默认从栈顶弹出操作数并压回结果。例如,ldarg.0和ldarg.1依次加载参数到栈顶,add执行加法后栈顶仅存结果。实例方法中ldarg.0代表this,后续参数从ldarg.1开始。方法调用时,参数按顺序压栈,返回值由ret从栈顶获取。计算栈、调用栈和托管堆是三个关键概念,分别用于临时数据、方法调用链和对象存储。理解栈机模型是解读IL的关键,需始终关注指令对计算栈的影响。
2026-07-14 13:37:06
192
原创 别再把 Util 类堆成杂物间:Kotlin Extension 扩展函数与扩展属性实战详解
Kotlin Extension 简明指南 Kotlin Extension 允许为现有类添加新方法而不修改其源代码,本质上仍是静态函数但调用方式更自然。关键特性包括: 语法结构:fun 接收者类型.扩展函数(),如 String.isEmail() 本质原理:编译后转为普通静态函数,接收者作为首个参数 典型应用: 封装类型相关的工具方法(如字符串处理、日期格式化) 简化业务逻辑(如订单状态展示) 为可空类型提供兜底操作 优势: 代码组织更符合直觉 支持泛型扩展(如集合工具方法) 可空接收者处理更优雅 注意
2026-07-10 07:59:48
221
原创 别把 CLI 写成一坨 os.Args:Go Cobra 从命令树到实战工具详解
本文介绍了如何使用Go的Cobra库构建命令行工具。Cobra通过命令树结构组织子命令、参数和校验逻辑,解决了复杂CLI工具的常见问题。文章对比了标准库与Cobra的实现差异,详细讲解了Command、Args、Flag三个核心概念,以及本地/持久Flag、参数校验等关键特性。最后通过一个完整的todoctl待办事项工具示例,展示了Cobra在实际项目中的应用,包括命令组织、错误处理和数据存储等实现细节。该框架特别适合需要多级子命令和复杂参数处理的CLI程序开发。
2026-07-09 07:47:53
183
原创 Java ActiveMQ 实战指南:从 JMS 队列、主题到 Spring Boot 消息处理
ActiveMQ 是 Apache 提供的 JMS 消息中间件,主要用于 Java 生态中的异步处理、系统解耦和任务分发。它支持点对点(Queue)和发布订阅(Topic)两种模式,适用于订单处理、短信通知等场景。ActiveMQ 分为 Classic(传统版本)和 Artemis(新一代高性能版本),老系统多使用 Classic 版本。与 RabbitMQ 相比,ActiveMQ 更专注于 JMS 规范,而 RabbitMQ 提供更灵活的路由功能。开发者可通过 Docker 快速搭建 ActiveMQ 环
2026-07-08 07:51:42
305
原创 Java RabbitMQ 实战指南:从交换机、队列到可靠消息处理
RabbitMQ是一个基于AMQP协议的消息队列中间件,主要用于异步处理、系统解耦、流量削峰和任务分发。核心概念包括生产者、消费者、交换机、队列和路由机制。RabbitMQ支持多种交换机类型(Direct、Fanout、Topic等),满足不同消息路由需求。通过Docker可快速搭建RabbitMQ环境,Java客户端可通过原生API实现消息生产和消费。典型应用场景如订单系统拆分,将短信、邮件等非核心逻辑异步处理,提升系统响应速度和稳定性。
2026-07-07 09:23:31
277
原创 Java Maven 实战指南:从 POM、依赖管理到多模块构建
Maven简介与核心功能 Maven是Java项目标准化的构建和依赖管理工具,通过pom.xml配置文件实现: 统一项目目录结构 自动下载管理依赖 标准化构建流程(编译、测试、打包、发布) 支持多模块项目管理 核心机制: 坐标系统(groupId/artifactId/version)唯一标识构件 本地/远程仓库管理依赖 生命周期控制构建顺序 插件执行具体任务 典型使用场景: 开发时通过mvn compile编译 测试时通过mvn test运行测试 打包时通过mvn package生成jar/war 支持M
2026-07-06 11:29:54
232
原创 Java Future 与 CompletableFuture 实战指南:从异步结果到任务编排
本文介绍了Java中的Future和CompletableFuture异步编程工具。Future是Java 5引入的异步结果占位符,通过get()方法阻塞获取任务结果,支持超时和取消操作,但功能较为基础。CompletableFuture是Java 8增强的异步编程工具,实现了链式调用和任务编排功能,支持结果转换、异常处理、多任务组合等高级特性。两者的核心区别在于Future适合接收单个异步任务结果,而CompletableFuture更适合编排一组异步任务流程,提供了更灵活的异步编程范式。
2026-07-05 16:30:51
181
原创 别再只会 if err != nil:Go error 从错误链到工程实战详解
Go 错误处理最佳实践摘要(150字) Go采用显式错误处理,通过error接口和返回值传递错误。核心原则包括: 错误应携带上下文,使用fmt.Errorf包装(%w)或自定义错误类型 比较错误用errors.Is检查哨兵错误,errors.As提取结构化错误 错误处理应靠近错误源,保持主逻辑清晰 分层包装错误形成调用链,保留原始错误信息 日志记录通常在调用链最上层进行 简单错误用errors.New,需程序识别的定义哨兵错误 关键点:错误是值而非异常,应通过组合和包装保持可追溯性,同时提供足够的诊断信息。
2026-07-04 07:47:42
193
原创 Kotlin 运算符重载详解:为什么 a += b 有时改对象,有时换对象?
本文介绍了Kotlin的运算符重载机制,通过固定运算符与特定函数名的映射关系,让自定义类支持运算符操作。文章首先展示了运算符重载的基本原理,指出像+、in等运算符实际上对应着plus()、contains()等成员函数。然后通过一个二维坐标点Point类的示例,演示如何通过实现operator fun plus()来支持+运算。文中还列出了常用运算符的映射表,包括一元运算符、算术运算、区间判断、索引访问等,并强调了运算符重载不能改变运算优先级。最后以金融场景的Money类为例,展示了金额计算如何通过重载运算
2026-07-03 14:29:32
210
原创 别再把类型断言当强制转换:Go 从 comma-ok 到 type switch 实战详解
Go 类型断言与类型转换对比摘要 Go 语言中,类型断言 value.(T) 用于检查接口值的动态类型,而类型转换 T(value) 用于在不同类型间转换值。 关键区别: 类型断言:检查接口值内部存储的实际类型,匹配则返回值,否则 panic 或返回失败标志 类型转换:在允许转换的类型间改变值的表示形式 主要特点: 类型断言必须作用于接口值,类型转换适用于基础类型 断言目标类型必须精确匹配(包括指针类型和自定义类型) 推荐使用双返回值形式 val, ok := iface.(T) 避免 panic 多种类型
2026-07-02 11:23:43
216
原创 别再把 inline 当性能开关:Kotlin 内联、noinline、crossinline 与 reified 实战详解
Kotlin 的 inline 关键字专为高阶函数设计,核心作用是在编译期展开函数体和 Lambda 代码。它不仅减少函数调用开销,更关键的是改变 Lambda 的行为:支持非局部返回与 reified 泛型。内联适合短小高频调用的流程封装(如标准库函数),但需避免滥用——大函数或非必要场景会导致代码膨胀。典型应用包括统一日志/耗时处理模板,以及利用非局部返回简化循环控制。合理使用 inline 能提升性能与编码体验,但需权衡代码体积与维护成本。
2026-07-01 09:47:44
160
原创 别再只会用 cron:Linux systemd Timer 定时任务实战详解
文章摘要: Linux定时任务通常使用cron,但复杂任务(如日志、依赖管理)可能难以维护。systemd Timer提供了更灵活的替代方案,将定时触发(.timer)与任务执行(.service)分离,并集成systemd的服务管理能力(如日志、权限控制)。Timer支持日历时间(如OnCalendar=daily)和单调时间(如OnBootSec=5min),还能处理补跑、随机延迟等场景。与cron相比,Timer更适合需要精细控制的系统服务,而简单任务仍可用cron。最小示例展示了每分钟输出时间的实现
2026-06-30 07:47:26
168
原创 别把泛型写复杂了:Go generic 从类型参数到实战封装
Go 1.18 引入的泛型特性允许开发者编写更通用且类型安全的代码。泛型的核心思想是将类型作为参数传递,使同一套逻辑能适配多种类型。通过类型参数和约束(如 any、comparable 或自定义约束),可以避免重复编写功能相似但类型不同的代码。例如,求和函数 Sum 可以同时处理 int、float64 等类型。泛型还支持类型推断,简化调用方式。内置约束 comparable 确保类型可比较,适用于查找函数或 map 操作。泛型提升了代码复用性和类型安全性,是 Go 语言的重要增强。
2026-06-29 08:07:21
179
原创 MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
MySQL从5.7.8开始支持原生JSON数据类型,适合存储结构灵活但需要查询修改的数据,如商品属性、用户配置等。相比TEXT类型,JSON会自动校验格式、支持二进制存储和路径操作,并能通过生成列建立索引。 JSON适用于结构不固定、查询频率较低的数据(如商品扩展属性),而核心业务字段(如价格、状态)仍应使用普通列。创建JSON字段时可使用JSON_OBJECT()和JSON_ARRAY()函数构造数据,并通过JSON_EXTRACT(->)和->>操作符提取值,后者会去掉字符串引号。 示例演示了如何在商品
2026-06-28 09:56:45
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅