-
ImageIO.read()返回null或抛IOException主因是格式不支持(如WebP)、文件损坏或输入流关闭;缩放模糊需设抗锯齿与双三次插值;中文水印乱码应查可用字体并用getStringBounds计算尺寸;内存暴增源于BufferedImagenative数据未及时回收,须置空引用并调用dispose()。
-
因为SequenceInputStream的构造器接收Enumeration,若该Enumeration在首次遍历后已耗尽,则后续文件无法读取;需确保每次调用都提供未耗尽的新Enumeration实例。
-
静态变量属于类本身,所有实例共享同一内存空间;声明需在类体中加static关键字,推荐private+publicstaticgetter/setter;与实例变量相比,它在类加载时初始化、存于元空间、无需实例即可访问;多线程下需注意线程安全,避免复合赋值引发数据不一致。
-
位运算高效源于硬件原生支持和JVM深度优化,而非直接操作JVM底层内存;它作用于整数类型的二进制表示,被JIT编译为单条CPU指令,避免对象分配、边界检查与除法开销。
-
扩容无需重算hash值,因容量恒为2的幂次方,新索引仅取决于原hash在新增bit位的值;JDK1.8用e.hash&oldCap快速提取该位,0则留原索引,非0则原索引+oldCap。
-
接口定义行为契约,抽象类提供共用实现。通过接口实现多继承行为,定义“能做什么”;抽象类封装共有属性与方法,解决“是什么”和“如何部分实现”。典型模式如List与AbstractList,接口规范标准操作,抽象类实现通用逻辑,开发者可选择完全自定义或继承抽象类重写必要方法,兼顾扩展性与复用性。
-
多态的核心价值在于分离业务逻辑与具体实现,使系统扩展时无需修改原有代码。例如支付场景中订单模块只依赖Payment接口,新增银联支付只需实现该接口;数据访问层同理,切换数据库只需提供新DAO实现类;策略切换和测试也因多态变得灵活可控。
-
DateTimeFormatter.parse()抛DateTimeParseException主因是格式模式与输入字符串严格不匹配;LocalDateTime.format()不输出时区因类型本身无时区;转Instant需先转LocalDateTime再指定时区;YYYY为周基年,yyyy为日历年,跨年场景易出错。
-
答案:Java中线程死锁因相互持锁等待导致程序停滞,可通过JConsole、jstack或ThreadMXBean检测;预防需统一锁顺序、使用tryLock、减小锁粒度、采用并发工具类,并在设计时分析锁依赖,结合规范编码与监控降低风险。
-
CopyOnWriteArrayList通过写时复制实现线程安全,读操作不加锁、效率高,适用于读多写少、允许数据稍有过期的场景,但写操作需复制整个数组,性能开销大,适合监听器列表、配置缓存等低频更新场合。
-
Path比File更灵活,能跨平台处理路径逻辑;Files类封装90%以上基础IO操作,提供walk()高效遍历和清晰异常体系。
-
@Valid不生效主因是未加@Validated或未触发校验入口;需在Controller参数前加@Valid、嵌套对象字段加@Valid、引入jakarta.validation-api、配置@ControllerAdvice捕获对应异常并返回400。
-
封装的核心是控制变更影响范围而非盲目私有化字段。应优先使用privatefinal+构造器注入实现不可变性,校验逻辑前置到构造器;集合返回需不可变包装;DTO、Entity、领域对象须严格分离封装粒度。
-
答案:Java反射调用构造函数时需处理ClassNotFoundException、NoSuchMethodException、InstantiationException、IllegalAccessException和InvocationTargetException;示例代码展示逐层捕获异常并处理私有构造函数的访问问题,确保程序健壮性。
-
Java基础权限控制核心是校验用户权限集合是否包含目标权限字符串,通过枚举定义权限、角色映射预加载、登录时缓存用户权限,并在业务逻辑或拦截器中进行精确匹配校验,需注意角色变更后同步刷新权限缓存。