-
private仅限声明它的类内部访问,禁止用于外部类和接口,但可用于内部类、静态嵌套类及枚举构造器;它实现基础封装,却非绝对安全,影响测试、序列化与反射使用。
-
最稳用CFR反编译插件:兼容Java17新特性,需禁用IDEA自带解码器;遇“Decompiledcodenotavailable”需检查module-info、混淆或JDK类配置;var丢失因编译未加-g:vars;空方法体是CFR对不支持字节码的兜底处理。
-
ArrayList遍历时调用remove()抛ConcurrentModificationException,因fail-fast机制通过modCount与expectedModCount比对检测结构修改;安全做法是用Iterator.remove()或removeAll()。
-
Java中Stream.distinct()去重需重写equals()和hashCode()方法且逻辑一致,仅重写equals()会导致HashSet失效;应基于业务字段(如id)实现,避免可变字段,并可通过distinctByKey等替代方案处理无法修改原类的情况。
-
能,但需区分系统架构:64位RaspberryPiOS默认支持OpenJDK17,32位系统仅提供OpenJDK11且无jpackage等工具;ARM32平台需手动安装LibericaJDK等第三方构建版。
-
避免过度设计的关键是让设计决策服务于当前需求,以变化点驱动抽象、优先组合而非继承、接口聚焦闭环操作、警惕设计模式滥用,使代码如对话般自然清晰。
-
Java项目配Git实为配置IDE:需确认.git存在、SDK已选、手动指定仓库根目录、配置绝对路径的git.exe、统一UTF-8编码,并禁用多模块自动识别。
-
Java构造方法必须与类名完全一致(大小写敏感),无返回类型,可重载;new对象时按固定顺序初始化;无显式构造方法时编译器自动添加无参构造,但一旦定义任一构造方法则默认无参构造消失;this()和super()必须位于构造方法首行且互斥。
-
systemd服务中JAVA_HOME需显式声明:在[Service]段用Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk",配合绝对路径ExecStart和WorkingDirectory,并设置After=network.targetlocal-fs.target、Wants=network.targetlocal-fs.target,最后执行systemctldaemon-reload。
-
String.contains()最稳妥适用于“关键词存在即命中”的简单搜索场景,如日志查ERROR或列表快速过滤;需统一转小写处理大小写敏感问题,不支持通配符或正则,时间复杂度O(n)。
-
printStackTrace()是还原异常发生时的完整调用链,输出到System.err,提供精准位置信息;开发阶段可快速调试,生产环境须改用日志框架记录。
-
使用entrySet()可同时遍历键和值,适合需键值对的场景;2.keySet()仅遍历键;3.values()仅遍历值;4.Iterator可在遍历时安全删除元素;5.forEach()结合Lambda更简洁,适用于Java8+。选择依据需求而定。
-
HashMap在桶中链表长度≥8且数组容量≥64时树化为红黑树;扩容时红黑树节点数≤6则退化为链表;阈值8基于泊松分布设计,用以探测哈希异常,不可安全修改。
-
Thymeleaf可脱离Spring纯Java渲染:用ClassLoaderTemplateResolver(jar内模板)或FileTemplateResolver(开发调试),禁用缓存,Context传Map并注意类型限制(如Date、Boolean),路径用相对路径或th:attr动态拼接,避免Spring专属语法。
-
反射调用Method.invoke()比直接调用慢10–100倍,主因是JVM无法内联、运行时类型检查、每次权限校验及参数数组包装;setAccessible(true)可提速20–40%但破坏封装且受模块系统限制;缓存Method/Field对象最有效;替代方案包括接口工厂、MethodHandle、VarHandle和字节码生成。