-
编译期常量是在编译阶段就能确定值并嵌入字节码的final基本类型或String变量,需满足声明即初始化、类型合法、表达式为常量表达式四条件,影响赋值、switch、字符串优化等行为。
-
父类构造方法中调用被子类重写的方法是危险但默认发生的多态行为;应避免在构造过程中依赖可被重写的行为,最稳妥方式是将方法设为final/sealed或推迟多态逻辑至构造完成后的显式初始化方法。
-
本文介绍一种基于进程间持久化通信的方案:让Python脚本长期运行并复用已加载的模块(如TensorFlow、spaCy),Java通过标准输入/输出与其持续交互,从而规避每次调用都重新导入重型库带来的性能损耗。
-
构造器链是Java中通过this()或super()实现的构造器调用链条。当创建对象时,若构造器中使用this()调用本类其他构造器,或super()调用父类构造器,便会形成自下而上的初始化链,确保各层级正确初始化。this()用于本类构造器间重用,减少重复代码;super()确保父类先被初始化,若未显式调用且父类无无参构造器则会编译失败。执行顺序为:子类构造器→super()→父类构造器→...→Object,再逐级返回。每个构造器最多调用一次this()或super(),且必须位于首行。理解构造器链有
-
Optional不能替代null检查,只是封装判空逻辑;它不阻止传入null,仅强制显式处理空值;正确用法是ofNullable()构造、避免get()前不校验、链式map/flatMap扁平化操作,且仅适用于方法返回值。
-
Stream.filter是中间操作,用于筛选满足条件的元素。它接收Predicate参数,通过Lambda表达式实现条件判断,如筛选偶数、字符串长度或对象属性,并支持and、or、negate组合条件,返回新流不修改原数据,常用于链式调用。
-
本文介绍如何在JOOQ中通过Row2.mapping()对关联查询的子字段(如外键关联的父表字段)进行类型安全、简洁的嵌套对象映射,避免手动构造Record或冗余转换逻辑。
-
String.format无法直接实现数字补零兼容负数和小数截断,需手动处理:负数补零用符号+绝对值格式化,截断小数需先Math.floor(x*100)/100.0;日期格式化应优先用DateTimeFormatter;需显式指定Locale防乱码;性能敏感场景建议用StringBuilder或SLF4J占位符。
-
面向对象的new与面向过程的main本质不同:Java强制以类为单位组织代码,所有行为必须依附于类型或对象,而C等语言中main是独立入口,函数自由定义调用。
-
ArrayList<Product>比数组更灵活,能自动伸缩并配合泛型约束类型;Product需重写equals()和hashCode()、添加唯一id字段;高频查询应补HashMap索引;增删改操作须封装校验逻辑、考虑线程安全;JSON序列化LocalDateTime需注册JavaTimeModule;持久化推荐Jackson写JSON而非手写CSV或二进制;数据量大时应升级为嵌入式数据库。
-
Comparable负责类的自然排序,Comparator用于外部定义的多种排序;必须实现Comparable当类有唯一稳定大小关系;Comparator解决“一物多序”;二者不优先级,使用场景不同。
-
适配器模式通过封装不兼容接口实现类间的协同工作,如Java中集成旧系统时创建适配器转换printString()为print();它提升代码复用与解耦,使客户端依赖统一接口,简化第三方库复杂调用,例如将多次初始化封装为simplePay()方法,核心在于接口转化与隔离。
-
能,Java5起支持协变返回类型,要求父类方法返回引用类型,子类返回其子类型;C++仅允许指针或引用的公有派生类协变;TS方法重写要求子类返回类型可赋值给父类;Python无运行时检查,需mypy配合泛型协变声明。
-
异常链是指将捕获的异常作为新异常的cause参数传递,从而保留原始异常信息。Java通过Throwable类的构造函数支持该机制,如newRuntimeException("msg",e)。使用getCause()可获取原始异常,printStackTrace()会自动输出整个链。构建时应选择合适异常类型,确保消息清晰,并使用标准构造函数传入cause。例如在服务层封装SQLException为自定义UserServiceException时,传入原异常便于上层排查。调试时可遍历cause链打印各级异常信
-
Netty不是NIO的简单封装,而是生产级重写:它将Reactor线程模型、内存池、零拷贝缓冲区、Pipeline机制等全部组件化、可配置,解决了JDKNIO的空轮询、手动索引管理、线程争抢等核心痛点。