如何在 C# 中创建、读取和更新 Excel 文档

这篇文章围绕 C# 中常见的 Excel 增删改查需求,整理了使用 Spire.XLS for .NET 的实际做法。相比依赖 Office 的 COM Interop,它在部署、性能和跨平台支持上更省事,适合做导入导出、报表生成和批量数据处理。 在 C# 项目里处理 Excel,看似只是文件读写,实际往往牵扯部署环境、性能表现和后续维护成本。

如何在 C# 中创建、读取和更新 Excel 文档

nohup 不能自动重启进程,4 种可行方案这样选

`nohup` 只能让进程在退出终端后继续运行,并不负责拉起已崩溃的程序。本文把常见的 4 种补救方案拆开讲清:循环脚本、`systemd`、`supervisord` 和 `cron`,并说明各自适合的部署环境与取舍。 很多人会把 nohup 当成“后台常驻”的通用解法,但它只能保证退出终端后进程继续跑,不能在进程崩溃后自动拉起。

nohup 不能自动重启进程,4 种可行方案这样选

CentOS 上 tcpdump 与 Wireshark、iftop、nethogs、nload 怎么选

tcpdump 仍是 CentOS 服务器上最常用的抓包工具,但它并不适合所有场景。本文把 tcpdump 与 Wireshark、iftop、nethogs、nload 放在同一张表里比较,重点看功能深度、资源占用和适用场景,帮助你按问题类型选工具。 在 CentOS 服务器上,tcpdump 往往是排查网络问题时最先想到的工具,但“能抓包”并不等于“适合所有问题”。

CentOS 上 tcpdump 与 Wireshark、iftop、nethogs、nload 怎么选

SQLite 3 如何实现数据不存在才插入?

SQLite 3 不能直接写 `INSERT IF NOT EXISTS`。要实现“数据不存在才插入”,通常只有两条路:基于唯一约束的 `INSERT OR IGNORE`,或用 `INSERT ... SELECT ... WHERE NOT EXISTS` 做显式判断;两者适用场景、性能和坑点都不一样。 在 SQLite 3 里,很多人会下意识写出 INSERT IF NOT EXISTS ,但这条语法本身并不存在。真正要做“防重插”,要么依赖表上的唯一约束配合 INSERT OR IGNORE ,要么改写成带子查询的 INSERT ... SELECT ... WHERE NOT EXISTS 。

SQLite 3 如何实现数据不存在才插入?

Linux 下 Java 日志清理技巧有哪些

Linux 上跑 Java 服务时,日志膨胀往往比预期更快。本文从系统工具、Shell 脚本、日志框架、systemd 日志和手动清理五个层面梳理可用方案,帮助你按部署方式和保留要求选出更稳妥的清理策略。 Java 服务跑在 Linux 上,日志失控通常不是偶发问题,而是缺少轮转和保留策略的结果。

Linux 下 Java 日志清理技巧有哪些

怎样用 SQL JSON 函数查询数组中的指定元素

查询 SQL JSON 数组时,最常见的问题不是函数失效,而是字段类型、路径表达式和元素类型没对上。本文用 MySQL 与 PostgreSQL 两套写法,梳理 JSON_CONTAINS、JSON_EXTRACT、JSON_TABLE 与 jsonb 操作符的适用场景、坑点和性能差异。 很多人第一次查 SQL 里的 JSON 数组,都会遇到同一个现象:语句看起来没错,结果却始终查不到。

怎样用 SQL JSON 函数查询数组中的指定元素