-
接口应由调用方定义并持有,实现方仅实现且不反向依赖;接口包路径属调用方,禁止暴露实现细节、框架注解及运行时反射注入,参数宜封装为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互为反函数但浮点下存在微小误差。
-
创建项目时可直接将位置设为桌面路径,项目即保存在桌面;2.已有项目可通过文件系统复制整个项目文件夹至桌面;3.之后可在IDEA中通过打开桌面项目文件夹重新加载项目。关键在于手动管理项目路径,因IDEA无“保存到桌面”功能,实际是通过复制或指定路径实现项目在桌面的存储与访问。
-
for循环适用于已知循环次数的场景,其语法为for(初始化;条件;更新){执行语句},如打印1到5:for(inti=1;i<=5;i++)System.out.println(i);
-
do-while循环适合“先执行、再判断”的交互场景,如命令行工具中执行操作后询问是否继续;它保证至少执行一次,需用nextLine()处理输入残留,并校验空输入与大小写,可封装为askContinue方法复用。