-
Java14+的NPE错误行号更准需启用-XX:+ShowCodeDetailsInExceptionMessages,该参数在Java14–17为实验性、Java18+默认启用,但部分JDK如Dragonwell仍需手动开启;编译须保留调试信息(-g),否则提示退化;IDE配置、静态分析(SpotBugs)、Optional合理使用及fail-fast(Objects.requireNonNull)可进一步预防NPE。
-
使用BlockingQueue实现线程安全消息队列,推荐LinkedBlockingQueue、ArrayBlockingQueue等并发队列,通过put/take方法实现生产者-消费者模型,避免手动加锁,提升性能与可靠性。
-
wait和notify必须在synchronized块中调用,否则抛IllegalMonitorStateException;需用同一锁对象、while循环检测条件、volatile或锁保护条件变量,优先用notifyAll(),禁用sleep轮询。
-
对象状态一致性要求成员变量满足约束条件,如余额非负、时间有序等,确保方法执行前后对象处于合法状态,通过封装控制访问并结合异常处理防止非法修改,同时在多线程环境下利用同步机制保障复合操作的原子性,从而维护程序的可靠性与数据安全。
-
transient关键字标记成员变量使其在序列化时被跳过,仅对实现Serializable接口的类生效;static+transient冗余,finaltransient字段反序列化后按默认值初始化;适用于敏感数据、临时状态等场景。
-
能解决STW问题的关键在于理解JVM对象分配、标记与回收机制,而非依赖参数调优;需排查隐式System.gc()调用、DirectByteBuffer清理缺失、容器CPU资源争抢、GC算法适用性及日志分析能力。
-
匿名内部类是Java中“定义即实例化”的语法糖,用于满足单次使用的接口/抽象类契约,适用于非函数式接口、需调用父类构造器、定义字段或方法等Lambda无法处理的场景。
-
Java初学者开发购物系统应先用控制台实现核心流程:统一用nextLine()处理输入避免换行符残留;商品、购物车、订单类职责分明;购物车用ArrayList+Map管理;结账时复制商品快照;主循环用while+switch控制菜单;完成基础功能后再扩展持久化或界面。
-
Java中使用try-with-resources最核心的优势是让资源释放“不用操心但一定发生”,只要资源实现AutoCloseable,JVM就保证其在try块结束时自动关闭,无论正常执行、return或抛异常。
-
Connection必须实现AutoCloseable才能用于try-with-resources,旧驱动(如MySQL5.1.x、PostgreSQL42前)仅实现java.sql.Connection而未实现AutoCloseable,导致编译报错;需升级驱动并确保JDK≥7、编译目标设为1.7+。
-
标记-清除算法先标记可达对象,再清除未标记对象内存,不移动对象但产生碎片;适用于老年代,现代JVM多作为Mark-Compact或G1的基础阶段。
-
ArithmeticException是Java中不强制捕获的运行时异常,仅在int、long等整数类型除零时抛出;float/double除零返回Infinity或NaN;应前置校验分母而非依赖try-catch。
-
AtomicStampedReference不自动解决ABA,而是通过版本号使ABA可检测;必须用get(int[])原子获取最新引用与stamp,每次compareAndSet前重读,不可硬编码或缓存stamp,否则CAS因stamp不匹配而失败。
-
短路运算符仅在左操作数确定整体结果时跳过右表达式:&&左为false、||左为true时生效;需确保左操作数稳定快速且分布利于提前终止,避免异常、副作用或耗时操作置于左侧。
-
groupingBy默认返回HashMap无序,因HashMap不保证遍历顺序;需插入顺序用LinkedHashMap::new,需key排序用TreeMap并指定Comparator。