-
Java对象头MarkWord存储哈希码、GC年龄、锁状态等,用JOL配合HotSpot源码可解析其二进制结构:无锁为001、偏向锁101、轻量级锁000、重量级锁010、GC标记111。
-
ChronoUnit.DAYS.between()返回负数说明起始日期晚于结束日期,其计算的是日历天数差而非绝对值,且要求参数类型一致、需注意时区与业务场景限制。
-
排查多租户内存残留需聚焦ThreadLocal未清理、TTL传播异常、静态强引用及上下文生命周期错配:先用jstack/Arthas查线程级上下文持有,再用jmap分析实例数,结合GC日志确认老年代残留,最后审计静态变量、缓存key设计与clear()的try-finally覆盖。
-
Character.isSpaceChar()精准识别Unicode空格字符(如U+0020、U+3000、U+2003等),仅匹配SPACE_SEPARATOR类字符,不包含制表符、换行符等,适用于多语言空格标准化处理。
-
本文详解如何在Java8+中使用Collectors.toMap配合TreeMap::new工厂方法,高效、简洁地实现Map按String键自然排序(如省份名称字母序),并兼顾类型安全、去重策略与性能优化。
-
主流编程语言支持逗号批量声明同类型变量,但规则各异:Java要求全部初始化;C/C++允许部分未初始化;Go需显式同类型赋值;Python则通过元组解包实现无类型同时赋值。
-
JavaSwing开发备忘录应用需手动搭建:用JFrame作窗口、JTextArea编辑、JFileChooser选文件,配合FileReader/FileWriter读写UTF-8文本;须用JScrollPane支持滚动,pack()布局,EDT外异步I/O,窗口关闭监听防丢数据,并采用临时文件原子保存。
-
Collections.synchronizedList()不能真正解决并发修改问题,因其仅保证单个操作原子性,不保护复合操作(如遍历删除、检查后添加),迭代器未加锁导致ConcurrentModificationException频发,且keySet等视图非线程安全。
-
异或能原地交换两变量值是因为a^b^b==a,利用交换律、结合律及x^x==0、x^0==x;正确写法为a^=b;b^=a;a^=b,禁用a^=b^=a^=b等未定义行为。
-
不应绕过封装直接访问String底层字节数组,因其不可变性与实现细节(如JDK9+的byte[]+coder)受JVM保护;反射或Unsafe操作会导致版本不兼容、安全异常及性能问题,应使用getBytes(StandardCharsets.UTF_8)等标准API。
-
Java注解本身不支持直接存储对象实例或Lambda表达式,但可通过指定转换器类(Class<?extendsConverter>)并在运行时反射实例化,实现灵活的注解驱动类型转换。
-
-XX:+AlwaysPreTouch作用是JVM启动时预分配并映射全部堆内存物理页,避免运行时缺页中断;需配合-Xms=-Xmx使用,适用于延迟敏感、大堆及容器环境,但会延长启动时间。
-
环境变量丢失主因是配置未生效或上下文不一致。1.修改后未重启会话或刷新终端导致新设置无效;2.不同Shell或启动方式加载配置文件不同,图形界面IDE可能忽略.bashrc;3.IDE非终端启动时未继承系统变量,sudo命令默认不传递环境;4.JDK升级或重装后JAVA_HOME路径未同步更新;5.多用户、容器环境存在配置冲突,宿主机变量无法继承。关键是在修改后验证变量并统一管理路径。
-
Java 后端接口调用远程服务时,不能只把同步等待套进 CompletableFuture 就结束,还要处理超时、兜底值和异常记录。本文用一个小实验演示 supplyAsync、orTimeout、completeOnTimeout 和 join 的组合写法,让页面在远程接口变慢时仍能给出可控响应。
-
该用静态还是非静态取决于访问需求:需访问外部类实例成员则用非静态,仅用静态成员或工具功能则优先static,以避免内存泄漏、支持序列化并提升性能。