-
do-while循环强制执行至少一次,因是后置判断;while是前置判断,条件为假时一次也不执行。常见错误:误用while导致初始化被跳过,或未更新变量引发死循环。
-
线程上下文切换会触发内核态切换,因Java线程映射到OS线程,JVM让出CPU需系统调用(如sys_sched_yield),涉及寄存器保存、TLB刷新等硬件开销,典型耗时1–5μs。
-
for-each循环用于简化数组和集合的遍历,语法为for(元素类型变量:数组),自动赋值无需索引;可遍历一维、二维数组,优点是简洁安全,缺点是无法获取索引、不能修改基本类型元素值。
-
不可变类通过final修饰类和字段确保状态不可变,如Person类;需对可变对象进行防御性拷贝,如ImmutableDate中复制Date对象;不提供setter或修改方法,仅保留getter;构造函数避免this引用泄露,保证初始化安全。String和Integer是典型示例。
-
应根据需求选择:只需从某位置截取到末尾用substring(intbeginIndex),需指定起止范围则用substring(intbeginIndex,intendIndex),注意endIndex是不包含的结束索引,非长度,且须满足0≤beginIndex≤endIndex≤str.length。
-
Java21是最值得升级的LTS版本,尤其适用于I/O密集型服务、云原生微服务及长期维护项目;升级可解决线程资源瓶颈、GC停顿和并发代码可维护性差三大痛点。
-
System类是JVM与底层资源的桥接入口,非操作系统控制工具;安全调用System.exit()仅限主程序主动退出,应避免在库或Web中使用,优先用return或异常;System.in/out/err可替换但有全局和线程安全风险;currentTimeMillis()用于时间戳,nanoTime()专用于耗时测量。
-
Java项目中文乱码的根本原因是编码配置不统一,需确保源文件、编译器、JVM、IDE、终端五者编码均为UTF-8:1.IDEA中设置Global/Project/Properties编码为UTF-8并勾选转义;2.Maven配置maven-compiler-plugin的encoding为UTF-8;3.JVM启动时加-Dfile.encoding=UTF-8;4.终端需设为UTF-8(如Windows执行chcp65001)。
-
该选PrintWriter还是PrintStream取决于数据类型和场景:纯文本/日志用PrintWriter(支持指定编码、自动flush、异常不中断线程);二进制混合内容或兼容System.out时用PrintStream(需显式指定编码,注意平台默认编码陷阱),二者均非线程安全,多线程需加锁或改用专业日志框架。
-
Java键盘输入最推荐使用Scanner类,需导入java.util.Scanner并关联System.in;注意nextInt()后需调用nextLine()清除换行符,或统一用nextLine()配合parseXXX转换,以避免输入跳过问题。
-
final修饰基本类型变量时值不可变,修饰引用类型时仅引用地址不可变;final方法不能被重写但可重载;final类不可继承,但内部字段未必不可变;final字段具有初始化可见性保障,但需正确发布对象。
-
Java多态通过虚方法表(vtable)实现动态分派,非static、非private、非final的实例方法在运行期根据对象实际类型查vtable调用对应版本,final/static/private方法因编译期绑定而无法多态。
-
本文介绍如何基于Bootstrap构建支持多选的下拉菜单,通过在dropdown-menu中嵌入checkbox元素,并配合jQuery阻止事件冒泡,确保点击复选框时下拉菜单不意外关闭。
-
TransferQueue是强制“手递手”交付的队列,适用于RPC绑定、任务委派等需零缓冲低延迟场景;非必需时勿替代BlockingQueue,否则易致阻塞和吞吐暴跌。
-
死锁典型场景包括多线程交叉获取锁、嵌套同步块、数据库连接池与业务锁混用、回调中反向加锁;可用tryLock()按序加锁+超时释放规避;ThreadMXBean可运行时检测;优先采用ConcurrentHashMap、LongAdder、CAS等无锁方案。