运行时有出现过什么异常?

在我的项目开发和生产运维中,遇到的异常可以归纳为以下几类:

第一类:常见的运行时异常

这类异常通常是由于编码疏忽或逻辑不严谨造成的。

  • 空指针异常
    • 场景: 最经典的比如:调用 null 对象的方user.getName(), 从Map中get一个不存在的键返回null后继续操作,或者自动拆箱Integerint时对象为null
    • 原因与解决: 根本原因是缺少null值判断。我的解决方法是:1)在调用前进行判空;2)使用Optional类来优雅地处理可能为null的情况;3) 在获取 Map 值时使用getOrDefault方法。
  • 类型转换异常
    • 场景: 在使用集合框架时,比如从一个声明为List的集合里取出一个元素并强转为String,但实际上里面存放的是Integer
    • 原因与解决: 原因是类型不安全。解决方法是:1)在使用泛型集合时,始终指定具体的类型参数,利用编译器的类型检查;2)在强制转换前使用instanceof进行类型判断。
  • 数组越界/字符串越界异常
    • 场景: 循环或访问数组、列表、字符串时,索引超出了有效范围。
    • 原因与解决: 循环条件或索引计算错误。解决方法是在访问前检查索引是否 >=0< array.length

第二类:业务相关的特定异常

这类异常与你的项目业务逻辑紧密相关,能体现你的业务理解能力。

  • 场景: 比如在一个电商项目中,我遇到过 InventoryShortageException
  • 原因: 用户下单时,系统检测到商品库存不足。
  • 解决: 这不仅仅是一个技术异常,更是一个业务流程问题。我们不仅在代码中抛出这个异常,还在前端给用户明确的提示"商品库存不足",并引导用户重新选择。同时,这个异常会触发告警,通知运营人员及时补货。

第三类:框架和集成相关的异常

这类异常能体现你对所用技术栈的熟悉程度。

  • Spring框架中的异常:
    • BeanCreationException: 比如Bean注入失败,可能是因为循环依赖。我们通过代码重构,使用@Lazy注解或 setter 注入来解决。
    • TransactionException: 事务回滚失败。我们检查了事务的传播属性和数据库连接,确保在异常发生时事务能正确回滚。
  • 数据库相关异常:
    • DataIntegrityViolationException: 插入数据违反了数据库约束(如唯一键冲突、外键约束)。我们通过在前端增加数据校验和在代码中先查询再插入的逻辑来避免。
    • DeadlockLoserDataAccessException: 数据库死锁。我们通过分析数据库死锁日志,调整业务逻辑中SQL的执行顺序,或者缩短事务执行时间来减少死锁概率。
  • 网络和微服务异常:
    • ConnectException / SocketTimeoutException: 在调用外部HTTP接口或微服务时,连接超时或读取超时。
    • 原因与解决: 网络不稳定或下游服务响应慢。我们的解决方案是:1)合理设置连接和读取超时时间;2)引入重试机制(如Spring Retry);3)使用熔断器模式(如Hystrix或Resilience4j)防止雪崩效应。

需要避免的坑

  • 不要说"我没遇到过什么异常": 这会显得你经验不足。
  • 不要只停留在表面: 不要只说"我遇到了NPE,然后加了判空"。要深入一点,讲讲场景和思考。
  • 不要抱怨: 不要把问题归咎于同事或过时的代码,要展示你主动解决问题的能力。

总结

面试官问这个问题,不仅仅是想听你列举异常名称,他更想考察你的实战经验、问题分析能力和解决复杂问题的思路。用一个结构化的回答,并结合一个深入的故事,会让你在这个问题上获得高分。

相关推荐
evans在进步2 分钟前
Spring Boot 核心机制详解:可执行 JAR、CORS、静态资源与配置绑定
spring boot·后端·jar
Sayuanni%38 分钟前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
坚定信念,勇往无前31 分钟前
Maven 私有仓库-nexus
java
Minner-Scrapy38 分钟前
Scrapy 2.17 源码解析:Scheduler 调度器与磁盘/内存双队列
java·爬虫·python·scrapy·网络爬虫·twisted
晚风醉蝶1 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
陈随易1 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
夏天拐跑了西瓜1 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
2601_967264282 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习
人间凡尔赛2 小时前
2026 后端架构三驾马车:Wasm 容器上 K8s、存算分离与 AI 原生
后端·云原生·架构
m0_587383002 小时前
社区家政系统开发实战:从需求分析到上线部署全指南
java·spring boot·spring·需求分析