-
不能在for-each循环中调用list.remove(),因为会触发ConcurrentModificationException;必须使用Iterator.remove()(需先调next())或Java8的removeIf()。
-
异常不应用于流程控制,因其触发栈帧展开、抑制JIT优化,性能下降3–10倍;IO失败应区分可恢复场景(默认值+warn)与契约破坏;并发中锁内抛异常易致状态不一致;日志必须打印完整堆栈。
-
Disruptor不是队列而是环形数组+序列号驱动的状态机,需按其内存模型组织代码:bufferSize必须为2的幂次方,事件类须有无参构造器和reset方法,生产者须批量申请序列号并publish,消费者须用BatchEventProcessor与BusySpinWaitStrategy,且必须解决伪共享问题。
-
规则引擎负责解析条件、维护上下文、执行判定;线程池仅异步执行封装好的原子任务,不参与规则建模。多维判定拆为独立RuleTask,并行计算,调度器基于DAG编排短路逻辑,需隔离线程池、变量快照与带元信息结果归集。
-
Java的try-with-resources能自动关闭资源,前提是资源实现AutoCloseable接口;资源在try后括号内声明,执行结束时自动调用close()方法;关闭顺序与声明顺序相反;若try块和close均抛异常,try异常为主,close异常被压制并可通过getSuppressed()获取。
-
Optional.ifPresent()是空安全的触发开关,仅当新值非null且异于旧值时才异步推送;需先比对状态再包装,推送逻辑须异步且健壮,不适用于多条件决策或兜底场景。
-
Java对象序列化版本演进需通过DTO分离契约、Jackson兼容机制、实体扩展预留、密封类约束四层设计实现兼容性可预期;核心是接口+DTO隔离、字段增删改容错、extensions动态扩展、sealedclass版本管控。
-
答案:Java变量分成员变量(实例、静态)和局部变量。实例变量属对象,堆中存储,随对象存亡;静态变量属类,方法区存储,类加载时初始化;局部变量在栈中,无默认值,需显式初始化,作用域限方法或代码块内;final修饰的常量不可变引用,但不保证内容不变;区分依据为声明位置、static修饰及作用域,结合内存模型可明确其生命周期与可见性。
-
continue的作用是跳过当前迭代剩余代码并进入下一次循环判断,本质是“提前结束本轮”而非“过滤”,真正过滤依赖其前的条件判断。
-
isEmpty()仅判断长度是否为0,等价于length()==0;isBlank()(Java11+)判断是否为空或全为Unicode空白字符,语义更严格。二者均需先判null防NPE。
-
Java中File类可创建删除本地文件目录,但仅抽象路径、不处理内容;mkdir()建单层目录,mkdirs()建多级,createNewFile()建文件需先exists()判断;delete()仅删空目录或文件,非空目录须递归删除;路径用/或\,建议绝对路径;JDK7起推荐NIO.2的FilesAPI。
-
NumberFormat.getCurrencyInstance()不支持动态切换货币符号,其显示的货币符号和小数位由Locale默认关联的货币决定;若需按货币代码(如"EUR")动态控制,应使用setCurrency(Currency.getInstance("EUR"))或Java12+的NumberFormatter。
-
StringTable是哈希表,不自动去重,仅通过字面量加载或显式调用intern()才插入条目;intern()在JDK7+存引用而非复制对象,滥用会导致哈希冲突、内存泄漏及性能下降。
-
LambdaMetafactory不是替代反射的工具,而是将反射调用转化为接近直接调用的高性能桥梁,通过MethodHandle+invokedynamic生成函数式接口实现,绕过安全检查、参数装箱与方法查找,使调用耗时从35.8ns降至2.9–3.2ns。
-
子类中定义与父类同名的成员变量会隐藏父类变量,但两者仍独立存在;通过子类对象访问时默认使用子类变量,如Childc=newChild();System.out.println(c.value)输出20,而((Parent)c).value输出10;可使用super关键字访问被隐藏的父类成员,如super.value;此现象仅适用于成员变量,方法同名则为重写,静态成员同名属于静态隐藏;建议避免同名字段以提升代码可读性。