-
模板方法模式通过抽象类定义算法骨架,子类实现具体步骤。示例中GameTemplate定义游戏流程,FootballGame和BasketballGame实现初始化与开始游戏,分别输出对应信息,endPlay可选覆盖,提升代码复用性。
-
JDK动态代理通过接口+反射+InvocationHandler统一实现权限校验与事务管理,要求目标类必须实现接口;invoke方法中按序执行权限检查、事务开启、业务调用、提交/回滚;支持注解驱动的条件增强。
-
VerifyError是JVM在类加载连接阶段强制校验字节码失败时抛出的致命错误,发生在ClassLoader.defineClass()阶段,因类型不匹配、栈不平衡等违反JVM规范的问题导致,属不可恢复的Error而非Exception。
-
TimeZone是Java处理时区的抽象类,需通过getTimeZone()等静态方法获取实例,提供偏移量、夏令时规则及时区ID等元数据,配合Calendar或ZonedDateTime完成时间转换;推荐使用java.time包替代。
-
FastThreadLocal通过线程专属数组与固定下标实现零哈希、零探测的直接访问,提升缓存局部性与查找速度;需搭配FastThreadLocalThread使用,staticfinal复用实例避免索引爆炸。
-
死锁的本质是争夺顺序不一致与持有资源后继续等待导致的闭环,典型如两线程反序申请mtx1和mtx2:A持mtx1等mtx2,B持mtx2等mtx1,满足互斥、持有并等待、不可剥夺、循环等待四条件。
-
File.isHidden()不检测系统级隐藏属性,Windows下检查Hidden标志,macOS/Linux仅判断文件名是否以.开头;应优先用Files.getAttribute获取dos:hidden(Windows),macOS需调用xattr或stat命令,跨平台需分层降级处理。
-
Collections.synchronizedList仅保证单方法线程安全,不解决复合操作、迭代并发及状态依赖问题;需手动同步迭代、避免底层暴露,锁粒度粗影响读性能,应依读写比例与一致性需求选替代方案。
-
for-each循环本质是编译器对Iterator的语法糖,要求对象实现Iterable接口并提供每次返回新迭代器的iterator()方法;其背后执行Iterator的hasNext()、next()三步操作,支持fail-fast但不支持倒退或修改结构。
-
要计算两个时间点的秒数差,必须使用Instant等时间点类型而非Duration;推荐用Duration.between(start,end).toSeconds()获取四舍五入后的整秒数,注意LocalDateTime直接相减存在时区陷阱。
-
newSingleThreadExecutor本质是单线程+无界队列的特殊封装,内部使用ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue()),任务严格FIFO执行且自动恢复线程,但不暴露线程控制权。
-
Java数组通过运行时类型检查保障安全,泛型依赖编译期类型擦除和约束;因泛型类型信息在运行时不存在,故禁止创建泛型数组,避免破坏类型安全。
-
Java中无法重写addSuppressed()来处理关闭异常,因其是Throwable类的final方法,仅存储抑制异常而不执行逻辑;正确做法是在close()中捕获并决策、避免抛出检查异常、利用getSuppressed()分析抑制异常、实现幂等close(),或分离close()与显式释放方法。
-
高并发场景下提升Java处理能力需合理使用多线程与锁。1.使用线程池(如ExecutorService)管理线程,避免资源耗尽;2.合理拆分任务,避免线程调度开销或CPU利用率不足;3.异步化I/O操作,减少线程阻塞;4.控制锁粒度,优先使用ReentrantLock以获得更灵活的锁机制;5.缩小锁范围,仅对共享资源修改部分加锁;6.读多写少场景使用ReentrantReadWriteLock;7.使用ConcurrentHashMap、AtomicInteger等无锁结构减少锁开销;8.善用Concur
-
nativeMethodPrefix仅重命名native方法符号,不拦截或增强调用;它只影响后续loadLibrary的符号查找(如查test_Java_com_xxx而非Java_com_xxx),不触发字节码变换、无AOP能力,与JVMTI同名接口易混淆但功能完全不同。