-
位运算实现奇偶交替的核心是利用奇偶性驱动流程变化:用n&1快速判奇偶,flag=-flag实现符号翻转,state^=1翻转开关,异或交换变量,掩码分离奇偶位。
-
不能直接在@Transactional方法里sendMQ(),因为事务提交发生在方法返回后,此时sendMQ()执行时数据库事务尚未真正落盘,导致消费者查不到数据;应使用@TransactionalEventListener(phase=TransactionPhase.AFTER_COMMIT)确保事务已刷盘后再发消息。
-
接口是Java中实现高内聚、低耦合的关键,通过implements实现行为规范,支持默认方法扩展、静态工具方法及多继承,提升系统可维护性与扩展性。
-
不建议重写finalize方法处理线程池回收,因其不可靠、已废弃且被JDK18彻底移除;应使用shutdown()、shutdownNow()和awaitTermination()显式管理生命周期。
-
requiresstatic表示编译期必需、运行时可选的模块依赖,用于隔离调试模块:编译时保障类型检查,运行时不加载、不报错,结合DEBUG=false可实现编译期裁剪与构建阶段物理隔离。
-
Class.isInstance是运行时动态类型检查方法,instanceof是编译期静态运算符;前者通过Class对象调用、支持动态类型,后者语法固定、右操作数须为编译期已知具体类型。
-
Paths.get构建安全跨平台路径的核心是分段传参、锚定根目录、normalize后校验;它自动适配系统分隔符,防止路径穿越,需避免字符串拼接与未校验的外部输入。
-
向下转型前必须用instanceof判断,因编译器无法确定父类引用实际指向的子类,直接强转可能触发ClassCastException;Java14+支持instanceof模式匹配(如if(objinstanceofDogdog))简化安全转换。
-
Java数组下标从0开始,有效范围为0到array.length-1;越界(如-1或≥array.length)时JVM抛出ArrayIndexOutOfBoundsException运行时异常。
-
ThreadLocal的key设为弱引用是为了避免阻断GC回收ThreadLocal实例,防止因线程长期存活导致内存泄漏;value保持强引用以保障语义一致性,其清理依赖ThreadLocalMap的探测式清理机制和显式remove()调用。
-
必须在任何I/O操作前设置Header与超时:先setConnectTimeout/setReadTimeout(单位毫秒),再setRequestProperty/addRequestProperty(中文值需URLEncoder编码),最后调用getInputStream等;顺序错乱将导致配置失效或抛异常。
-
Arrays.copyOfRange()创建全新独立数组,按[from,to)范围复制元素;from<0抛异常,to越界则补默认值,from≥to返回空数组;支持所有数组类型,不适用于泛型集合。
-
父类构造方法在子类对象实例化时必须优先执行,以确保父类字段(如privatefinalStringidCard)被正确初始化,避免未定义状态;编译器强制插入super()调用,执行顺序为:父类静态块→子类静态块→父类实例块→父类构造→子类实例块→子类构造。
-
应使用枚举配合switch实现状态分流,显式覆盖所有枚举值、禁用default兜底,Java14+推荐switch表达式,旧版default抛AssertionError;case仅调度不实现业务;状态变量须强类型绑定枚举;优先考虑在枚举内定义抽象方法实现行为穷尽。
-
Java8中启用-XX:+PrintGCDetails需配合-XX:+PrintGCTimeStamps和-Xloggc:gc.log,否则时间缺失、日志不落盘;须过滤非GC行并清理空行/ANSI码后方可解析。