-
exclusiveOwnerThread仅作用于单JVM内,无法跨节点传递或被Redis/ZooKeeper感知,故不能用于分布式锁所有权校验;真正有效的标识是全局唯一的clientID,需在加锁时写入、释放时通过Lua脚本严格比对。
-
CASEWHEN需规范书写:必须以END结尾、THEN返回值类型统一、ELSE不可省略;分简单型(值匹配)与搜索型(条件表达式);可嵌套及用于聚合统计;避免WHERE中滥用,GROUPBY/ORDERBY须用完整表达式。
-
BufferedStream不提升单次IO效率,仅减少系统调用次数;小数据量时因额外开销反而更慢,大块顺序读写且缓冲区合理(如64KB)才有收益,必须Flush/Dispose确保落盘,多数场景应优先选用StreamReader等高层封装。
-
可变参数方法使用...声明,支持直接传多个参数或数组,调用更灵活;数组参数需显式传数组。1.可变参数语法为String...args,数组参数为String[]args。2.可变参数可直接调用method("a","b"),数组参数需newString[]{"a","b"}。3.可变参数兼容数组传参,反之不行。4.重载时优先匹配固定参数方法,再匹配可变参数。5.可变参数是简化数组传参的语法糖,提升接口易用性。
-
SubmissionPublisher默认构造不满足生产级背压需求,因其使用共享无界ForkJoinPool、默认缓冲区为MAX_INT(等效无界),导致延迟不可控、背压信号失效、GC压力大及OOM风险。
-
JDBC连接MySQL最简可用配置需三步:加mysql-connector-j8.0.33+驱动、写含serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true的URL、调用DriverManager.getConnection();生产必须用HikariCP等连接池,PreparedStatement防注入关键在参数绑定而非仅用语法,资源关闭须用try-with-resources确保。
-
必须转型为HttpURLConnection才能发HTTP请求,因其是抽象类,不提供setRequestMethod等HTTP特有方法;需设超时、显式指定UTF-8编码、关闭自动重定向并手动处理状态码与重定向。
-
声明变量不等于分配内存或初始化:局部变量在栈帧创建时分配slot但需显式赋值才可用;实例变量在new时堆中分配并默认初始化,构造器中合并执行显式初始化;静态变量在类加载准备阶段分配内存、初始化阶段赋值。
-
PooledByteBufAllocator通过三级缓存(线程局部PoolThreadCache、PoolArena共享队列、PoolChunk分页)显著降低高并发下内存分配开销,但必须显式调用release()才能真正复用,否则仍会内存泄漏。
-
必须显式传RoundingMode,否则抛ArithmeticException;金融对账统一用HALF_UP、禁用负数scale和HALF_EVEN;除法需指定scale与mode;金额比较必须用compareTo()而非equals()。
-
Collectors.summarizingInt用于汇总整数字段,返回包含计数、总和、最小值、最大值和平均值的IntSummaryStatistics对象;通过User::getAge提取年龄并统计,可调用getCount()、getSum()、getMin()、getMax()和getAverage()获取具体值。
-
DelayQueue是Java并发包中基于最小堆的无界阻塞队列,元素须实现Delayed接口(重写getDelay()返回纳秒级剩余延迟、compareTo()按到期时间升序排序),通过take()阻塞获取到期任务,常用于订单超时取消等延迟触发场景。
-
Objects.toString()能安全将可能为null的对象转为字符串并支持默认值,避免空指针异常;用法为Objects.toString(obj,"默认值"),适用于日志、调试等只读展示场景。
-
Stream.peek()不改变流元素,仅用于轻量监控(如日志、计时),需终端操作触发;阶段耗时需前后peek配合原子变量记录,推荐封装TimingPeek工具类实现可复用计时,并注意并行流乱序、线程安全及生产环境日志采样。
-
JavaScript中不存在try_catch_finally语法,正确写法是独立的try{}catch(e){}finally{}结构;catch需手动判断异常类型;finally总会执行但可能覆盖返回值;应谨慎使用,避免滥用和空捕获。