-
应避免使用java.util.Stack,改用ArrayDeque或LinkedList实现栈;Queue是接口,需选用合适实现类;优先使用offer()/poll()/peek()而非add()/remove()/element();迭代器不保证LIFO/FIFO顺序。
-
不能用System.nanoTime()准确测量invokedynamic生成时滞,因其仅能捕获首次调用总延迟,无法隔离类加载、字节码生成、方法句柄解析等JVM内部开销;应采用预热后测量、显式调用bootstrap方法计时或JVMTI/JFR等语义对齐工具。
-
Java枚举天然防反射创建实例,因JVM在native层硬编码限制枚举实例化;其序列化与线程安全由语言机制保障,无需readResolve或synchronized;但不支持延迟加载、依赖注入及继承,适用场景有限。
-
子类重写方法时,只能抛出父类方法声明的检查型异常或其子类,不可新增检查型异常,但可自由抛出运行时异常;若父类方法未声明检查型异常,子类也不得声明,以确保多态调用的安全性。
-
自定义异常能提升Java代码可读性和维护性,通过命名明确异常语义,如UserAlreadyExistsException;继承Exception或RuntimeException并封装错误信息;统一组织在exception包中,建立BaseBusinessException基类;结合枚举管理错误码;合理控制异常数量,在业务层主动抛出并包装底层异常,使错误处理更清晰可控。
-
必须调用setAccessible(true)才能反射调用方法,否则抛IllegalAccessException;需处理InvocationTargetException包装、参数类型匹配、模块化访问限制及Method缓存优化。
-
StringJoiner是Java8引入的专用于结构化字符串拼接的工具类,支持分隔符、前缀、后缀、空值定制、合并及长度统计,底层基于StringBuilder实现,轻量高效且线程不安全。
-
JavaSoundAPI无法直接剪辑音频,需手动计算帧数定位并读写PCM数据;仅原生支持WAV/AIF等格式,MP3/FLAC需第三方库;写入必须用WAV且AudioFormat严格一致。
-
企业级缓存须分层选用引用类型:强引用仅限核心上下文,软引用用于高价值可重建热数据,弱引用用于无重建成本临时数据,并需ReferenceQueue清理幽灵引用,叠加LRU/LFU限容及监控灰度。
-
Eclipse是绿色免安装IDE,解压即用,前提是正确安装并配置JDK;下载官方ZIP包、解压至无中文无空格路径、启动后配置工作空间和InstalledJREs为已装JDK、设UTF-8编码,新建Java项目运行“Hello,Eclipse!”验证成功。
-
手动定义serialVersionUID可确保序列化兼容性,避免因类结构变化导致反序列化失败。Java默认生成的ID依赖类名、字段等信息,编译环境或代码微小改动均使其改变,易引发InvalidClassException。显式声明后,可在兼容性变更时主动控制ID更新,保留原ID则允许旧版本读取新对象,提升系统稳定性。同时减少运行时反射计算开销,增强代码可读性与维护性。IDE通常提示添加,建议所有可序列化类均显式定义该字段,成本低且能有效防止分布式或持久化场景下的数据兼容问题。
-
Semaphore在低代码中不参与Java→JSON转换,仅限流并发转换任务;典型用于批量导出、嵌套序列化、脚本沙箱执行;应单例托管、acquire/release配对、避免脚本内操作。
-
Arrays.asList返回的列表是原数组的视图,非独立副本,不支持增删操作,修改会同步到原数组。
-
execute()提交Runnable时异常会直接穿透至线程层面,触发默认UncaughtExceptionHandler打印堆栈并终止工作线程,线程池随后新建线程补位;因Runnable.run()不支持throws,unchecked异常未捕获即导致线程立即终止,这是ThreadPoolExecutor的主动设计而非bug。
-
不能。GCViewer仅解析JVMGC日志中的暂停事件、频率和堆变化,不接入请求时间序列或业务指标,无法直接计算GC对P99延迟的贡献,需结合业务响应时间与GC暂停数据手动估算。