-
方法重写是子类替换父类实例方法的行为,需满足签名一致、返回类型协变、访问权限不收紧、检查异常不扩大四个条件,并必须使用@Override注解以避免隐性错误。
-
Collections.synchronizedMap仅保证单个操作线程安全,不保证复合操作原子性;需手动加锁时必须同步原始map而非包装对象;ConcurrentHashMap是更优默认选择。
-
PriorityQueue基于堆实现,用于任务调度,非线程安全,不允许null,插入删除O(logn),需实现Comparable或Comparator定义优先级。
-
异常链是将底层异常包装为高层异常并保留原始异常作为原因,通过带cause参数的构造函数实现,如thrownewBusinessException("业务失败",e);它既提供业务语义又保留调试信息,打印堆栈时显示“Causedby”,便于排查问题。
-
非静态内部类默认持有外部类强引用,Java编译器在字节码中注入this$0字段,导致Activity等组件无法被GC回收,引发内存泄漏;Handler、匿名监听器及捕获实例方法的Lambda均属此类。
-
Java异常监控核心在于主动表达:统一拦截、结构化上报、分级告警、反向联动,实现从被动记录到可运营信号的转变。
-
JavaWeb文件上传下载核心是安全处理HTTP请求响应、合理管理存储路径;SpringBoot推荐用MultipartFile上传,ResponseEntity或流式输出下载,需校验空文件、重命名、限大小、防路径遍历、内容类型匹配及前后端协同校验。
-
Java处理大数据时,应优先使用并行流和ForkJoin框架提升性能。1.并行流适用于大型集合的过滤、映射、归约等操作,通过调用.parallel()方法自动并行执行任务,简化多线程编程。2.ForkJoin框架适合自定义分治逻辑,通过RecursiveTask或RecursiveAction实现任务拆分与合并,控制并行粒度。3.并行流优势在于易用性和CPU密集型任务加速,但不适用于小数据量、I/O密集型任务或共享可变状态场景。4.使用ForkJoin时需设定合理阈值,避免任务拆分过细影响效率。5.常见陷
-
Java中的接口类型包括普通接口、函数式接口、标记接口和嵌套接口。普通接口使用interface定义,包含抽象方法和常量,Java8起支持默认和静态方法;函数式接口有且仅一个抽象方法,用于Lambda表达式,如Runnable、Comparator;标记接口无方法,用于标识类特性,如Serializable;嵌套接口定义在类或接口内部,提升封装性,如Map.Entry。合理使用可增强代码可读性与扩展性。
-
在使用ProjectReactor时,不能在map中通过subscribe同步修改外部对象状态;应改用flatMap+collectList等响应式操作符,将内部Flux聚合后构造新对象,确保数据流完整性与线程安全性。
-
静态方法属于类而非对象,类加载时分配内存,不依赖实例,不可访问this、super及非静态成员;main方法必须为静态以供JVM无实例启动;静态方法不可重写,仅支持编译期隐藏。
-
Java中格式化字符串输出常用System.out.printf()和String.format(),支持%d、%f、%s等格式符控制整数、浮点数、字符串显示,%.2f可保留两位小数,%n换行,%10s右对齐宽度10,%-10s左对齐,%08d补零至8位,%tF输出日期yyyy-MM-dd,%tT输出时间HH:mm:ss,适用于日志、报表等场景。
-
Android应用在构建后(debug/release)无法动态切换语言,即使代码逻辑正确、资源目录完整,也始终回退到系统默认语言(如English),常见于缓存污染、构建配置异常或IDE状态错乱。
-
Java所有方法参数均为值传递,传递的是引用变量的副本而非对象本身或地址;String和Integer因不可变性,修改操作会新建对象,不影响原引用;而ArrayList等可变对象可通过副本引用修改堆中同一实例的内容。
-
Java多条件排序核心是Comparator链式调用thenComparing(),支持字段排序、null安全(nullsFirst/nullsLast)、逆序(reverseOrder)及Lambda自定义逻辑,适用于List.sort()和Stream.sorted()。