-
subList返回原集合的视图而非副本,修改子列表会直接影响原集合;调用add()、remove()等可能抛UnsupportedOperationException;clear()会真实删除原集合元素;需独立副本须显式newArrayList(subList());索引越界立即抛IndexOutOfBoundsException;并发修改触发ConcurrentModificationException;LinkedList上subList性能差,应慎用。
-
Math.pow()基本用法是Math.pow(底数,指数),返回底数的指数次幂;顺序不可颠倒,如Math.pow(2,3)得8而Math.pow(3,2)得9;负数非整数次方、0的负数次方等会返回NaN或Infinity。
-
Collections.checkedMap()是Java运行时类型安全检查工具,包装Map后在put/putAll/compute等写入操作时校验键值类型,不检查读取和已有数据,依赖Class参数做instanceof判断,不支持通配符泛型,适用于开发测试阶段快速暴露类型错误。
-
分层聚类不应手写嵌套循环实现,而应由scipy或sklearn等专业库高效完成;嵌套循环仅用于特征工程预处理、业务规则后处理等非核心环节。
-
ConcurrentHashMap比Hashtable和synchronizedMap更快,因其采用分段锁(JDK7)或CAS+synchronized锁单个Node(JDK8+),读操作无锁、写操作仅局部加锁;而后者均使用全局锁,高并发下严重串行化。
-
上界通配符(?extendsT)不能直接用于Collectors.groupingBy泛型参数,因破坏类型推断;应改用泛型方法接收List<TextendsProduct>,再通过instanceof分发或策略接口实现安全多级分组。
-
封装是将属性和行为包装在类中,通过private隐藏字段并提供getter/setter方法控制访问,结合构造器校验和行为封装,确保对象状态安全,降低耦合,提升代码可维护性。
-
Builder模式构建不可变对象的核心是拒绝中间可变状态:Builder每次设置返回新实例,build()唯一生成final字段、私有构造、无setter的不可变对象。
-
Java类加载机制分加载、链接(含准备)、初始化三阶段:加载时仅载入字节码并生成Class对象,静态变量未分配内存;准备阶段为其分配内存并设默认零值;初始化阶段执行<clinit>方法,按源码顺序赋值静态变量和执行静态块。
-
Collectors.partitioningBy根据布尔条件将流元素分为两组,适用于二元分类场景。例如按年龄区分成年与未成年用户,支持结合下游收集器统计数量或提取属性,提升代码可读性。
-
数据局部性(时间与空间)是优化大文件扫描性能的核心,而非语法层面的“方法引用”;需通过数据本地化调度、存储顺序扫描、多级缓存及避免伪局部性等手段提升访问效率。
-
模板方法模式通过抽象类定义算法骨架,子类实现具体步骤。示例中GameTemplate定义游戏流程,FootballGame和BasketballGame实现初始化与开始游戏,分别输出对应信息,endPlay可选覆盖,提升代码复用性。
-
Consumer接口核心约束是accept()必须执行且返回void,编译器强制禁止任何返回值;常见误用包括混淆Function/Predicate、在lambda中写return、错误赋值、andThen异常中断及滥用单参数接口处理多参场景。
-
JVM类加载核心是“先到先得”机制,即按classpath中jar顺序扫描,同名类首次加载成功后,后续版本被忽略;冲突本质是加载顺序而非优先级强弱。
-
RedisIP黑名单必须用SET+EXPIRE分步操作而非SETEX,避免重复封禁重置过期时间;校验时应使用exists命令而非get防止序列化空值误判;需结合本地缓存、定时扫过期key及CIDR规则动态加载保障可靠性。