java面试中的陷阱,java面试100题
Java陷阱之:finally块抛出异常或return导致异常丢失
在Java中,finally块抛出异常或包含return语句会导致try块中的异常丢失。finally块抛出异常:当try块和finally块都抛出异常时,只有finally块中的异常会被传播,try块中的异常会被丢弃。
HashMap.remove()会修改modCount(表示容器结构被改动),但不会更新迭代器的expectedModCount。这导致迭代器在后续检查时发现modCount != expectedModCount,从而抛出异常。
Null 的过度使用 避免过度使用 null 值是一个最佳实践。例如,更好的做法是让方法返回空的 array 或者 collection 而不是 null 值,因为这样可以防止程序抛出 NullPointerException。忽视异常 我们经常对异常置之不理。然而,针对初学者和有经验的 Java 程序员,最佳实践仍是处理它们。
Java框架中的陷阱:识别并避免它们的指南
1、性能问题问题:框架的默认行为(如Hibernate的一级缓存)可能引发性能瓶颈。示例:// 反模式:未优化实体管理@Entitypublic class MyEntity { // 大批量操作时,持久化上下文可能占用过多内存}解决:使用性能分析工具(如JProfiler、VisualVM)定位瓶颈。
2、使用 Java 框架构建分布式系统时,需注意以下关键陷阱及应对策略: 分布式共识的挑战核心问题:节点间需达成状态共识,配置不当会导致脑裂(集群分裂)或共识失败。
3、finally 块的执行优先级finally 中的 return 会覆盖 try/catch 的返回值,且若 try 中调用 System.exit(0),finally 不会执行。陷阱场景:try { return 1; } finally { return 2; } 最终返回2,导致逻辑错误。原则:避免在 finally 中使用 return 或资源操作(如关闭流)。
java并发高频面试题:Sempahore的使用场景与常见误区
1、在使用Semaphore时,常见的误区之一就是未能正确处理许可超额现象。正确的使用方式应该是确保在获取许可后,无论成功与否,都要在finally块中释放许可,以避免在多个线程中重复释放许可导致逻辑错误。特别是在使用带超时时间的acquire方法时,这一点尤为重要。
