-
HashMap采用数组+链表/红黑树结构,通过hashCode()计算索引,(n-1)&hash快速寻址;默认容量16、负载因子0.75,超阈值扩容并rehash;链表长度≥8且数组≥64时转红黑树优化查找。
-
Stream.distinct()不保证顺序,仅在有序流中保留首次出现元素;并行流下顺序失控,需用LinkedHashSet手动去重或Collectors.toMap按字段去重。
-
Java只支持值传递。基本类型传递值副本,方法内修改不影响原变量;引用类型传递地址副本,可修改对象状态但无法改变原引用指向,String等不可变类重新赋值仅改变局部引用。
-
静态分派在编译期根据引用变量声明类型选择重载方法,动态分派在运行时依据实际对象类型查找重写方法;invokestatic/invokespecial指令不查表,invokevirtual指令触发虚方法表查找。
-
ForkJoinPool的工作窃取算法通过双端队列实现“自己从尾取、别人从头偷”,提升CPU利用率;需继承RecursiveTask/Action并合理拆分任务、设置阈值;应避免阻塞,善用统计方法调优。
-
拦截StatementHandler.prepare是最稳切入点,因其在SQL解析完成、参数未绑定、未预编译时可安全修改表名;需用正则精准提取from/join/update后首个标识符,结合白名单校验;通过反射修改BoundSql私有sql字段并及时恢复访问限制;分片键须由ThreadLocal传递且务必clear()。
-
DoubleAdder不支持统计桶,需封装数组或Map持有多个实例;推荐预设固定大小的DoubleAdder[]数组,避免动态扩容和哈希开销;写入须线程局部路由,读取宜批量调用sum()并注意精度与清理。
-
实现克隆需实现Cloneable接口并重写clone()方法,1.默认为浅克隆,仅复制基本类型和引用地址;2.深克隆需手动复制引用对象;3.推荐使用拷贝构造函数或序列化替代以避免问题。
-
Java注释分三种:单行(//)、多行(/.../)、文档(/*.../);分别用于行级说明、块级禁用、API文档生成,核心是提升可读性与协作性,且需随代码同步更新。
-
AudioSystem无法直接播放网络电台URL,因其仅支持WAV/AU/AIFF等本地格式,不解析HTTP也不内置MP3/AAC解码器;MP3流无标准文件头且ICY流含元数据块,需JLayer+手动处理icy-metaint才能稳定播放。
-
String不可变依赖整套设计:finalclass封继承、private字段隔离访问、所有方法返回新对象、构造时防御性拷贝;仅final修饰数组引用并不保证内容不可变。
-
先运行/usr/libexec/java_home-V确认已注册JVM路径,再检查/Library/Java/JavaVirtualMachines、~/Library/Java/JavaVirtualMachines、/opt/homebrew/Cellar/openjdk等位置,结合whichjava和java-version验证实际使用版本。
-
Java无??操作符,需用Optional模拟空合并:常用orElse()取确定值,惰性求值用orElseGet();嵌套Optional须用flatMap;Optional仅适用于方法返回值,非null安全替身。
-
Collections.sort()要求元素实现Comparable接口或传入Comparator,否则抛ClassCastException;仅支持List,不支持Set/Map;排序为就地修改,需注意线程安全与深拷贝。
-
虚拟线程卡住主因是同步阻塞调用未释放载体线程;高吞吐定时任务禁用newVirtualThreadPerTaskExecutor;Spring@Async需自定义TaskExecutor才能启用虚拟线程。