-
HashMap基本声明需配对泛型,推荐用Map<String,User>userMap=newHashMap<>();,避免类型擦除导致ClassCastException;支持一个null键和多个null值;遍历时优先entrySet()提升性能;初始化时预估容量可减少扩容开销。
-
Stream.concat()按输入顺序拼接流,但处理顺序需依赖串行流+forEachOrdered等有序操作保障;多流合并应显式sequential()、避免并行化及无序中间操作。
-
大数组跨步访问导致缓存失效的根本原因是破坏空间局部性,因CPU以64字节缓存行为单位加载数据,跨步使缓存行内有效数据占比低,引发频繁未命中;可通过分块(tiling)、结构体对齐与填充优化。
-
升级Hadoop至3.3.4后出现UnsatisfiedLinkError,根本原因是Windows平台依赖的本地库(如hadoop.dll)版本不兼容——Hadoop各主版本间的native组件二进制不互通,必须使用与目标Hadoop版本严格匹配的winutils.exe和hadoop.dll。
-
Java代码块分五类:静态代码块在类加载时执行一次,实例代码块每次创建对象前执行且优先于构造方法,局部代码块限定变量作用域,同步代码块保障多线程安全,各类代码块执行时机与用途各不相同。
-
热部署关键在“准”和“稳”,需监听ENTRY_CREATE、ENTRY_MODIFY(可选ENTRY_DELETE),配合去抖、绕过双亲委派的自定义类加载器及实例生命周期管理,确保类隔离与资源清理。
-
Java中System.out默认输出到控制台,可通过System.setOut(newPrintStream(newFileOutputStream("log",true),true,"UTF-8"))重定向至UTF-8编码的日志文件,需在首次使用前调用并注意路径、编码、资源释放及线程安全问题。
-
前驱是左子树最右节点或不存在,后继是右子树最左节点或不存在;删除度为2节点时,用其前驱或后继替换可保持BST性质,且被替换节点至多一个子节点,便于递归删除。
-
Collections.emptyList()返回共享不可变空List,非数组,适用于List场景;空数组需用静态常量如EMPTY_STRING_ARRAY或ArrayUtils,JDK11+可用toArray(IntFunction)间接构建。
-
Java受检异常无法直接用于C/C++双缓冲解析器,但可迁移其设计思想:用结构化错误码替代throws、在双缓冲切换点注入可恢复错误上下文、通过位域校验实现编译期/运行期“异常锚点”、分层映射错误语义。
-
用一次 Spring Boot 慢接口复盘讲清 JDK Flight Recorder 的安全录制、事件解读、常见误判和上线验证清单。
-
NPE堆栈中“because'xxx'isnull”直接指出未初始化的成员变量,需定位业务代码行、检查声明/构造器/注入初始化路径,并验证对象生命周期与调用时机。
-
目标存活率(-XX:TargetSurvivorRatio)默认为50%,决定MinorGC后Survivor区对象累计占比达该比例时触发动态年龄晋升;调高则延缓晋升、调低则加速晋升,需结合Survivor实际容量协同调优。
-
getActiveCount返回的是RUNNABLE且已执行run()的线程数,不包含BLOCKED/WAITING/TIMED_WAITING等阻塞态线程,故不能代表真实活跃任务数,仅反映CPU密集型忙线程的瞬时快照。
-
CGLIB与JDK动态代理在变量处理上本身无性能差异,因二者均不操作变量而专注方法拦截;参数传递开销几乎为零,成员变量访问不受影响,真正差异在于JDK依赖反射调用(Method.invoke)而CGLIB通过MethodProxy.invokeSuper直接调用,后者路径更短、性能更高。