代码的“病历本”:深入解读 C# 常见异常

这篇文章按开发中最常见的触发场景,梳理了 C# 里几类高频异常:空引用、索引越界、格式错误、参数错误、类型转换、对象状态错误和 I/O 异常。重点不是背定义,而是判断哪些问题该靠前置校验避免,哪些必须用 `try-catch` 在运行时兜住。

代码的“病历本”:深入解读 C# 常见异常

SQL 缺失值怎么填?4 种窗口函数思路与适用边界

SQL 里填充缺失值,重点不是“补上就行”,而是按有序数据和业务语义选对方式。常见做法包括用 LAG()/LEAD() 取相邻有效值、用 COALESCE() 组合近邻候选,以及在支持 IGNORE NULLS 的数据库里用 FIRST_VALUE() 做前向填充。 在 SQL 里处理缺失值,最容易犯的错不是不会写函数,而是把“补出一个值”和“补对一个值”混为一谈。

SQL 缺失值怎么填?4 种窗口函数思路与适用边界

SQL 窗口函数如何发现序列号断档

用 SQL 查序列号断档,核心不是把所有数字生出来逐个比,而是先分清你要找的是“相邻 ID 的物理缺口”还是“业务定义下的合法值缺失”。这篇文章用 LAG()、LEAD() 和反例 ROW_NUMBER() 拆解判断方法,并补上空表、NULL 与跨数据库边界处理。

SQL 窗口函数如何发现序列号断档

SQL 批量 INSERT 数据时,如何避免主键冲突

批量插入遇到主键或唯一键重复时,核心不是“怎么不报错”,而是按数据库方言选择真正的跳过写法。MySQL、PostgreSQL 和 SQL Server 的语义、锁行为与开销差异很大,用错语句往往会把简单去重变成阻塞和死锁问题。

SQL 批量 INSERT 数据时,如何避免主键冲突

SQL 中聚合函数为什么不能直接嵌套使用?

SQL 里像 `AVG(SUM(x))` 这样的写法不是“括号套错了”,而是标准层面就被禁止。本文从语法限制、语义歧义、子查询与 CTE 的正确改写方式,再到窗口函数边界和平均值口径偏差,梳理为什么会报错,以及怎样写出结果可信的两层聚合查询。

SQL 中聚合函数为什么不能直接嵌套使用?

Kotlin `return@find` 用法讲清:它返回的不是外层函数

`return@find` 是 Kotlin 里常见的标签返回写法,核心作用不是“结束整个函数”,而是只从 `find {}` 这段 lambda 中返回结果。本文结合示例拆清它与普通 `return` 的区别,并说明为什么在 `find`、`forEach`、`map` 等高阶函数里需要这种显式写法。

Kotlin `return@find` 用法讲清:它返回的不是外层函数

如何用 SQL 窗口函数统计连续登录天数?

统计连续登录天数,常见做法是用 `ROW_NUMBER()` 配合日期序数打出连续段分组,再按组聚合得到每段长度,最后取最长值。实际落地时还要处理跨库日期函数、同日重复登录、`LAG()` 的适用边界,以及时区和时间精度带来的误判。

如何用 SQL 窗口函数统计连续登录天数?

Scala 伴生类、伴生对象与 `apply()`、`case class` 一次讲清

这篇文章围绕 Scala 的伴生类、伴生对象与 `apply()`、`case class` 展开,梳理它们和 Java `static` 思路的对应关系、调用差异与典型用法。读完后,你可以判断什么时候该把成员放进 `object`,什么时候使用 `case class` 简化建模。 很多从 Java 转到 Scala 的开发者,都会先被一个基础问题绊住:没有 `static` 之后,类级别的方法、常量和入口函数该怎么组织。

Scala 伴生类、伴生对象与 `apply()`、`case class` 一次讲清

如何通过 nohup 命令保持进程运行

`nohup` 是 Linux/Unix 下让命令脱离当前终端继续运行的常用工具,适合跑脚本、长任务和远程会话中的后台进程。本文按“启动、查看输出、检查状态、结束进程”的顺序整理用法,并保留最常见命令示例,方便直接上手。

如何通过 nohup 命令保持进程运行