-
重写clone()仍为浅拷贝,因Object.clone()仅复制字段值,对引用类型不递归拷贝;需手动深拷贝可变引用字段,否则修改副本会影响原对象。
-
volatile通过强制每次读取从主内存加载、每次写入立即刷回并使其他缓存失效,解决“修改不可见”问题;但它不保证复合操作原子性,也不能替代synchronized处理多步逻辑或状态协同。
-
字符串转数字前必须先校验合法性,避免直接解析抛异常;推荐用正则粗筛或ApacheCommonsNumberUtils等成熟工具,并注意各语言特性差异。
-
getDeclaredConstructor()找不到私有构造函数最常见的原因是参数类型不匹配(如int.class与Integer.class混淆)或目标构造器不在当前类声明中;必须用setAccessible(true)才能调用,且需注意Java9+模块封装和Android兼容性问题。
-
Collections.reverse()时间复杂度为O(n),适用于大多数列表反转场景,但不支持不可修改列表,需先创建副本;处理大型列表时性能线性增长,可考虑优化策略。
-
SpringBoot接口版本控制的核心在于确保API在演进过程中支持不同版本的客户端,避免旧系统崩溃。1.URI路径版本控制通过在URL中嵌入版本号(如/api/v1/users),实现简单且对客户端友好,但可能导致路由配置膨胀;2.HTTPHeader版本控制利用自定义请求头(如X-API-Version)传递版本信息,保持URL简洁但需要客户端额外设置请求头;3.内容协商版本控制通过Accept头指定版本(如application/vnd.myapi.v1+json),符合HTTP规范但实现复杂;4.
-
Future是异步结果占位符,不执行任务;get()会阻塞且需超时控制,异常包括ExecutionException、CancellationException、InterruptedException;isDone()/isCancelled()仅返回瞬时状态;无回调能力,推荐用CompletableFuture替代。
-
BufferedReader是Java中通过内部缓冲区提升字符流读取性能的包装类,需包装Reader实例(如InputStreamReader+FileInputStream),推荐显式指定UTF-8编码,优先使用try-with-resources和readLine()按行读取,避免混用读取方法及默认编码导致乱码。
-
Java集合框架是替代数组的标准化体系,解决长度固定、操作繁琐等问题,提供自动扩容、统一遍历与排序机制;分Collection(List/Set/Queue)和Map两大主干,接口定义行为,实现类决定效率,随JDK演进持续增强泛型、函数式与不可变支持。
-
try-with-resources是Java7引入的自动资源管理机制,确保实现AutoCloseable接口的资源在使用后自动关闭。其基本语法为在try后括号内声明资源,如文件流、数据库连接等,资源会按逆序自动关闭,无需手动调用close()。支持多个资源管理,且能正确处理异常——若try块和close()均抛异常,try块异常为主异常,close异常被抑制并可通过getSuppressed()获取。自定义类只需实现AutoCloseable接口即可支持该特性。此机制简化代码、避免资源泄漏,提升程序安全
-
基本数据类型比较用==和!=,浮点数需考虑精度误差,推荐使用容差范围判断相等;大小比较可借助包装类的compareTo方法,但注意自动装箱影响性能,高频操作应优先使用原始类型和直接运算符。
-
观察者模式通过被观察者状态变化时自动通知所有依赖的观察者实现一对多更新,常用于事件处理、GUI交互与数据同步;核心为Subject维护Observer列表并触发update方法,Java中可通过自定义接口或过时的Observable类实现,适用于解耦事件源与处理逻辑,需注意性能与内存泄漏问题。
-
@Override注解用于标识子类重写父类方法,要求方法名、参数列表、返回类型(含协变)一致,访问权限不更严格,且父类方法不可为final、static或private;它仅在编译期校验重写合法性,提升可读性与错误发现效率。
-
在FreeMarker模板中,Double类型本身不保存小数位信息,需通过格式化指令(如?string('0.00'))显式指定两位小数输出,确保100.0或100.00均渲染为100.00。
-
彻底卸载旧JDK需手动清理残留:Windows删注册表和ProgramFiles/Java;macOS用sudorm-rf/Library/Java/JavaVirtualMachines/jdk-*.jdk;Linux用包管理器卸载并清空/usr/lib/jvm/等目录,再验证whichjava、echo$JAVA_HOME、java_home-V均为空后,再安装新JDK。