程序侧数据库性能优化:从连接池到批量写入的实践指南
做数据库性能优化很多人会陷入一个误区SQL 写得够好、索引建得够全数据库就应该飞起来。但真实环境里最常见的情况却恰恰相反——SQL 在命令行里单独执行只要十几毫秒一放进程序里就变成几百毫秒并发一上来直接超时DBA 查慢日志又什么都看不出来。这种时候问题往往不在数据库引擎本身而在程序跟数据库打交道的方式上。我把这类问题统称为“程序操作优化”也就是把视角从底层的参数调优、索引设计往上提一层聚焦到应用代码怎么连接数据库、怎么开启事务、怎么执行查询、怎么批量写入这些环节。它和单纯改 SQL、调配置不是一回事但这些环节里任何一个不规范的小动作都有可能成为拖垮整个数据库的隐形杀手。这篇文章就是我在实际项目里踩坑、排查、总结出来的一套程序侧优化经验偏实操少讲虚的适合正在为线上接口性能头疼的后端开发同学参考。1. 程序侧的坑往往比 SQL 本身更致命很多性能问题的表象都在数据库上但根子却在程序代码里。先把这个认知掰正后面所有优化手段才用得上。1.1 单条 SQL 很快接口为什么还是慢我遇到过不止一次这样的场景慢查询日志里根本没有这条 SQL但线上接口就是频繁超时。把 SQL 拿出来单独在客户端工具里执行发现就连大表扫描都很快。那问题出在哪答案在数据库之外。一条完整的业务操作通常包含多次 SQL 执行、多次网络往返、数次对象转换和业务逻辑计算。SQL 本身只占其中一小段程序操作的方式决定了其他开销有多大。举个例子一个订单列表接口返回 100 条数据如果代码里是用循环逐条查询用户信息、逐条查询商品信息最终执行的 SQL 数量就是 200 多条。每次 SQL 执行都要经历建立连接、发送请求、数据库解析执行、返回结果、解析结果这一整套链路虽然单次可能只要 1 到 2 毫秒但 200 次累积下来就是几百毫秒。数据库 CPU 看着不高连接数却居高不下。所以排查接口慢的问题永远不要只盯着某一条 SQL 的耗时而是要看这个接口底层到底发起了多少次数据库交互。1.2 理清应用与数据库之间完整的调用链路我排障时习惯先画一条时间线把一次请求从进入到返回全流程拆开标出每个环节消耗的时间。步骤如下在入口处记录请求开始时间。在数据访问层记录每个 SQL 的开始和结束时间。在业务逻辑处理完成后记录组装结果的时间。在出口处记录请求结束时间。这套流程跑一遍很快就能算出纯 SQL 耗时占接口总耗时的比例。如果 SQL 总耗时只有 50 毫秒接口却耗时 500 毫秒那 450 毫秒就是程序操作层面浪费掉的。常见浪费点包括循环查询、对象转换反复执行、线程频繁切换、连接获取等待、事务长时间持有锁等。提示这步排查不需要上很重的基础设施工具先用最笨的日志打点把数据拉出来算一算往往就能定位大方向。1.3 哪些问题属于程序操作优化的范畴结合我这几年的经验以下几类问题都应该归到程序操作优化里也是本文要重点展开的内容连接管理连接池参数不合理、连接泄漏、获取连接等待过久。事务操作事务边界过大、长事务持有锁、事务内嵌入外部调用。数据访问方式N1 查询、逐条增删改、不合理的关联抓取策略。高频场景实现深度分页、联合排序、大范围 IN 查询等场景的程序级实现方式。预处理机制是否使用了预编译语句、执行计划是否被复用。批量操作大批量数据写入和更新时的拆分策略与提交节奏。这些问题有一个共同特点不解决加再多数据库缓存、再强的硬件配置效果都会被程序低效的调用方式抵消掉。2. 连接管理连接池配置是第一道关卡程序操作数据库的第一步就是获取连接。连接管理做不好后面的优化全都白搭。2.1 连接池不是越大越好新手刚接触连接池时容易产生一个错觉连接数开得越大并发处理能力就越强。实际上连接池越大数据库压力反而可能越大系统整体性能甚至会断崖式下跌。之前有个项目就是这种典型。业务高峰期数据库 CPU 飙升到 90% 以上慢查询倒是没几条但数据库连接数却已到上限。查下来发现应用部署了多个实例每个实例连接池最大连接数设置成了 100结果一开高峰所有实例同时抢连接数据库根本忙不过来。数据库每个连接都需要消耗内存和进程资源同时活跃事务越多锁冲突和并发协调的开销就越大。连接池的真正作用不是堆并发而是复用连接、控制并发上限。我个人的经验是单实例连接池上限不要盲目超过 20。大多数业务场景下 10 到 15 就足够了配合等待队列机制超出的请求排队等待空闲连接即可。2.2 合理设置连接池参数的思路连接池的核心参数就那么几个最大连接数、最小空闲连接、初始连接数、获取连接超时时间、连接空闲回收时间。配置时不是拍脑袋定个数字而是要根据业务特征算一算。假设一个接口平均耗时 100 毫秒其中数据库操作占 60 毫秒目标并发请求数是 200 QPS。要估算需要的连接数可以用公式连接数 ≈ 数据库操作耗时 / 接口平均耗时 × 并发请求数 0.6 × 200 120但这个 120 是数据库侧总的并发连接需求。如果应用部署了 10 个实例那每个实例的连接池应该控制在 12 左右而不是把 120 全塞进一个实例里。所以更准确的理解是连接池大小要根据“单个实例需要同时发起的数据库并行操作数量”来设定而不是照抄网上别人的配置。配置示例# 连接池参数参考以单实例为单位 maximum-pool-size: 15 minimum-idle: 5 connection-timeout: 3000 idle-timeout: 600000 max-lifetime: 1800000这几个值背后的逻辑是保留一定空闲连接应对流量尖峰但不高高挂起一堆无用连接获取连接等待不超过 3 秒避免请求线程无限期挂死连接最长存活 30 分钟防止数据库端主动断开后应用还在使用失效连接。注意如果应用侧配置了获取连接超时程序里还要配合做好降级和快速失败处理不能让所有请求都堆在连接等待上否则一旦连接池耗尽整个应用会像雪崩一样全部超时。2.3 连接泄漏与断线重连问题连接泄漏是程序操作里最隐蔽又最常见的坑。表现是系统运行一段时间后连接池里的连接被占满新请求全部超时重启应用才能恢复。常见原因就一个代码里拿到的连接没有在 finally 块中释放或者异常抛出时跳过了释放逻辑。使用带连接池的数据访问框架时很多人以为框架会自动管理连接释放其实框架只是在方法结束后把连接归还给连接池。一旦业务代码在获取连接后发生了未捕获异常连接就可能一直留在池外。处理这个问题我建议分两步走代码层强制使用“先声明后释放”的模板写法获取连接的代码和释放连接的代码放在同一个方法结构里中间不允许出现提前 return。连接池开启泄漏检测当连接从池中取出后超过设定时间未归还就打印告警日志并主动回收。这是一个非常实用的兜底手段能在连接还没彻底耗尽前提前暴露出问题代码。3. 事务使用锁竞争和长事务往往源于程序代码事务是把双刃剑。用对了保证数据一致性用错了就是锁等待和死锁的温床。程序操作里最常见的性能问题十有六七出在事务边界控制上。3.1 从不该放进事务的操作说起我见过一段线上代码在事务里循环调用了三次远程接口获取外部数据每个远程接口平均耗时 200 毫秒。也就是说这个事务至少持有了 600 毫秒期间相关的数据行一直被锁定其他事务只能排队。这种写法在其他系统上可能没问题但在高并发业务里就是灾难。事务应该只包裹真正需要保证原子性的数据库操作比如“扣库存同时更新订单状态”。至于外部服务调用、消息发送、文件读写、耗时计算这些一律不能放进去。事务的最佳实践是能短则短越快提交越好。修改一个数据就开一个最小事务哪怕业务逻辑要分很多步也尽量拆成多个小事务而不是把所有步骤都包在一个大事务里。3.2 事务边界与锁的真实关系事务边界越大持有锁的时间越长阻塞的概率越高。这个阻塞不仅影响别人更新同一行数据还影响别人读取这一行尤其是在某些数据库默认的隔离级别下。举个例子一个批量更新任务在事务里循环更新了 5000 条数据每条的更新时间可能需要数分钟。这期间任何一条相关数据上的读写请求都会被挡住表面现象就是接口突然全部变慢数据库监控里锁等待时间飙升。解决这个问题的通用做法是控制单事务的变更量。如果必须更新大量数据就分批提交每批 100 到 200 条就提交一次让锁有机会释放其他请求不至于长时间等待。注意分批提交会牺牲一些原子性因此只适用于允许部分成功的数据维护类任务。如果业务严格要求要么全成功要么全失败那就不能拆而是要在业务低峰期执行。3.3 隔离级别对并发的真实影响事务隔离级别直接决定了并发读写行为。隔离级别越高一致性越强但并发能力越差。程序侧如果默认用了最高的串行化隔离级别并发性能会直线下降。大多数业务系统的默认隔离级别是可重复读或读已提交二者在并发处理上差异明显。可重复读在同一事务里多次读取同一结果集是完全一致的代价是间隙锁更多、死锁概率更高读已提交则允许其他事务提交后用最新数据锁竞争相对更小。我遇到过的一个典型死锁场景就是因为两个接口各开一个事务一个按条件 A 更新多条记录一个按条件 B 更新多条记录两个条件覆盖的数据范围存在交叉数据库加锁顺序不一致最后两边互相等待。排查半天才定位到是事务内批量更新时范围过大导致的间隙锁冲突把批量更新拆细并统一加锁顺序后才解决。建议事务隔离级别能用读已提交就不要往上升。读已提交在绝大多数业务场景下已经足够保证数据正确性同时给性能和死锁控制留出了更大空间。4. ORM 链路优化消灭 N1 查询才是第一步现在做后端开发基本离不开对象关系映射ORM框架用不好它反而是性能黑洞。ORM 这类框架最大的优势是开发效率高最大的劣势就是把底层 SQL 隐藏起来开发者不知不觉就写出了低效查询。4.1 N1 查询的产生与识别N1 查询是 ORM 使用中最典型的低效操作症状是业务列表里查了 N 条主数据然后循环 N 次去查每条主数据关联的明细数据。最终 SQL 数量是 1 N如果 N 是 100就会产生 101 次数据库交互。这种写法的代码极其常见伪代码大概是这样的ListOrder orderList orderRepository.findByUserId(uid); for (Order order : orderList) { User user userRepository.findById(order.getUserId()); order.setUser(user); }执行过程就是列表查询一次然后循环 100 次去查用户表。加上网络往返这接口不慢才怪。识别 N1 查询最直接的办法是打开框架的 SQL 日志或启用慢查询统计观察一个接口执行完打印了多少条 SQL。看到一个调用会打出“1 N”条结构完全类似的查询语句就可以确定踩坑了。4.2 改写方案聚合查询或一次关联抓取解决 N1 查询的思路很简单把 N 次独立查询合并成一到两次查询。第一种方案是用关联查询让数据库一次性返回关联数据SELECT o.*, u.nickname FROM order o LEFT JOIN user u ON o.user_id u.id WHERE o.user_id ?如果关联字段比较多其实不用把所有字段都查出来只需要把用于组装响应结果的关键字段查出来就行尽量避免把整张表所有列都塞进来。第二种更通用的方案是两步查询第一步查出主列表拿到所有关联 ID第二步用 IN 一次性查关联数据然后在程序内存里做拼装。这种方案对数据库压力更小也比较容易控制查询的数据量。ListLong userIds orderList.stream().map(Order::getUserId).toList(); ListUser userList userRepository.findByIds(userIds); // 只有一条 SQL MapLong, User userMap userList.stream().collect(Collectors.toMap(User::getId, u - u));这种写法把查询次数从 101 次压到了 2 次接口响应时间通常能降一个数量级。4.3 预编译语句与批量写入的正确打开方式程序操作数据库时写 SQL 有两种方式硬编码拼接字符串和使用预编译语句。很多刚入门的同学喜欢直接拼接觉得直观省事但这带来两个问题一是 SQL 注入风险二是每条拼接出来的 SQL 都是新语句数据库每次都要重新解析生成执行计划效率很低。预编译语句的做法是先用占位符写好语句模板让数据库解析一次、缓存执行计划后续只需要把参数传进去执行即可。在高频查询场景下执行计划复用带来的性能提升非常明显。批量写入同理。相比逐条 INSERT 一万次把一万条数据按每批 500 到 1000 条合并成多值 INSERTSQL 交互次数能减少一个量级。如果框架或驱动支持批处理接口优先用批处理机制而不是自己在循环里发 SQL。批量写入还有一点要注意批处理大小不是越大越好。一次写入条数过多单条 SQL 的体积会非常大数据库解析和网络传输开销反而上升还可能占用过大的 undo 空间。我一般把单批控制在 500 条左右当数据行较大时再适当降低。5. 高频场景的程序级优化分页、排序、关联查询连接、事务、批处理都理顺了之后真正要在日常开发里反复面对的是几个高频查询场景的优化。这些场景如果不做程序级处理数据库的索引设计再科学也会被废掉一半。5.1 深度分页的两种典型解法分页查询是后台管理系统的必用功能但如果页码很深性能就会急剧恶化。传统的 limit 写法在数据量大时特别吃亏因为数据库要先把偏移量之前的所有数据全部查出来然后丢弃。比如 limit 1000000, 20数据库会把前 100 万条数据全部扫描一遍再丢掉只返回最后 20 条。即使这 20 条都有索引扫描过程也无法避免。此时索引等于白建全表扫描依旧会发生。解决深度分页有两种主流方案都是程序侧可落地的做法。第一种方案是基于排序键的键集分页。不记录页码而是记住上一页最后一条记录的排序键值下一页查询时用 where 条件取大于该值的记录。典型写法SELECT * FROM order WHERE create_time 上一页最后一条记录的创建时间 ORDER BY create_time DESC LIMIT 20;这个方案把“跳过前面 N 条”变成了“直接定位到某一条之后取 20 条”查询效率基本恒定不需要随着页码增大而变差。第二种方案是延迟关联。先用覆盖索引定位出目标行的主键再通过主键回表取完整数据SELECT o.* FROM order o INNER JOIN ( SELECT id FROM order ORDER BY id LIMIT 1000000, 20 ) t ON o.id t.id;这个方案在筛选条件比较少、只需要按主键排序时非常高效。两种方案视排序字段和业务场景选一种即可。提示深度分页在实际业务中还有一种更彻底的思路就是限制用户能翻到的最大页码。毕竟真正会翻到第 50000 页的用户极少这个场景的性能消耗却最大限制页码往往是最直接的优化。5.2 排序字段与索引设计的配合排序是程序操作里另一个容易踩坑的地方。如果一个查询带了 order by 字段但这个字段不在任何索引中数据库就只能做额外的排序操作也就是常说的文件排序。我曾经把一个订单查询接口从 2 秒优化到 20 毫秒改动就一行在排序字段上建了一个复合索引。因为数据库拿到数据后不需要再重新排序直接按索引顺序读取再输出结果就行。这里有个重要细节多字段排序时索引字段顺序必须和排序方向保持一致。假设业务查询经常使用 where status 1 order by create_time desc那最佳做法是建一个包含 status 和 create_time 的复合索引且 create_time 字段按降序方向。如果顺序反了数据库仍然无法优化排序。程序侧还有一个容易被忽略的点就是不要让 order by 作用的字段和 where 条件里的字段来自不同索引。比如 where 条件用到了 A 索引order by 用到了 B 索引数据库最终只能二选一另一边就得做文件排序。最好的做法是让 where 条件和 order by 尽量命中同一个复合索引。5.3 关联查询避免大号嵌套循环多表关联也是高频场景之一程序侧要遵循两个核心原则小表驱动大表、避免不必要的笛卡尔积。小表驱动大表的意思是以数据量小的表作为驱动表去关联数据量大的表。因为数据库执行关联是嵌套循环式的外层每扫到一行内层就要执行一次查找。驱动表的行数越少内层查找次数越少整体性能越好。这个规则在程序侧体现在编写查询时把过滤条件尽量放在驱动表上让驱动表先被大幅缩小。另一个常被忽视的问题是关联字段的数据类型和字符集不一致。两表关联时如果关联字段一个用 varchar 一个用 bigint或者两表字符集不一致数据库会被迫对其中一个字段做隐式转换导致关联列上的索引失效。这类问题的排查方法很直接查看执行计划如果关联查询中出现了全表扫描而实际上关联字段明明有索引就优先检查字段类型和字符集是否一致。让关联字段的类型、长度、字符集完全对齐这个问题就消失一大半。6. 线上排查实录与常见问题速查前面讲的都是方法论最后放两个真实的排查案例和一个速查表方便大家在实际工作中对号入座。6.1 连接池耗尽导致服务不可用有过一个系统平时稳定运行每到整点定时任务一启动应用就开始大量超时数据库 CPU 不高但连接数逼近上限。一开始怀疑是定时任务本身有慢 SQL查了一圈发现并不是。后来查看连接池监控发现定时任务里有段代码从连接池获取了一个连接但在异常分支里没有释放导致连接长期占用。加上定时任务每天整点触发连接泄漏一天天累积最后连接池满了线上所有请求只能排队等连接。处理办法是两步并行先修复泄漏代码把所有获取连接的地方全部补上释放逻辑再给连接池开启泄漏检测连接超过 5 分钟未归还就输出告警并强制回收。修复上线后观察一周连接数始终停留在低位整点超时问题彻底消失。这个案例让我印象最深的是性能优化不是把参数调大就能解决的代码质量的硬伤才是真正的根源。6.2 批量更新产生的行锁扩散另一个案例是库存扣减接口在并发较高时频繁出现死锁。代码逻辑是先从数据库查出当前库存在程序里判断库存是否足够然后执行更新语句。由于判断和更新之间存在时间差两个并发请求可能同时通过判断然后互相等待对方释放行锁。原因很好理解这是典型的先检查后写入的并发控制缺失。程序操作层面至少有两种解法一是使用条件更新把检查逻辑并入更新语句让数据库在原子操作里完成判断和扣减UPDATE inventory SET stock stock - ? WHERE product_id ? AND stock ?;更新结果为 0 时就说明库存不足程序直接返回失败全程只有一个原子操作没有锁竞争空间。二是使用乐观锁控制在每次更新时带上版本号条件版本不匹配就重试。两种方案都比先查后写更符合高并发业务的要求。6.3 常见问题速查表现象可能原因程序侧处理方向接口偶发超时数据库负载低连接获取等待过长检查连接池最大连接数和超时配置运行一段时间后连接池耗尽连接泄漏修复释放逻辑开启连接回收检测一个接口执行数十条SQLN1查询用聚合查询或两步查询替代循环查询在线业务变慢但SQL很快事务持锁缩短事务边界移除事务内远程调用列表页数据量大后变慢深度分页改用键集分页或延迟关联大批量导入数据阻塞业务单批事务过大拆分成小批量提交控制单批条数更新操作频繁死锁先查后写无并发控制改为条件更新或乐观锁重试关联查询索引失效字段类型或字符集不一致统一关联字段的类型、长度和字符集这张表是我平时给团队做代码评审时的参考清单也是排查线上问题时的第一反应列表。大部分数据库性能问题追根溯源最后都会落回到程序操作层面的某个细节上。我个人这几年的体会是数据库优化做到后面比的已经不是谁懂更多底层参数而是谁在写代码时更早意识到每一次数据库交互的成本。一条循环里的查询、一个没边界的西务、一个不释放的连接单独看都是小事叠加到线上并发环境里就是事故。把上面这些程序操作规范落到每天的代码编写和评审里比任何事后调优都更管用。

