-
HashMap不保证键的遍历顺序,因其内部基于哈希桶存储,实际顺序取决于LocalDate的hashCode和容量取模结果;若需插入顺序或自然排序,应分别选用LinkedHashMap或TreeMap。
-
FileHandler的日志滚动仅支持按文件大小和数量控制,依赖limit和count同时显式设置;limit=0禁用滚动,count=1无滚动,count>1启用编号归档;必须用4/5参数构造函数并设append=true,且需实际写入日志才能触发检查。
-
codePointAt()能正确获取Unicode增补字符的完整码点,而charCodeAt()仅返回UTF-16代理单元,无法处理大于0xFFFF的字符;其返回值依位置不同可能为码点、代理值或undefined。
-
接口应由调用方定义并持有,实现方仅实现且不反向依赖;接口包路径属调用方,禁止暴露实现细节、框架注解及运行时反射注入,参数宜封装为DTO,粒度按业务变化原因聚合。
-
LocalDate.lengthOfMonth()是实例方法,需先用LocalDate.of(year,month,day)构造对象再调用,如LocalDate.of(2024,2,1).lengthOfMonth();更推荐YearMonth.of(year,month).lengthOfMonth(),语义清晰且避免日期选择困扰。
-
getStackTrace()返回当前线程的调用栈快照,即从当前执行点回溯的方法调用链,不包含native方法和被JIT内联的方法,也不反映对象创建路径或协程挂起上下文。
-
三元运算符?:在Java中为右结合,即a?b:c?d:e等价于a?b:(c?d:e);嵌套两层以上必须显式加括号以防歧义;类型兼容性要求更严,易报Typemismatch;含副作用或空值访问时应改用if-else。
-
accessOrder=true是LRU生效的前提,必须显式设置;仅重写removeEldestEntry无效,它只控制是否删除、不决定淘汰顺序;Java8+中get/put触发顺序更新,但getOrDefault等不触发;removeEldestEntry须严格用size()>capacity;该方法内不可耗时;LinkedHashMap非线程安全,需额外同步;key必须正确实现equals/hashCode且不可变。
-
StampedLock的乐观读通过stamp验证替代加锁,仅在冲突时退化为悲观读;适用于读多写少、读操作极轻量场景,吞吐量可达ReentrantReadWriteLock的3–4倍。
-
继承表达“is-a”关系,如Dog是Animal;误用会导致语义错误和扩展困难;子类构造时父类先初始化;private成员不参与继承;Java只支持单继承,应结合组合与接口使用。
-
HashMap基本声明需配对泛型,推荐用Map<String,User>userMap=newHashMap<>();,避免类型擦除导致ClassCastException;支持一个null键和多个null值;遍历时优先entrySet()提升性能;初始化时预估容量可减少扩容开销。
-
MirroredTypeException是注解处理器因引用类未加载或不可见而抛出的编译期异常;需通过TypeMirror和Types/Elements工具安全操作类型,避免强转Class,并容错处理不可见类型。
-
Runtime.maxMemory()返回的是JVM堆内存上限,即-Xmx参数值,不包括元空间、直接内存等;在容器中若未启用-XX:+UseContainerSupport,会误读宿主机内存。
-
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。
-
Math.log()返回自然对数(ln),非常用对数(log₁₀);需用Math.log(x)/Math.LN10或封装log10函数;Math.exp()是计算e^x的最优方式,比Math.pow(Math.E,x)更准更快;log与exp互为反函数但浮点下存在微小误差。