-
ReentrantLock必须手动释放,需在finally块中调用unlock();lock()阻塞获取,tryLock()支持非阻塞或超时;公平锁性能差且仅影响队列线程;Condition实现多条件等待;多数场景优先用synchronized。
-
ResourceLeakDetector仅监控ByteBuf引用计数是否归零及GC时是否释放,不跟踪物理内存池、线程本地缓存或跨线程持有状态;其检测边界是refCnt()为0且对象被GC,而非分配线程或内存页层面的泄露。
-
Long.expand并非Java或Kotlin标准API,JDK21/Kotlin1.9中不存在该方法;它可能源于拼写错误、教学代码中的自定义扩展、或对硬件指令(如PDEP)的误称;典型位展开需手动实现或借助未来VectorAPI。
-
答案:PriorityQueue是基于堆的优先级队列,默认为最小堆,用于高效获取极值,适用于任务调度、TopK等问题;它不保证全局有序,允许重复元素,添加和删除操作时间复杂度为O(logN),但remove(Object)效率低,遍历时无序,需用poll()按序取出;自定义排序可通过Comparator实现,如最大堆或对象字段排序;注意初始容量设置、不可变排序字段、非线程安全及禁止null元素,与TreeSet相比更适用于仅关注极值的场景。
-
首先设计Order和OrderItem等核心类,再通过OrderService实现订单的创建、查询与状态更新,结合业务流程计算总价并处理数据持久化,最后扩展数据库支持与异常处理。
-
必须用volatile修饰静态实例变量,否则多线程下可能拿到未初始化完成的对象;因为JVM创建对象的三步(分配内存、调用构造函数、赋值引用)可能重排序,导致其他线程看到半初始化状态。
-
MixedGC触发需先满足堆占用超InitiatingHeapOccupancyPercent(默认45%)以启动并发标记,完成后才可能执行;其回收老年代Region数量由G1MixedGCCountTarget、G1OldCSetRegionThresholdPercent及MaxGCPauseMillis动态调控,非固定或全量清理。
-
MetaspaceSize和MaxMetaspaceSize应设为相等以避免动态扩容引发的频繁FullGC和OOM;需结合服务复杂度合理设定值(128m~1g),并优先排查类加载器泄漏,而非盲目调参。
-
BigDecimal.precision()返回数值的有效数字总位数,如"123.45"为5、"0.00123"为3、"100.00"为3,用于审计中校验最大有效位数(如金融系统限15位),需区别于scale(小数位数)和字符串长度。
-
本文详解如何对try-catch中静默处理异常(不re-throw)的方法进行有效单元测试,重点通过Mock日志器验证异常捕获逻辑,满足Jacoco行/分支覆盖率要求。
-
BlockingQueue提供开箱即用的线程安全队列,内置阻塞、唤醒与JMM语义保障;无需手写wait/notify,避免虚假唤醒、死锁等错误;ArrayBlockingQueue适合固定容量场景,LinkedBlockingQueue吞吐更高但有GC压力;关闭需配合结束标记或中断机制。
-
Java集合框架是围绕Collection和Map接口构建的契约体系,接口定义操作,实现类负责高效实现;List与Set核心区别在于唯一性语义而非顺序;哈希类集合依赖hashCode()与equals()一致性。
-
File.getFreeSpace()通过目标分区路径构造File实例来获取剩余空间,推荐用getUsableSpace()并校验exists()和canRead(),注意跨平台路径格式及容器环境限制。
-
ClassCastException是Java运行时因非法强制类型转换抛出的异常,根本原因是对象实际类型与目标类型无继承或实现关系;常见于集合取值盲转、反射调用后未校验、JSON反序列化类型丢失等场景;可通过instanceof预检、泛型约束、明确反序列化类型等方式避免。
-
标记-清除算法在高频分配下加剧内存碎片,因其只回收死亡对象、不移动存活对象,导致空闲块大小不一、位置随机;高频短生命周期对象反复分配释放,使空闲链表中大量小碎片累积,无法拼凑出大块连续空间,进而触发频繁GC。