-
IDEA里file.encoding和console.encoding必须一致Java源文件读取、编译、运行时控制台输出,三者编码不统一是乱码最常见原因。IntelliJIDEA默认可能用系统编码(比如Windows的GBK),但项目源码是UTF-8,结果编译时字面量被错误解码,运行时又用GBK解console输出——中文直接变???或方块。进File→Settings→Editor→FileEncodings,把GlobalEncoding、
-
IDEA启动慢或报OutOfMemoryError需区分平台JVM(影响IDE自身)和项目JVM(影响运行代码),平台参数在Help→EditCustomVMOptions修改,项目参数在Run→EditConfigurations→VMoptions设置;Gradle构建OOM则需配置gradle.properties中的org.gradle.jvmargs。
-
@Deprecated是提示性注解,不中断编译仅触发警告,IDE标黄是主动解析实现;它不影响运行时路由或权限控制,需配合逻辑拦截、版本路径和文档说明才能真正停用接口。
-
使用System.arraycopy合并数组前须确保类型兼容且目标数组长度足够,否则抛异常;拼接时第二段拷贝起始位置应为第一段长度,避免覆盖;基本类型数组不可与包装类混用。
-
Java多态数组用父类或接口类型声明,可存储不同子类对象,运行时自动调用对应子类重写方法;支持统一管理、灵活扩展,但不可直接调用子类特有方法,需instanceof判断后转型。
-
选择合适的Java镜像并编写Dockerfile是部署核心,推荐使用openjdk:17-jre等LTS版本,通过dockerbuild构建镜像,dockerrun运行容器,并可结合多阶段构建、JVM参数优化和HEALTHCHECK提升稳定性。
-
单例持有ActivityContext会导致其无法被GC回收而引发OOM;正确做法是使用ApplicationContext或WeakReference,并避免在单例中缓存View、Dialog等生命周期敏感对象。
-
javac是Java源码编译的唯一标准入口,将.java编译为.class字节码;需严格匹配包结构路径,常见错误包括命令未找到、参数不兼容、包不存在、中文乱码及javac/java混淆。
-
本文详解ApacheHttpClient5AsyncClient中设置JSON和multipart请求体的关键要点,重点解决SimpleRequestBuilder.setBody()对复杂实体无效、BasicAsyncEntityProducer丢失boundary等典型问题,并提供可直接复用的生产级代码示例。
-
Collections.synchronizedList是Java中将普通列表转为线程安全的工具方法,通过同步关键操作保障单个方法的线程安全,但复合操作和迭代需手动加锁,适用于读多写少场景,高并发下性能较低,建议根据需求选用CopyOnWriteArrayList等更高效方案。
-
Files.probeContentType基于内容探测MIME类型但能力有限,依赖系统机制且跨平台行为不一;提升准确率需确保文件可读非空、优先用Path而非流、类Unix系统启用libmagic、对null结果按扩展名降级处理。
-
高精度计时应选System.nanoTime();它提供纳秒级单调时间,不受系统时钟调整影响,适合性能压测和算法耗时对比,而System.currentTimeMillis()仅适用于表示当前时刻,精度低且易受NTP同步干扰。
-
抽象工厂模式适合解决需创建一系列相互关联或依赖的对象且不指定具体类的问题,即为“产品族”建模,如跨操作系统的UI组件、多数据库驱动或云厂商资源客户端。
-
Java原生Map不支持双向查找,因其仅保证键→值单向映射且值可重复;Guava的BiMap通过强制键值均唯一实现双向映射,提供inverse()视图并保障一致性。
-
自旋锁仅在临界区极短且线程能快速获取锁时比互斥锁快;否则因CPU浪费和缓存一致性开销反而更慢,现代JVM已优化park/unpark,自旋收益甚微。