-
DocumentBuilder不是线程安全的,多线程共享会导致状态错乱、解析失败甚至JVM崩溃;应使用ThreadLocal隔离实例,或改用JAXB、StAX等线程安全替代方案。
-
从一次 Spring Boot 结构化日志改造复盘讲起,拆解字段契约、MDC 生命周期、日志成本、告警迁移和上线检查。
-
静态代码块不适合放耗时操作,因其在JVM类初始化阶段单线程阻塞执行,失败会导致ExceptionInInitializerError使类不可用;应改用静态内部类懒加载、@PostConstruct或SpringBean生命周期管理。
-
TIME_WAIT是TCP必要机制,端口耗尽主因是短连接QPS超临时端口回收能力;需查ip_local_port_range与ss-s中tw值是否接近上限,并以“cannotassignrequestedaddress”为铁证,而非仅看TIME_WAIT数量。
-
DirtyCardQueue背压是G1GC中跨Region写操作引发的性能瓶颈,表现为UpdateRS耗时升高、TPS下滑、MixedGC频繁但老年代存活率低;需结合G1ConcRefinementThreads与G1RSetUpdatingPauseTimePercent协同调优,并治理高频跨Region写模式。
-
OutputStreamWriter的核心价值是将字符流按指定编码转为字节流,解决多语言变量输出乱码问题;必须显式指定UTF-8编码,直接write字符串,配合flush、try-with-resources及UTF-8验证确保字符完整性。
-
final变量必须在声明时或构造过程中初始化,且仅能赋值一次;它仅禁止引用或值的变更,不保证对象内部状态不可变,也不等同于编译期常量或线程安全。
-
Supplier<T>+构造方法引用实现零开销对象工厂,本质是编译期绑定的函数指针转发,仅含new+invokespecial字节码,无抽象层、无反射、无泛型擦除开销。
-
Instrumentation.retransformClasses支持在线热更新方法体逻辑,但不能增删或修改字段类型、继承关系及方法签名;可通过改写getter/setter、初始化逻辑、Unsafe/反射、可变引用等方式间接“热更变量”行为。
-
MyBatis3.4+要求JDK8+,JDK11+需添加jakarta.xml.bind-api;配置文件须置于classpath根路径;MySQL8驱动需指定serverTimezone;MapperXML必须在mybatis-config.xml中注册且namespace与接口全限定名一致。
-
自定义Filter必须实现doFilter方法,需调用chain.doFilter放行或手动响应阻断;url-pattern仅支持前缀、扩展名和默认匹配;@WebFilter需配合@ServletComponentScan;读取requestbody需用包装类缓存。
-
Java基本类型不能直接参与OOP操作,必须用包装类(如Integer、Boolean)转为对象才能调用方法、放入集合、作为泛型参数或实现多态;因int是primitive,无方法、不继承Object、无运行时类型信息,JVM在栈上直接存值,与堆中对象机制不同。
-
可借助Lambda表达式+自定义注解+反射+ConstraintValidator实现动态变量验证器:定义@DynamicValidate注解,通过字符串key映射至预注册的Predicate仓库(如notBlank、range_1_100),由DynamicValidator统一执行校验,支持运行时动态注册及上下文参数注入。
-
Files.getLastModifiedTime()返回FileTime类型,底层为纳秒精度的纪元时间;可调用toInstant()、toMillis()等方法转换,但不可直接强转或调用不存在的getTime()方法。
-
用System.currentTimeMillis()配合原子计数器实现单机限流,核心是按时间戳划分固定窗口并用AtomicInteger安全累加;关键在窗口对齐、原子操作防丢失、阈值判断时机选getAndIncrement或incrementAndGet。