java教程技术文章
-
anyOf不能用于“首选快速响应”策略,因其只认完成不认成功,易将超时异常当有效结果;返回Object需包装或用applyToEither避免ClassCastException;必须校验result和ex有效性并设独立线程池、超时与兜底。437 收藏 -
自动装箱与拆箱简化基本类型与包装类转换,但易引发空指针、性能问题及缓存陷阱;装箱发生于基本类型赋值给包装类或传参时,拆箱发生于包装类被当基本类型使用时。437 收藏 -
Java9+中,类路径内容被视为未命名模块,它自动读取所有命名模块、导出所有包但无封装性,且优先级低于模块路径;可通过上下文类加载器访问其资源,同名类以模块路径为准。437 收藏 -
拒绝频率是线程池最真实的过载信号,它在线程数达maximumPoolSize且队列满时发生,精准反映资源耗尽;需通过自定义拒绝策略埋点采集,并结合拒绝率、密度与任务耗时反推并发缺口,再依趋势动态扩容。437 收藏 -
TLAB分配失败走慢路径性能下降5~10倍,源于全局锁竞争、Eden碎片升高及GC频次上升三重开销;需通过-Xlog:gc+alloc=debug或-XX:+PrintTLAB观察refill和waste指标,并结合jstat与Async-Profiler量化分析。437 收藏 -
在Java中为表格添加水印需根据文件类型选择方案:1.Excel通过ApachePOI设置页眉页脚模拟水印,如居中添加“【机密】”文字;2.PDF使用iText7在每页叠加半透明斜向文字,通过PdfCanvas控制字体、旋转与透明度实现真实水印效果;建议输出正式文档时优先选PDF以获得更好视觉与安全控制。437 收藏 -
Math类不可实例化,所有方法均为静态,需通过Math.xxx()调用;支持数值类型重载但不处理包装类和null;浮点运算存在精度误差,三角函数默认弧度单位。436 收藏 -
Instant.parse()仅支持ISO8601格式的UTC时间字符串(如"2024-03-15T14:22:30Z"),不接受空格分隔或带本地时区偏移的时间;从毫秒数构造需用Instant.ofEpochMilli(),避免误用秒级方法导致时间错乱。436 收藏 -
64位HotSpot虚拟机中对象头默认占12字节,即8字节MarkWord(动态复用存储哈希码、锁状态、GC年龄等)加4字节压缩后的KlassPointer。436 收藏 -
ByteBuffer.put不能直接写入非byte类型数据,必须用putInt()等专用方法;写入需严格对齐字节序与大小,注意remaining()空间、编码转换及flip()切换读写状态。436 收藏 -
RandomAccessFile.setLength()是跨平台预分配文件空间的唯一可靠方式,调用内核接口瞬时扩展或截断逻辑长度,不写入数据、不触发I/O,但非稀疏文件创建;分布式场景须由主控节点统一调用,避免并发覆盖。436 收藏 -
中介者模式通过引入中介者对象统一协调同事间交互,将网状依赖转为星型结构:同事只持中介者引用并委托事件,中介者持有所有同事引用并封装联动逻辑,避免直接引用和硬编码条件,提升可维护性与可测试性。436 收藏 -
只有满足编译期常量条件的staticfinal变量才会被内联:即基本类型或String字面量、声明时直接初始化、值在编译期可确定;否则不内联且会触发类加载。436 收藏 -
SoftReference图像缓存常失效,因其依赖JVM内存压力触发回收,且需手动处理null回落、重建逻辑、并发安全及ReferenceQueue清理;Android上更不可靠,推荐用LruCache或GuavaCache替代。436 收藏 -
中介者模式不能直接用于分布式路由,因其仅适用于单JVM内对象解耦,缺乏网络传输、节点发现、状态同步等分布式能力;应分层实现:通信层(gRPC/Kafka)、状态管理层(Nacos/Etcd)、路由策略层(面向对象的RoutingMediator接口及其实现)。436 收藏