相关新闻

SharePoint Online文档库还原功能详解与实战指南

SharePoint Online文档库还原功能详解与实战指南

1. SharePoint Online文档库还原功能概述在数字化办公环境中,文档管理系统的数据安全一直是企业IT管理的重中之重。作为微软365套件中的核心组件,SharePoint Online提供了强大的文档库还原功能,这相当于为企业的关键数据上了一道"双保险…

2026/10/16 13:30:00 阅读更多 →
游戏引擎资源管理系统设计与实践:从引用计数到GPU资源回收

游戏引擎资源管理系统设计与实践:从引用计数到GPU资源回收

1. 项目概述:这个引擎项目到底在做什么很多人刚开始写引擎的时候,第一反应都是扑向渲染器——画三角形、加载模型、写Shader,热闹得很。结果等场景里要摆十几个物件、切几次关卡之后,问题就全冒出来了:贴图重复加载了好…

2026/10/16 21:47:30 阅读更多 →
仿真强化学习流程标准化:从环境定义到真机迁移的Microduck实践

仿真强化学习流程标准化:从环境定义到真机迁移的Microduck实践

上周团队里一个小伙子跑了一个月的PPO,收敛曲线漂亮得能当壁纸,结果把权重放到真机上,机器人连第一步都迈不出去。排查到最后发现,他训练时连仿真环境的摩擦系数都没记录,随机种子也是默认值,更离谱的是物理…

