-
Java中字符串拼接推荐使用+号(少量)、StringBuilder(大量或循环)、StringBuffer(多线程)、String.join()(带分隔符)和String.format()(格式化);02.截取字符串常用substring方法,需注意索引越界和null值检查;03.实际应用中应避免循环内用+拼接、优先选用StringBuilder、结合Stream或工具类提升效率与可维护性。
-
Arrays.sort()是Java中高效排序数组的方法,适用于基本类型和对象数组。对于基本类型,采用双轴快速排序,平均时间复杂度O(nlogn);对于对象数组,使用稳定的TimSort算法,能识别有序子序列并优化合并。小数组切换为插入排序以提升性能。可传入Comparator实现自定义排序。建议优先使用该方法,避免手动实现,注意对象数组的稳定性需求,合理选择数据类型以获得最佳性能。
-
Java应用在Docker中启动慢、OOMKilled主因是JVM未适配容器内存限制;需启用-XX:+UseContainerSupport(8u131+默认开)、显式设-Xmx/-Xms为容器内存的50%~75%,并选用eclipse-temurin等轻量镜像、多阶段构建、正确配置HEALTHCHECK与actuator端点。
-
CompletableFuture解决了传统Future无法链式处理、组合任务、非阻塞回调、异常统一处理等硬伤,支持thenApply/thenCompose/anyOf/allOf等编排能力,并提供handle/whenComplete/exceptionally等语义明确的回调机制。
-
ServiceLoader加载不到实现类主因是META-INF/services位置错误或接口全限定名拼写错误;必须置于classpath根目录(如Maven的src/main/resources/META-INF/services/),文件名须为接口全限定名,内容为实现类全名,且实现类需有public无参构造器;Java9+模块化需在module-info.java中声明provides;其核心价值在于编译期解耦,运行时动态加载,支持插件扩展与多实现共存,但无优先级、条件加载等高级能力。
-
在Kafka消费者中手动强制分配特定分区(如让每个消费者固定消费唯一分区),可避免再平衡开销、提升处理确定性,但会丧失容错性、监控兼容性和弹性伸缩能力,适用于生产端与消费端严格对齐的特殊场景。
-
StackOverflowError是JVM因栈帧总数×单帧大小超过线程栈总容量而强制抛出的错误,主因是无限/过深递归或方法嵌套,而非逻辑错误;-Xss调参治标不治本,易引发OOM或仅延迟崩溃,应优先重构代码。
-
Java提供强、软、弱、虚四种引用类型,实现对对象生命周期的精细控制。强引用确保对象不被回收,但易导致内存泄漏;软引用在内存不足时可被回收,适用于缓存场景;弱引用在下次GC时必然被回收,常用于解决监听器等场景的内存泄漏;虚引用无法获取对象,仅用于在对象回收后通过ReferenceQueue通知,实现安全的资源清理。ReferenceQueue作为“通知中心”,在软、弱、虚引用关联时,于对象被回收后将其引用加入队列,实现GC与清理逻辑的解耦,提升内存管理效率与安全性。选择引用类型需根据对象重要性与内存敏感度
-
JIT是运行时动态编译,AOT是构建期静态编译;JIT依赖运行时热点识别,需预热,启动慢但运行时优化强;AOT依赖编译期可达性分析,启动快但兼容性差、需手动处理反射等动态特性。
-
Java中验证邮箱格式的常见坑包括正则表达式过于简单或复杂、特殊字符未转义(如.和\)、缺乏对国际化域名的支持;2.优化方法包括逐步完善正则表达式、使用多个正则针对不同格式、结合域名解析等辅助验证;3.可使用ApacheCommonsValidator库的EmailValidator类替代手动正则,减少代码量并提升准确性;4.性能问题可通过缓存验证结果、优化正则减少回溯、在高并发场景下使用多线程并行处理来解决,同时注意线程安全。
-
if语句用于条件判断,条件为真时执行对应代码块;2.if-else实现二选一执行;3.elseif实现多条件分支;4.可嵌套使用但需避免过度复杂。
-
Java枚举是独立引用类型,编译为final类继承Enum,具备类型安全、序列化支持和switch语义检查;必须用enum关键字定义,常量首行声明,构造器私有且隐式final,实例唯一且不可反射创建。
-
Java数组赋值有静态初始化、动态初始化、数组间引用赋值及工具类赋值四种方式:静态初始化直接指定元素并推断长度;动态初始化先定长再逐个赋值,默认值自动填充;数组间赋值为引用传递,需用Arrays.copyOf()等复制副本;Arrays.fill()可批量设相同值。
-
FileReader和FileWriter是Java中用于字符文件读写的便捷类,适用于处理文本数据。1.FileReader通过read()方法逐个读取字符,返回ASCII值,-1表示文件末尾,推荐使用try-with-resources自动关闭流。2.FileWriter用于写入字符,默认覆盖原内容,设置第二个参数为true可实现追加写入。3.可结合二者实现文件复制,利用char[]缓冲区提升读写效率。4.注意它们使用平台默认编码,处理中文可能乱码,建议配合InputStreamReader和Outpu
-
成员变量在类内方法外声明,随对象存续;局部变量在方法或代码块内声明,作用域限于对应范围。前者有默认值、可加访问修饰符、存于堆;后者须显式初始化、不可用private等修饰、存于栈。