object类高频三方法是equals、hashcode、tostring;getclass不可重写因是final本地方法,wait/notify在object中因线程通信需绑定对象监视器(锁是对象级的)。

直接看核心模块,别从头翻到尾。
先抓高频三板斧:Object、String、集合底层
面试官最爱从这三块挖坑。Object类不能只背equals和hashCode,得懂getClass为什么不能重写、wait/notify为什么在Object里——因为锁是对象级的,线程通信必须绑定到具体实例。String要讲清final char[]带来的不可变性,以及它如何支撑字符串常量池、HashMap键安全、线程安全这些实际价值。HashMap必须说清JDK8的树化阈值(链表≥8且数组≥64才转红黑树),不是死记数字,而是理解背后是查找效率与空间开销的权衡。
再理清楚“看起来像但行为迥异”的点
比如==和equals的区别,不能只答“地址 vs 内容”。要带例子说明:Integer a = 127, b = 127; a == b为true,但a = 128时就false——这是Integer缓存机制(-128~127)和自动装箱共同作用的结果。又比如final修饰引用类型,强调的是“引用不可变”,不是“对象内容不可变”,List
重点盯住JVM和并发的衔接处
很多题表面问基础,实则考JVM+并发的交叉理解。例如问volatile,不能只答“可见性+禁止重排”,要立刻关联到它为什么不能保证原子性(i++不是原子操作)、为什么不适合做count++这种场景;问synchronized锁升级,得说出偏向锁如何通过Mark Word记录线程ID,轻量锁怎么用CAS替换Mark Word,重量锁怎么膨胀成Monitor对象——这些才是面试官想听的底层逻辑。
注解和枚举别当语法糖,要看设计意图
枚举不只是替代public static final。Status.SUCCESS(200,"成功")这种写法,本质是把状态码、描述、行为封装进一个类型安全的实例;Singleton.INSTANCE是天然防反射、防序列化的单例;Operation.PLUS.apply(x,y)则是策略模式的极简落地。注解同理,@Override不是装饰,是编译期校验契约;@Retention(RUNTIME)才让Spring能通过反射读取,而SOURCE级别的注解连.class里都没有。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











