-
枚举中声明抽象方法并由各常量用{}块实现,是类型安全、编译强制检查的差异化策略;需配合私有字段复用共性数据,方法签名须稳定,适用于状态机等有限内聚场景。
-
中介者模式不能直接用于分布式路由,因其仅适用于单JVM内对象解耦,缺乏网络传输、节点发现、状态同步等分布式能力;应分层实现:通信层(gRPC/Kafka)、状态管理层(Nacos/Etcd)、路由策略层(面向对象的RoutingMediator接口及其实现)。
-
必须使用GraalVMJDK(22.3+)并手动安装native-image工具,验证java-version含“GraalVM”字样;SpringBoot3项目需启用SpringAOT和native-maven-plugin,显式声明反射、资源等配置,构建时需调大内存与超时参数。
-
类加载过程本身不会直接导致线程死锁,但自定义类加载器设计不当可能因隐式锁竞争、双亲委派缺陷或变量不可见引发“类加载锁死锁”;需从锁行为、类加载路径、变量可见性三方面排查修复。
-
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判断(慎用)及静态常量/配置类集中管理四种方式模拟,默认值逻辑需显式表达。