Skip to content

Java · 05 常见问题 ​

排障入口。跨语言共性另见 后端问题;面试细题见 就业指南。

1. 语言 / JVM ​

问题怎么看怎么动
OOM / 堆飙高泄漏或缓存无界居多dump、看占支配类、查本地/Redis 缓存上限
频繁 Full GC分配过快或存活集太大先减分配与缓存,再谈调参
CPU 飙高死循环、锁竞争、正则/序列化采样线程栈,对准热点方法
启动很慢扫描面过大、依赖重、磁盘慢启动报告、精简自动配置
元空间 OOM动态类/代理过多或泄漏查热部署、脚本引擎、反射生成

原则:没有证据不调 GC 参数当第一反应。


2. 并发与线程池 ​

问题常见原因
接口偶发卡住池队列满、死锁、锁内远程调用
OutOfMemoryError: unable to create new native thread线程无界创建
数据偶发错乱共享可变无同步;HashMap 并发写
volatile 没用误当成原子性工具

处理:有界池 + 明确拒绝策略;共享状态最小化;复合操作要原子方案。


3. Spring / 事务 ​

问题常见原因处理
@Transactional 不生效同类自调用、非 public、异常被吃、没进 Spring 代理注入自身/拆服务方法;抛出让回滚的异常
事务太大锁表长事务含远程/大循环缩短事务;先落状态再异步
循环依赖启动失败构造器互环拆模块、Setter/ObjectProvider、或 @Lazy(治标)
注入失败多实现未 @Qualifier、包没被扫描看启动日志 Bean 定义
配置没生效profile 错、配置被覆盖、拼写错启动打印有效配置(注意脱敏)

事务口诀:代理、异常、边界 三件事先查。


4. Web / 数据 / 缓存 ​

问题优先动作
接口超时看本服务池、DB 池、下游 RT、慢 SQL
慢 SQL执行计划、索引、是否 select *、是否 N+1
更新丢失并发写无版本号/乐观锁;事务隔离误解
缓存与 DB 不一致先定「谁为准」与失效策略,再谈锁
缓存击穿/穿透/雪崩空值缓存、互斥重建、过期打散——按真实流量上

开放接口再补:鉴权、幂等键、限流、签名校验。


5. 架构与选型 ​

问题建议
要不要上 Cloud?发布独立性与团队规模不够 → 先模块化单体
要不要上 MQ?有削峰、异步解耦、最终一致再上;不为「简历有 MQ」
Java 还是 Python?状态与业务权威在 Java;模型与脚本在 Python
要不要拆微服务?默认否;痛点是独立演进/故障隔离时再拆
单体已经很乱先划模块与表归属,再谈进程拆分

6. 和项目相关的高频坑 ​

AI 异步任务 ​

  • 只调通 Demo、没有任务表与状态 → 无法重试与对账
  • 重试不幂等 → 重复扣费/重复生成
  • 模型错误与网络错误不分类 → 乱重试打爆额度

MES / 多端 ​

  • 设备时钟与服务器时钟不一致 → 追溯对不上
  • 采集风暴打满连接池 → 业务接口一起挂;要隔离与限流

CRM 定制 ​

  • 客户化直接改公共核心 → 升级即冲突;能配置化就配置化
  • 大事务里调企业微信/钉钉 → 超时回滚惨案

7. 相关入口 ​