-
使用Comparator配合Arrays.sort()实现逆序排序的关键是翻转比较逻辑,如b-a或b.compareTo(a),推荐用reversed()方法确保健壮性。475 收藏 -
Runnable接口实现任务与执行分离,run()是普通方法须由Thread.start()或线程池调用才并发执行;可复用于多种执行器;lambda需满足effectivelyfinal;相比继承Thread,Runnable更灵活且符合解耦设计。473 收藏 -
CMS、G1、ZGC性能演进聚焦停顿可控性、大堆适应性、碎片治理:CMS“尽量少停”但碎片致FullGC不可控;G1实现“可设上限”停顿;ZGC迈向“几乎不停”。471 收藏 -
公平锁按线程等待时间顺序分配锁,非公平锁允许插队;2.公平锁通过newReentrantLock(true)创建,保证FIFO,避免饥饿但性能较低;3.非公平锁为默认方式,直接尝试CAS获取锁,吞吐量高但可能引发线程饥饿;4.synchronized是非公平锁;5.非公平锁因高效成为默认推荐,选择取决于公平性与性能权衡。471 收藏 -
volatile失效并非语法失效,而是因误用(如循环缓存变量、误信字段可见性)或JIT将未观测的volatile读移出循环所致;排查需验证代码语义、JIT行为及运行时环境。466 收藏 -
ArrayList扩容的1.5倍通过位运算oldCapacity+(oldCapacity>>1)实现,非硬编码;首次扩容默认为10,后续才用该公式;位运算高效、无精度问题;真正开销在System.arraycopy复制数据。465 收藏 -
Map.computeIfAbsent可简化条件赋值,避免null检查,支持惰性求值以提升性能,适用于初始化、嵌套结构构建与缓存场景,需注意无副作用和线程安全问题。464 收藏 -
本文详解如何设计可序列化的自定义异常类,使其既继承业务异常语义,又携带personId、code、debugger等客户端所需的结构化字段,并避免因构造逻辑错误导致异常未被捕获的问题。462 收藏 -
JavaAgent必须在premain中调用instrumentation.addTransformer注册ClassFileTransformer才能生效,且需在MANIFEST.MF中声明Premain-Class和Can-Retransform-Classes;否则agent静默失效。462 收藏 -
Java15+使用三重双引号"""创建文本块,编译期语法糖,自动按最小公共缩进裁剪空格、保留源文件换行符,不支持嵌套和插值,需手动处理"""转义或拼接。460 收藏 -
Java反射绕过private限制需满足三条件:目标非编译期常量、类加载器未禁用反射、字段未被JVM内联优化;修改前须确认非final基本类型、模块化导出配置正确、操作对象为具体实例而非Class。459 收藏 -
PriorityQueue默认是最小堆,队首返回最小元素;需显式传Comparator.reverseOrder()才能实现最大堆;自定义对象必须实现Comparable或提供Comparator,否则抛ClassCastException。459 收藏 -
可使用Collections.shuffle()打乱List集合元素顺序,如ArrayList、LinkedList;2.可传入Random实例实现可重现的随机结果;3.仅适用于支持随机访问的List,原集合会被修改;4.非List集合需先转为List再打乱。458 收藏 -
Math.round四舍五入(0.5向正无穷取),Math.ceil无条件向上取整,Math.floor无条件向下取整;三者对正负数处理逻辑不同,需依需求选择。456 收藏 -
应警觉并避免if-else嵌套超过2层,因其混杂控制流、业务判断与副作用,导致可读性差、易出错、难测试;推荐用提前返回、Optional(适度)、策略映射和IDE检查约束。455 收藏