-
该用静态还是非静态取决于访问需求:需访问外部类实例成员则用非静态,仅用静态成员或工具功能则优先static,以避免内存泄漏、支持序列化并提升性能。
-
本文介绍如何在Java中正确判断两个任意菱形是否发生几何重叠,指出仅比较顶点坐标的常见误区,并提供基于轴对齐包围盒(AABB)预检与精确凸多边形相交判定的完整解决方案。
-
Objects.equals能防NPE,因其内部先判空:二者同为null返回true,仅一者为null返回false,均非null才调用a.equals(b),彻底避免空指针异常。
-
Java注释分三种:单行(//)、多行(/.../)和文档注释(/.../);//用于简短说明或禁用代码,/.../用于跨行说明或屏蔽代码段,/.../生成Javadoc并支持@param等标签。
-
单纯用System.currentTimeMillis()配合Random无法绝对保证唯一性,因毫秒级时间戳在快速调用或时钟回拨时易重复,需叠加随机数和进程/线程标识;推荐组合时间戳+6位随机数+PID,或直接使用Files.createTempFile、UUID等更可靠方案。
-
没有真正“开箱即用、免部署、纯免费”的Java成品网站——所谓成品多为需编译配置的源码包,所谓免费不等于零运维成本;GitHub上搜spring-boot+admin/blog最靠谱,但需核对启动方式、JDK兼容性及数据库配置。
-
应避免使用Hashtable,优先选择HashMap(单线程)或ConcurrentHashMap(多线程);Hashtable不支持null键值、全表同步锁导致性能差、无红黑树优化、取模计算慢且哈希分布不均、迭代器机制易引发隐蔽bug。
-
transient字段反序列化时为null是因JVM跳过其序列化,属设计行为;未声明serialVersionUID会导致类结构变更后反序列化失败;推荐手动设为1L并谨慎升级;JSON、protobuf等是更安全可靠的替代方案。
-
本文介绍一种基于应用层逻辑的轻量级方案,通过动态更新文档TTL实现双重过期控制:既保证数据最长存活90天,又自动清除连续30天未被访问的冷数据,无需额外监控或扫描。
-
会出事,JVM明确禁止“this引用逸出”,对象未初始化完就暴露引用会导致读取未初始化字段、NPE或逻辑错乱。
-
SoftReference触发老年代GC,是因为JVM默认依据整个堆(含老年代)可用空间判断内存压力,老年代逼近满时会批量清理SoftReference并随之触发老年代GC;其存活时长由-XX:SoftRefLRUPolicyMSPerMB控制,值过小易致频繁清理,过大则可能引发OOM。
-
先从业务抽象出发设计继承关系,而非技术细节。通过定义抽象类表达统一语义下的多样性,如订单系统的创建流程;利用模板方法固化不变流程,子类实现差异化逻辑;避免过度细化继承层级,用组合处理多维变化;命名体现领域语言,使代码成为业务叙事。这样继承结构与业务认知一致,提升可维护性和可理解性。
-
应继承Exception还是RuntimeException取决于调用方是否必须主动处理:系统级/外部依赖失败选Exception,内部逻辑错误/校验失败选RuntimeException;务必提供带cause的构造器;异常类应保持精简,避免业务字段;Spring中按类型而非名称捕获异常。
-
强制类型转换中整型溢出与精度丢失的关键在于判断“在哪丢、怎么丢、能否提前发现”,需结合取值范围、二进制截断规则及目标类型表示能力综合分析。
-
Charset.forName()不抛UnsupportedEncodingException,而是抛IllegalArgumentException;真正抛该异常的是String.getBytes(String)等老式API;推荐用StandardCharsets.UTF_8或先调用Charset.isSupported()校验。