-
File类仅是路径抽象,不执行I/O;createNewFile()才真正写磁盘,mkdirs()创建多级目录,exists()需配合isFile()/isDirectory()区分类型,路径分隔符推荐用正斜杠或Paths.get(),JDK7后应优先使用Files/Paths替代。
-
应优先使用LocalDateTime.now()获取本地时间,避免使用线程不安全、API陈旧的Date;跨时区场景用Instant或ZonedDateTime,转换需经ZoneId桥接,格式化须注意DateTimeFormatter模式差异。
-
keytool是JDK自带的证书与密钥管理工具,无需额外安装;生成自签名证书需用keytool-genkeypair指定PKCS12格式、别名、算法及有效期,并确保CN与访问地址匹配;导入证书须为PEM格式且补全证书链,PKCS12不支持直接替换绑定私钥的证书,需保证公钥匹配;keytool与openssl密钥格式不兼容,需转换;Java8u161+要求KeyUsage扩展,应显式添加;不同JDK版本对keystore格式兼容性差,建议新建时明确指定storetype和keyalg。
-
静态块+位图是合理组合,因位图用单bit存布尔值比boolean[]省约8倍内存,静态块确保类加载时一次性初始化、全局共享、避免重复开销,天然适配一次性初始化+全局复用+空间敏感需求。
-
Java中成员变量不参与多态,编译和运行时均依据引用类型(左边声明类型)访问字段,子类同名字段仅为隐藏而非覆盖,如Animala=newDog();System.out.println(a.name)输出“Animal”。
-
本文详解Java中查找一维数组最大值时常见的无限循环错误,重点修复while(element!=5);导致的死循环问题,并提供多种健壮、可扩展的实现方案。
-
Instrumentation.removeTransformer用于注销已注册的ClassFileTransformer,使其不再参与后续类加载或重转换。移除后新加载类不再调用该转换器,但已修改字节码不恢复;并发下可能仍有少量调用残留;需传入原对象引用,返回true表示成功移除,false表示未找到或未注册。
-
ServiceLoader是Java原生SPI加载机制,通过META-INF/services/接口全限定名查找实现类并反射实例化,实现解耦与可插拔扩展;它懒加载、不缓存、要求无参构造,适用于JDBC、日志门面等场景。
-
PriorityBlockingQueue不能直接作为线程池的优先级任务队列安全使用,因其不被ThreadPoolExecutor调度逻辑感知;需通过自定义线程或包装队列+重写poll/take方法,结合Comparable任务与堆式优先级出队机制实现真正优先级调度。
-
final字段必须在构造完成前初始化,本质是触发JVM插入StoreStore+StoreLoad写屏障,确保其值对其他线程立即可见;而普通字段无此保障。
-
Comparable是类自身定义的唯一自然排序规则,要求compareTo与equals一致以避免TreeSet/Map异常;Comparator是外部独立的灵活比较器,支持同一类多种排序且无需修改源码。
-
Lambda表达式比匿名内部类更优——创建更快、零对象分配、无类加载开销且JIT可深度优化;方法引用为最优解,但需行为可映射至已有方法。
-
Java日志调试中应重写toString()方法,确保可读性、安全性和一致性:只暴露关键字段、规避循环引用、不抛异常,并推荐手动编写结合Objects.toString(),避免Lombok默认行为。
-
Collectors.partitioningBy用于将用户按布尔谓词二分为“有权限”和“无权限”两组,适用于如“是否管理员”等二元分类;多角色场景应使用groupingBy。
-
告警通知中心通过事件驱动解耦触发与通知,用配置化路由分发至多通道,统一接口插件化扩展,辅以traceId审计、失败重试、分级抑制和环境静音等机制保障可靠性。