-
静态代码块在类加载时执行且仅一次,构造块在new对象时、super()后执行;继承中父类静态块先于子类执行,构造块按父→子顺序插入各构造方法开头。
-
accessOrder必须显式设为true才启用访问顺序,使get()或put()已存在key时将对应Entry移至链表尾部;默认false按插入顺序维护,LRU失效。
-
ArrayBlockingQueue是线程安全的有界阻塞队列,基于数组实现,使用ReentrantLock保证同步,创建时需指定容量且不可变,支持公平与非公平策略;提供add、offer、put等入队方法,其中put在队列满时阻塞,适合生产者;提供poll、take、peek等出队方法,其中take在队列空时阻塞,适合消费者;常用于生产者-消费者模型,如任务调度与线程池,需注意合理设置容量与处理中断异常。
-
不能只用instanceof判断类型,因其破坏equals对称性;应使用getClass()确保同一具体类;ID为null时须用Objects.equals安全比较;忽略其他字段需严格依据业务契约;equals与hashCode必须一致且仅基于id。
-
公平锁按线程等待时间顺序分配锁,非公平锁允许插队;2.公平锁通过newReentrantLock(true)创建,保证FIFO,避免饥饿但性能较低;3.非公平锁为默认方式,直接尝试CAS获取锁,吞吐量高但可能引发线程饥饿;4.synchronized是非公平锁;5.非公平锁因高效成为默认推荐,选择取决于公平性与性能权衡。
-
CMS、G1、ZGC性能演进聚焦停顿可控性、大堆适应性、碎片治理:CMS“尽量少停”但碎片致FullGC不可控;G1实现“可设上限”停顿;ZGC迈向“几乎不停”。
-
peek是Stream的中间操作,用于调试时查看中间元素而不改变数据流。与map不同,peek不转换元素;与forEach不同,forEach是终止操作。常见误区是忽略Stream惰性求值,缺少终止操作时peek不会执行。使用peek可打印每步流转的元素,如过滤、映射前后的值,帮助定位问题。处理对象时可通过自定义输出关键字段提升可读性。注意事项:仅用于调试,避免修改状态,确保有终止操作,不依赖并行流中顺序。推荐结合日志框架使用,合理利用peek能显著提升Stream链式调用的可观察性与调试效率。
-
安全捕获异常关键变量需在异常发生现场提取:优先用自定义异常构造参数传入业务ID;避免反射、toString()等高危操作;集合只记size和前3元素;时间转ISO格式;MDC存简单类型上下文并及时清理。
-
Math.random()生成[0,1)的double,获取1~6随机整数应写为(int)(Math.random()*6)+1;Math.abs(Integer.MIN_VALUE)仍返回负值,可用Math.absExact()避免;2的n次方优先用1L<<n而非Math.pow(2,n)。
-
SQLException是checkedexception,因数据库操作天然不可靠,JDBC规范强制处理以避免静默失败;它不自动触发回滚,需显式调用rollback()或配置Spring的rollbackFor。
-
本文详解如何在Java中正确读取整数文件、自动过滤重复值与非法输入,并将唯一非负整数安全填入预分配数组,重点修复因变量作用域导致的重复判定失效问题。
-
CountDownLatch是Java中用于线程同步的工具,通过计数器实现一个或多个线程等待其他线程完成任务后再执行。初始化时设定计数值,每个任务完成后调用countDown()使计数减一,等待线程调用await()阻塞直至计数归零。适用于并行任务协调、服务启动依赖、数据加载聚合等场景。与CyclicBarrier不同,CountDownLatch为一次性使用,不可重置,适合“等待所有任务完成”的模型。使用时需注意将countDown()放入finally块防止遗漏,避免因异常导致计数不归零;建议使用带超
-
Java没有Character.isChinese方法,应使用Character.UnicodeBlock.of()判断CJK相关区块,覆盖扩展A/B区及兼容汉字,避免仅用0x4E00–0x9FFF范围。
-
accessOrder必须显式设为true才启用访问顺序,使get()或put()已存在key时将对应Entry移至链表尾部;默认false按插入顺序维护,LRU失效。
-
ForkJoinPool专用于可递归拆分的CPU密集型任务,如归并排序、树遍历、并行reduce;不适用于I/O多、不可分或耗时差异大的场景。