-
Collections.synchronizedMap仅保证单个操作线程安全,不保证复合操作原子性;需手动加锁时必须同步原始map而非包装对象;ConcurrentHashMap是更优默认选择。
-
PriorityQueue基于堆实现,用于任务调度,非线程安全,不允许null,插入删除O(logn),需实现Comparable或Comparator定义优先级。
-
异常链是将底层异常包装为高层异常并保留原始异常作为原因,通过带cause参数的构造函数实现,如thrownewBusinessException("业务失败",e);它既提供业务语义又保留调试信息,打印堆栈时显示“Causedby”,便于排查问题。
-
非静态内部类默认持有外部类强引用,Java编译器在字节码中注入this$0字段,导致Activity等组件无法被GC回收,引发内存泄漏;Handler、匿名监听器及捕获实例方法的Lambda均属此类。
-
用BufferedImage读取图片后怎么安全获取像素值直接调用getRGB()拿到的是ARGB整数,不是R/G/B单独的0–255值,新手常误以为返回的就是灰度或红通道。必须手动拆解:高位是alpha(可能为0),接着是red、green、blue各占8位。正确做法是用位运算:(rgb>>16)&0xFF取red,(rgb>>8)&0xFF取green,rgb&0xFF取blue如果图片是索引色(TYPE_BYTE_INDEXED)
-
单等号(=)是赋值运算符,用于将右侧值存入左侧变量;双等号(==)是关系运算符,用于比较相等性并返回布尔值,二者作用、使用场景及行为(如==存在隐式类型转换)截然不同。
-
AbstractRoutingDataSource不能直接new使用,因其是抽象类,需继承并重写determineCurrentLookupKey(),配置targetDataSources和defaultTargetDataSource,并调用afterPropertiesSet(),否则启动报错或运行时NPE。
-
ReentrantReadWriteLock通过读写锁分离提升高读低写性能:读锁共享可重入,写锁独占可重入,读写互斥但读读不互斥;支持写锁降级为读锁,禁止读锁升级;适用于缓存等场景。
-
Java多环境配置核心是同一套代码读取不同配置值,关键在配置分离与激活机制;通过spring.profiles.active指定激活profile以加载对应application-{profile}.yml,支持多profile叠加,需严格遵循命名与路径规范,敏感配置应外置并用占位符注入,Bean级条件装配用@Profile注解,注意大小写一致性。
-
用isEmpty()判断集合是否为空最安全,但需先判null;CollectionUtils.isEmpty()是生产首选,它内部同时检查null和空集合。
-
Collections.addAll方法,说白了,就是Java提供的一个特别方便的工具,它能让你一次性把多个元素,或者一个数组里的所有元素,统统塞进一个集合(Collection)里。这比你写个循环一个一个加要简洁多了,尤其是在你需要快速初始化或者填充集合的时候,它简直是效率的代名词。解决方案在使用Java处理集合时,我们经常需要将一些元素快速地加入到现有的集合中。Collections.addAll方法就是为此而生的。它是一个静态方法,位于java.util.Collections工具类中,它的
-
notify随机唤醒一个等待线程,无法指定目标,易导致生产者消费者等角色错乱;仅适用于单一线程等待或角色完全等价场景,且需用while重检条件;notifyAll虽唤醒所有线程但实际开销可控,是安全兜底选择。
-
直接运行jcmd即可列出当前用户可访问的、支持诊断接口的JVM进程,比psaux|grepjava更精准;但需注意-XX:+DisableAttachMechanism、权限限制或/tmp不可写等情况会导致进程不可见。
-
根本原因是Scanner默认以空格和换行符为分隔符,遇空行或末尾换行易耗尽输入流;用next()前未校验hasNext()会抛NoSuchElementException;推荐hasNextLine()+nextLine()逐行读,注意nextInt()后需额外nextLine()清除换行符,并显式指定UTF-8编码。
-
本文详解如何使用Java的BufferedImage和HSB颜色模型,将灰度图像按指定色调(hue)进行单色着色,保留原始透明度与明暗层次,适用于图像处理、UI图标动态染色等场景。