-
Java中的“视图”(如Map.values()或List.subList()返回的对象)是轻量级代理,其是否支持按索引访问首尾元素,取决于底层接口类型(如List支持,Collection或Set通常不支持),需结合迭代顺序与具体实现谨慎处理。
-
多态通过动态绑定实现,JVM在运行时根据对象实际类型调用对应方法,利用虚方法表(vtable)查找目标方法。例如,Animala=newDog()调用a.makeSound()时执行Dog类的实现,输出"Woof"。每个类加载时生成vtable,记录可重写方法的地址,调用时先获取对象实际类,再查vtable定位方法执行。尽管存在性能开销,现代JVM已优化此过程。可通过减少继承深度、使用final修饰、优先抽象类而非接口、依赖JIT内联来提升性能。在方法逻辑不随类型变化、性能敏感场景或可用枚举简化设计时,应
-
ArrayList随机访问为O(1),LinkedList为O(n),因前者基于数组后者为链表;频繁索引遍历时ArrayList快3–10倍;仅头部/中间高频增删且无随机访问需求时才选LinkedList。
-
Arrays.fill可高效填充数组,支持全量或部分填充,如Arrays.fill(arr,0,10,-1)初始化前10个元素为-1,注意fromIndex≥0且toIndex≤数组长度。
-
BigDecimal除法必须指定scale和RoundingMode,否则抛ArithmeticException;常用写法为divide(divisor,scale,RoundingMode.HALF_UP),需按业务精度(如人民币取2位)和舍入规则谨慎选择。
-
module-path是Java模块系统(JPMS)的模块加载路径,与classpath并行而非替代;前者加载命名/自动模块并强制依赖声明与包可见性控制,后者将所有类归入unnamedmodule且无访问约束。
-
ArrayList在add()时立即扩容:size等于数组长度时触发,无缓冲余量;首次add空数组扩容至10,后续按1.5倍(oldCapacity+oldCapacity>>1)增长,addAll则直接扩至所需最小容量。
-
Postman是独立API测试工具,非Java库,不可通过Maven/Gradle安装;可在Postman中导出请求为Java代码(如OkHttp),或用newman执行集合,但需手动处理环境变量。
-
首先确认JDK安装并配置JAVA_HOME和PATH,通过java-version和javac-version验证;接着编写HelloWorld.java文件,使用javacHelloWorld.java编译生成.class文件,再执行javaHelloWorld运行程序;若含包结构或依赖jar包,需按包路径组织文件并用-cp指定类路径。
-
本文介绍使用ConstraintLayout替代RelativeLayout,通过约束规则与比例偏移实现多Lottie动画在不同设备上始终精准居中、相对对齐的响应式布局方案。
-
Java泛型具有不可变性,List<String>与List<Object>是无关类型,故不能直接赋值;读取用List<?>,写入需用List<?superT>。
-
notify随机唤醒一个等待线程,无法指定目标,易导致生产者消费者等角色错乱;仅适用于单一线程等待或角色完全等价场景,且需用while重检条件;notifyAll虽唤醒所有线程但实际开销可控,是安全兜底选择。
-
Java异常默认自动向上抛出:未捕获的checked异常需声明throws,unchecked异常可直接冒泡;传播由JVM自动完成,无需手动throw;吞掉异常或丢失堆栈是常见错误。
-
原子性指对其他线程不可见中间状态,如++i非原子因含iload、iinc、istore三步;可见性失效源于缓存与重排序,volatile可强制可见但不保证复合操作原子性;有序性由happens-before规则保障,三者常相互关联。
-
GeoHash比直接存经纬度更适合范围查询,因其将二维坐标转为具前缀相似性的字符串,支持用subMap等区间操作逼近邻近查询,但需查多个相邻单元格并二次距离过滤。