从线程池与连接池的“资源猎杀”到系统韧性构建
最近在排查线上问题时发现一个有趣的现象一个看似简单的接口性能问题背后却牵扯出线程池配置、数据库连接池、慢SQL以及业务逻辑的连环“猎杀”。到底是线程池在“猎杀”数据库连接还是慢SQL反过来“拖死”了应用线程这让我深刻体会到在分布式系统里没有绝对的“猎人”或“猎物”角色往往在资源争抢中瞬间转换。今天我们就来系统性复盘这类“资源猎杀”场景从线程池、连接池配置到问题根因定位手把手构建一套可复用的排查与防御体系。本文将从一次真实的性能压测故障切入逐步拆解线程池与数据库连接池相互影响的原理并提供完整的代码示例、监控配置方案和线上应急checklist。无论你是正在处理类似性能瓶颈的开发者还是希望提前规避风险的架构师都能从中获得可直接落地的实战经验。1. 背景与核心概念理解“猎杀链”在微服务架构下应用性能瓶颈常常是一个连锁反应我们称之为“资源猎杀链”。它描述了一种场景某个核心资源如数据库连接成为瓶颈导致争夺该资源的消费者如应用线程大量阻塞而这些被阻塞的消费者本身又持有其他资源如Tomcat工作线程进而引发更广泛的系统瘫痪。1.1 核心角色定义猎物Prey通常是稀缺的、慢速的共享资源。在本次讨论中最典型的“猎物”就是数据库连接。连接池中的连接数是有限的当所有连接都在执行慢查询或被占用时新的请求就无法获取连接。猎人Hunter争夺并使用“猎物”的资源消费者。这里最主要的“猎人”是应用业务线程例如Web容器的HTTP处理线程或业务自定义的线程池线程。它们需要获取数据库连接来执行任务。角色转换关键在于当“猎人”线程因无法获取“猎物”连接而阻塞时它自身所占用的资源如内存、CPU时间片、乃至更上层的TCP连接无法释放。如果大量“猎人”被阻塞它们就会成为新的“猎物”被更上层的系统如负载均衡器、网关或操作系统“猎杀”判定为无响应、超时、连接耗尽。1.2 一个典型的“猎杀”场景假设我们有一个Spring Boot应用使用Tomcat作为Web容器HikariCP作为数据库连接池。起因某个接口触发了一条未加索引的复杂查询慢SQL产生。发展该慢查询长时间占用一个数据库连接connection-1。加剧后续请求到达也需要执行数据库操作。但连接池中所有连接很快被类似的慢查询或正常请求占满。爆发新的业务线程thread-100在调用HikariDataSource.getConnection()时被阻塞等待连接释放。扩散Tomcat的工作线程池thread-100到thread-N逐渐都被阻塞在等待数据库连接上。崩溃Tomcat线程池耗尽无法接收新的HTTP请求。应用对外表现为完全无响应。此时从应用角度看数据库连接是“猎人”耗尽了线程但从数据库角度看慢SQL是“猎人”拖垮了应用。角色已然模糊。2. 环境准备与版本说明为了完整复现和演示排查过程我们需要搭建一个标准的Spring Boot Web应用环境。以下是本文示例所使用的环境你可以根据实际情况调整版本。基础环境操作系统macOS/Linux/Windows (WSL2)JDKOpenJDK 11 或 17推荐11长期支持版本稳定构建工具Maven 3.6 或 Gradle 7.xIDEIntelliJ IDEA 或 VS Code任意主要依赖及版本!-- Spring Boot Starter Parent -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version !-- 选择2.7.x的稳定版本 -- relativePath/ /parent dependencies !-- Web 支持 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 数据库访问 (默认使用HikariCP) -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency !-- MySQL 驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- 监控与Actuator (用于暴露指标) -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency !-- Micrometer Prometheus (用于指标收集) -- dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependency /dependencies数据库MySQL 5.7 或 8.0创建一个测试数据库例如test_hunt。项目结构预览src/main/java/com/example/huntdemo/ ├── HuntDemoApplication.java // 启动类 ├── config/ │ ├── ThreadPoolConfig.java // 自定义线程池配置 │ └── DatasourceConfig.java // 数据源监控配置可选 ├── controller/ │ └── UserController.java // 模拟业务接口 ├── service/ │ └── UserService.java // 业务服务层包含慢查询 ├── repository/ │ └── UserRepository.java // JPA Repository └── entity/ └── User.java // JPA 实体3. 核心原理拆解线程池与连接池如何相互影响要打破“猎杀链”必须深入理解线程池和连接池的工作原理及交互点。3.1 Tomcat线程池HTTP工作线程Spring Boot内嵌的Tomcat服务器有一个处理HTTP请求的线程池。关键配置在application.yml中server: tomcat: # 最大线程数即同时处理请求的线程上限 max-threads: 200 # 最小工作线程数 min-spare-threads: 10 # 连接超时时间毫秒 connection-timeout: 20000max-threads这是系统的第一道防线。一旦所有200个线程都被阻塞例如在等待数据库连接新的请求将进入队列等待队列满则直接拒绝返回5xx错误。阻塞点业务代码中任何同步阻塞操作如JDBC调用、同步RPC都会占用一个Tomcat线程直到完成。3.2 HikariCP数据库连接池HikariCP是Spring Boot默认的连接池以其高性能著称。核心配置如下spring: datasource: hikari: # 连接池最大大小 maximum-pool-size: 20 # 连接池最小空闲连接 minimum-idle: 5 # 连接最大存活时间毫秒防止连接老化 max-lifetime: 1800000 # 30分钟 # 连接超时时间毫秒 connection-timeout: 30000 # 空闲连接超时时间毫秒 idle-timeout: 600000 # 10分钟 # 连接泄漏检测阈值毫秒 leak-detection-threshold: 60000maximum-pool-size这是系统的第二道防线。它限制了并发访问数据库的连接数。如果业务线程数max-threads200远大于连接数maximum-pool-size20那么在高并发下必然有大量线程在等待连接。connection-timeout从池中获取连接的最长等待时间。超过此时间将抛出SQLTransientConnectionException。这个超时非常重要它决定了线程被阻塞的最长时间避免线程永久挂起。3.3 “猎杀链”形成的数学模型假设T Tomcatmax-threads(200)C HikariCPmaximum-pool-size(20)Q 平均SQL执行时间 (100ms正常 5000ms慢查询)R 请求到达速率 (QPS)正常情况Q100ms一个连接每秒可处理约1000ms / 100ms 10个请求。连接池每秒总处理能力为C * 10 20 * 10 200QPS。只要R 200系统稳定。Tomcat线程快速处理完请求后释放连接也快速归还。异常情况出现慢查询Q5000ms一个连接每秒只能处理1000ms / 5000ms 0.2个请求。连接池每秒总处理能力骤降至20 * 0.2 4QPS。如果R 4请求开始积压。每个慢查询占用一个连接长达5秒连接池在几秒内被占满。后续请求的线程开始排队等待连接最多等connection-timeout30s。很快大量Tomcat线程被阻塞在等待连接上导致T被耗尽服务雪崩。结论慢查询是“猎杀链”的触发器而不匹配的线程池与连接池配比则是放大灾难的“催化剂”。4. 完整实战模拟、监控与排查“猎杀”现场让我们通过代码构建一个可复现问题的微服务并学习如何监控和定位它。4.1 创建模拟慢查询的接口首先我们创建一个简单的用户实体和Repository并编写一个会触发全表扫描的慢查询方法。实体类// 文件路径src/main/java/com/example/huntdemo/entity/User.java package com.example.huntdemo.entity; import javax.persistence.*; import java.time.LocalDateTime; Entity Table(name user) public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String name; private String email; private Integer age; private LocalDateTime createTime; // 省略 getter/setter 和构造函数 }Repository与慢查询方法// 文件路径src/main/java/com/example/huntdemo/repository/UserRepository.java package com.example.huntdemo.repository; import com.example.huntdemo.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; Repository public interface UserRepository extends JpaRepositoryUser, Long { // 模拟一个缺乏索引的复杂条件查询全表扫描 Query(value SELECT * FROM user u WHERE u.age ?1 AND u.name LIKE CONCAT(%, ?2, %) ORDER BY u.create_time DESC, nativeQuery true) ListUser findUsersByComplexConditionSlow(Integer minAge, String namePart); // 一个正常的快速查询假设id是主键索引 User findById(long id); }Service层// 文件路径src/main/java/com/example/huntdemo/service/UserService.java package com.example.huntdemo.service; import com.example.huntdemo.entity.User; import com.example.huntdemo.repository.UserRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; Service Slf4j public class UserService { Autowired private UserRepository userRepository; /** * 模拟慢查询接口 */ public ListUser getUsersSlow(Integer minAge, String namePart) { log.info(开始执行慢查询...); long start System.currentTimeMillis(); ListUser users userRepository.findUsersByComplexConditionSlow(minAge, namePart); long duration System.currentTimeMillis() - start; log.info(慢查询执行完成耗时: {} ms, 结果数: {}, duration, users.size()); // 模拟额外业务处理耗时 try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return users; } /** * 正常快速查询接口 */ public User getUserFast(Long id) { return userRepository.findById(id).orElse(null); } }Controller层// 文件路径src/main/java/com/example/huntdemo/controller/UserController.java package com.example.huntdemo.controller; import com.example.huntdemo.entity.User; import com.example.huntdemo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; RestController RequestMapping(/api/users) public class UserController { Autowired private UserService userService; GetMapping(/slow) public ListUser getUsersSlow(RequestParam(defaultValue 18) Integer minAge, RequestParam(defaultValue ) String name) { return userService.getUsersSlow(minAge, name); } GetMapping(/fast/{id}) public User getUserFast(PathVariable Long id) { return userService.getUserFast(id); } }4.2 配置监控Actuator Prometheus Metrics要发现“猎杀”必须能看到关键指标。Spring Boot Actuator 提供了丰富的端点。1. 启用监控端点 (application.yml):management: endpoints: web: exposure: include: health,info,metrics,prometheus # 暴露给Prometheus拉取 metrics: export: prometheus: enabled: true tags: application: ${spring.application.name} # 应用基础配置 spring: application: name: hunt-demo datasource: url: jdbc:mysql://localhost:3306/test_hunt?useSSLfalseserverTimezoneUTC username: root password: yourpassword hikari: maximum-pool-size: 20 connection-timeout: 30000 leak-detection-threshold: 600002. 关键监控指标解读启动应用后访问http://localhost:8080/actuator/metrics可以看到所有指标。Tomcat线程池:tomcat.threads.busy: 当前繁忙线程数。如果这个值持续接近max-threads说明线程池快耗尽了。tomcat.threads.current: 当前总线程数。HikariCP连接池:hikaricp.connections.active: 活跃连接数。接近maximum-pool-size是危险信号。hikaricp.connections.idle: 空闲连接数。hikaricp.connections.pending: 等待获取连接的线程数。这个值大于0且持续增长是“猎杀”开始的明确标志JVM线程状态:jvm.threads.states: 按状态runnable, blocked, waiting, timed_waiting统计的线程数。大量blocked或waiting线程指向资源争用。4.3 使用压测工具模拟高并发我们使用Apache JMeter或wrk来制造并发请求触发问题。JMeter测试计划简要步骤创建线程组设置线程数模拟用户为 100Ramp-up时间为 5秒循环次数为“永远”。添加HTTP请求采样器指向http://localhost:8080/api/users/slow?minAge1。添加聚合报告和用表格查看结果监听器。启动压测后快速观察应用日志和actuator/prometheus端点。你会看到日志中“慢查询执行完成”的间隔越来越长。hikaricp.connections.pending指标迅速上升。很快/api/users/fast/1这个本该很快的接口也会变慢甚至超时。4.4 问题排查与根因定位当监控报警如P99延迟飙升、错误率上升触发后如何快速定位第1步检查应用日志搜索Timeout、Pool、Connection is not available等异常。HikariCP的泄漏检测日志非常有用HikariPool-1 - Connection is not available, request timed out after 30000ms.这直接指向连接池问题。第2步分析线程堆栈Thread Dump这是最关键的取证工具。在应用运行期间通过jstack pid或发送SIGQUIT信号获取线程堆栈。分析重点找到大量处于WAITING或BLOCKED状态的线程。查看它们的堆栈跟踪。你会看到类似下面的模式http-nio-8080-exec-1 #31 daemon prio5 os_prio31 tid0x00007fb1d4a14800 nid0x5a03 waiting on condition [0x0000700008b96000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for 0x0000000740b3b1c8 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:200) --- **关键行线程在等连接** at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:100) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100) at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ... // 后续是你的业务调用栈如果大量线程堆栈都卡在HikariPool.getConnection铁证如山问题就是连接池耗尽。第3步定位慢SQL连接池为什么耗尽因为连接被占用太久。谁占用的慢SQL。查看数据库监控MySQL的SHOW PROCESSLIST;或performance_schema中的events_statements_summary_by_digest表可以找到执行时间长的SQL语句。使用应用层SQL监控集成p6spy或druid连接池的SQL日志功能记录每条SQL的执行时间。通过以上三步你就能完整勾勒出“猎杀链”慢SQL → 占用连接 → 连接池耗尽 → 业务线程阻塞 → Tomcat线程池耗尽 → 服务不可用。5. 常见问题与排查思路下表总结了“资源猎杀”场景下的典型问题及应对策略问题现象可能原因排查思路与解决方案接口响应时间飙升最终超时5xx错误1. 数据库连接池耗尽2. Tomcat线程池耗尽1.紧急获取线程堆栈查看线程阻塞在何处。2.检查hikaricp.connections.pending和tomcat.threads.busy指标。3.短期缓解适当调大连接池有风险治标不治本。4.根本解决定位并优化慢SQL。日志中出现大量Connection is not available, request timed outHikariCP连接获取超时1. 确认spring.datasource.hikari.connection-timeout配置建议10-30秒。2. 检查是否有连接泄漏未关闭ResultSet、Statement、Connection。3. 检查leak-detection-threshold日志定位泄漏代码。应用CPU使用率不高但吞吐量极低大量线程处于WAITING或BLOCKED状态空转1. 分析线程堆栈找到统一的等待资源如连接、锁。2. 使用Arthas的thread -b命令快速找出阻塞最严重的线程。数据库服务器负载正常但应用端表现卡顿1. 网络问题2. 应用与数据库间存在防火墙或代理限流3. 连接池配置过小请求在应用端排队1. 使用telnet或tcping测试数据库端口连通性和延迟。2. 对比数据库的SHOW PROCESSLIST数量和应用端活跃连接数判断瓶颈在哪一侧。压测初期正常运行一段时间后性能急剧下降1. 连接泄漏累积导致池子逐渐干涸2. 数据库连接或应用内存泄漏3. 缓存击穿/穿透请求直接打到数据库1. 监控连接池活跃数随时间的变化图。2. 检查长时间存活的数据库连接SHOW PROCESSLIST看Time列。3. 检查应用GC日志和堆内存使用情况。6. 最佳实践与工程建议预防远胜于治疗。通过以下工程实践可以极大降低陷入“猎杀”困境的概率。6.1 配置层面设置合理的资源边界连接池大小公式并非绝对一个参考公式是connections (core_count * 2) effective_spindle_count。但对于现代SSD和网络更建议通过压测来确定。通常设置一个比应用线程数小得多的值如max-threads的1/5到1/10迫使并发度受控于数据库能力。设置超时与熔断spring: datasource: hikari: connection-timeout: 10000 # 10秒快速失败 max-lifetime: 1800000 # 30分钟定期刷新连接 jpa: properties: hibernate: # 设置JPA查询超时 jdbc.timeout: 5 query.timeout: 5为RestTemplate、FeignClient、RPC调用配置超时和熔断如使用Resilience4j或Sentinel。限制Tomcat线程数不要盲目调大max-threads。过大的线程数会导致更多的上下文切换和内存消耗在数据库瓶颈时死得更惨。200-400对于大多数Web应用已足够。6.2 代码层面编写“猎杀”免疫的代码始终使用Try-With-Resources或确保finally中关闭资源// 正确示例 try (Connection conn dataSource.getConnection(); PreparedStatement stmt conn.prepareStatement(sql); ResultSet rs stmt.executeQuery()) { // ... 处理结果 } catch (SQLException e) { // 处理异常 }对查询进行强制限制避免无限制的SELECT *和全表扫描。使用分页。Query(value SELECT * FROM user WHERE ... LIMIT ?1, nativeQuery true) ListUser findUsersWithLimit(int limit);异步与非阻塞化对于IO密集型操作如调用外部服务、慢查询考虑使用异步处理将线程资源释放出来。Async // 需要启用 EnableAsync public CompletableFutureListUser getUsersSlowAsync(Integer minAge, String namePart) { // ... 慢查询 return CompletableFuture.completedFuture(users); }注意异步只是转移了阻塞点数据库连接压力仍在需配合连接池和超时使用。6.3 监控与告警层面建立预警系统核心黄金指标延迟应用P95/P99响应时间数据库查询平均耗时。流量应用QPS数据库TPS。错误率应用5xx错误率数据库错误数。饱和度hikaricp.connections.active/maximum-pool-sizetomcat.threads.busy/max-threads。设置告警规则以Prometheus为例# 连接池等待线程持续存在 - alert: HikariCPConnectionPoolPending expr: hikaricp_connections_pending 0 for: 1m labels: severity: warning annotations: summary: 数据库连接池出现等待线程 description: 实例 {{ $labels.instance }} 的连接池已有 {{ $value }} 个线程在等待连接可能存在慢查询或连接数不足。 # 活跃连接数持续接近最大值 - alert: HikariCPConnectionPoolHighUsage expr: hikaricp_connections_active / hikaricp_connections_max 0.8 for: 2m labels: severity: critical annotations: summary: 数据库连接池使用率过高 description: 实例 {{ $labels.instance }} 的连接池使用率超过80%当前活跃连接 {{ $value }} 个。 # Tomcat线程池繁忙度告警 - alert: TomcatThreadPoolHighUsage expr: tomcat_threads_busy / tomcat_threads_config_max 0.8 for: 2m labels: severity: warning annotations: summary: Tomcat线程池繁忙度过高 description: 实例 {{ $labels.instance }} 的Tomcat线程池繁忙度超过80%。6.4 数据库层面从源头扼杀慢查询强制SQL审查上线前必须通过EXPLAIN分析执行计划杜绝全表扫描。建立索引策略对高频查询条件、排序字段、关联字段建立合适索引。实施慢查询日志定期分析并优化耗时长的SQL。考虑读写分离与缓存对于读多写少且实时性要求不高的场景使用缓存如Redis或查询只读从库减轻主库压力。通过配置、编码、监控、数据库四管齐下构建一个韧性系统让“猎人”与“猎物”和谐共存即便在流量洪峰或个别异常下系统也能快速降解或恢复避免雪崩式的全面崩溃。这套方法论不仅适用于数据库连接池对于任何共享资源如Redis连接池、消息队列Worker、外部服务客户端的治理都具有普适的参考价值。

