-
开闭原则的核心是“对扩展开放、对修改关闭”,即通过接口/抽象类隔离变化点,新增功能只需添加实现类或子类,不修改原有稳定代码;常用策略模式、模板方法、依赖注入等实现。
-
本文介绍如何在SpringJPA中实现灵活、可扩展的动态条件分页查询,避免传统if-else组合爆炸问题,通过JPQL参数占位符或CriteriaAPI实现“仅对非空字段生效”的过滤逻辑。
-
Java集合框架核心思想是接口与实现分离:先定义功能契约(如Queue的add、remove、size),再由不同类(ArrayDeque、LinkedList等)灵活实现,支持无缝替换、协作开发和按需优化。
-
无符号右移(>>>)将整数二进制位序列整体右移,高位恒补0,不考虑符号位,使负数转为非负大整数;需基于补码理解,注意类型提升、移位量取模及不可用于取绝对值。
-
File的length()和lastModified()可获取文件大小(字节)和最后修改时间戳(毫秒),但需先用exists()和isFile()校验有效性;推荐使用Files.size()和Files.readAttributes()替代以获得异常提示和更多属性。
-
HashSet通过hashCode和equals方法实现去重,添加元素时先比较哈希值再判断相等性,自定义类需重写这两个方法;String等内置类型已默认实现,可直接去重;注意HashSet无序、允许一个null、非线程安全,大量数据去重性能优越。
-
main方法必须用static修饰,因为JVM启动时尚未创建任何对象,需直接通过类名调用入口方法;static方法属类级别,随类加载即就绪,无需实例、this或参数,符合“类加载→静态初始化→执行main”的固定启动流程。
-
默认Propagation.REQUIRED导致嵌套方法共享事务,内层异常会标记整个事务rollbackOnly,外层catch无法阻止回滚;REQUIRES_NEW可隔离事务,NESTED仅依赖数据库savepoint且不可靠。
-
Scanner可通过useDelimiter()方法用正则表达式自定义分隔符,需注意双重转义、空token处理及nextXXX()的类型校验;推荐先用next()获取字符串再手动解析。
-
Java多态数组用父类或接口类型声明,可存储不同子类对象,运行时自动调用对应子类重写方法;支持统一管理、灵活扩展,但不可直接调用子类特有方法,需instanceof判断后转型。
-
偏向锁在高竞争系统中不是优化而是性能放大器,因其撤销需暂停线程、检查栈帧、更新MarkWord并可能升级锁,每次均为微型STW,多对象高频撤销会显著拖慢吞吐、加剧卡顿。
-
Java中使用NIO的核心目的是提升I/O性能,尤其适用于高并发和大数据处理。1.Buffer是存储数据的基本容器,用于读写Channel中的数据,其关键属性包括capacity、position、limit和mark;2.Channel用于替代传统流,支持双向读写,并与Buffer配合工作,常见实现有FileChannel、SocketChannel等;3.Buffer与Channel的协作流程为:先从Channel读取数据到Buffer,调用flip()切换读模式,再从Buffer读取数据或将数据写回
-
Java线程优先级在Linux/macOS上基本无效,因JVM仅映射到SCHED_OTHER的nice值且普通用户无法提升权重;Windows稍好但也不可靠,真正影响调度的是线程行为而非priority字段。
-
静态变量属于类而非对象,使用static修饰,类加载时分配内存,存储在方法区,所有实例共享同一副本。
-
在Java应用中将从CyberArk等密码管理器获取的明文密码暂存于内存(如char[]或String)存在固有风险:一旦攻击者获得内存转储权限,敏感凭据即可被提取;合理使用可擦除的char[]并配合严格访问控制,是当前工程实践中兼顾可用性与安全性的折中方案。