-
字符串比较必须用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生效。
-
不能把Deque当成普通List用,因为其设计目标是双端操作而非随机访问,get(intindex)不保证O(1),如LinkedList的get()为O(n),ArrayList实现Deque时首尾操作性能极差。
-
Java热加载依赖JVM的HotSwap能力及IDE调用JDWP和Instrumentation.redefineClasses实现,但仅支持方法体修改;字段、方法签名或类结构变更需重启或借助SpringBootDevTools。
-
JVM是运行Java程序的核心,提供跨平台能力,由类加载器、运行时数据区、执行引擎组成;内存分为堆、方法区、虚拟机栈、本地方法栈和程序计数器;堆用于存储对象,是GC主要区域,分新生代和老年代;方法区存储类信息、常量等,JDK8后元空间替代永久代;虚拟机栈管理方法调用,本地方法栈服务native方法,程序计数器记录指令地址;垃圾回收基于可达性分析,判断对象存活,通过Serial、Parallel、CMS、G1等收集器回收堆和方法区内存;合理配置-Xms、-Xmx等参数可优化性能;常见问题有内存泄漏、频繁GC
-
mapUnderscoreToCamelCase只对自动映射生效,即未定义resultMap、未用@Column/@TableField显式绑定、未在@Select中指定resultMap时才起作用;SpringBoot需在application.yml中配置mybatis.configuration.map-underscore-to-camel-case:true,且resultMap须设autoMapping="true"才能兼顾手动与自动映射。