-
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总会执行但可能覆盖返回值;应谨慎使用,避免滥用和空捕获。
-
应优先选用SLF4J+Logback组合,因其轻量、稳定、无反射风险且为SpringBoot默认方案;Log4j2.x已停更,旧版存在严重RCE漏洞,Log4j1.x已终止维护且功能落后。
-
Java17密封类是编译期强制的继承契约,要求显式声明permits、子类必须存在且用final/sealed/non-sealed修饰,配合switch实现穷尽性检查,提升领域建模安全性与一致性。