-
Java垃圾回收本质是自动管理堆内存,通过可达性分析(以GCRoots为起点)判定对象存活,按分代理论将堆分为新生代(Eden+S0/S1)和老年代,分别采用复制、标记-清除/整理算法回收;MinorGC在Eden满时触发,FullGC在老年代不足等情况下触发。
-
首先确认Java安装并获取路径,然后根据Shell类型选择配置文件,接着设置JAVA_HOME和PATH变量,最后重启终端验证;具体步骤为:1.用java-version和/usr/libexec/java_home确认安装与路径;2.通过echo$SHELL确定使用zsh或bash;3.在~/.zprofile(zsh)中添加exportJAVA_HOME=$(/usr/libexec/java_home)和exportPATH=$JAVA_HOME/bin:$PATH;4.执行source~/.zpr
-
Java处理嵌套集合需明确每层泛型类型、用Iterator或批量操作避免ConcurrentModificationException、借助Stream扁平化过滤、注意引用语义下修改内层才生效。
-
浅拷贝复制对象时仅复制基本类型值和引用地址,原对象与副本共享引用对象,修改会影响彼此;深拷贝递归复制所有层级,完全独立。实现上,浅拷贝可通过实现Cloneable接口重写clone()方法,深拷贝需手动克隆引用对象或使用序列化、第三方库。选择依据是对象结构复杂度及是否需完全隔离,深拷贝性能开销更大。
-
组合比继承更灵活,因其不受继承层级和final限制,适用于非“is-a”关系、需运行时替换依赖、父类设计不支持继承或需mock测试等场景;推荐privatefinal字段+构造器注入。
-
SpringBoot3要求JDK17或更高版本,最低不支持JDK16及以下;JDK17是基线版本,JDK21受支持且SpringBoot3.2+优化虚拟线程,非LTS版本(18/19/20)不建议生产使用。
-
Files.walk用于遍历目录,返回Stream<Path>,支持深度控制、文件过滤和异常处理,结合try-with-resources确保资源释放,适用于搜索文件、统计或删除操作。
-
Java异常默认沿调用栈自动向上冒泡至main,未被捕获则由JVM逐层回溯;需关注throws声明、catch后是否重抛、throw显式抛出三点。
-
hashCode决定对象在哈希集合中的存储位置,影响查找、插入、删除的平均时间复杂度;必须与equals保持一致,否则导致哈希集合行为异常;好hashCode需满足快、散、稳三特征。
-
checkMemberAccess拖慢反射调用,因每次setAccessible(true)都触发栈遍历与权限判断;应立即且仅一次设置、缓存已设accessible的反射对象,或改用MethodHandles.Lookup规避。
-
当在SpringBoot应用中启用Camel的main-run-controller配置时,会导致Actuator/actuator/shutdown端点无法完成优雅关闭,JVM持续挂起不退出;根本原因在于该配置启用了阻塞式主线程控制器,与Actuator的shutdown生命周期机制冲突。
-
Maven默认下载慢是因为官方中央仓库位于海外,国内直连存在DNS解析慢、TCP超时等问题;推荐配置阿里云镜像https://maven.aliyun.com/repository/public,在settings.xml的<mirrors>中添加对应<mirror>,<mirrorOf>需设为central或*,并确保IDE未忽略该配置。
-
Java中字符串内容比较必须用equals()而非==,因==比较引用地址;需注意null安全(推荐Objects.equals)、忽略大小写用equalsIgnoreCase()、排序用compareTo()并考虑locale问题。
-
首先安装PostgreSQL并创建数据库;然后在Java项目中通过Maven引入JDBC驱动;接着编写代码使用JDBC连接数据库;最后测试连接并排查常见问题。
-
DockerCompose中depends_on仅控制启动顺序,不确保依赖服务端口就绪;Java应用需配合健康检查、重试机制、显式JVM内存参数及DNS优化才能稳定运行。