# development-knowledge **Repository Path**: shenningfly/development-knowledge ## Basic Information - **Project Name**: development-knowledge - **Description**: Java微服务全栈技术知识库,包含SpringCloud、MySQL、Seata、Redis、RabbitMQ、异构集成、Java代码坑点等实战问题+根因+最优方案+落地模板,用于系统自查、故障复盘、团队规范建设。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README # 微服务全栈「问题 → 最优解 → 落地模板」知识库 ## 介绍 技术栈:Java + SpringCloud + MySQL + Seata + Redis + RabbitMQ + 异构集成,逐个问题给:现象 + 根因 + 最优方案 + 关键代码 / 配置,你直接复制进知识库,对照自查 + 落地。 ## 一、纯Java代码层面高频踩坑大全(企业真实事故级) ### 一、并发 / 线程安全(最容易出线上事故) #### SimpleDateFormat 非线程安全 现象:时间解析错乱、格式异常、抛 NumberFormatException 坑:多线程共用一个实例 最优:用 DateTimeFormatter(JDK8+)或 ThreadLocal #### HashMap 并发扩容死循环 / 数据丢失 现象:CPU 100%、数据丢失、链路卡死 坑:高并发写 + 扩容 最优:ConcurrentHashMap #### volatile 不能保证原子性 现象:i++ 并发计数不准 坑:以为 volatile 能替代锁 最优:AtomicInteger /synchronized/ Lock #### ThreadLocal 不 remove 导致内存泄漏 / 数据错乱 现象:OOM、用户信息串了 坑:线程池复用线程,value 一直存在 最优:try-finally remove #### 线程池参数乱配 坑: corePoolSize = 0 无界队列 LinkedBlockingQueue 拒绝策略默认 Abort 现象:任务堆积、OOM、拒绝丢任务 最优:自定义线程池 + 有界队列 + 自定义拒绝策略 #### start () 与 run () 混淆 现象:没启新线程,串行执行 坑:调用 thread.run () CountDownLatch countDown () 放 try 外 现象:永久阻塞 最优:finally 里 countDown () ### 二、集合 / 泛型(最容易隐藏 Bug) #### ArrayList 边遍历边 remove 抛 ConcurrentModificationException 最优:迭代器 remove 或 stream filter subList 强转 ArrayList 抛异常 坑:subList 返回的是内部类,不是 ArrayList 最优:new ArrayList<>(list.subList (..)) #### Arrays.asList 转 list 后 add/remove 抛异常 坑:返回固定大小列表 最优:new ArrayList<>(Arrays.asList (...)) #### equals 空指针 坑:a.equals (b),a 为 null 最优:Objects.equals (a,b) #### BigDecimal 浮点精度丢失 坑:new BigDecimal (0.1) 最优:new BigDecimal ("0.1") #### BigDecimal 比较用 equals 而非 compareTo 坑:1.0 和 1 equals 为 false 最优:compareTo == 0 #### 泛型擦除导致重载失效 现象:方法不匹配、调用错方法 ### 三、异常 / 空指针(最常见) #### 空指针 NPE 无处不在 坑:getUser ().getAddress ().getCity () 最优:Optional + 每层判空 #### try 块 return 后 finally 仍然执行 坑:finally 覆盖返回值 最优:finally 不要 return #### catch 捕获异常后不处理(空 catch) 现象:问题隐藏,线上鬼故事 #### throw new 后又 try-catch 自己吞掉 现象:事务不回滚、问题无法追踪 #### RuntimeException 与 Exception 混用 坑:事务不回滚(默认回滚 Runtime) ### 四、IO / 资源关闭(必泄漏) #### 流不关闭导致文件句柄泄漏 最优:try-with-resources (JDK7+) 序列化版本号 serialVersionUID 缺失 坑:反序列化失败 InvalidClassException #### 字符集不指定乱码 坑:new String (bytes) 使用系统编码 最优:StandardCharsets.UTF_8 ### 五、反射 / 动态代理(微服务大量用) #### 反射调用方法缓存不足 坑:高并发下性能巨差 最优:缓存 Method 对象 #### 代理对象调用本类方法不增强(事务 / AOP 失效) 坑:this.method () 不走代理 最优:AopContext.currentProxy ().method () #### 泛型反射 getActualTypeArguments 越界 坑:非参数化类型时抛异常 ### 六、缓存 / 常量(隐蔽坑) #### 字符串常量池 == 与 equals 混用 坑:"a" == new String ("a") → false #### Integer 缓存 -128~127 以外 == 失效 坑:1000 == 1000 → false #### 静态变量类共享,并发被覆盖 坑:Controller 里写静态变量 → 全线串用户 ### 七、精度 / 运算(钱必错) #### float/double 算钱精度丢失 最优:BigDecimal #### 除法取整精度丢失 坑:1/2=0 最优:强转前先乘 1.0 ### 八、序列化 / 网络(微服务高频) #### try-with-resources 关闭顺序错误 #### 套多层流,外层先关导致内层报错 ObjectInputStream/ObjectOutputStream 顺序不对 坑:反序列化失败 ### 九、语法糖陷阱(最坑新手) #### switch 字符串 null 指针 #### foreach 底层迭代器,不能修改集合 #### 接口常量被编译进调用类,更新不生效 ### 十、性能坑(不报错但慢死) #### String + 大量拼接性能差 最优:StringBuilder #### 正则表达式灾难性回溯 现象:CPU 100% 创建大量无用对象(循环 new) 导致频繁 GC、接口卡顿 ## 二、SpringCloud 基础(1–8) ### 服务注册失败 / 心跳超时 / 下线不及时 ### Feign 超时 / 重试重复提交 / 异常被吞 ### Feign 调用丢失请求头(token/userId) ### Gateway 跨域冲突 / 路由错误 / 头丢失 ### Sentinel 限流熔断不生效 / 无兜底 / 规则不持久 ### 配置动态刷新不生效 / 多环境不一致 ### 服务雪崩 / 无降级无熔断 ### 全局唯一 ID 缺失 / 分库分表 ID 冲突 ## 三、MySQL(9–16) ### 分布式数据不一致(无事务) ### 本地事务不生效 /try-catch 吞异常 ### 索引失效 / 慢 SQL / 全表扫描 ### 并发超卖 / 更新覆盖 / 无锁 ### 主从延迟读旧数据 ### 分库分表分页 /join/count 错误 ### 大事务锁表 / 性能差 ### 数据库连接池不合理导致卡死 ## 四、Seata 分布式事务(17–24) ### Seata AT 不回滚 / 不生效 ### XID 不传递(Feign / 异步) ### AT 不支持无主键 / 分库分表 ### TCC 空回滚 / 悬挂 / 幂等缺失 ### undo_log 异常 / 脏回滚 ### seata 版本不兼容 / 配置错误 ### 分布式事务性能差 ### 跨库 / 跨微服务事务边界错误 ## 五、Redis(25–34) ### 缓存穿透 ### 缓存击穿(热点 key) ### 缓存雪崩 ### 缓存与 DB 不一致 ### BigKey 阻塞 / 倾斜 ### 分布式锁过期 / 误删 ### Redis 序列化异常 ### key 无过期 / 内存溢出 ### 缓存并发竞争覆盖 ### Redis 集群槽位 / 迁移故障 ## 六、RabbitMQ(35–44) ### 消息丢失(生产端) ### 消息丢失(broker / 未持久化) ### 消息丢失(消费端未 ACK) ### 重复消费 / 无幂等 ### 消息堆积 / 消费者阻塞 ### 死信队列未配置 / 失败无限重试 ### 延迟队列 TTL 异常 ### 序列化 / 跨语言解析失败 ### 交换机 / 队列声明错误 ### MQ 事务 / Confirm 滥用性能差 ## 七、异构系统集成(门户 / 财务 / 人力)(45–54) ### 协议不统一:REST/SOAP/WebService ### 主数据不统一:用户 / 部门 / 科目 / 编码映射 ### 同步调用超时拖垮核心服务 ### 认证不兼容:OAuth2/CAS/SAML/ 自定义 token ### 数据 T+1 滞后不一致 ### 无重试 / 无补偿机制 ### 第三方接口无全链路日志 ### 第三方升级兼容断裂 ### 内外网 / 防火墙 / VPN 间歇性不通 ### 责任边界不清(谁主数据、谁纠错) ## 八、监控 / 日志 / 运维(55–62) ### 无分布式链路(SkyWalking) ### 日志分散无聚合(ELK) ### 关键日志缺失 / 入参出参不打 ### 无监控告警(接口 / GC/Redis/MQ/ 慢 SQL) ### 环境不一致 dev/test/prod ### 无自动化部署 / 灰度 / 回滚 ### 依赖版本冲突启动失败 ### 容器网络 / 注册异常(K8s/Docker) ## 九、安全 / 高可用(63–70) ### 内部接口未鉴权可裸调 ### 权限透传失效越权 ### 敏感数据明文(日志 / Redis) ### 无接口限流被刷挂 ### 单点故障(Seata/MQ/Redis/Nacos) ### 数据无备份恢复不了 ### XSS/SQL 注入 ### 批量接口未分页 OOM