-
推荐直接使用ThreadPoolExecutor而非Executors,因其可显式配置核心线程数、最大线程数、队列容量和拒绝策略,避免newCachedThreadPool和newFixedThreadPool因无界队列导致的OOM风险。
-
ArrayList底层是Object[]数组,非链表或哈希结构;默认容量10,不自动压缩空间,扩容为1.5倍,支持null和重复元素,随机访问O(1),增删平均O(n)。
-
ArrayList随机读和批量写远快于LinkedList,因内存连续性带来CPU缓存友好;LinkedList仅在极少数频繁中间增删且无需随机访问的场景可能占优,但实际大型项目中几乎不存在。
-
Java中方法调用指令由编译期类型和修饰符决定:invokestatic用于静态绑定(static/private/构造器),invokevirtual用于虚方法调用(支持多态),invokespecial强制调用当前类版本(构造器/private/super),invokeinterface用于接口方法,invokedynamic支持动态语言和Lambda的运行时绑定。
-
List接口的replaceAll方法可用于批量修改元素,它接受UnaryOperator参数对每个元素进行转换并原地更新,适用于需直接修改可变列表的场景,但不支持Set等集合且存在线程安全和不可变集合限制,若需新列表或更高灵活性,推荐使用StreamAPI实现。
-
配置文件不存在时Properties.load()会抛IOException,应捕获FileNotFoundException走默认值,其他IOException需warn日志;getResourceAsStream()返回null须判空;@Value的默认值不适用于外部设为空串场景,推荐@ConfigurationProperties配合字段初始化。
-
this关键字用于区分成员变量与局部变量、调用本类构造方法、实现链式调用、访问外部类实例以及明确作用域;static方法中不可使用。
-
封装是通过访问修饰符控制访问权限,隐藏内部实现并暴露安全接口。核心在于合理使用private、getter/setter、不可变返回值、防御性拷贝及接口隔离,而非简单用class包裹代码。
-
设计模式的根基是OOP四大特性:封装支撑工厂模式隐藏创建细节,多态支撑策略等行为型模式实现运行时替换,继承与组合共同实现装饰器等结构型模式,抽象与开闭原则驱动架构演进。
-
-Xmx与-Xms设为相同值可减少GC频率,因避免了运行时堆内存动态扩容触发的FullGC和并发周期,同时防止元空间分配失败及启动期频繁停顿。
-
装箱是基本类型转包装类,拆箱反之;Java5起支持自动装箱/拆箱,编译器自动转换,简化代码但可能引发性能问题、空指针异常和比较陷阱,需注意集合操作、参数传递等场景中的隐式转换风险。
-
ifelse语句用于根据条件执行不同代码块,基本语法为if(条件){}else{},支持多条件elseif扩展,如判断成绩等级;需注意条件为boolean类型、建议使用大括号、条件顺序影响结果,并建议包含else处理默认情况。
-
使用Collections.shuffle()可随机打乱列表元素,但列表必须为可变类型。Arrays.asList()返回固定列表,直接使用会抛出UnsupportedOperationException;正确做法是将其复制到ArrayList等可修改列表中再调用shuffle。基本用法示例如List<String>items=newArrayList<>(Arrays.asList("apple","banana","cherry"));Collections.shuffle(i
-
anyMatch判断流中是否存在至少一个元素满足条件,allMatch判断是否所有元素都满足条件;二者均返回布尔值并支持短路,常用于条件验证与数据过滤,提升代码简洁性与性能。
-
本文详解Java中方法间数据传递的核心机制,重点讲解如何将一个方法的返回值作为参数传入另一个方法,以实现模块化编程目标,避免全局变量,符合“main无打印”的作业要求。