-
Collections.binarySearch()是Java中专为已排序List设计的O(logn)查找方法,要求列表严格升序或按指定Comparator有序,否则结果未定义;返回≥0为找到元素的索引,<0则表示未找到且可推导插入位置。
-
VarHandle可安全替代Unsafe的大部分原子操作,但受限于字段可定位性、访问权限和内存语义;需用privateLookupIn获取lookup,字段类型须为原始类型,final字段禁用compareAndSet,数组操作须用ofArray(),访问模式需成对使用,且不支持堆外内存与任意地址访问。
-
海量长连接超时剔除采用分层动态时间轮:按协议与活跃度分三级轮(秒/分钟/溢出链表),onConnect时分级插入;tick时自动迁移任务至合适层级;心跳仅更新expire_time并条件迁移;超时执行分离为标记与异步清理。
-
StreamAPI对视频元数据文本流分词聚合共四步:1.明确VideoMetadata等结构化数据源;2.用flatMap和splitAsStream扁平化分词并过滤;3.用groupingBy+counting统计频次;4.排序后取Top-N生成TagWithCount列表。
-
基本类型必须通过包装类才能存入Java集合,因集合只支持引用类型;自动装箱/拆箱简化操作,但需注意==比较陷阱、null值检查及字符串转换异常处理。
-
Optional是Java中用于避免空指针异常的容器类,1.可用Optional.ofNullable()包装可能为null的值;2.推荐使用orElse、orElseGet、orElseThrow安全获取值;3.支持map和filter链式操作实现函数式编程;4.应用于方法返回值而非字段或集合,使代码更清晰安全。
-
最常用方式是使用UUID.randomUUID()生成128位唯一标识,该方法线程安全且基于随机数生成版本4的UUID,适用于大多数业务场景。
-
BitSet.previousSetBit()从指定位置向左查找最近true位,返回最大索引i(i≤fromIndex)使bitSet.get(i)为true;fromIndex<0或无匹配时返回-1,典型用法是配合length()倒序遍历所有set位。
-
ArrayList适合随机访问但插入删除慢,底层为动态数组,get/set为O(1),add/remove中间位置需整体拷贝;LinkedList适合头尾增删但随机访问为O(n);Vector和Stack已过时;CopyOnWriteArrayList适用于读多写少场景,ArrayDeque性能优于LinkedList。
-
推荐使用System.getProperty("line.separator")获取系统原生换行符,因其自动适配运行环境(Windows返回"\r\n",Linux/macOS返回"\n"),避免硬编码导致跨平台显示异常。
-
二维矩阵转置本质是将元素从(i,j)映射到(j,i),关键在于优化访存局部性:基础双重循环写Bj导致列写不连续、缓存失效;分块策略(如128×128)使读写集中于L1缓存容量内,减少CacheMiss;原地转置需按上三角交换或循环分解避免覆盖。
-
锁消除是JVM通过逃逸分析在JIT编译阶段自动移除未逃逸对象的无意义同步操作;前提是对象仅在当前线程内使用且不被外部访问,如局部StringBuffer的append调用。
-
用equals()比较字符串内容,别用==;equals()逐字符比较且安全处理null,但需非null对象调用;忽略大小写用equalsIgnoreCase();防NPE应字面量在左或用Objects.equals()。
-
应先用jstack和ps-T确认线程数暴增及OS级线程耗尽,再排查未关闭线程、第三方库泄漏及线程池配置不当(如newCachedThreadPool无界问题),而非盲目调大ulimit或-Xss。
-
强制转换不能实现归一化,仅辅助精度保留与类型适配;归一化需先识别指标属性(极大型、极小型、类别型、区间型),再选择对应方法(min-max、倒数反转、标签编码、三折线等),并在流式场景中结合分位数截断、对数压缩或Welford算法实现轻量无状态处理。