-
模板方法模式通过抽象类定义算法骨架,将可变步骤声明为抽象方法由子类实现,封装固定流程于final模板方法中,并提供可选钩子方法增强灵活性。349 收藏 -
Object类是Java所有类的根父类,核心意义在于统一类型体系、提供基础行为契约、支撑运行时机制:实现“一切皆对象”、定义toString()等关键方法协议、支撑JVM异常处理与泛型擦除等底层功能。349 收藏 -
Objects.requireNonNullElse()是Java9引入的非空断言+默认值兜底方法,要求obj为null时返回非null的defaultObj,否则抛NPE;适用于轻量、确定、非null的默认值场景。348 收藏 -
JMM是抽象规则而非物理内存布局,用于解决多线程共享变量的可见性、有序性、原子性问题,并屏蔽不同CPU架构差异提供统一并发语义。348 收藏 -
这是换行符残留问题:nextInt()不读取换行符,导致nextLine()立即返回空字符串;正确做法是调用scanner.nextLine()手动清除残留换行符。348 收藏 -
JavaAgent的两种加载方式核心差异在于介入时机与字节码修改能力:静态加载通过-javaagent在JVM启动前执行premain,可无限制拦截类加载并增强字段访问;动态加载通过VirtualMachine.attach()触发agentmain,仅支持已注册transformer的类重转换,无法新增字段或修改继承关系,且JDK21起默认禁用。348 收藏 -
断言不是环境切换开关,AssertionError用于暴露严重逻辑缺陷而非业务分支,-ea仅开启调试验证,不可用于生产与测试的差异化异常逻辑。348 收藏 -
Java变量生命周期由类型、作用域和引用关系共同决定,并绑定JVM内存分区:基本类型局部变量存栈中,随方法进出而创建销毁;引用变量本身在栈、所指对象在堆;成员变量随对象存堆,静态变量存方法区/元空间;JVM还支持逃逸分析与活变量优化,使对象可提前被GC回收。348 收藏 -
Xms与Xmx应设为相同值以避免运行时堆扩容卡顿。因初始堆过小会导致频繁向系统申请内存,引发数十至数百毫秒STW;需基于监控used峰值的1.2–1.5倍设定,并确保不超过容器内存限制的75%。347 收藏 -
try-catch后代码是否继续执行取决于异常是否被捕获及catch块内操作:未捕获或主动throw则终止,否则继续执行后续语句;finally几乎总执行,但System.exit()或JVM强制终止会跳过;多catch须子类在前、父类在后;空catch极危险,应记录日志或明确注释。347 收藏 -
ThreadLocal不能直接new使用,因其值与线程绑定且线程复用时不自动清理,易致数据错乱或内存泄漏;须staticfinal声明、显式remove()、避免存大对象,异步场景推荐TransmittableThreadLocal。347 收藏 -
Mixin必须与目标类结构严格匹配,方法、字段、构造器签名需完全一致;否则Jackson会退回到默认反射逻辑并报错。347 收藏 -
模块化系统不能直接限制Unsafe操作,但能提高滥用门槛和可检测性:通过封装隐藏访问路径、显式声明opens权限、隔离专用模块、启用非法访问禁止策略,并用VarHandle等标准API替代。347 收藏 -
ConcurrentHashMap比Hashtable和synchronizedMap更快,因其采用分段锁(JDK7)或CAS+synchronized锁单个Node(JDK8+),读操作无锁、写操作仅局部加锁;而后者均使用全局锁,高并发下严重串行化。347 收藏 -
submit()返回Future可获取结果或取消任务,execute()无返回值且异常易静默;shutdown()等待任务自然完成,shutdownNow()尝试中断并清空队列;CachedThreadPool易因无限建线程导致OOM。346 收藏