-
该用?:而不是if-else时,仅限于为变量赋值且值由单一布尔条件决定;它是有返回值的表达式,而if-else是无返回值的语句,滥用会导致可读性差、编译错误或运行时异常。
-
遍历ArrayList时调用remove()抛ConcurrentModificationException,因迭代器为fail-fast机制:modCount校验失败;正确做法是用Iterator.remove()或removeIf(),而非集合自身remove()。
-
Callable和FutureTask是Java异步计算的底层组合,Callable支持返回值和受检异常,FutureTask作为Runnable和Future的桥接实现,需显式启动才能执行,否则调用get()会永久阻塞。
-
本文详解如何系统性分析一类基于递归分割、数组复制的分治算法的时间复杂度,结合具体代码,推导其递推关系式,应用主定理得出$O(n\logn)$的时间复杂度,并指出实际实现中的关键性能瓶颈。
-
javac是Java源码编译的唯一标准入口,将.java编译为.class字节码;需严格匹配包结构路径,常见错误包括命令未找到、参数不兼容、包不存在、中文乱码及javac/java混淆。
-
IDEA里file.encoding和console.encoding必须一致Java源文件读取、编译、运行时控制台输出,三者编码不统一是乱码最常见原因。IntelliJIDEA默认可能用系统编码(比如Windows的GBK),但项目源码是UTF-8,结果编译时字面量被错误解码,运行时又用GBK解console输出——中文直接变???或方块。进File→Settings→Editor→FileEncodings,把GlobalEncoding、
-
ATM类设计需保证线程安全:账户余额用AtomicInteger或synchronized保护;Account与ATM解耦;余额操作返回boolean;避免在getter/toString中做业务判断;withdraw需严格参数校验。
-
TreeSet用于存储有序唯一元素,适合去重排序场景;TreeMap存储有序键值对,适用于按键查找与范围查询,二者均基于红黑树实现,增删查改时间复杂度为O(logn)。
-
九九乘法表应为下三角格式共45项;外层循环控制行数(1–9),内层循环上限为i而非9,每次拼接i+"×"+j+"="+i*j。
-
用BlockingQueue而非手写synchronized队列,因其已封装锁、条件变量、中断响应与超时处理,避免虚假唤醒、notify误用等边界错误;ArrayBlockingQueue适合容量确定场景,LinkedBlockingQueue双锁并发更高但需防无界OOM。
-
Optional类用于优雅表达可能为空的值,减少空指针异常。1.使用of、ofNullable和empty创建实例;2.通过ifPresent、orElse系列安全获取值;3.利用map、flatMap和filter实现链式操作;4.推荐作为方法返回类型,避免作参数或字段;5.结合Stream提升函数式编程体验,使代码更清晰安全。
-
JsonView不能直接做字段级权限脱敏,它仅支持静态视图控制字段是否序列化,无法根据用户角色动态脱敏;需结合@JsonGetter权限感知方法或权限隔离DTO实现。
-
匿名内部类适合一次性、轻量、上下文强耦合的回调或策略实现,如Swing/AWT事件监听、Java7函数式接口实现;但不适用于复用、测试或复杂逻辑,且易引发隐式引用导致的内存泄漏。
-
本文详解如何利用Collectors.groupingBy将对象流按自定义字符串键(由多个字段组合生成)高效分组,得到Map<String,List<T>>结构,避免冗余映射操作与类型不匹配问题。
-
findInLine常返回null,因其仅从当前扫描位置跳过前导空白后尝试匹配一次正则,不回退、不跨行、不重试;若前序操作(如nextInt)使位置停在空白处,且正则未覆盖该位置,则匹配失败。