-
要优雅关闭SpringBoot应用,需配置server.shutdown=graceful和spring.lifecycle.timeout-per-shutdown-phase=30s;2.使用kill-15或actuator/shutdown端点触发关闭,避免kill-9;3.通过@PreDestroy或DisposableBean实现资源清理逻辑,确保请求处理完成、资源释放后进程退出。
-
FreeMarker模板中直接使用isXxx()方法名会导致“期望boolean却得到method+sequence”错误;应优先访问对应JavaBean属性(如xxx),或显式调用方法(isXxx())并加括号,确保获取返回值而非方法引用。
-
DCL在Java5前因volatile重排序约束弱易致“半初始化”;JDK5+需用volatile保证安全;推荐静态内部类方案,线程安全、延迟加载、无同步开销。
-
final修饰变量时引用不可变但对象状态可变,修饰方法时禁止重写但允许重载,修饰类时禁止继承且字段需显式final才不可变,其初始化安全性保障多线程下final字段的正确可见性。
-
什么时候该用CyclicBarrier而不是CountDownLatch当你需要多个线程反复在某个点同步、等彼此都到达后再一起往下走,就该选CyclicBarrier;CountDownLatch是一次性倒数,用完就废,没法重用。典型场景:分段计算后汇总结果(比如4个线程各自处理一批数据,算完必须等齐了再合并统计),且这个“分段→等待→合并”流程要跑好几次——这时候CyclicBarrier的可重用性才是关键。CyclicBarrier构造时指定参与线程数,到达的线程调用aw
-
ServiceLoader通过读取META-INF/services/下以接口全限定名命名的文本文件来加载实现类,文件每行一个实现类全限定名,需严格匹配包名和大小写;load()仅解析配置,next()才触发Class.forName和实例化,使用线程上下文类加载器,默认非单例。
-
最常见原因是未正确配置spring-boot-maven-plugin或继承了非SpringBoot的parent;若用自定义parent必须显式声明该插件,否则仅生成普通jar,无BOOT-INF和Main-Class,无法java-jar运行。
-
对象创建始于new指令,JVM先加载类到方法区并生成Class对象;随后在堆中分配内存,采用指针碰撞或空闲列表策略,取决于垃圾回收器和内存整理情况;为保障线程安全,优先使用TLAB实现线程私有分配,不足时通过CAS重试保证原子性;对象内存布局由对象头、实例数据和对齐填充组成,包含哈希码、锁状态、字段值等信息,并按8字节对齐;最后设置对象头并执行构造函数完成初始化,整个过程由JVM高效管控。
-
怎么让SonarQube扫描到你的Java项目源码SonarQube默认不会自动发现pom.xml或src/main/java,它只认你明确告诉它“从哪扫”“用什么编译器”。常见现象是扫描后显示0行代码、java.lang.NoClassDefFoundError、或者连src目录都不出现在文件列表里。必须在项目根目录下运行扫描命令,且该目录要包含pom.xml(Maven)或build.gradle(Gradle)用sonar-scanner时,显式指定-Dso
-
renameTo返回false的主因是目标文件存在、跨分区、权限不足或父目录不存在;listFiles返回null需先校验exists()和isDirectory();推荐用Files.move替代renameTo以获得明确异常。
-
var仅限方法体内局部变量声明,需初始化且类型可静态推断,禁用于字段、参数、返回值及lambda形参;推断类型最具体但可能丢失泛型信息,影响可读性与维护性。
-
密封类用于定义受限几何图形体系,编译期封禁外部扩展、限定子类型集合,配合伴生对象工厂方法、when穷举匹配与不可变dataclass保障类型安全与状态一致性。
-
Java连接MySQL需用mysql-connector-j8.x驱动,URL必须含serverTimezone=UTC等参数;PostgreSQL需配置sslmode和currentSchema;应避免硬编码,用配置文件管理参数,并通过getConnection()验证真实连通性。
-
答案:通过在U盘中部署便携版JDK、IDE、构建工具及环境变量脚本,可打造即插即用的Java开发环境。具体步骤包括:使用NTFS格式U盘并建立/jdk、/eclipse或/vscode、/workspace、/tools等目录;下载免安装JDK并配置JAVA_HOME和PATH的批处理脚本setenv.bat;部署Eclipse或VSCode便携版,设置工作空间为U盘目录;集成Maven或Gradle并修改本地仓库路径至U盘;可选安装PortableGit并配置用户信息与SSH密钥;最后通过start脚本
-
封装通过限制对类内部状态的直接访问来提升代码安全性和可维护性。1.使用private修饰字段并提供带校验的getter/setter方法,构造方法按需设为public或包级私有,如银行账户余额只能通过存款取款修改。2.封装降低耦合,支持重构、安全性(如密码加密)和数据校验(如年龄非负)。3.避免为不可变属性添加setter,不暴露public字段,getter返回集合副本防止外部篡改。4.结合final和不可变设计,如学生信息类姓名日期不可变,所有字段私有且无setter,返回可变组件时使用深拷贝。封装本