-
accessOrder=true是LRU生效的前提,必须显式设置;仅重写removeEldestEntry无效,它只控制是否删除、不决定淘汰顺序;Java8+中get/put触发顺序更新,但getOrDefault等不触发;removeEldestEntry须严格用size()>capacity;该方法内不可耗时;LinkedHashMap非线程安全,需额外同步;key必须正确实现equals/hashCode且不可变。
-
Spring5.x+JDK8下XML配置虽被标记为legacy但仍可用,需锁定Spring5.3.37、仅引入spring-context/spring-beans、使用正确XSD地址,并注意构造注入优先、prototype行为及混合配置风险。
-
SpringBoot的@Value注解仅对Spring容器管理的Bean生效;若模型类未被Spring托管(如直接new创建或非@Component类),属性注入将失败,导致值为null。SpringBoot的@Value注解仅对Spring容器管理的Bean生效;若模型类未被Spring托管(如直接new创建或非@Component类),属性注入将失败,导致值为null。在SpringBoot应用中,@Value注解的正常工作依赖于Spring的
-
setFetchSize()控制JDBC驱动分批从服务器拉取结果集的行数,非数据库端限制返回量;MySQL需配useCursorFetch=true才生效,PostgreSQL默认支持游标式获取。
-
分层编译是JVM通过C1与C2协同实现启动快、运行优的关键机制,共5层:0层解释执行,1层基础C1优化,2/3层带profiling的C1,4层基于热点数据的深度C2优化,升层由调用/回边计数器触发。
-
Semaphore控制API调用易失效,因其只限制许可数量而不限制持有时间;响应慢、超时重试或I/O阻塞会导致许可长期占用,引发卡死而非限流。
-
Files.lines()抛IOException是因为其Stream懒加载,异常在终端操作时才暴露;应优先用Files.readAllLines()立即报错;注意路径、BOM、空行分割、中文乱码及BufferedReader优于Scanner。
-
AQS通过head为哑节点、head.next恒指首个有效等待节点的结构约束,结合waitStatus状态过滤(如CANCELLED跳过、PROPAGATE保障传播),实现精准唤醒,无需遍历。
-
必须在任何I/O操作前设置Header与超时:先setConnectTimeout/setReadTimeout(单位毫秒),再setRequestProperty/addRequestProperty(中文值需URLEncoder编码),最后调用getInputStream等;顺序错乱将导致配置失效或抛异常。
-
<p>Integer.MAX_VALUE是int最大值2147483647,用于预防溢出;需运算前主动检查,如加法用a>Integer.MAX_VALUE-b,乘法推荐Math.multiplyExact或转long校验。</p>
-
SpringAMQP不支持运行时动态修改@RabbitListener的queues属性,需改用SimpleMessageListenerContainer,通过stop()→setQueueNames()→start()三步实现队列切换,注意线程安全与消息可靠性。
-
并行流处理海量短期对象时对JVMGC冲击主要来自三方面:年轻代分配陡增、TLAB机制失效、GC频率与扫描压力同步抬升;本质是分配模式错配引发连锁反应,表现为Eden区快速填满、TLAB频繁重填充或浪费、Filler碎片增多及对象误晋升。
-
poll(long,TimeUnit)超时后返回null表示队列为空且等待超时,是可检测的空闲信号,而非错误;应结合时间戳计算累计空闲时长触发资源回收,而非仅依赖null次数。
-
静态类变量线程不安全,需通过synchronized锁、原子类、volatile(仅限简单赋值)、ThreadLocal或改用实例变量等方式保障线程安全。
-
<p>gitreset可安全撤销暂存:gitreset--<文件名>撤销单个文件,gitreset撤销全部,均保留工作区修改;默认--mixed模式,切勿误用--hard。</p>