-
substring的两个参数是索引位置,beginIndex为起始保留位置(含),endIndex为首个不保留位置(不含),区间为左闭右开。
-
字符串拼接性能差的根源是对象不可变导致频繁内存分配:Python中+=产生O(N²)开销,应改用list+join;Go推荐strings.Builder(预估容量),Java需显式设置StringBuilder初始容量。
-
ThreadLocalMap中Entry的key使用WeakReference是为了避免ThreadLocal对象因线程长期存活而无法被GC回收;但value仍为强引用,若不调用remove(),会导致内存泄漏。
-
super用于调用父类成员,1.可在子类中通过super.方法名()调用被重写的父类方法,实现逻辑扩展;2.子类构造器必须首行通过super()调用父类构造器,否则需确保父类有无参构造器;3.实际开发中常先调用super.method()执行基础逻辑,再添加子类特有行为;4.注意super不能在静态上下文中使用,super()必须是构造器第一条语句,且应避免过度依赖继承,优先使用组合。正确使用super能提升代码复用性与可维护性。
-
parallelStream仅在数据量大、单个元素处理耗时明显(如I/O或复杂计算)时才比stream快;小集合(如size<1000)、轻量操作(如String::toUpperCase)、非RandomAccess集合(如LinkedList)、共享可变状态等场景下反而更慢或出错。
-
静态初始化适用于已知元素值的场景,如int[]arr={1,2,3};2.动态初始化用于运行时确定长度,如int[]arr=newint[5];3.声明与初始化可分离,提升灵活性;4.多维数组支持规则与不规则结构,如int[][]matrix={{1,2},{3,4}}或动态分配行列。
-
三元运算符仅适用于有明确返回值的单表达式分支,正确写法为condition?exprIfTrue:exprIfFalse(JS)或value_if_trueifconditionelsevalue_if_false(Python),Go则明确拒绝引入。
-
本文介绍如何通过keySet().retainAll()方法,高效地使第一个Map仅保留与第二个Map共有的键,从而实现键对齐——适用于所有可修改的Map实现(如HashMap、TreeMap等),无需遍历或手动删除。
-
泛型在编译期提供类型安全,通过类型参数提升代码复用性;定义泛型类如Box<T>后需指定具体类型如Box<String>来调用;泛型方法可自动推断类型,也可显式指定;由于类型擦除,无法直接实例化T,需借助Class对象或Supplier工厂;禁止创建泛型数组如newBox<String>[],建议用ArrayList替代;核心是编译期检查与合理使用通配符、边界。
-
对象状态一致性要求成员变量满足约束条件,如余额非负、时间有序等,确保方法执行前后对象处于合法状态,通过封装控制访问并结合异常处理防止非法修改,同时在多线程环境下利用同步机制保障复合操作的原子性,从而维护程序的可靠性与数据安全。
-
G1的RSet只记录老年代→年轻代引用,因年轻代对象生命周期短,其引用老年代对象不影响后者的存活判定;而年轻代回收需避免扫描全老年代,故必须记录反向引用以保障安全回收。
-
短路特性使&&和||返回最后一个被求值的操作数,且仅右侧操作数可被跳过;应将轻量、高失败率(&&)或高成功率(||)条件置左,耗时操作置右,并警惕隐式转换与副作用。
-
Java数组赋值有静态初始化、动态初始化、数组间引用赋值及工具类赋值四种方式:静态初始化直接指定元素并推断长度;动态初始化先定长再逐个赋值,默认值自动填充;数组间赋值为引用传递,需用Arrays.copyOf()等复制副本;Arrays.fill()可批量设相同值。
-
投票系统应选用ConcurrentHashMap存储票数、ConcurrentHashMap.newKeySet()记录已投ID、动态锁对象保障原子性、流式排序生成实时有序视图。
-
Python中没有trim(),只有strip()及其变体;strip()默认删除首尾空白字符且不修改原字符串,加参数时按字符集合而非子串匹配,安全用法是不加参数。