-
DateTimeFormatter.parse()抛DateTimeParseException主因是格式模式与输入字符串严格不匹配;LocalDateTime.format()不输出时区因类型本身无时区;转Instant需先转LocalDateTime再指定时区;YYYY为周基年,yyyy为日历年,跨年场景易出错。
-
答案:Java中线程死锁因相互持锁等待导致程序停滞,可通过JConsole、jstack或ThreadMXBean检测;预防需统一锁顺序、使用tryLock、减小锁粒度、采用并发工具类,并在设计时分析锁依赖,结合规范编码与监控降低风险。
-
CopyOnWriteArrayList通过写时复制实现线程安全,读操作不加锁、效率高,适用于读多写少、允许数据稍有过期的场景,但写操作需复制整个数组,性能开销大,适合监听器列表、配置缓存等低频更新场合。
-
Path比File更灵活,能跨平台处理路径逻辑;Files类封装90%以上基础IO操作,提供walk()高效遍历和清晰异常体系。
-
ServiceLoader加载不到实现类主因是META-INF/services位置错误或接口全限定名拼写错误;必须置于classpath根目录(如Maven的src/main/resources/META-INF/services/),文件名须为接口全限定名,内容为实现类全名,且实现类需有public无参构造器;Java9+模块化需在module-info.java中声明provides;其核心价值在于编译期解耦,运行时动态加载,支持插件扩展与多实现共存,但无优先级、条件加载等高级能力。
-
嵌套结果性能更好、N+1问题更少,但需手动对齐字段别名;嵌套查询适合复用SQL、逻辑隔离强的场景。
-
MyBatisGenerator默认不生成Mapper接口方法,因targetRuntime默认为MyBatis3;应改为MyBatis3Simple或MyBatis3DynamicSql,并注意驱动版本、驼峰映射、插件绑定等配置。
-
子线程未捕获异常不会被主线程try-catch捕获,只能通过Thread.UncaughtExceptionHandler处理;线程池需自定义ThreadFactory设置handler;Callable配合Future.get()可同步感知检查异常,但RuntimeException仅被包装为ExecutionException。
-
Java反射调用私有方法抛IllegalAccessException,主因是Java9+模块系统强化封装,需setAccessible(true)且配合--add-opens等JVM参数才能跨模块访问。
-
SortedSet.add()排序异常的根本原因是缺少有效比较逻辑:未实现Comparable或未传Comparator;常见错误包括修改比较字段、compareTo()不满足自反对称传递性、compare()误返回布尔值而非负/零/正值。
-
@Valid不生效主因是未加@Validated或未触发校验入口;需在Controller参数前加@Valid、嵌套对象字段加@Valid、引入jakarta.validation-api、配置@ControllerAdvice捕获对应异常并返回400。
-
封装的核心是控制变更影响范围而非盲目私有化字段。应优先使用privatefinal+构造器注入实现不可变性,校验逻辑前置到构造器;集合返回需不可变包装;DTO、Entity、领域对象须严格分离封装粒度。
-
答案:Java反射调用构造函数时需处理ClassNotFoundException、NoSuchMethodException、InstantiationException、IllegalAccessException和InvocationTargetException;示例代码展示逐层捕获异常并处理私有构造函数的访问问题,确保程序健壮性。
-
Java基础权限控制核心是校验用户权限集合是否包含目标权限字符串,通过枚举定义权限、角色映射预加载、登录时缓存用户权限,并在业务逻辑或拦截器中进行精确匹配校验,需注意角色变更后同步刷新权限缓存。
-
Instrumentation.redefineClasses仅支持修改已加载类的方法体,禁止增删字段/方法、修改签名、继承关系或类结构,否则抛UnsupportedOperationException。