-
Java多线程面试重在实战经验而非背诵;wait()必须在synchronized块中调用,否则抛IllegalMonitorStateException;ConcurrentHashMapJDK8用CAS+单桶锁替代分段锁;线程池拒绝策略中CallerRunsPolicy更防雪崩;ThreadLocal内存泄漏因key弱引用而value强引用未及时清理。307 收藏 -
答案:比较对象时应使用equals而非==,因为==比较引用地址,equals比较内容。例如str1和str2内容相同但地址不同,==返回false,equals返回true;基本类型用==比较值,对象类型优先用equals判断逻辑相等。307 收藏 -
首先确认已安装JDK并配置JAVA_HOME,然后下载Maven并解压到无空格路径,接着设置MAVEN_HOME环境变量并将%MAVEN_HOME%\bin加入Path,最后在CMD中输入mvn-v验证配置是否成功。306 收藏 -
类是蓝图,对象是实例——类不依赖对象而存在,对象依赖类定义,体现编译、加载、运行期三层解耦:类仅声明结构且可独立修改,对象承载具体状态并隔离运行。306 收藏 -
多态本身不直接实现可扩展性,而是支撑开闭原则的关键机制;真正提供可扩展性的是抽象(interface/abstractclass)与具体子类的分离设计,配合工厂或依赖注入解决创建与生命周期问题。306 收藏 -
Java对象内存布局分为对象头、实例数据、对齐填充三部分;对象头含MarkWord(存哈希码、锁状态等)和类型指针(指向类元数据);实例数据按宽度重排序存储字段值;对齐填充确保对象总大小为8字节倍数。306 收藏 -
LinkedList适用于频繁首尾增删的场景,因addFirst()等操作为O(1);但随机访问get(intindex)为O(n),循环中使用易导致性能问题。306 收藏 -
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。306 收藏 -
Java数组是堆中对象,含对象头、长度字段和元素数据区;引用存栈中,基本类型数组存值,引用类型数组存地址。306 收藏 -
scheduleAtFixedRate以任务开始时间为基准对齐固定时间轴,若执行耗时超周期则立即触发下一次,导致堆积;应确保幂等或改用scheduleWithFixedDelay。306 收藏 -
javac-d参数用于按包结构组织字节码文件,指定.class输出根目录并自动创建匹配包路径的子目录;它保障JVM正确加载、分离源码与编译产物、支持类路径运行及jar打包。305 收藏 -
匿名内部类适用于一次性无状态事件处理器,如按钮点击监听;需注意局部变量必须是effectivelyfinal,避免内存泄漏和复用问题;复杂逻辑应改用命名类或Lambda。305 收藏 -
Kotlin虽无“构造函数前初始化”的语法糖,但通过属性直接赋值和init块可实现等效行为:属性在主构造函数执行后、init块前完成初始化,语义上与Java的字段初始化时机一致。305 收藏 -
HashMap底层是数组+链表+红黑树的混合结构:哈希值经扰动运算后与(长度-1)按位与得索引;冲突时用链表,满足≥8节点且数组≥64则转红黑树;null键固定存于tab[0];重写equals必须重写hashCode以保证哈希一致;非线程安全,并发下易出错。305 收藏 -
StampedLock的乐观读不压榨CPU,仅减少锁开销;真正导致CPU100%的是validate失败后错误使用忙等循环,而非tryOptimisticRead本身。305 收藏