火柴人篮球
47.57 MB · 2025-11-22
在我的项目开发和生产运维中,遇到的异常可以归纳为以下几类:
这类异常通常是由于编码疏忽或逻辑不严谨造成的。
null 对象的方user.getName(), 从Map中get一个不存在的键返回null后继续操作,或者自动拆箱Integer为int时对象为null。null值判断。我的解决方法是:1)在调用前进行判空;2)使用Optional类来优雅地处理可能为null的情况;3) 在获取 Map 值时使用getOrDefault方法。List的集合里取出一个元素并强转为String,但实际上里面存放的是Integer。instanceof进行类型判断。>=0 且 < array.length这类异常与你的项目业务逻辑紧密相关,能体现你的业务理解能力。
InventoryShortageException。这类异常能体现你对所用技术栈的熟悉程度。
BeanCreationException: 比如Bean注入失败,可能是因为循环依赖。我们通过代码重构,使用@Lazy注解或 setter 注入来解决。TransactionException: 事务回滚失败。我们检查了事务的传播属性和数据库连接,确保在异常发生时事务能正确回滚。DataIntegrityViolationException: 插入数据违反了数据库约束(如唯一键冲突、外键约束)。我们通过在前端增加数据校验和在代码中先查询再插入的逻辑来避免。DeadlockLoserDataAccessException: 数据库死锁。我们通过分析数据库死锁日志,调整业务逻辑中SQL的执行顺序,或者缩短事务执行时间来减少死锁概率。ConnectException / SocketTimeoutException: 在调用外部HTTP接口或微服务时,连接超时或读取超时。面试官问这个问题,不仅仅是想听你列举异常名称,他更想考察你的实战经验、问题分析能力和解决复杂问题的思路。用一个结构化的回答,并结合一个深入的故事,会让你在这个问题上获得高分。