-
OOP是建模现实世界的思维习惯:拆解为对象、属性、方法并协作;封装用private+getter/setter控制数据;继承仅用于严格is-a关系,优先组合;多态受限于引用类型,需转型或抽象共性;抽象类表共有骨架,接口表共同能力。
-
CopyOnWriteArrayList适用于读多写少场景,通过写时复制实现线程安全,读操作无锁并发,迭代基于快照不抛异常,适合配置列表、监听器等数据变动少且需高性能读取的并发环境。
-
Stream.filter用于按条件筛选集合元素,返回满足条件的流。①基本用法:通过Predicate接口实现条件判断,如筛选偶数;②对象筛选:可结合getter方法过滤对象,如保留年龄≥18的用户;③组合条件:支持&&、||、!逻辑,或链式调用多个filter实现“且”效果;④注意事项:filter为中间操作需终端操作触发,流不可复用,避免在filter中执行耗时操作;⑤null处理:需显式检查null,防止空指针异常。合理使用可提升代码简洁性与安全性。
-
JVM堆内存分代管理,非连续空间:YoungGen(Eden、S0、S1)、OldGen和Metaspace;对象优先分配Eden,触发MinorGC后存活对象复制或晋升,大对象可直接入OldGen;字符串字面量存常量池,newString("abc")仅在堆建引用对象;AllocationFailure是GC正常触发提示,非OOM;逃逸分析可能使对象栈上分配。
-
本文详解在Swing应用中异步处理文件重命名时,为何直接join()后台线程会导致UI冻结或崩溃,并提供基于事件分发线程(EDT)安全的完整解决方案。
-
Java八种基本数据类型为byte、short、int、long、float、double、char、boolean,分属整数、浮点、字符、布尔四类,各有固定内存大小、取值范围及默认值,不随平台变化。
-
Java集合主要解决数组灵活性差、功能单薄的问题,提供自动扩容、丰富操作方法、多种数据结构及泛型类型安全,适用于日常业务开发。
-
Observable集合让集合本身可被监听,JavaFX中用ListChangeListener响应增删改移,需循环c.next()处理批次变更;普通ArrayList无通知机制,须用FXCollections.observableArrayList创建;KO的observableArray与JavaFX均不自动响应元素属性变化,需额外配置;监听器中避免耗时操作或递归修改。
-
ServiceLoader通过读取META-INF/services/下以接口全限定名命名的文本文件加载实现类,每行一个全限定名,依赖约定路径与UTF-8编码(无BOM),要求实现类有无参构造且非内部类。
-
Thread.suspend()和resume()因无条件挂起且不释放锁,极易导致死锁,故自JDK1.2起被弃用;应改用volatileboolean配合wait/notify或LockSupport实现协作式暂停。
-
Filter中setCharacterEncoding对GET无效,仅影响POST等请求体解码,且须在getParameter()前设置;RequestBody需用HttpServletRequestWrapper缓存字节以支持多次读取;Content-Disposition中文文件名应采用filename*+fallback双头方案。
-
根本原因是注解处理器未启用或Lombok依赖配置不正确。需启用IDEA的AnnotationProcessors、检查pom.xml或build.gradle中compileOnly+annotationProcessor配置、重启IDEA并清理缓存。
-
Map.merge(word,1,Integer::sum)是词频统计的正确用法,它原子性地实现“有则叠、无则建”,避免NPE和并发丢失;勿用get+put组合或错误lambda,慎混用compute。
-
javac-d参数用于按包结构组织字节码文件,指定.class输出根目录并自动创建匹配包路径的子目录;它保障JVM正确加载、分离源码与编译产物、支持类路径运行及jar打包。
-
时间复杂度取决于各层循环的迭代次数表达式,而非嵌套层数;例如三层循环可能为O(n×m),关键看每层是否依赖同一变量n。