-
getInterfaces()仅返回直接声明的接口,不递归获取父接口;接口调用时返回其直接extends的父接口;需手动递归+去重才能获得完整继承链;泛型信息丢失,须用getGenericInterfaces()获取。
-
ChannelPipeline是Netty中每个Channel自动创建的双向事件处理器链,入站事件从head向tail传播,出站事件反向传播;必须在EventLoop线程内安全添加/移除handler,严格按职责顺序配置编解码器与业务处理器。
-
Redis的Hash类型不支持字段级过期,而Redisson的RMapCache依赖Lua脚本模拟该行为;当写入速率过高(如500万条/30分钟)时,脚本执行被阻塞,过期逻辑失效,最终触发RedisOutOfMemoryException。
-
ByteArrayOutputStream是Java中最轻量、最常用的内存级字节输出缓冲方案,通过自动扩容的字节数组暂存数据,无需预估容量,写完再转byte[]或String。
-
LocalTime.truncatedTo()是Java8提供的将时间截断到指定单位并归零更小单位的方法,支持HOURS、MINUTES、SECONDS、MILLIS等,不支持DAYS;操作不可变、线程安全、语义清晰。
-
组合比继承更安全,因其将依赖控制在接口层,避免子类过度耦合父类实现;继承仅适用于明确“is-a”关系且父类专为继承设计的场景,框架强制要求时除外。
-
用String.lastIndexOf("/")找最后一个斜杠位置再substring截取可获取文件名,但需兼容Windows反斜杠、处理路径结尾斜杠或空字符串等边界情况。
-
Java集合框架是统一管理数据的“通用收纳盒”,专注存储、安全访问和灵活替换;Collection与Map因设计目标不同而互不继承;选错实现类性能差10倍;遍历时修改需用Iterator.remove()或removeIf()避免ConcurrentModificationException。
-
Java设计原则是解决具体问题的实践依据,误用比不用更危险;SOLID需结合变化原因判断拆分,Liskov要求子类不加强前置条件,OCP宜用@ConditionalOnProperty或策略模式,DTO构建优先Lombok@Builder或record,依赖注入按测试需求选构造或字段注入,细节一致性决定系统寿命。
-
BigDecimal.abs()可安全获取财务亏损值绝对值,需用字符串构造、保持标度一致、显式指定MathContext加总,并校验null值防NPE。
-
Java不支持方法参数默认值,但可通过重载(最常用)、Builder模式(参数多时)、Optional/null判断(慎用)及静态常量/配置类集中管理四种方式模拟,默认值逻辑需显式表达。
-
Math类因基于IEEE754双精度浮点数,无法精确进行小数运算,如0.1+0.2≠0.3;金融复利、随机百分比四舍五入、double相等判断等场景易出错。
-
StringTable是哈希表,不自动去重,仅通过字面量加载或显式调用intern()才插入条目;intern()在JDK7+存引用而非复制对象,滥用会导致哈希冲突、内存泄漏及性能下降。
-
Math.floor()返回小于或等于参数的最大整数,即向负无穷方向取整;例如Math.floor(-2.8)返回-3,而非截断小数的-2。
-
CyclicBarrier是一个可重用的同步工具,用于让多个线程在到达共同屏障点时相互等待,直至所有线程就绪后再继续执行。它支持循环使用,与仅能使用一次的CountDownLatch不同,适用于多线程并行计算、游戏同步或高并发测试等场景。创建时需指定线程数量和可选的汇总任务,当所有线程调用await()后,汇总任务执行,随后释放所有线程。若某线程中断或异常,其他线程将抛出BrokenBarrierException,还可通过reset()方法重置屏障以供重复使用。