-
Java的Period.between方法在计算LocalDate间隔时采用“逐月递增+自动截断”策略,导致相同月份内不同起始日(如1月28日vs1月31日)可能得出完全相同的Period结果,这是其设计使然而非Bug。
-
不显式声明serialVersionUID等于放弃兼容控制:其自动生成值是类结构的“指纹”,非稳定标识,微小变更或不同编译环境均可能导致反序列化失败抛出InvalidClassException。
-
在Java中,LinkedHashMap是HashMap的一个子类,它通过维护一个双向链表来保证元素的插入顺序。这意味着当你遍历LinkedHashMap时,元素的返回顺序与它们被插入的顺序一致。这一点与HashMap不同,HashMap不保证任何顺序。保持插入顺序的基本用法创建一个LinkedHashMap非常简单,和HashMap的使用方式几乎一样:LinkedHashMapmap=newLinkedHashMap();map.put("apple",1
-
Java文件读写核心是按场景选API:小文件用Files(需显式指定Charset),大文件用BufferedInputStream/OutputStream,文本处理须用InputStreamReader/OutputStreamWriter配Charset,异常要分级捕获。
-
ReferenceQueue是监控对象实例被回收的通知通道,入队的是WeakReference或PhantomReference等引用对象本身,而非原始对象;需构造时显式传入,通过poll()/remove()轮询确认回收完成。
-
正则表达式核心功能包括文本匹配、子串提取、文本替换、文本分割及断言与定位控制。它通过模式规则实现精准文本处理,广泛应用于验证、抽取、清洗、切分和上下文限定等场景。
-
CopyOnWriteArrayList写操作慢是因为每次add/set/remove都要复制整个底层数组,导致CPU和GC压力双升;数组大时单次add可能分配几十MB临时对象;迭代器基于快照,修改不可见且不抛ConcurrentModificationException。
-
用equals()比较字符串内容,别用==;equals()逐字符比较且安全处理null,但需非null对象调用;忽略大小写用equalsIgnoreCase();防NPE应字面量在左或用Objects.equals()。
-
应先用jstack和ps-T确认线程数暴增及OS级线程耗尽,再排查未关闭线程、第三方库泄漏及线程池配置不当(如newCachedThreadPool无界问题),而非盲目调大ulimit或-Xss。
-
强制转换不能实现归一化,仅辅助精度保留与类型适配;归一化需先识别指标属性(极大型、极小型、类别型、区间型),再选择对应方法(min-max、倒数反转、标签编码、三折线等),并在流式场景中结合分位数截断、对数压缩或Welford算法实现轻量无状态处理。
-
Java中Scanner读取数据需注意缓冲区残留和类型匹配:nextInt()等不消费换行符,后续nextLine()会返回空串;应在数值读取后加scanner.nextLine()清空缓冲区,或统一用nextLine()配合parseXxx()转换;hasNextXxx()用于循环读取;Scanner关联System.in时无需close()。
-
Vector和Hashtable因全局synchronized锁导致高并发性能差;ConcurrentHashMap(JDK8+)采用分桶锁+CAS提升吞吐;CopyOnWriteArrayList仅适用于读多写少场景;BlockingQueue选型需权衡容量、锁机制与背压策略。
-
封装通过隐藏内部实现、暴露稳定接口,保护数据安全并提升代码复用性;私有字段与公共方法结合校验逻辑,确保状态可控;公共方法聚焦单一职责,支持多场景调用;构造器统一初始化逻辑,简化对象创建;包级访问控制组织复用单元,形成清晰API边界,促进模块化迁移。
-
Lombok的@Builder注解会覆盖类中已初始化的集合字段(如privateList<Category>children=newArrayList<>();),导致调用addChild()时触发NullPointerException。根本原因在于Builder生成的构造逻辑未保留字段默认值。
-
Java开发环境配置成功的关键是正确安装JDK、设置JAVA_HOME指向JDK根目录、将%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux)加入PATH,验证java-version和javac-version能正常输出版本号。