2026/10/16 11:46:31 阅读更多 →

最新新闻

eWebEditor 11.0 商业版安装部署与 Word 导入功能配置实战

eWebEditor 11.0 商业版安装部署与 Word 导入功能配置实战

简介:eWebEditor11.0中文商业版是一款所见即所得的在线富文本编辑器,面向需要在网页中实现图文混排编辑的开发者与建站人员,可应用于新闻发布、通告记事、论坛发帖等场景,其内置的Word导入功能尤其实用,能大幅降低内容…

2026/10/17 7:09:04 阅读更多 →
跨平台SSL证书导入脚本:从手工操作到一键自动化

跨平台SSL证书导入脚本:从手工操作到一键自动化

简介:这份资源提供了一套跨平台的SSL证书导入脚本,面向需要在Windows与Linux服务器上配置HTTPS通信的运维人员及系统管理员。包内共2个文件,分别为Shell脚本与批处理脚本,压缩包仅578B,体积轻巧便于随项目分发。其中sh…

2026/10/17 7:09:04 阅读更多 →
AI批量清洗图片中文与水印:全托管供货图片质检过关实战方案

AI批量清洗图片中文与水印:全托管供货图片质检过关实战方案

做全托管供货的老哥,最近是不是又被平台的图片质检搞到心态崩了?上一秒还在为出单量兴奋,下一秒就收到驳回通知,理由通常是“图片存在非目标语言信息”“图片包含水印或第三方标识”“图片做过不当遮挡处理”。我在跨境供货圈里泡…

