-
final类不能被继承是因为JVM在类加载阶段锁定ACC_FINAL标志位,字节码验证期直接抛出VerifyError;String不可变性依赖privatefinal字段与无修改方法,而非仅final修饰;其线程安全源于状态不可变,性能优势来自常量池、intern优化及底层实现打磨,非final关键字本身。
-
动态绑定指运行时根据对象实际类型而非引用类型决定调用哪个方法,仅适用于可被重写(非static、非private、非final)的实例方法,通过invokevirtual指令实现;字段访问则始终依据引用类型,不参与动态绑定。
-
StringBuilder.reverse()是最直接的字符串反转方法,需用newStringBuilder(s).reverse().toString()获取结果;手动操作char[]更灵活但需注意副本与原字符串无关。
-
Firestore中查询结果数量少于实际文档数,通常是因为缺少复合索引;即使简单查询(如仅按集合获取全部文档)也受安全规则和权限限制,但更常见的是未为orderBy+where组合创建所需索引,导致查询被静默截断或失败。
-
super用于子类访问父类成员,确保正确初始化与行为扩展。1.构造器中通过super()传递初始化责任,保障继承链完整;2.重写方法时用super.method()调用原实现,支持逻辑增强;3.同名字段下用super.field明确访问父类属性;4.强化语义清晰与封装保护,维持类型体系一致性。
-
Java中对象参数传递的本质是引用的值传递。1.方法内重新赋值引用只影响副本,不影响原变量指向;2.但通过引用修改对象内容(如List添加元素)会生效,因副本与原引用指向同一对象;3.包装类如Integer不可变,任何“修改”实为创建新对象,故外部变量不变。核心是:Java始终值传递,对象参数传的是引用副本,可改对象状态,不可改引用本身。
-
Collections.indexOfSubList用于查找子列表在主列表中首次出现的起始索引,基于equals方法进行元素比较,支持List类型数据结构。
-
Java中String类不可变、线程安全,字面量创建优先复用常量池,new创建总在堆新建;比较用equals();常用方法含length()、charAt()、substring()、trim()、大小写转换;判空推荐isBlank();拼接循环内须用StringBuilder。
-
Java接口默认方法能实现,是因为从Java8起JVM规范和字节码指令层面原生支持default方法,编译器将其标记为ACC_PUBLIC与ACC_DEFAULT并保留Code属性,JVM运行时通过增强的invokeinterface指令按“类优先、最近优先”规则解析调用。
-
Java中一个类可同时实现多个接口,通过implements后跟逗号分隔的接口名实现;必须实现所有抽象方法;同名同签名方法只需实现一次,返回类型冲突则编译失败;default方法冲突须显式重写,static方法不可继承或重写。
-
LinkedHashSet结合哈希表与双向链表,保证元素不重复且按插入顺序排列。1.创建时可用new关键字并指定泛型类型;2.add()添加元素,重复返回false;3.remove()删除元素,clear()清空;4.支持for循环、Iterator遍历,顺序与插入一致;5.contains()判断存在性,效率高;6.size()获取元素个数。适用于去重且需顺序的场景,如操作日志记录。
-
用isEmpty()判断集合是否为空最安全,但需先判null;CollectionUtils.isEmpty()是生产首选,它内部同时检查null和空集合。
-
本文介绍如何使用Josson库,基于users列表中每个元素的parent_user_id字段,将原始JSON对象按组拆分为多个独立对象,同时保留外层结构(如_id、name等)不变。
-
最常用方式是使用Jackson或Gson库。先添加对应Maven依赖,再分别通过ObjectMapper的writeValueAsString()或Gson的toJson()方法将Map转为JSON字符串,两者均几行代码即可完成转换。
-
LongAdder比AtomicLong更快,因其采用分段累加+最终合并策略,通过base值与cells数组分散线程竞争,降低CAS自旋开销,吞吐量近似随CPU核心数线性增长。