-
强引用阻止GC回收,弱引用在GC时立即回收,软引用在内存不足时回收,虚引用不阻止回收仅用于跟踪回收时机。
-
LinkedBlockingQueue是Java中基于链表的阻塞队列,支持有界和无界模式,常用put/take实现生产者-消费者模型,适用于线程池任务队列及多线程解耦通信。
-
可见性是指线程修改共享变量后其他线程能否立即看到该修改;因JMM中线程工作内存与主内存分离,且存在缓存、优化和重排序,导致修改未及时同步,从而引发可见性问题。
-
retainAll本质是原地保留交集,直接修改调用方集合;需浅拷贝保原集合、确保equals/hashCode正确实现;参数为null抛NPE;性能优化关键在于将参数转HashSet以使contains达O(1)。
-
Future.get()默认阻塞,需用超时重载或isDone()判断;抛出InterruptedException、ExecutionException、TimeoutException须分别处理;禁在UI/Servlet主线程调用;cancel()不保证资源清理,任务需自行响应中断。
-
SpringBoot应用部署后大文件(>100MB)上传返回503错误,请求甚至未到达控制器——根本原因常是multipart功能未显式启用,而非仅配置大小限制。
-
逻辑运算符用于布尔操作,包括逻辑与(&&)、或(||)、非(!)。&&要求两边均为true结果才为true,具有短路特性,左侧为false时右侧不执行;||只要一边为true结果即为true,左侧为true时短路;!用于取反,优先级最高。注意区分&与&&,避免副作用操作,混合使用时加括号确保优先级正确。
-
不可变类通过final修饰类和字段确保状态不可变,如Person类;需对可变对象进行防御性拷贝,如ImmutableDate中复制Date对象;不提供setter或修改方法,仅保留getter;构造函数避免this引用泄露,保证初始化安全。String和Integer是典型示例。
-
Collections.copy()方法将源列表元素复制到目标列表,要求目标列表长度不小于源列表。示例中使用Arrays.asList初始化目标列表大小,避免IndexOutOfBoundsException。关键点:目标列表必须预先具备足够容量,否则抛异常;元素被覆盖但长度不变。常见错误是目标列表为空或过短,需通过初始化占位符修正。适用于ArrayList等List实现,不适合Set、Map。性能好但依赖目标列表就绪,适合固定结构列表的批量更新。
-
封装通过类将数据和方法绑定,隐藏内部细节,提升安全性与可维护性;2.继承使子类复用父类属性和方法,建立层次关系;3.多态通过方法重写实现不同行为,增强扩展性;4.抽象通过抽象类和接口定义核心功能,分离“做什么”与“怎么做”。理解四者有助于以对象视角设计清晰、易维护的代码。
-
永久设置JDK环境变量需将JAVA_HOME、PATH(含$JAVA_HOME/bin)写入Shell配置文件并确保加载;推荐用户级修改~/.bashrc或~/.zshrc,或系统级新建/etc/profile.d/java.sh,最后验证java-version和$JAVA_HOME。
-
EnumMap比HashMap更快,因其用数组代替哈希表,索引由枚举ordinal值直接决定,免去哈希计算、key比较及冲突处理,空间紧凑且遍历顺序固定。
-
本文介绍一种基于Java8+Matcher.replaceAll(Function)的健壮方案,用单次正则匹配高效替换形如$1、$11、${12}的位置参数占位符,避免手动遍历与顺序依赖问题,并兼顾边界安全性与可读性。
-
Java多线程共享数据无标准解,需依读写关系与一致性要求选volatile(仅单写多读简单状态)、AtomicXXX(无锁原子操作)、synchronized/ReentrantLock(复杂临界区)或避免共享(ThreadLocal、不可变对象)。
-
使用SpringWebClient下载二进制文件时出现0字节空文件,通常源于DataBufferUtils.write()的异步执行未被正确等待、资源未及时释放或响应体处理不当;本文提供可落地的修复代码、关键注意事项及健壮性增强方案。