-
@Async默认不生效,因需显式启用@EnableAsync且必须通过Spring代理调用;常见失效原因包括未启用异步支持、本类内直接调用、方法非public、使用this调用等。
-
可使用Collections.shuffle()打乱List集合元素顺序,如ArrayList、LinkedList;2.可传入Random实例实现可重现的随机结果;3.仅适用于支持随机访问的List,原集合会被修改;4.非List集合需先转为List再打乱。
-
monitorenter是锁获取的统一入口,但是否触发ObjectMonitor取决于锁状态:偏向锁仅修改MarkWord,轻量级锁用CAS操作栈帧LockRecord,仅当竞争导致锁膨胀时才初始化并调用ObjectMonitor::enter。
-
多数情况下不指定初始容量也能正常工作,但预估数据量时建议指定,如newArrayList(300);默认容量10,扩容为1.5倍并复制数组,频繁add会降低性能。
-
Java线程协调核心是控制等待与通知机制,常用方式包括synchronized+wait/notify、Lock+Condition、CountDownLatch、CyclicBarrier、Semaphore和BlockingQueue;其中BlockingQueue最实用,CountDownLatch适用于一次性等待,Condition适合多条件精确控制,wait/notify需配合while循环和synchronized使用。
-
PriorityQueue默认是最小堆,队首返回最小元素;需显式传Comparator.reverseOrder()才能实现最大堆;自定义对象必须实现Comparable或提供Comparator,否则抛ClassCastException。
-
Future是Java中用于获取异步任务结果的核心接口,通过ExecutorService提交Callable任务并调用get()方法获取结果,支持超时控制、状态轮询和批量任务处理,但易阻塞,复杂场景推荐使用CompletableFuture。
-
do-while是唯一能天然保证探测至少执行一次的循环结构,因其语义明确分离初始化、重试与退出逻辑,避免资源泄漏、EINTR处理错误及维护性问题。
-
Optional不是null替代品,而是为明确表达“可能无值”的计算链设计;禁用其作参数、字段、DTO及序列化场景,优先使用函数式操作而非isPresent()。
-
当多个接口定义同名默认方法时,Java要求实现类必须显式覆盖并用InterfaceName.super.methodName()调用指定实现;抽象类方法优先于接口默认方法;建议通过命名规范和审慎添加默认方法来避免冲突。
-
不建议在新项目中使用FreeTTS。它已停止维护,与Java11+兼容性差,仅支持生硬英文语音,完全不支持中文,且存在NoClassDefFoundError等频繁错误。
-
死锁典型模式是多线程以不同顺序获取同一组锁,导致相互等待;预防需统一加锁顺序、使用tryLock超时机制及lockInterruptibly响应中断,并辅以jstack和ThreadMXBean检测。
-
本文介绍在SpringDataJPA中,无需编写原生SQL或JPQL,仅通过方法命名约定即可在Repository接口中实现字符串字段的升序/降序排序。
-
@NotNull对基本类型无效,因int等不能为null;校验数值范围应改用Integer+@NotNull+@Min或int+@Min;validate()返回Set需手动检查,Spring推荐@Valid参数校验;自定义message需配ValidationMessages.properties;嵌套对象须加@Valid。
-
UUID核心用途是无中心生成极大概率不重复的128位唯一标识符;常用randomUUID()生成版本4随机UUID,适合分布式主键、traceId等;nameUUIDFromBytes()生成版本3确定性UUID,适用于URL等输入映射;不可对版本4调用timestamp()等方法。