相关新闻

N_m3u8DL-RE技术解密:现代流媒体下载架构剖析

N_m3u8DL-RE技术解密:现代流媒体下载架构剖析

N_m3u8DL-RE技术解密:现代流媒体下载架构剖析 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 在数字…

2026/8/9 11:42:24 阅读更多 →
基于Dify与RAG技术构建垂直领域智能助手:从部署到优化的全流程实战

基于Dify与RAG技术构建垂直领域智能助手:从部署到优化的全流程实战

最近在尝试将大模型能力落地到具体业务场景时,发现一个普遍痛点:网上关于 RAG 和 Dify 的教程很多,但大多停留在“如何上传文件”和“如何对话”的层面。当真正想构建一个稳定、高效、可复用的垂直领域智能助手时,会遇到一系列“最…

2026/8/9 11:41:23 阅读更多 →
3步打造你的专属AI知识管家:AnythingLLM全攻略

3步打造你的专属AI知识管家:AnythingLLM全攻略

3步打造你的专属AI知识管家:AnythingLLM全攻略 【免费下载链接】anything-llm Stop renting your intelligence. Own it with AnythingLLM. Everything you need for a powerful local-first agent experience 项目地址: https://gitcode.com/GitHub_Trending/an…

2026/8/9 11:41:23 阅读更多 →

