<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>DevFix</title><description>中文开发者报错 / 踩坑经验知识库</description><link>https://devfix.example.com/</link><item><title>ConcurrentModificationException 排查：单线程遍历改集合也会中招</title><link>https://devfix.example.com/cases/java/java-concurrentmodificationexception/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-concurrentmodificationexception/</guid><description>ConcurrentModificationException 不是多线程专属，单线程遍历集合时直接增删元素一样触发。根因是 iterator 的 expectedModCount 与集合 modCount 不一致。用 removeIf 或 Iterator.remove 即可解决。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Java 死锁排查：jstack 报 Found one Java-level deadlock 的定位与解决</title><link>https://devfix.example.com/cases/java/java-deadlock-troubleshooting/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-deadlock-troubleshooting/</guid><description>应用突然假死，没有异常、没有日志，多半是死锁。用 jstack 抓线程快照，JVM 会直接打出 Found one Java-level deadlock 并列出环上线程。从四个必要条件到锁顺序一致、tryLock 超时一次讲清。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Java 内存溢出排查：OutOfMemoryError: Java heap space 的定位与解决</title><link>https://devfix.example.com/cases/java/java-outofmemoryerror-heap-space/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-outofmemoryerror-heap-space/</guid><description>堆内存被对象占满，GC 回收不回空间，抛出 OutOfMemoryError: Java heap space。用 -XX:+HeapDumpOnOutOfMemoryError 留堆快照，MAT 看 Dominator Tree 和 GC Roots，揪出泄漏源头。调大 -Xmx 只是缓兵之计。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Java 栈溢出排查：StackOverflowError 的定位与解决</title><link>https://devfix.example.com/cases/java/java-stackoverflowerror/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-stackoverflowerror/</guid><description>递归写错或调用链太深，栈帧把 JVM 线程栈顶穿，抛出 StackOverflowError。它不是堆内存不够，是调用栈深度超限。先查递归到底有没有出口，能改循环就改循环，必要时用 -Xss 应急。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>ThreadLocal 内存泄漏排查：线程池复用导致 OutOfMemoryError 的坑</title><link>https://devfix.example.com/cases/java/java-threadlocal-memory-leak/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-threadlocal-memory-leak/</guid><description>ThreadLocal 在线程池里用完不调用 remove，会慢慢把堆吃满，最终抛出 OutOfMemoryError。根因是 Entry 的 key 是弱引用、value 是强引用，线程复用让无主 value 越积越多。从根因到 try/finally 清理一次讲清。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>OutOfMemoryError: unable to create new native thread 排查与解决</title><link>https://devfix.example.com/cases/java/java-unable-to-create-new-native-thread/</link><guid isPermaLink="true">https://devfix.example.com/cases/java/java-unable-to-create-new-native-thread/</guid><description>OutOfMemoryError: unable to create new native thread 不是 Java 堆满了，是操作系统拒绝再创建线程。根因是 ulimit -u、kernel.threads-max 等线程上限，或线程栈吃光 native 内存。调高限制、用有界线程池、减小 -Xss 解决。</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>FastAPI 一个阻塞调用卡死全部请求：async def 里别跑同步代码</title><link>https://devfix.example.com/cases/fastapi/fastapi-async-blocking-event-loop/</link><guid isPermaLink="true">https://devfix.example.com/cases/fastapi/fastapi-async-blocking-event-loop/</guid><description>async def 端点在事件循环主线程上运行，一旦调了 time.sleep、requests 这类阻塞代码，整个服务连同 /health 一起冻结。本文讲清 def vs async def 的区别和 run_in_threadpool 的正确用法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>FastAPI CORS 配了还跨域？CORSMiddleware 的三个默认值坑</title><link>https://devfix.example.com/cases/fastapi/fastapi-cors-middleware-config/</link><guid isPermaLink="true">https://devfix.example.com/cases/fastapi/fastapi-cors-middleware-config/</guid><description>前端一直报 No &apos;Access-Control-Allow-Origin&apos;，往往是 CORSMiddleware 没加、allow_origins 漏了前端源、或 allow_origins=[&apos;*&apos;] 和 allow_credentials=True 撞一起。另外 allow_methods 默认只有 GET、allow_headers 默认空也是高频坑。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>FastAPI Depends 依赖注入的坑：忘写 Depends、yield 清理与 use_cache</title><link>https://devfix.example.com/cases/fastapi/fastapi-depends-dependency-injection/</link><guid isPermaLink="true">https://devfix.example.com/cases/fastapi/fastapi-depends-dependency-injection/</guid><description>参数漏写 Depends() 会被当成 query 参数报 422；yield 依赖的清理要在 finally 里保证、except 后要 raise；默认依赖结果在同一次请求里缓存，副作用依赖要用 use_cache=False。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>FastAPI 422 Unprocessable Entity：Pydantic 校验失败的排查与修复</title><link>https://devfix.example.com/cases/fastapi/fastapi-pydantic-422-validation-error/</link><guid isPermaLink="true">https://devfix.example.com/cases/fastapi/fastapi-pydantic-422-validation-error/</guid><description>接口返回 422 本质是请求体/参数和 Pydantic 模型对不上。本文讲清 detail 里 loc/msg/type 怎么读，以及用 DTO 分离 ORM 模型、处理 camelCase、Optional 字段等常见解法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>FastAPI + SQLAlchemy 集成坑：session 生命周期、懒加载与连接池</title><link>https://devfix.example.com/cases/fastapi/fastapi-sqlalchemy-session-lifecycle/</link><guid isPermaLink="true">https://devfix.example.com/cases/fastapi/fastapi-sqlalchemy-session-lifecycle/</guid><description>每个请求一个 session，用 yield 依赖保证关闭；async 路由里调同步 Session 会阻塞事件循环；session 关闭后再访问懒加载属性会报错。本文讲清这三类坑和对应写法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI 启动报 No qualifying bean of type ChatModel：依赖与配置的坑</title><link>https://devfix.example.com/cases/springai/spring-ai-chatmodel-chatclient-config-dependency/</link><guid isPermaLink="true">https://devfix.example.com/cases/springai/spring-ai-chatmodel-chatclient-config-dependency/</guid><description>ChatModel 注入不到，常见是没引入厂商 starter、api-key 写错、模型名拼错、或版本没走 BOM 管理。本文讲清依赖、配置、自动配置三层排查路径。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI + PGVector 维度不匹配：expected 1536 dimensions, not 1024</title><link>https://devfix.example.com/cases/springai/spring-ai-rag-vectorstore-dimension-mismatch/</link><guid isPermaLink="true">https://devfix.example.com/cases/springai/spring-ai-rag-vectorstore-dimension-mismatch/</guid><description>向量维度是 pgvector 的硬约束，建表后不能 ALTER。报维度冲突，多半是 embedding 模型没固定、或者换了模型，而旧表还留着。改了 dimensions 配置不生效，得 DROP 表重建。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI 流式输出踩坑：stream 变一次性返回、SseEmitter 挂死与 SSE 配置</title><link>https://devfix.example.com/cases/springai/spring-ai-stream-sse/</link><guid isPermaLink="true">https://devfix.example.com/cases/springai/spring-ai-stream-sse/</guid><description>用 .stream() 得到 Flux，再通过 SseEmitter（MVC）或直接返回 Flux（WebFlux）推给前端。坑点：某些版本的 OpenAI stream 被内部 collectList 缓冲、SseEmitter 不设超时会挂死、produces 配置漏了连接提前关闭。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI Tool Calling 不生效？三个静默失效的坑</title><link>https://devfix.example.com/cases/springai/spring-ai-tool-calling-not-working/</link><guid isPermaLink="true">https://devfix.example.com/cases/springai/spring-ai-tool-calling-not-working/</guid><description>工具调用不触发，常是这些原因：defaultOptions 用了 DefaultChatOptions 而不是 ToolCallingChatOptions、.tools() 的重载只吃 MethodTool 却吞掉 FunctionToolCallback、或者中途换了 options 实例把 callback 丢了。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring AI 版本升级踩坑：ChatClient 变 ChatModel、artifact 改名、配置属性迁移</title><link>https://devfix.example.com/cases/springai/spring-ai-version-upgrade-breaking-changes/</link><guid isPermaLink="true">https://devfix.example.com/cases/springai/spring-ai-version-upgrade-breaking-changes/</guid><description>Spring AI 迭代极快，pre-1.0 到 1.0 有一大批 breaking change：旧的 ChatClient 功能挪进 ChatModel、EmbeddingClient 改成 EmbeddingModel、starter 命名标准化、配置属性去掉了 .options。升级前先读 upgrade notes。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring Boot 2 升 3 升级踩坑：javax 变 jakarta，一次平台级迁移</title><link>https://devfix.example.com/cases/springboot/spring-boot-3-upgrade-javax-jakarta/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-3-upgrade-javax-jakarta/</guid><description>升级到 Spring Boot 3 不是点个版本号那么简单：最低 Java 17、javax.* 全部变 jakarta.*、Spring Security 配置重写、Hibernate 6。本文梳理最容易踩的几个坑和对应改法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring Boot 启动报 BeanCurrentlyInCreationException？循环依赖的坑与解法</title><link>https://devfix.example.com/cases/springboot/spring-boot-circular-dependency/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-circular-dependency/</guid><description>Spring Boot 2.6 起默认禁止 Bean 循环依赖，升级后启动突然失败怎么办。从根因到重构、@Lazy、setter 注入、allow-circular-references 几种方案一次讲清。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring Boot CORS 配了还是跨域？Spring Security 和 allowCredentials 的坑</title><link>https://devfix.example.com/cases/springboot/spring-boot-cors-config-not-working/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-cors-config-not-working/</guid><description>前端一直报 No &apos;Access-Control-Allow-Origin&apos;，配置却「没生效」。本文讲清 @CrossOrigin、WebMvcConfigurer、Spring Security 三条路径，以及 OPTIONS 预检和 allowCredentials + * 两个高频坑。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>JPA N+1 查询问题：一次列表查询为何打了 101 条 SQL</title><link>https://devfix.example.com/cases/springboot/spring-boot-jpa-n-plus-1-query/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-jpa-n-plus-1-query/</guid><description>查 N 个父实体再遍历访问关联，会触发 N 条额外查询。本文讲清 FetchType 与 FetchMode 的区别，以及 JOIN FETCH、@EntityGraph、@BatchSize 各自适用场景和坑。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring Boot 启动报 Port 8080 was already in use？端口占用的排查与释放</title><link>https://devfix.example.com/cases/springboot/spring-boot-port-8080-already-in-use/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-port-8080-already-in-use/</guid><description>内嵌 Web 服务器默认绑 8080，一旦有其他进程占用就会启动失败。本文给出 macOS/Linux/Windows 三步定位并释放端口、改端口、以及预防再次踩坑的做法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Spring Boot @Async/@Transactional 加了不生效？同类调用 self-invocation 的坑</title><link>https://devfix.example.com/cases/springboot/spring-boot-self-invocation-async-transaction/</link><guid isPermaLink="true">https://devfix.example.com/cases/springboot/spring-boot-self-invocation-async-transaction/</guid><description>同一个类里用 this 调用带 @Async 或 @Transactional 的方法，注解会静默失效。本文讲清 AOP 代理边界，以及抽 Bean、注入自身代理、AopContext 三种解法。</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item></channel></rss>