-
强制类型转换用于显式转换数据类型,包括基本类型转换可能造成精度丢失,如double转int;引用类型需用instanceof确保安全向下转型,避免ClassCastException。
-
Collection接口与原生数组操作对象完全不同:Collections只能操作Collection实现类,Arrays专为原生数组设计;排序行为、类型支持、线程安全及不可变包装等方面存在显著差异。
-
Java程序启动慢主要源于JVM冷启动、容器内存配置不当、SpringBoot自动扫描与配置、熵源不足及JIT预热延迟;需优化JVM参数、缩小扫描范围、启用CDS、替换随机数源并评估GraalVM原生镜像。
-
是的,单例实现Serializable后反序列化会破坏单例性;必须添加privateObjectreadResolve()方法返回唯一实例,或改用枚举类型确保天然单例。
-
Java导出Excel推荐使用ApachePOI的SXSSF,按创建工作簿、工作表、写入行列、写出流四步实现,注意UTF-8编码、CellStyle格式、内存控制及异步封装。
-
Semaphore是Java中用于控制并发访问资源数量的同步工具,通过维护许可数量限制同时执行的线程数。创建时指定许可数,在关键代码前调用acquire()获取许可,执行完成后在finally块中调用release()释放许可,从而实现流量控制。常用于限制数据库连接、控制API调用频率等场景,需注意避免许可泄露,可选公平模式防止线程饥饿,适用于大多数限流需求。
-
VSCodeJava格式化用的是EclipseJDTLS;它读取XML格式的formatter.xml或style.xml(Eclipse导出的旧版profileversion="1"配置),不兼容IntelliJ或Google格式,需在settings.json中正确配置java.format.settings.url和java.format.enabled,并重启语言服务器生效。
-
答案:通过SpringAOP实现日志与事务切面,提升代码模块化。首先添加spring-boot-starter-aop依赖,接着创建LoggingAspect类使用@Before、@AfterReturning和@Around注解实现方法执行前后日志记录及性能监控;然后定义RetryOnFailure注解并结合TransactionAspect实现事务重试机制;最后在主类添加@EnableAspectJAutoProxy启用AOP代理,使业务代码与横切关注点分离,增强可维护性。
-
自动装箱发生在哪些地方自动装箱不是“运行时偷偷转换”,而是编译器在编译期就插入了Integer.valueOf()、Boolean.valueOf()这类调用。只要类型匹配且上下文需要包装类,就会触发——比如赋值给包装类型变量、作为泛型参数传入、放进集合(ArrayList)、或者调用接收包装类的方法。常见错误现象:NullPointerException在看似安全的算术操作中爆发,比如Integera=null;intb=a+1;——这里解包时才会抛异常,不是装箱时。
-
top找出Java进程PID后,为什么top-H显示的线程ID和jstack里的nid对不上因为top-H默认显示的是Linux线程的十进制TID(ThreadID),而jstack输出里nid=0x...是十六进制的nativethreadID。直接比对会漏掉真凶。用printf"%x\n"把top-H看到的十进制TID转成小写十六进制,再和jstack输出里的nid=0x7f8a对照注意:JDK8u60+默认
-
Java自动装箱编译为valueOf()调用而非new,拆箱即xxxValue()方法调用;缓存适用于Boolean、Byte、Character(\u0000–\u007f)、Short、Integer(-128~127)、Long,Float/Double不缓存;拆箱null抛NPE因intValue()等方法本身空指针;高频场景应禁用自动装箱以避免GC开销。
-
不建议用异常控制正常业务流程,因性能开销大、掩盖设计问题;应将可预期失败转为返回值或状态码,异常仅用于真正意外场景,并需分层定义、规范日志与处理。
-
Java自定义排序核心是Comparator接口,支持Lambda简洁写法、多字段链式排序及空值处理;类可选实现Comparable定义自然顺序,二者可共存。
-
volatile能禁止重排序是因为JMM为其写操作插入StoreStore+StoreLoad屏障、读操作插入LoadLoad+LoadStore屏障,强制限制编译器和CPU重排;普通变量无此约束。
-
Java不支持逗号表达式,因设计时为提升可读性而移除该特性,故(a=3,b=4,a+b)类写法非法;可用多条语句替代:a=3;b=4;result=a+b;唯for循环中初始化或更新部分允许用逗号分隔多个操作,如for(inti=0,j=0;i<10;i++,j++),但此为语法特例,并非通用逗号表达式。