-
getItems()返回原始引用导致内部状态被篡改,因Java集合默认不拷贝、final仅锁引用不锁内容;安全做法是返回不可变视图或独立副本。
-
Java服务器中可通过jstat、jinfo、jstack及JMX/HTTP端点查看JVM信息:jstat实时监控GC与内存,jinfo查看并动态修改启动参数,jstack分析线程与锁,JMX或Actuator提供结构化指标用于监控告警。
-
本文详解如何为Circle类设计add(Circleother)方法,使其将当前圆与传入圆的面积之和,映射为一个等效的新圆,并原地更新当前圆的半径,支持链式调用。
-
Scanner读取输入时卡住或跳过是因为nextInt()等不消费换行符,nextLine()会读到残留\n;应统一用nextLine()后解析,或在nextInt()后加nextLine()清缓存。
-
防止NullPointerException的核心是在使用引用变量前确保其不为null;需明确空值契约、用注解声明意图、参数校验、语义化命名、安全访问链式调用、合理使用Optional和工具方法、构造器强制初始化、利用现代API与静态检查工具。
-
ArrayList和LinkedList允许存null但易致NPE;HashMap允一个nullkey和任意nullvalue,ConcurrentHashMap禁止nullkey/value;TreeSet/TreeMap不接受null;Optional.of(null)立即抛异常,须用ofNullable。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表长度≥源列表。示例中通过预填充默认值确保容量,调用copy后完成覆盖复制。常见错误包括目标列表长度不足或未初始化,会抛出IndexOutOfBoundsException或NullPointerException。注意其与addAll()区别:copy是替换原有元素位置,不改变结构;addAll是追加元素,增加长度。需提前设置目标列表大小,可用Collections.nCopies初始化。该方法适用于复用列表对象的场景,
-
LockSupport.park()不阻塞是因为其依赖线程的permit状态:若此前已调用unpark(),permit存在则park()直接返回;多次unpark仅保留一个permit,且不保证唤醒顺序或内存可见性。
-
final类不能被继承,用于保障安全性、不可变性及性能优化。如String类防止篡改,不可变类确保状态固定,JVM可对final类方法内联优化,工具类通过final明确禁止扩展意图。
-
Scanner可通过useDelimiter()方法用正则表达式自定义分隔符,需注意双重转义、空token处理及nextXXX()的类型校验;推荐先用next()获取字符串再手动解析。
-
DTO是专用于层间数据传输的精简无逻辑POJO,本质区别在于其明确职责:仅含必要字段且禁止业务方法;而POJO是泛称,无功能约束。
-
只有实现AutoCloseable或Closeable接口的类(如FileInputStream、BufferedReader、JDBC资源等)才能用于try-with-resources;close()在块结束时按声明逆序调用,异常会被压制,且不保证关闭成功或及时。
-
Java重写要求方法名、参数列表完全一致,返回类型协变;访问权限不能更严格,检查异常不能更宽泛;static、final、private方法不可重写;需用@Override注解校验;避免构造器中调用可重写方法。
-
Path和Files从设计上解决File类路径、元数据、I/O混杂导致的跨平台错误、静默失败等问题:Path专注可预测路径操作,Files提供语义明确、异常清晰的I/O方法。
-
DelayQueue适用于定时任务调度、缓存失效控制、限流重试及消息延迟投递等场景,基于Delayed接口实现时间触发的任务管理,支持高效精准的单机延迟处理,但不适用于分布式环境。