SF
唐青枫
唐青枫
注册登录
关注博客
注册登录
主页
关于
RSS
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
唐青枫
6 月 24 日
阅读 12 分钟
67
简介Thread 是 .NET 里直接创建和管理线程的底层 API。命名空间: {代码...} 最简单的写法: {代码...} 一句话概括: {代码...} 不过,现代 .NET 项目里并不需要到处 new Thread()。常见选择应该是: {代码...} Thread 更底层,也更难管理。只有确实需要专用线程时,它的价值才真正体现出来。线程到底是什么?一个正在运...
别只会反射:C#.NET Emit 动态生成代码实战详解
唐青枫
6 月 23 日
阅读 15 分钟
102
简介Emit 通常指的是: {代码...} 它是 .NET 里一套非常底层的运行时代码生成 API。一句话概括: {代码...} 普通 C# 代码是先写源码,再编译成程序集,然后运行。Emit 的思路不一样: {代码...} 这听起来有点像“运行时手写 IL”。实际也差不多。Emit 能解决什么问题?Emit 不是日常业务代码的首选工具。它更常见于框架底...
Kotlin Context Parameters 详解:别再把 Logger、事务和配置层层往下传
唐青枫
6 月 22 日
阅读 15 分钟
86
简介项目代码写久了,很容易出现这种函数签名: {代码...} 真正的业务参数只有 userId 和 productId。后面的 logger、config、tx 更像“运行环境”:日志对象配置对象当前登录用户数据库事务权限能力请求上下文监控埋点对象这些对象通常不会在每一层变化,但又经常被一层层传下去。于是代码就变成了这样: {代码...} 业务...
别再把 interface 当万能盒子:Go 接口从隐式实现到项目解耦
唐青枫
6 月 21 日
阅读 13 分钟
151
简介interface 是 Go 里非常重要的类型。它不保存字段,也不写具体逻辑。它只定义一组方法。比如: {代码...} 这段代码表达的是: {代码...} 一句话概括: {代码...} 结构体更像“数据长什么样”。接口更像“能做什么事”。例如: {代码...} 第一个 interface 示例先看一个最小例子。 {代码...} 输出: {代码...} Say 函数只...
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
唐青枫
6 月 20 日
阅读 11 分钟
196
简介TaskFactory 是 .NET 里专门用来创建和调度 Task 的工厂类。最常见的入口是: {代码...} 很多代码里会把它当成 Task.Run 的高级版,甚至直接用它替代 Task.Run。这种理解只对了一半。一句话概括: {代码...} 普通后台任务,直接用 Task.Run 通常更清楚。只有需要这些能力时,TaskFactory 才更合适:指定 TaskSchedul...
Java JDBC 实战指南:从 Connection 到事务和连接池
唐青枫
6 月 19 日
阅读 17 分钟
264
JdbcTemplate、MyBatis、MyBatis-Plus、MyBatis-Flex、Spring Data JPA,底层最终都会通过 JDBC 和数据库通信。
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
唐青枫
6 月 18 日
阅读 10 分钟
268
简介Tomcat 全名是 Apache Tomcat。它是 Java Web 领域很常见的 Servlet 容器,也可以理解成轻量级 Java Web 服务器。它主要负责这些事情: {代码...} 传统 Java Web 项目、Spring MVC 项目、打成 WAR 包的 Spring Boot 项目,都可以部署到 Tomcat。一句话概括: {代码...} Tomcat 在 Java Web 里的位置一个典型请求链路...
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
唐青枫
6 月 17 日
阅读 11 分钟
248
简介Flyway 是一个数据库迁移工具。它解决的问题和 Liquibase 类似: {代码...} 不过 Flyway 的风格更简单直接。它主要通过 SQL 文件管理数据库变更。比如: {代码...} 应用启动或命令执行时,Flyway 会检查哪些脚本已经执行过,哪些还没执行,然后按版本顺序执行新的脚本。一句话概括: {代码...} Flyway 适合什么场景...
别再怕指针:Go pointer 从地址到实战用法
唐青枫
6 月 16 日
阅读 11 分钟
229
简介pointer 是 Go 里绕不开的基础概念。中文通常叫“指针”。它的作用很简单: {代码...} 先看一个最小例子: {代码...} 这里:a 是普通变量,值是 10&a 是 a 的地址p 是指针变量,保存了 a 的地址*p 可以拿到 p 指向的值一句话概括: {代码...} Go 的指针比 C/C++ 更克制。Go 有指针,但没有指针运算。也就是说,Go ...
Kotlin with 详解:把已有对象放进作用域集中处理
唐青枫
6 月 15 日
阅读 9 分钟
296
简介with 是 Kotlin 标准库里的作用域函数。作用域函数常见有 5 个:letrunwithapplyalsowith 的定位很清楚:把一个已有对象传进去,在这个对象的作用域里执行一段逻辑,然后返回 Lambda 最后一行的结果。常见写法: {代码...} 这里的 name、age 来自 user 对象,result 是 Lambda 最后一行的字符串。with 适合这类场景...
Java Liquibase 实战指南:让数据库变更像代码一样可追踪
唐青枫
6 月 14 日
阅读 16 分钟
317
简介Liquibase 是一个数据库变更管理工具。它解决的问题不是: {代码...} 而是: {代码...} 比如项目从第一个版本到第三个版本,数据库可能经历这些变化: {代码...} 如果靠手动执行 SQL,很容易出现这些问题: {代码...} Liquibase 的做法是把数据库变更写成文件,并纳入 Git 管理。应用启动或命令执行时,Liquibase 会...
Php Doctrine ORM 实战详解:从实体映射到查询、关联与事务
唐青枫
6 月 13 日
阅读 23 分钟
338
简介Doctrine ORM 是 PHP 生态里非常常见的对象关系映射框架,Symfony 项目中用得尤其多。它的作用可以用一句话概括: {代码...} 传统写法通常是直接写 SQL: {代码...} 使用 Doctrine 后,代码会变成操作实体对象: {代码...} 表面上只是写法变了,底层做的事情更多:Product 类映射到 product 表$product->setName(...
Kotlin run 详解:把对象操作收进作用域,再把结果带出来
唐青枫
6 月 12 日
阅读 10 分钟
305
简介run 是 Kotlin 标准库里的作用域函数。作用域函数常见有 5 个:letrunwithapplyalsorun 的特点比较鲜明:在对象作用域里执行一段逻辑,然后返回 Lambda 最后一行的结果。常见写法: {代码...} 这里的 name、age 来自 user 对象,result 是 Lambda 最后一行的字符串。run 适合这类场景:在一个对象里连续读取多个属性...
别再把 struct 只当字段集合:Go 结构体从语法到项目实战
唐青枫
6 月 11 日
阅读 15 分钟
313
简介struct 是 Go 里最重要的复合类型之一。它用来把多个字段组合成一个整体。比如一个用户有 ID、名称、邮箱、年龄: {代码...} 这段代码表达的是: {代码...} Go 没有传统意义上的 class,但很多业务模型都会用 struct 表达:用户商品订单配置请求参数响应结果数据库实体一句话概括: {代码...} struct 的基本定义结构...
Java Spring Data JPA 实战指南:Repository 查询、分页与实体映射
唐青枫
6 月 10 日
阅读 20 分钟
365
简介Spring Data JPA 是 Spring Data 家族里专门用来简化 JPA 开发的模块。它不是一个新的 ORM 规范。更准确地说: {代码...} 在 Spring Boot 项目里,常见调用链大致是: {代码...} 它的核心目标是: {代码...} 一句话概括: {代码...} JPA、Hibernate、Spring Data JPA 的关系这几个概念经常一起出现。JPAJPA 全称是 J...
Java MyBatis 实战指南:XML 映射、动态 SQL 与数据访问层设计
唐青枫
6 月 9 日
阅读 23 分钟
417
简介MyBatis 是 Java 里很常见的持久层框架。它做的事情可以简单理解为: {代码...} 相比直接写 JDBC,MyBatis 省掉了大量重复代码: {代码...} 相比全自动 ORM,MyBatis 又保留了 SQL 的控制权。SQL 写成什么样,执行计划怎么优化,字段怎么映射,都可以清楚地放在 Mapper XML 或注解里。一句话概括: {代码...} MyBati...
Java MyBatis-Plus 实战指南:用 BaseMapper、Wrapper 和分页写好数据层
唐青枫
6 月 8 日
阅读 21 分钟
534
简介MyBatis-Plus 是一个基于 MyBatis 的增强工具。它经常被简称为 MP。它的核心定位是: {代码...} 普通 MyBatis 项目里,哪怕只是做一张表的增删改查,也经常要写: {代码...} MyBatis-Plus 把这些单表常规操作封装成了通用方法。最常见的写法是: {代码...} 继承 BaseMapper<User> 后,就可以直接使用: {代码....
别再把 make 和 new 搞混:Go make 从切片到通道实战详解
唐青枫
6 月 7 日
阅读 11 分钟
367
简介make 是 Go 里的内置函数,专门用来创建并初始化三种类型:slicemapchannel语法大概长这样: {代码...} 常见写法: {代码...} 一句话概括: {代码...} 这点和 new 不一样。new 返回指针,得到的是某个类型的零值指针。make 返回类型本身,得到的是已经初始化好的 slice、map、channel。为什么需要 make先看三个变量...
别再把 new 当构造函数:Go new 从零值指针到实战用法
唐青枫
6 月 6 日
阅读 9 分钟
472
简介new 是 Go 里的内置函数,作用很简单: {代码...} 语法如下: {代码...} 比如: {代码...} 这行代码会得到一个 *int 类型的指针,指针指向的值是 int 的零值,也就是 0。一句话概括: {代码...} 注意,new 不是很多语言里的“构造函数”。它不会调用构造方法,也不会帮结构体字段填业务默认值,只做两件事:分配内存清...
Kotlin also 详解:附加操作、链式调试与实战示例
唐青枫
6 月 5 日
阅读 9 分钟
451
简介also 是 Kotlin 标准库里的作用域函数。作用域函数常见有 5 个:letrunwithapplyalsoalso 主要用于附加操作,比如打印日志、调试中间结果、做校验、记录埋点、保存审计信息。一句话概括:also 会把当前对象传进 Lambda,执行一段附加逻辑,然后返回对象本身。常见写法: {代码...} 这里的 result 仍然是 value 本身...
Kotlin apply 详解:对象初始化、链式配置与实战示例
唐青枫
6 月 4 日
阅读 11 分钟
534
简介apply 是 Kotlin 标准库里的作用域函数。作用域函数常见有 5 个:letrunwithapplyalsoapply 主要用于对象初始化、属性赋值、链式配置。一句话概括:apply 会在对象自己的作用域里执行一段代码,执行完成后返回对象本身。常见写法: {代码...} 这段代码的含义是: {代码...} apply 的源码结构Kotlin 标准库里,apply ...
Java MyBatis-Flex 实战指南:从 BaseMapper 到 QueryWrapper 的轻量 ORM 用法
唐青枫
6 月 3 日
阅读 20 分钟
404
简介MyBatis-Flex 是一个基于 MyBatis 的增强框架。它的定位很直接: {代码...} 普通 MyBatis 项目里,常见代码结构是: {代码...} 如果只是做一张表的增删改查,也要写不少重复 SQL。MyBatis-Flex 的思路是: {代码...} 一句话概括: {代码...} MyBatis-Flex 解决什么问题先看普通 MyBatis 的单表查询。Mapper 接口: {...
Java Optional 实战指南:优雅处理空值与链式转换
唐青枫
6 月 2 日
阅读 17 分钟
643
简介Optional 是 Java 8 引入的一个容器类,包路径是: {代码...} 它用来表达一种很常见的情况: {代码...} 比如按 ID 查询用户: {代码...} 如果找到了,返回 User。如果没找到,传统写法通常返回 null。Optional 的写法是: {代码...} 这段代码的含义更明确: {代码...} 一句话概括: {代码...} 为什么需要 Optional先...
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
唐青枫
6 月 1 日
阅读 21 分钟
396
简介JdbcTemplate 是 Spring JDBC 模块提供的数据库访问工具类。它解决的是原生 JDBC 里很常见的一类重复工作: {代码...} 原生 JDBC 能做的事情,JdbcTemplate 基本都能做。区别在于,JdbcTemplate 把连接管理、资源释放、异常转换这些固定流程封装好了,业务代码只需要关注: {代码...} 一句话概括: {代码...} 原生 J...
Kotlin let 详解:空安全、链式转换与实战示例
唐青枫
5 月 31 日
阅读 10 分钟
499
简介let 是 Kotlin 标准库里的作用域函数。作用域函数常见有 5 个:letrunwithapplyalsolet 的使用频率很高,尤其是在处理可空对象、临时变量、链式转换时。一句话概括:let 会把当前对象传进 Lambda,Lambda 的最后一行作为整个 let 的返回值。常见写法: {代码...} 如果配合安全调用符 ?.: {代码...} 这也是 let 在实...
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
唐青枫
5 月 30 日
阅读 8 分钟
606
简介EXISTS 是 MySQL 里用来做存在性判断的语法。它关心的问题很直接: {代码...} 有数据,EXISTS 的结果为真;没有数据,EXISTS 的结果为假。对应地,NOT EXISTS 判断的是: {代码...} 最常见的业务场景有这些:查询有订单的用户查询没有订单的用户判断某条记录是否存在查询满足关联条件的数据查询缺少关联数据的数据防...
C#.NET YARP 服务发现实战:接入 Consul 和 Kubernetes 动态发现后端服务
唐青枫
5 月 29 日
阅读 18 分钟
353
简介前面几篇已经把 YARP 的基础代理、JWT、CORS、OpenTelemetry 都串起来了。服务发现是网关实战里很关键的一步: {代码...} 普通配置里,后端地址通常写在 appsettings.json: {代码...} 这在本地 Demo 没问题,但到了真实环境会遇到这些情况:服务实例会扩容、缩容实例地址会变化某个实例挂了以后不能继续转发过去后...
Kotlin Lambda 表达式详解:从基础语法到实战封装
唐青枫
5 月 28 日
阅读 12 分钟
438
集合操作里的 map、filter、forEach,作用域函数里的 let、apply、also,线程、回调、DSL 风格 API,背后都能看到 Lambda。
Kotlin 高阶函数别只会 map:从 Lambda 到实战封装
唐青枫
5 月 26 日
阅读 11 分钟
466
简介Kotlin 高阶函数(Higher-order Function)一句话就能说清楚:函数的参数是函数,或者函数的返回值是函数。听起来像绕口令,实际开发里非常常见。比如集合里的 map、filter、forEach,空值处理常用的 let,对象初始化常用的 apply,本质上都离不开高阶函数。高阶函数的价值不在于“语法高级”,而在于把容易变化的逻辑...
别把登录写散了:C#.NET IdentityServer4 统一认证与 JWT 授权实战
唐青枫
5 月 25 日
阅读 15 分钟
469
简介IdentityServer4 是一个基于 ASP.NET Core 的认证授权框架。它主要做一件事: {代码...} 在单体项目里,登录通常直接写在业务系统里: {代码...} 项目一多,问题就来了:每个系统都要写登录每个系统都要管用户状态前端、App、后台管理端都要各自适配微服务之间调用也需要鉴权第三方系统接入时很难统一控制权限于是认...
1
(current)
2
3
4
5
…
More
下一页
1
(current)
下一页