-
Java版本不匹配导致mvncompile失败,需在setup-java中指定java-version(如'17')和distribution(推荐temurin),并与pom.xml中maven-compiler-plugin的source/target一致。
-
ReentrantLock不是synchronized的升级版,而是需手动管理锁生命周期的另一套机制:必须用try-finally确保unlock()执行,支持lockInterruptibly()和带超时的tryLock(),默认非公平锁性能更优。
-
UV统计不宜直接用ConcurrentHashMap,因其需存储完整用户ID导致内存开销大、GC压力高,且size()不准确、computeIfAbsent易引发无效对象分配;BitMap适用于ID可映射为可控范围非负整数的场景,否则误判率高;UV_HashSet通过复用Boolean.TRUE节省内存,较ConcurrentHashMap显著降低堆占用。
-
Java访问控制模型是编译器强制的可见性规则体系,通过public、protected、default、private四关键字划定“谁能在哪看到什么”,核心服务于封装、低耦合与可维护性,而非运行时权限管理。
-
Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。1.继承Thread类需定义子类重写run()方法,通过start()启动线程,但受限于Java单继承机制。2.实现Runnable接口则通过实现run()方法并将实例传给Thread构造器,更灵活,适用于已继承其他类的情况。3.两者区别在于Runnable职责分离清晰、扩展性强且避免继承限制,推荐优先使用。4.启动线程调用start()方法,注意不可重复调用、确保线程安全,必要时引入同步机制。
-
函数式接口是Java8中仅含一个抽象方法的接口,可配合Lambda表达式使用,如Consumer、Supplier、Function等内置接口广泛用于Stream操作和函数式编程。
-
interrupt()不生效的主因是线程未响应中断:纯计算循环未检查isInterrupted()、吞掉InterruptedException未重设标志、阻塞IO不响应、守护线程无法用于超时控制;可靠方案是Future+ExecutorService配合任务内中断检查。
-
BigInteger初始化禁用空字符串或null,须校验非空再构造;运算必须用add()等方法而非+−*/;比较大小用compareTo()而非>==。
-
Chrome无头模式默认不支持弹出式打印对话框,导致getWindowHandles()无法捕获新窗口句柄;本文提供兼容性配置与可靠等待策略,确保PDF导出流程在headless环境中稳定运行。
-
对象状态迁移本质是将流程逻辑从if-else中解耦,通过state字段+显式校验驱动行为变化;需用enum定义状态、封装变更方法、校验合法性,小规模用switch更轻量,复杂流程才用State模式或SpringStateMachine,并发下必须数据库条件更新+应用层校验。
-
使用PDFBox3.0向PDF添加QR码时,若直接以读取的源文件作为save()的目标路径,会导致PDF结构损坏——根本原因是PDFBox3.0严格禁止“边读边写同一文件”,而旧版2.x对此容忍度较高。
-
Java读取Excel最简单方式是用ApachePOI,只需添加poi-ooxml依赖,代码示例可直接读取test.xlsx首行标题和第二行数据。
-
在Fragment中使用DataBinding时,必须在onDestroyView()中手动置空绑定对象(如调用binding=null或binding.unbind()),否则可能因持有View引用而导致内存泄漏——这与ViewBinding的最佳实践完全一致。
-
BufferedWriter适合频繁写入小数据的场景,内部缓冲减少I/O调用;需显式flush或close确保落盘;newLine()适配平台换行,跨平台解析建议统一用"\n"。
-
使用PDFBox3.0保存PDF时,若将正在读取的源文件直接作为save()的目标路径,会导致文件结构损坏、解析异常及内容丢失——这是3.0版本明确禁止的行为,与2.x的宽松策略有本质区别。