-
单纯靠module-info.java无法实现服务变量的动态插拔,因其仅支持编译期和启动期的静态模块声明与服务契约定义,而动态启用/停用/替换需依赖运行时机制如服务注册中心、事件驱动或Spring动态Bean注册。
-
getPathMatcher()仅支持glob:和regex:两种语法;glob:支持*(同层多字符)、?(单字符)、[a-z](字符类),不支持**或跨目录匹配;regex:用于复杂路径匹配,需传全路径字符串。
-
Path.resolve用于解析路径片段为绝对路径,不构建映射但可配合对象实现变量→路径映射;推荐用resolve预计算paths对象,动态拼接时也应调用resolve而非字符串拼接。
-
DateTimeFormatter.ofPattern()不支持模糊匹配或可选字段,必须严格匹配输入字符串与模式的长度、分隔符和占位符;多种格式需预处理或多个formatter尝试解析,且pattern中中文字符须用单引号包裹并指定Locale。
-
费雪-耶茨乱序算法从后往前遍历数组,每次随机选[0,i]内索引j与arr[i]交换,时间复杂度O(n),原地操作且排列等概率;Java中用Random.nextInt(i+1)确保范围正确,避免正向遍历或边界错误。
-
Stream.iterate()的终止条件在Java9+中通过三参数重载(seed,Predicate,UnaryOperator)显式指定,Predicate判断当前值是否继续;Java8中无此重载,只能用limit()预设次数或手动截断。
-
Lambda表达式优化MyBatis动态参数包装器,用LambdaQueryWrapper替代QueryWrapper实现编译期字段校验;封装ifPresent工具方法解耦空值判断;用Predicate集合+流式合并处理复杂条件;LambdaUpdateChainWrapper结合setSql实现类型安全的动态更新。
-
Java有8种基本数据类型:整数型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean);其与引用类型的核心区别在于存储内容、内存位置、默认值、是否可为null及参数传递方式。
-
是,因readinessProbe未真实反映业务就绪状态:如initialDelaySeconds过小、未检查DB/Redis等依赖,或健康端点响应超时导致误判,使流量过早导入尚未完成初始化的新Pod。
-
标量替换是JIT基于逃逸分析对未逃逸且可拆解对象的优化,将堆上对象拆为栈上标量存储,跳过堆分配。需满足对象不逃逸、字段全为标量或已inline类型,且避免hashCode、synchronized等身份感知操作。
-
LongAdder的cells数组扩容触发条件是:当前数组长度小于CPU核数且在Cell上CAS失败;此时先CAS设置cellsBusy为1加锁,再将数组扩容为原长2倍,并复制原有数据。
-
不能。final修饰的方法在编译期禁止重写,JVM直接报错“Cannotoverridethefinalmethod”,其本质是确立稳定契约而非锁死代码,用于工具类核心逻辑、模板方法固定步骤及安全敏感操作。
-
setAccessible(true)的作用是绕过JVM访问权限检查,通过将AccessibleObject内部override标志置为true,使后续反射调用(如invoke、get)跳过安全管理器校验、修饰符解析及继承关系遍历等耗时流程。
-
快速选择算法可在O(n)平均时间复杂度内找到无序数组中第K小元素;其通过分区操作将数组分为小于、等于、大于基准的三部分,并根据K与各区长度关系递归收缩查找范围,配合随机化基准选择避免最坏O(n²)性能。
-
SecurityException是Java安全模型检测到违规时抛出的异常,需通过启用SecurityManager(Java8–16)并配置policy文件限制PropertyPermission来阻止第三方JAR读取user.home等敏感属性。