最新新闻

从TPU看AI芯片演进:DSA架构如何重塑计算范式

从TPU看AI芯片演进:DSA架构如何重塑计算范式

2016年,当AlphaGo击败李世石的消息震惊世界时,很少有人知道,支撑这场胜利的算力心脏并非来自英伟达的通用GPU,而是一块名为TPU的、谷歌内部秘密研发的定制芯片。这不仅是谷歌的一场技术豪赌,更是整个计算架构演进史上的…

2026/8/9 12:42:51 阅读更多 →
基于MediaPipe与Unity的实时人体动作捕捉系统:低成本实现虚拟角色驱动

基于MediaPipe与Unity的实时人体动作捕捉系统:低成本实现虚拟角色驱动

1. 项目概述:从“动捕”到“实时驱动”的桥梁 最近在捣鼓一个挺有意思的东西,叫“UnityPythonMediaPipeAvatar”。这个名字听起来有点长,但拆开看就明白了:用 Python 和 MediaPipe 实时捕捉人体动作,然后驱动 Unity 里…

2026/8/9 12:42:51 阅读更多 →
如何在浏览器中免费解锁加密音乐文件:终极完整指南 [特殊字符]

如何在浏览器中免费解锁加密音乐文件:终极完整指南 [特殊字符]

如何在浏览器中免费解锁加密音乐文件:终极完整指南 🎵 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目…

