-
静态代码块在类加载时执行且仅一次,父类先于子类执行;主动引用触发初始化,被动引用不触发;异常导致类加载失败且不可重试;需避免I/O、循环依赖及跨ClassLoader问题。
-
JDK15起默认禁用偏向锁,因其在多核高并发场景下收益为负:易触发STW撤销、内存开销大、短命对象导致初始化成本超收益,而轻量级锁+自旋已更优。
-
Stream.peek()的核心作用是“不改变流,只观察元素”,作为中间操作接收Consumer执行副作用并原样返回元素,需配合终端操作才生效,位置决定可观测数据阶段,不可替代业务逻辑或依赖执行顺序。
-
多态通过继承、方法重写和父类引用指向子类对象实现,使同一方法调用在不同对象上产生不同行为。Java中多态的实现依赖JVM的动态分派机制,运行时根据实际对象类型通过虚方法表(vtable)确定具体方法版本,确保正确调用子类重写的方法。示例中Animal父类引用指向Dog和Cat子类实例,调用makeSound()时分别执行各自重写逻辑,输出"Woof!"和"Meow!"。该机制仅适用于可重写的实例方法,不适用于静态方法、私有方法或成员变量。多态广泛应用于参数类型统一、集合存储多态对象及框架设计中抽象行为的实
-
corePoolSize设太小不会直接拒绝任务,而是先排队;仅当队列满且线程数已达maximumPoolSize时才触发拒绝策略。
-
标量替换是JIT在逃逸分析确认对象不逃逸后,自动将对象字段拆为栈上局部变量、跳过new和堆分配的优化;它不由代码改写触发,需ServerVM、-XX:+DoEscapeAnalysis等参数配合,并通过JIT日志验证。
-
第一步是用原生JDBC验证数据库连接与表结构,确保Connection正确提交、PreparedStatement参数顺序无误;vote_count设默认值0,用UPDATE...SETvote_count=vote_count+1避免并发丢票。
-
反射频繁调用会触发动态代理类生成并加载至元空间,若卸载不及时将导致元空间OOM;需通过jstat、jcmd、jmap等工具确认问题,定位高频反射点,禁用膨胀机制(-Dsun.reflect.noInflation=true)或改用MethodHandle/VarHandle优化。
-
字符串比较应使用equals而非==,因==比较引用地址;循环中修改ArrayList需用迭代器remove或延迟删除;Integer等包装类比较须用equals且注意缓存范围与空指针;异常不可裸吞,须记录日志;日期处理优先用Java8+时间API;HashMap应预设初始容量;SimpleDateFormat不可共享;异步任务须处理异常并等待完成;浮点数比较应使用误差范围判断。
-
flatMap是嵌套空值链式调用的唯一可靠选择,因其对Optional上游强制返回Optional并自动“压平”一层,天然短路且无NPE风险;但前提是每层getter均返回Optional,否则需混合map与ofNullable手动包装。
-
ReentrantReadWriteLock的锁降级是读多写少且需强一致性的唯一可靠路径;锁升级不可行,会阻塞或抛异常。降级通过写锁未释放时获取读锁、再释放写锁实现强一致性,但须同线程、写锁重入数为1、显式释放读锁。
-
Stream.sorted()默认要求元素实现Comparable接口,否则抛ClassCastException;需用Comparator定制排序逻辑,支持多级、null处理及降序,且为中间操作须配合终止操作执行。
-
首先设计Order和OrderItem等核心类,再通过OrderService实现订单的创建、查询与状态更新,结合业务流程计算总价并处理数据持久化,最后扩展数据库支持与异常处理。
-
ForkJoinPool的工作窃取算法通过双端队列实现“自己从尾取、别人从头偷”,提升CPU利用率;需继承RecursiveTask/Action并合理拆分任务、设置阈值;应避免阻塞,善用统计方法调优。
-
InheritableThreadLocal在线程池中“复用旧值”是因为线程复用导致继承逻辑不触发,且上一次任务的值未remove,造成上下文污染;其浅拷贝仅复制引用,加剧并发风险;修复需手动set/remove或改用TransmittableThreadLocal。