-
本文详解Scanner.hasNextInt()的工作原理与典型误用场景,通过对比try-catch与hasNextInt()两种输入校验策略,指导开发者在需连续读取两个整数时,如何避免阻塞、跳过无效输入并确保程序健壮性。
-
自旋锁通过让线程在用户态空转避免上下文切换,节省1000+时钟周期;仅适用于临界区极短场景,JVM对synchronized默认启用自适应自旋,而ReentrantLock需手动实现。
-
FileNotFoundException不仅表示文件未找到,还涵盖路径不存在、权限不足等场景;应优先用Files.exists()和Files.isReadable()主动检测,而非依赖异常类型判断。
-
channelInactive后不能立刻重连,因底层资源未完全释放,需等待closeFuture完成或延迟后再connect;推荐用HashedWheelTimer实现指数退避重连,并确保Bootstrap配置一致、异常分类处理及心跳保活。
-
Java17+通过类型模式(如caseStrings)简化类型检查与转换,Java21新增记录模式(如caseCircle(Point(varx,vary),doubler))支持嵌套解构,提升安全性、简洁性与表达力。
-
在FileandCodeTemplates的Files标签页下修改Class等模板,使用${USER}、${DATE}、${TIME}、${PACKAGE_NAME}、${NAME}等预定义变量生成类头注释,注意区分Files与LiveTemplates,避免被插件覆盖。
-
Collections.singleton()返回只读Set,因其内部是私有静态类SingletonSet,所有修改方法均抛UnsupportedOperationException;它允许null元素,而Set.of()不允许,且JDK9+推荐优先使用Set.of()。
-
Java对象头MarkWord存储哈希码、GC年龄、锁状态等,用JOL配合HotSpot源码可解析其二进制结构:无锁为001、偏向锁101、轻量级锁000、重量级锁010、GC标记111。
-
DecimalFormat.getCurrencyInstance()必须显式传入Locale才能正确适配国家货币格式,否则依赖不可控的JVM默认区域设置;Locale决定格式惯例而非法定货币,多币种场景需结合Currency.getInstance()控制实际币种。
-
-XX:+OptimizeFill是JDK9+中用于优化基本类型数组全量初始化的诊断参数,需配合-XX:+UnlockDiagnosticVMOptions启用,仅对堆上编译期常量值的完整数组填充生效,在JDK17+稳定支持。
-
Propagation.REQUIRED嵌套调用会触发rollback-only异常,因为内层复用外层事务对象,抛异常后标记rollback-only,外层catch后仍尝试提交导致UnexpectedRollbackException;需改用REQUIRES_NEW或NESTED。
-
Java字符串是不可变的引用类型,用String类表示;定义推荐字面量(如"hello"),避免new导致堆中重复对象;所有修改操作均返回新串,频繁拼接应使用StringBuilder;比较内容须用equals而非==。
-
直接用==比较double常出错,因其二进制无法精确表示多数十进制小数(如0.1),导致微小舍入误差;Double.compare仅比较位模式是否完全相同,不支持容差,不能替代epsilon比较。
-
tcpdump抓MySQL/PostgreSQL三次握手和RST需用-ieth0-nn-S-wmysql.pcap'tcpport3306and(tcp[12]&0xf0>0x20ortcp[tcpflags]&(tcp-syn|tcp-rst))',并配合host过滤或显式捕获RST,结合时间戳与pcap中SYN超时、ACK后立即RST、空闲超时RST等模式判断是否网络抖动所致。
-
应使用URI类而非URL类解析网络地址,因URI符合RFC3986、支持归一化、相对解析及安全字段提取,而URL仅用于建立连接且解析不可靠。