-
应使用orElseGet而非orElse,因为orElse会立即执行默认值构造,导致每次无谓查库;orElseGet仅在Optional为空时才调用Supplier,适合延迟加载数据库默认配置,兼顾性能与兜底可靠性。
-
SpringCloud微服务配置刷新的核心机制是@RefreshScope注解和ContextRefresher组件协同工作,1.当配置更新时触发/actuator/refresh端点;2.Spring销毁@RefreshScope标记的Bean并移除缓存;3.下次访问这些Bean时重新创建以加载最新配置;4.ContextRefresher负责重新绑定Environment属性源并通知Bean初始化。此外,SpringCloudBus通过消息中间件广播刷新事件,实现多实例同步刷新。实现自动化刷新需结合G
-
EnumMap比HashMap快在底层用数组按枚举ordinal()直接索引,O(1)访问,无哈希计算、无冲突处理、无装箱开销;实测百万次操作快2–5倍,内存占用低约40%。
-
Java仅支持8种基本类型及其对应包装类之间的自动装箱/拆箱,如int↔Integer、boolean↔Boolean等;其他类型不支持,编译失败。
-
Java9起接口可用private方法抽取多个default方法共用逻辑,既复用代码又不暴露给实现类;它专用于接口内部封装校验、日志、格式化等重复行为,仅限本接口内default或static方法调用,不可被实现类访问或反射调用。
-
Java中System.out默认输出到控制台,可通过System.setOut(newPrintStream(newFileOutputStream("log",true),true,"UTF-8"))重定向至UTF-8编码的日志文件,需在首次使用前调用并注意路径、编码、资源释放及线程安全问题。
-
应使用String.isBlank()或StringUtils.isBlank()校验账号密码是否为空白,密码需满足长度6–20位且至少含大小写字母、数字、特殊符号三类,存储必须加盐哈希(如BCrypt),校验须恒定时间比对,并模糊提示错误原因。
-
Java中用PrintWriter向多个文件写入内容却出现文件为空,根本原因是未显式关闭流;推荐使用try-with-resources语句自动管理资源,确保缓冲区刷新并安全释放文件句柄。
-
Java中char是16位,增补字符用代理对表示;isHighSurrogate()仅判断高位代理,需配合isLowSurrogate()和codePointAt()等安全处理,推荐用codePoints()流遍历。
-
应优先使用当前类的类加载器(MyClass.class.getClassLoader())获取资源,避免依赖不可控的上下文类加载器;注意路径语义差异,统一用带前导斜杠的绝对路径;Java9+模块环境下需确保模块声明opens或配置add-opens。
-
Java接口与类本质不同:接口是行为契约,只声明“能做什么”,无状态无实现;类是实体蓝图,定义“有什么”和“怎么做”,可实例化。
-
AtomicLongFieldUpdater是用于对volatilelong实例字段进行无锁原子更新的工具类,基于反射+Unsafe实现CAS,要求字段为volatile、long类型、非static非final,且updater需在字段可见范围内声明。
-
Arrays.hashCode()对一维数组内容深度哈希,确保相同元素顺序和值产生一致哈希;二维及以上数组须用Arrays.deepHashCode();自定义类需重写hashCode()与equals()且基于不可变字段;推荐封装为final不可变键类并深拷贝数组。
-
当某个传递依赖(如Tar.jar)因上游模块使用<exclusion>被意外移除时,可通过显式声明该依赖或利用<dependencyManagement>统一恢复其版本与可见性,无需修改原始模块POM。
-
最可靠的方式是通过类的ProtectionDomain获取CodeSource再提取getLocation(),因其由JVM加载时明确记录来源,语义严谨稳定;Class.getResource("/")易受classloader、fatjar或模块化影响而返回null或不准确。