2026/8/9 12:42:51 阅读更多 →
React Native鸿蒙跨平台开发与Linking模块实战

React Native鸿蒙跨平台开发与Linking模块实战

1. React Native与鸿蒙跨平台开发概述 在移动应用开发领域,跨平台技术已经成为提升开发效率的关键选择。React Native作为Facebook推出的开源框架,允许开发者使用JavaScript和React构建原生应用。而鸿蒙系统(HarmonyOS)作为华为自…

2026/8/9 12:42:51 阅读更多 →
游戏联动如何实现世界观深度缝合?从《重返未来:1999》与《原子之心》的“聚合浪潮”谈起

游戏联动如何实现世界观深度缝合?从《重返未来:1999》与《原子之心》的“聚合浪潮”谈起

那天下午,我正和几个做游戏的朋友闲聊,话题不知怎么就拐到了“联动”上。大家普遍的感觉是,现在的游戏联动越来越像“贴牌”——把A角色的皮肤放到B游戏里,再配上一段不痛不痒的剧情,就算完成任务。玩家买账&#xff0…

2026/8/9 12:42:51 阅读更多 →
Webpack前端工程化:从配置到优化的完整指南

Webpack前端工程化:从配置到优化的完整指南

1. Webpack 学习笔记:从入门到精通的完整指南 作为一名前端开发者,我深知Webpack在现代前端工程化中的重要性。它不仅仅是一个打包工具,更是前端项目构建的核心枢纽。在这篇学习笔记中,我将分享自己从零开始学习Webpack的完整历程…

2026/8/9 12:41:51 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →