-
用sealedinterface+record+switch记录模式可实现Java版ADT:编译期穷尽检查、杜绝非法状态、强制不可变性,但需严格满足permits显式声明、同模块导出、字段领域建模、无default分支等约束。
-
用createElement()创建并添加元素需三步:创建节点、设置内容/属性、插入到DOM;关键在插入位置与方式,推荐用DocumentFragment批量插入以提升性能。
-
Collectors.toList()是Java8StreamAPI中用于将流元素收集到List的常用收集器,返回的列表基于ArrayList实现、允许重复且不保证线程安全;基本语法为stream.collect(Collectors.toList()),常用于数据过滤、转换后收集,如字符串转大写或提取对象属性;注意事项包括:生成的列表不可直接修改结构、若需不可变列表应使用Collectors.toUnmodifiableList()(Java10+),指定实现类型可用Collectors.toColle
-
任务执行漏斗通过三级阻塞队列实现流量缓冲、分拣与节流:第一级入口缓冲承接洪峰,第二级按优先级分组调度,第三级令牌桶或SynchronousQueue控制输出速率,并协同解决唤醒丢失、背压传导和生命周期一致性问题。
-
Integer.numberOfTrailingZeros返回int二进制末尾连续0的个数,如8(1000)→3、0→32;用于判断2的幂等场景,底层常映射为CPU的tzcnt指令,时间复杂度O(1)。
-
newDate()在2026年新项目中应彻底禁用:它是可变、非线程安全、语义模糊的遗留类,月份0起始、年份1900基准等设计反直觉且已弃用;应改用java.time包中的Instant、LocalDateTime等语义清晰、线程安全的类型。
-
CopyOnWriteArraySet不适合配置热更新,因其读取存在延迟、写入开销大、不保证原子性与一致性,且缺乏版本控制和监听机制;推荐用不可变配置+AtomicReference原子切换。
-
应使用Graphics2D类,它支持抗锯齿、透明度和旋转文字,而Graphics不适用于BufferedImage验证码生成,且需设置渲染提示并调用dispose()防止内存泄漏。
-
Java自定义异常需显式声明含Throwable的构造函数才能带原因抛出,否则编译报错;必须调用super(message,cause)初始化cause,漏写会导致getCause()返回null;实际应覆盖4种构造函数以确保异常链完整。
-
Java中使用IDN.toASCII()将中文域名转Punycode,需确保输入为纯域名标签、先trim()和NFKC标准化、捕获IllegalArgumentException异常,转换结果如“xn--4gq15d.com”可直接用于DNS解析。
-
Collection是集合根接口,定义add、remove等统一操作;Collections是工具类,提供sort、reverse等静态辅助方法,二者分工明确、协同使用。
-
优化Java数据结构需从业务建模出发,避免贫血模型,采用DDD思想封装数据与行为,合理使用值对象;根据读写特性选择集合类型,优先使用HashMap/TreeSet提升查询效率,对外暴露不可变视图;减少GC压力,通过对象池、懒加载及StringBuilder优化对象创建;优先组合而非继承,利用接口与策略模式解耦,保持系统灵活可扩展。
-
当两个DTO类型字段完全一致但位于不同包(甚至不同项目)时,无法直接强制类型转换;推荐使用MapStruct进行编译期类型安全映射,避免ObjectMapper反射带来的运行时隐患与维护风险。
-
不能一起用——Logback和Log4j2互斥,SLF4J仅允许一个绑定生效;同时存在会触发警告并随机选其一,导致日志丢失或行为异常,须统一门面、单一实现。
-
Java中boolean类型的^运算符表示逻辑异或,即两操作数不同时为true;它不短路,等价于!=,但不同于||,常用于判断“恰好一个为真”的场景。