-
因为Objects.compare()是静态方法,返回int值而非Comparator实例,无法直接作为Comparator函数式接口的实现传入;必须配合lambda或方法引用封装为Comparator。
-
模块冲突导致类加载异常的本质是JVM加载了错误版本的类。需先通过异常类型(ClassNotFoundException/NoClassDefFoundError/NoSuchMethodError)判断性质,再用mvndependency:tree-Dincludes或-verbose定位冲突源,结合-verbose:class验证实际加载路径,最后用dependencyManagement锁定版本或exclusions排除干扰依赖。
-
线程池用于分离图像处理与UI线程,需按任务类型选策略:I/O用原生异步API,CPU密集型用Task.Run;合理配置线程数与队列;结果须安全回传至UI线程更新。
-
Math类因基于IEEE754双精度浮点数,无法精确进行小数运算,如0.1+0.2≠0.3;金融复利、随机百分比四舍五入、double相等判断等场景易出错。
-
根本原因是Collections.unmodifiableXXX返回的是只读包装器而非独立副本,调用add()等修改方法必然抛出UnsupportedOperationException;这是设计契约,非bug。
-
Math.pow()基本用法是Math.pow(底数,指数),返回底数的指数次幂;顺序不可颠倒,如Math.pow(2,3)得8而Math.pow(3,2)得9;负数非整数次方、0的负数次方等会返回NaN或Infinity。
-
线程栈的物理指纹是带内存地址与锁标识的原始栈快照,关键字段包括tid/nid、阻塞语义(如parked)、对象监视器地址(0x...)及精确线程状态(BLOCKED/WAITING)。
-
强转不参与物流单切分,也不影响分支预测;物流单自适应切分依赖业务规则建模与约束求解,分支预测是CPU硬件机制,与物流逻辑无关。
-
不能直接在@Transactional方法里sendMQ(),因为事务提交发生在方法返回后,此时sendMQ()执行时数据库事务尚未真正落盘,导致消费者查不到数据;应使用@TransactionalEventListener(phase=TransactionPhase.AFTER_COMMIT)确保事务已刷盘后再发消息。
-
下界通配符?superT的核心作用是支持安全写入T及其子类实例,即“写入友好”;它通过编译期检查确保add()合法,读取时仅允许Object类型,契合PECS原则中Consumer用super的设计思想。
-
应直接使用Collections.reverse,它原地反转、O(n)时间复杂度、O(1)空间复杂度且经充分测试;手写递归易栈溢出、性能差、易出错,仅限算法题或教学场景。
-
@ServerEndpoint在SpringBoot中默认不生效且无法注入SpringBean,需通过ServerEndpointExporter手动注册并仅限Tomcat;更推荐使用WebSocketHandler+WebSocketConfigurer实现原生支持。
-
Random.nextInt仅支持单参数上界,生成[min,max]需用nextInt(max-min+1)+min;ThreadLocalRandom原生支持双参数且线程安全;用户输入需校验边界;业务还需考虑去重、加权等语义约束。
-
用二维数组实现配置解析,核心是将配置项定义为“字段名→默认值→类型→是否必填”的表格结构,通过遍历匹配、类型转换和嵌套展开,生成类型安全、可直接使用的键值对配置。
-
JavaTimer是单线程轻量级调度工具,适合简单低频任务;但非线程安全、异常导致线程终止、不支持并发,生产环境应优先使用ScheduledThreadPoolExecutor。