-
父类构造方法中调用被子类重写的方法是危险但默认发生的多态行为;应避免在构造过程中依赖可被重写的行为,最稳妥方式是将方法设为final/sealed或推迟多态逻辑至构造完成后的显式初始化方法。
-
Math.abs()对Integer.MIN_VALUE返回负数是因补码取反溢出;应改用Math.abs((long)Integer.MIN_VALUE)或Math.absExact();Math.pow()性能差、精度低,小整数幂宜用乘法。
-
Java里用Observer接口写观察者模式,现在还行吗?不行。Java9开始java.util.Observer和java.util.Observable已被标记为@Deprecated,JDK14彻底移除。这不是“不推荐”,是“不能用”。官方弃用理由很实在:线程不安全、API设计僵硬、无法支持泛型。别再查老教程照搬Observable.notifyObservers()了。替代方案就一条路:自己定义观察者接口+主动通知逻辑。核心就两件事——谁发通知、谁收通知,中间不
-
ConcurrentLinkedQueue是Lock-Free而非Wait-Free,因其操作可能无限重试而无步数上界;Wait-Free要求每个线程有限步内必完成,Lock-Free仅保证系统整体有进展。
-
Java三元运算符类型提升由编译器按JLS§15.25计算两分支最小上界(LUB)决定,如int与Integer→int(触发拆箱),故flag?1:someInteger在someInteger为null时必NPE;应统一用包装类型或显式转型避免隐式拆箱。
-
应警觉并避免if-else嵌套超过2层,因其混杂控制流、业务判断与副作用,导致可读性差、易出错、难测试;推荐用提前返回、Optional(适度)、策略映射和IDE检查约束。
-
Java项目集成Swagger推荐使用SpringDocOpenAPI(Swagger3),需引入springdoc-openapi-starter-webmvc-ui依赖,配置扫描包和UI路径,通过@Tag、@Operation等注解管理接口分组与描述,启动后访问/swagger-ui即可查看文档。
-
构造方法抛出异常会导致对象创建失败,即对象从未存在过;资源需显式清理,禁止调用可重写方法,受检异常须处理,Spring中将导致Bean创建失败。
-
Runnable接口实现任务与执行分离,run()是普通方法须由Thread.start()或线程池调用才并发执行;可复用于多种执行器;lambda需满足effectivelyfinal;相比继承Thread,Runnable更灵活且符合解耦设计。
-
Java集合对null支持不统一:HashMap等宽松派允许null,TreeMap等严格派因排序或并发歧义禁止null;Stream需filter或Optional处理null;推荐用emptyList、Optional、枚举替代null。
-
Java中Queue接口适用于FIFO场景,核心价值是解耦生产消费、缓冲流量、协调异步任务;典型应用包括任务调度(如ThreadPoolExecutor的阻塞队列)、消息本地缓冲(ArrayDeque或ConcurrentLinkedQueue)、BFS遍历(推荐ArrayDeque)及请求限流(有界阻塞队列)。
-
使用Guava的Lists.partition()方法可快速将List按大小拆分,如每3个元素一组;Java8Stream可通过索引分组实现相同功能,无需额外依赖;手动循环则适合简单场景,代码直观易懂。
-
char是基本类型占2字节,Character是包装类可为null、支持泛型;必须用Character的场景包括泛型集合、反射、空值语义;需注意自动装箱拆箱陷阱、缓存范围(0–127)、禁止用==比较、避免高频装箱影响性能。
-
变量命名需准确表达意图,用小驼峰、完整词、语义化前缀(如is/has/can),禁用模糊缩写,保持上下文一致性,且命名决策应在编码之初完成。
-
retainAll()是原地过滤操作而非纯交集函数:调用A.retainAll(B)后A变为A∩B,B不变;返回boolean表示是否删除元素,不能用于判断交集存在;性能上ArrayList版为O(m×n),应将参数转HashSet优化;HashSet版接近O(m),更符合集合交集语义。