-
闰年判断必须用“(year%4==0&&year%100!=0)||year%400==0”,单用%4会误判1900、2100等整百年;高频场景用数学表达式,低频可用LocalDate.isLeapYear();测试须覆盖1900、2000、2100。
-
try-with-resources中close()异常会被抑制而非覆盖主异常;主异常始终抛出,close异常可通过getSuppressed()获取;应主动检查处理被抑制异常,优化close实现以减少异常,并在必要时改用手动finally管理。
-
Java批量导入核心是分批+事务+异常隔离,需分片读取处理防内存溢出和超时;POI用SAX或StreamingUserModel,CSV用OpenCSV流式解析;批次大小建议500~2000条。
-
接口定义行为契约,强调“能做什么”,用于策略、观察者等模式实现解耦与多态;抽象类提供部分实现,体现“是什么”关系,适用于模板方法、构建器等需共用逻辑的场景。两者核心区别在于设计意图:接口支持多实现,侧重能力规范;抽象类允许代码复用,适合有共同行为的类继承。实际开发中常结合使用,如List与AbstractList,既保证灵活性又降低实现成本,符合开闭原则,是构建可扩展系统的关键基础。
-
Java中&&和||是短路运算符,左边结果能确定整体表达式时跳过右边求值,避免副作用;而&和|是非短路逻辑/位运算符,可能引发NPE或意外执行。
-
能,ClassGraph默认跳过类初始化直接扫描Jar,通过解析字节码元数据(如常量池、注解、签名)完成分析;只要不调用loadClass()或loadClasses(),类就不会被JVM初始化。
-
Java二进制字面量必须用0b或0B前缀,Java7起支持;八进制用0开头但易错应避免;十六进制用0x/0X,最安全常用。
-
ServiceLoader通过读取META-INF/services/下以接口全限定名命名的文本文件加载实现类,每行一个全限定名,依赖约定路径与UTF-8编码(无BOM),要求实现类有无参构造且非内部类。
-
long字面量必须加L/l后缀以避免溢出和类型误判:整数字面量默认为int,超范围需显式标注;推荐大写L防混淆;各进制超int值均须加L。
-
统计字符频次用HashMap遍历toCharArray()最稳妥,注意大小写和空白符处理;单词统计先清洗标点再split("\s+")并过滤空串;文件读取用Files.lines()防OOM,注意编码和路径;输出用stream排序+String.format对齐。
-
IDEA启动慢或报OutOfMemoryError需区分平台JVM(影响IDE自身)和项目JVM(影响运行代码),平台参数在Help→EditCustomVMOptions修改,项目参数在Run→EditConfigurations→VMoptions设置;Gradle构建OOM则需配置gradle.properties中的org.gradle.jvmargs。
-
BigInteger位于java.math包,用于处理超大整数运算,避免溢出。通过newBigInteger("字符串")或BigInteger.valueOf()创建对象。常用方法包括add、subtract、multiply、divide等算术操作,均返回新实例。比较使用compareTo或equals,支持进制转换与位运算,如and、or、shift操作。注意对象不可变,每次操作需重新赋值。
-
Java数组下标必须为0到length-1的非负整数,越界抛ArrayIndexOutOfBoundsException;长度用arr.length而非arr.length();多维数组按层级索引;越界仅运行时检查,需手动校验。
-
Weka在对文本数据进行StringToWordVector转换后生成稀疏ARFF文件时,若样本类别值(如"Positive")位于属性列表首位且该样本在对应词向量中无非零项,该标签将被省略——这是稀疏格式的标准行为,并非数据丢失或处理错误。
-
Java执行顺序为:类加载时先父类后子类初始化static变量和块;new对象时先父类构造器、再本类实例块、最后构造器体;main方法非最先执行,其所在类static初始化可能早已完成;方法内语句自上而下执行,表达式按优先级与从左到右求值。