-
ReadWriteLock通过分离读写锁提升并发性能,允许多个读线程同时访问,写线程独占访问。ReentrantReadWriteLock是其核心实现,读锁共享、写锁排他,读不能升级为写,需在finally中释放锁,避免死锁与写饥饿。
-
finally块确保资源释放,无论异常是否发生;典型用于关闭流、连接等,需注意避免return和异常干扰,推荐优先使用try-with-resources自动管理资源。
-
Files.copy()是Java7+复制文件最可靠方式,支持多种源/目标类型,默认不覆盖需显式指定REPLACE_EXISTING;目录递归需配合Files.walkFileTree()和自定义SimpleFileVisitor。
-
Java方法重载不考虑返回类型,仅依据方法名和参数列表(个数、类型、顺序)判断;voidfoo()与intfoo()在同个类中非法共存,编译直接报错。
-
本文介绍一种高效、简洁的Java列表排序技巧:先按主字段(如预订数)全局降序排列,再将子列表中评论数最多的元素精准插入至索引2的固定位置,避免分片重组开销。
-
String.charAt()和String.indexOf()别混用场景查单个字符位置用indexOf(),取指定下标字符用charAt()。前者返回-1表示没找到,后者越界直接抛StringIndexOutOfBoundsException。用charAt(0)取首字符前,先确认str.length()>0,空字符串会崩indexOf("a")找不到返回-1,别拿来当布尔判断(比如if(str.indexOf("x"))),要写成!=-1区分indexOf(ch
-
首先编译Java源文件生成class文件,再通过java命令运行;若含包结构需按目录存放并使用完整类名执行;可传递参数给main方法,并用-cp指定类路径加载外部依赖。
-
成员内部类适用于需访问外部类private成员且不暴露给其他类的场景,如封装私有状态管理器;若不依赖外部类则应提为独立类,避免内存泄漏、序列化风险及线程安全问题。
-
反射调用Method.invoke()比直接调用慢10–100倍,主因是JVM无法内联、运行时类型检查、每次权限校验及参数数组包装;setAccessible(true)可提速20–40%但破坏封装且受模块系统限制;缓存Method/Field对象最有效;替代方案包括接口工厂、MethodHandle、VarHandle和字节码生成。
-
Vector是线程安全的动态数组,通过synchronized修饰方法实现同步,确保多线程下数据一致,但性能较低,现代开发推荐使用CopyOnWriteArrayList或Collections.synchronizedList替代。
-
常量折叠是Java编译器在编译期将final基本类型或String字面量组成的表达式直接计算并替换为结果字面量,.class文件中无原始运算痕迹。
-
在Maven项目中添加Flyway依赖,纯Java项目需显式引入flyway-core,SpringBoot项目应优先使用spring-boot-starter-flyway;注意版本兼容性、配置项前缀(flyway.*)、SQL脚本命名规范及migrate调用时机。
-
top-H可定位高CPU的OS线程PID,需转为十六进制后用jstack匹配nid;若未匹配则线程可能已退出或为GC线程,应结合jstat-gc分析;jstack仅拍快照易遗漏瞬时问题,推荐pidstat或async-profiler;注意safepoint影响及native层问题需perf/strace辅助。
-
Java用PriorityQueue实现多路归并需:每个文件仅维护一个ChunkReader缓存当前待比较数据,队列中存最小值对应记录;poll后立即从同文件读下一条,读尽则不再入队;避免Integer包装,优选int数组或ByteBuffer;分块大小依堆内存与单条记录体积动态计算,禁用硬编码;配大缓冲区BufferedReader/BufferedInputStream;临时文件用createTempFile+deleteOnExit;控制归并路数防fd泄漏;关键在内存、IO、GC协同对齐。
-
Java中触发NullPointerException的高危操作包括调用方法、访问字段、数组长度、同步块、自动拆箱;常见场景有null字符串调length、集合调size、Integer拆箱、equals左操作数为null、Spring未注入@Autowired字段。