-
先使用java-version查看Java版本,再通过/usr/libexec/java_home获取安装路径,最后用echo$JAVA_HOME检查环境变量设置情况,即可全面掌握Mac上的Java配置信息。
-
Java反射调用私有方法抛IllegalAccessException,主因是Java9+模块系统强化封装,需setAccessible(true)且配合--add-opens等JVM参数才能跨模块访问。
-
char是基本类型占2字节,Character是包装类可为null、支持泛型;必须用Character的场景包括泛型集合、反射、空值语义;需注意自动装箱拆箱陷阱、缓存范围(0–127)、禁止用==比较、避免高频装箱影响性能。
-
应使用Objects.equals(a,b)替代a.equals(b),因其内部先判空再调用equals,避免NullPointerException;当a为null时a.equals(b)直接抛异常,而Objects.equals能安全处理null参数。
-
通过EclipseMarketplace安装插件最安全可靠:Help→EclipseMarketplace→搜索插件名→Install→接受协议→重启;若未上架则用InstallNewSoftware方式添加更新站点URL安装。
-
ByteBuffer.allocateDirect是JDK21+安全可控的堆外内存分配标准方式,内部封装Unsafe.allocateMemory等细节,禁止用户直接调用底层接口;应通过-XX:MaxDirectMemorySize限流、及时释放引用、监控水位,并优先采用VarHandle+MemorySegment等现代API替代Unsafe。
-
编译器对字符串拼接做字节码优化:纯字面量如"a"+"b"+"c"直接合并为常量,含变量则运行时用StringBuilder;substring从Java7u6起不再共享数组以避免内存泄漏;strip比trim支持更广Unicode空白但性能低2–3倍。
-
NIO与BIO的核心区别在于:BIO是阻塞式、面向流、一个连接一线程,适用于低并发场景;NIO是非阻塞、面向缓冲区、通过Selector实现单线程管理多连接,适合高并发高性能需求,现代Java后端多采用NIO及Netty等框架。
-
Waitingoncondition表示线程主动挂起等待条件成立,并非死锁,常见于Object.wait()、park()或NIO等场景,多数情况属正常阻塞,需结合调用栈与分布式锁上下文综合判断。
-
InternalError是JVM内部严重故障信号,不可被捕获处理;其出现表明JVM状态已不可信,应通过诊断日志、版本升级、环境排查定位根源,而非业务代码干预。
-
final字段必须在声明或构造方法中初始化且仅一次,编译器编译期强制检查并报错,禁止运行时修改;静态final需在静态块或声明时初始化,实例final绑定构造过程。
-
当XML字符串被连续多次转义(如<)时,StringEscapeUtils.unescapeXml()仅执行单层解码;需循环调用直至无变化,或根据预期转义层数精确调用多次。
-
基数排序适合处理固定长度的整数或字符串,按位分组计数、不比较大小,时间复杂度为O(d×(n+k));电话号码需清洗、统一为11位数字数组,再逐位进行稳定计数排序。
-
ArrayDeque通过循环数组连续存储提升L2缓存命中率:CPU以64字节cacheline预取相邻数据,连续布局使一次预取覆盖多个元素;而LinkedList节点分散,频繁cachemiss导致性能下降30%~60%。
-
Path.resolve用于解析路径片段为绝对路径,不构建映射但可配合对象实现变量→路径映射;推荐用resolve预计算paths对象,动态拼接时也应调用resolve而非字符串拼接。