-
Java类加载机制分加载、链接(含准备)、初始化三阶段:加载时仅载入字节码并生成Class对象,静态变量未分配内存;准备阶段为其分配内存并设默认零值;初始化阶段执行<clinit>方法,按源码顺序赋值静态变量和执行静态块。
-
GZIPOutputStream用于网络传输前动态压缩数据流,需正确包装、调用finish()、确保接收端支持解压;适合文本等高冗余数据,对JPEG等已压缩格式无效;HTTP需设Content-Encoding:gzip,Socket需双方约定协议。
-
Java静态初始化严格按源码顺序执行且仅一次;若某静态字段初始化触发其他类加载,原类未完成初始化的字段仍为默认值,易致空指针。
-
正向预查((?=...))匹配位置而非内容,要求该位置后紧接指定模式但不消耗字符;如\d+(?=px)只匹配数字部分,不包含px。
-
Map.replaceAll方法用于批量更新映射值,支持基于键和值的动态计算,示例包括分数加10、名称转小写、水果打折,相比传统循环更简洁安全,但会直接修改原Map。
-
正则表达式由字符字面量与元字符、字符类与预定义字符集、量词与重复控制、锚点与边界匹配、分组与捕获机制五大核心部分构成,共同实现文本的精准匹配与灵活操作。
-
选对网站比盲目刷视频更重要:Codecademy重交互手感,ProgrammingbyDoing倒逼实践,菜鸟教程适查漏补缺,实验楼以项目驱动闭环学习,Oracle文档和GitHub助进阶,避开环境配置和死磕书本陷阱。
-
该用?:而不是if-else时,仅限于为变量赋值且值由单一布尔条件决定;它是有返回值的表达式,而if-else是无返回值的语句,滥用会导致可读性差、编译错误或运行时异常。
-
遍历ArrayList时调用remove()抛ConcurrentModificationException,因迭代器为fail-fast机制:modCount校验失败;正确做法是用Iterator.remove()或removeIf(),而非集合自身remove()。
-
Callable和FutureTask是Java异步计算的底层组合,Callable支持返回值和受检异常,FutureTask作为Runnable和Future的桥接实现,需显式启动才能执行,否则调用get()会永久阻塞。
-
Java中方法内重新赋值数组引用不会影响调用方的原始数组变量,因为传递的是引用的副本;要实现void方法下的原地更新,必须直接修改原数组元素,而非替换引用。
-
String.matches()仅能基础校验邮箱格式,无法验证真实存在性;推荐正则为"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",需预判null、空格并trim处理。
-
答案:Maven多模块项目依赖管理核心在于父POM中使用<dependencyManagement>统一版本、合理划分模块实现高内聚低耦合、通过<exclusions>排除冲突传递依赖,并利用mvndependency:tree等工具分析依赖树,结合BOM引入、版本属性化管理等策略,确保依赖一致性与项目可维护性。
-
SynchronousQueue不是队列而是“手递手”通道,因它不存储元素,offer()和poll()总失败,仅put()与take()成对阻塞同步;size()恒为0,适用于严格配对的线程间一次性数据传递。
-
正确使用逻辑与短路运算符&&可提升性能并避免异常。当第一个操作数为false时,后续操作不会执行,因此应将空值检查等轻量判断放左侧,方法调用或复杂计算放右侧,如if(obj!=null&&obj.getValue()>0)可防止NullPointerException。与非短路运算符&不同,&&仅在必要时计算右侧,而&始终执行两边,易导致异常或性能浪费。此外,不可依赖右侧表达式的副作用(如日志输出),因其可能不被执行。合理组织条件顺序能确保代码安全高效,核心原则是:前面为假,后面不看。