-
CopyOnWriteArrayList适合读多写少场景,读操作无锁、线程安全、迭代器不抛ConcurrentModificationException;写操作复制整个数组、开销大、内存翻倍、ReentrantLock串行化。
-
JWT密钥必须是Base64解码后≥32字节的合法密钥,验证时须显式指定签名算法并阻断失败请求流,且jjwt-api与jjwt-impl版本必须严格一致。
-
新项目应选JDK17或JDK21,二者均为LTS版本,分别支持至2029年9月和2031年9月,全面适配主流框架并提供ZGC、虚拟线程等现代特性;避免使用非LTS的JDK22/23/24,因其仅获6个月安全更新,维护成本高。
-
Pattern.compile()是唯一合法创建Pattern实例的方法,因Pattern无public构造器;必须先编译再匹配,否则matcher()调用无效。
-
字符串比较必须用equals()而非==,因==仅比较内存地址,equals()才逐字符比对内容;需防范null异常,推荐字面量.equals(变量)或Objects.equals()。
-
ConcurrentHashMap是Java中线程安全映射的首选,采用分段锁或CAS提升并发性能,相比Hashtable和synchronizedMap更高效;其常用操作如put、get等均为线程安全,支持putIfAbsent、remove、replace及compute、merge等原子复合操作,可避免竞态条件;迭代器具有弱一致性,不抛出ConcurrentModificationException,允许遍历时其他线程修改;推荐使用forEach或entrySet遍历;性能优化建议包括合理设置初始容量
-
break用于立即终止当前循环或switch语句,跳转至其后首条可执行语句;在循环中配合if提前退出,在switch中防止case穿透;仅限循环或switch内使用,嵌套时可用带标签break跳出指定层。
-
volatile不能保证复合操作原子性,因其仅保证单次读写可见性与禁止变量自身重排序,无法使i++等读-改-写三步变为不可分割动作,故不适用于计数器、多变量协同等场景。
-
答案:通过校验索引范围、使用增强for循环、异常捕获和空数组检查可有效避免数组下标越界异常。具体包括:1.访问前检查0≤index<array.length;2.遍历时优先使用for-each循环;3.用try-catch处理不可预知索引;4.初始化前检查数组非空,提升代码健壮性。
-
Math.random()生成[0,1)的double,获取1~6随机整数应写为(int)(Math.random()*6)+1;Math.abs(Integer.MIN_VALUE)仍返回负值,可用Math.absExact()避免;2的n次方优先用1L<<n而非Math.pow(2,n)。
-
CopyOnWriteArrayList适用于读多写少、遍历频繁且需避免ConcurrentModificationException的场景,其读操作无锁高效,写操作通过复制数组实现线程安全,但存在内存开销大、弱一致性及写性能低等局限。
-
Javadoc是Java标准文档生成工具,需用/**...*/包裹注释并合理使用@param、@return、@throws等标签生成HTMLAPI文档;普通注释不被识别,标签须规范使用以确保文档准确完整。
-
final成员变量必须在构造完成前初始化且仅赋值一次;支持声明时赋值(简洁线程安全)、构造器内赋值(最常用,支持校验)、实例初始化块(少用,封装公共逻辑)及staticfinal类常量(声明或静态块初始化)。
-
super调用父类构造方法必须是构造方法的第一条语句,否则编译报错;super()可自动插入,但父类无无参构造时须显式调用super(…);super与this()互斥且均须首行;super.method()仅绕过子类重写调用直接父类实例方法,不支持多层跳转或private/静态方法。
-
Java命令找不到的主因是JDKbin目录未加入PATH或PowerShell别名冲突;需先用Get-Command验证、检查PATH路径、删除java别名,并重启PowerShell生效。