2026/10/17 7:09:04 阅读更多 →
Git代码审计实战:从提交规范到问题定位的完整工具箱

Git代码审计实战:从提交规范到问题定位的完整工具箱

1. 版本控制的底层逻辑:为什么审计能力决定了协作质量做开发这些年,我越来越觉得 Git 不仅仅是一个“存档工具”。很多人把 Git 当网盘用,一天下来就是add、commit、push三连,等到真出了问题——谁改的这行代码、为什么改、这个提…

2026/10/17 7:09:04 阅读更多 →
从零到生产:Agent开发原理与实战指南

从零到生产:Agent开发原理与实战指南

1. 为什么说现在入局Agent开发不算晚:先搞懂Agent到底是什么这两年“Agent”这个词几乎要被说烂了,打开技术社区满屏都是“智能体”“多Agent协作”“自主决策”,搞得好像不搞个Agent就不配叫AI从业者一样。但我在实际跟很多开发者聊下来的感…

2026/10/17 7:09:04 阅读更多 →
Windows虚拟化排查指南:从BIOS到Hyper-V的彻底解决

Windows虚拟化排查指南:从BIOS到Hyper-V的彻底解决

这个标题一看就是被模拟器、虚拟机折腾过的人写出来的。说实话,Windows上这颗“虚拟化”的雷,我踩过不下几十次,帮身边朋友排查也排了无数轮。明明主板的开关开了,BIOS里也看到了,系统里却还是提示“CPU 虚拟化已禁用”…

2026/10/17 7:08:04 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →