Java面试高频知识点总结
📚 Java基础
1. 面向对象三大特性
public class Person { private String name; public String getName ( ) { return name; }
}
class Student extends Person { }
Animal animal = new Dog ( ) ;
2. == 和 equals() 的区别
==
:比较基本类型值或对象内存地址equals()
:通常需要重写,用于比较对象内容
String s1 = new String ( "hello" ) ;
String s2 = new String ( "hello" ) ; s1 == s2;
s1. equals ( s2) ;
3. String、StringBuffer、StringBuilder特性 String StringBuffer StringBuilder 可变性 不可变 可变 可变 线程安全 安全 安全(synchronized) 不安全 性能 低(频繁操作) 中等 高 使用场景 少量字符串操作 多线程环境 单线程环境
📦 Java集合框架
1. HashMap原理(JDK8+)
static final int TREEIFY_THRESHOLD = 8 ;
static final int UNTREEIFY_THRESHOLD = 6 ;
1. 计算key的hash值
2. 如果table为空则初始化
3. 如果桶为空,直接插入
4. 如果桶不为空:- 键相同则更新值- 如果是树节点,树插入- 否则遍历链表插入
5. 链表长度> 8 时转为红黑树
2. ConcurrentHashMap线程安全实现
JDK7 :分段锁(Segment)JDK8+ :
Node + CAS + synchronized 只锁定当前桶(链表头/树根) 并发控制更细粒度
3. ArrayList vs LinkedList操作 ArrayList LinkedList 随机访问 O(1) O(n) 头部插入 O(n) O(1) 内存占用 较小(连续内存) 较大(节点开销) 适用场景 读多写少 写多读少
🔁 多线程与并发
1. 线程状态转换
NEW
RUNNABLE:
start()
RUNNABLE
BLOCKED:
等待锁
BLOCKED
获得锁
WAITING:
wait()/join()
WAITING
notify()/notifyAll()
TIMED_WAITING:
sleep(n)
TIMED_WAITING
时间到
TERMINATED:
run()结束
2. synchronized vs ReentrantLock特性 synchronized ReentrantLock 实现机制 JVM层面 API层面 锁获取方式 自动获取释放 需要手动lock/unlock 公平性 非公平 可公平/非公平(构造函数指定) 条件变量 单一wait/notify 支持多个Condition 锁中断 不支持 支持lockInterruptibly()
3. 线程池核心参数
ThreadPoolExecutor ( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue < Runnable > workQueue, RejectedExecutionHandler handler
)
四种拒绝策略:
AbortPolicy
:默认策略,直接抛异常CallerRunsPolicy
:用调用者线程执行任务DiscardPolicy
:静默丢弃任务DiscardOldestPolicy
:丢弃队列最老任务
⚙️ JVM与性能调优
1. 内存区域划分
JVM内存区域
“方法区”
“堆”
“虚拟机栈”
“本地方法栈”
“程序计数器”
2. 垃圾回收算法
标记-清除 :产生内存碎片复制算法 :适合新生代(Eden/Survivor)标记-整理 :适合老年代分代收集 :新生代(Minor GC) + 老年代(Full GC)
3. 常见GC收集器收集器 区域 算法 特点 Serial 新生代 复制 单线程,简单高效 ParNew 新生代 复制 Serial的多线程版本 Parallel Scavenge 新生代 复制 吞吐量优先 CMS 老年代 标记-清除 低停顿,并发收集 G1 全堆 分Region+标记-整理 可预测停顿,JDK9默认
🧩 设计模式
1. 单例模式(双重校验锁)
public class Singleton { private volatile static Singleton instance; private Singleton ( ) { } public static Singleton getInstance ( ) { if ( instance == null ) { synchronized ( Singleton . class ) { if ( instance == null ) { instance = new Singleton ( ) ; } } } return instance; }
}
2. 工厂模式
interface Car { void drive ( ) ;
} class Tesla implements Car { }
class BMW implements Car { } class CarFactory { public Car createCar ( String type) { switch ( type) { case "Tesla" : return new Tesla ( ) ; case "BMW" : return new BMW ( ) ; default : throw new IllegalArgumentException ( ) ; } }
}
3. Spring中的设计模式
工厂模式 :BeanFactory代理模式 :AOP实现单例模式 :默认Bean作用域模板方法 :JdbcTemplate观察者模式 :ApplicationEvent
✨ Java 8+ 新特性
1. Lambda表达式
Collections . sort ( list, new Comparator < String > ( ) { public int compare ( String s1, String s2) { return s1. length ( ) - s2. length ( ) ; }
} ) ;
Collections . sort ( list, ( s1, s2) -> s1. length ( ) - s2. length ( ) ) ;
2. Stream API
List < String > result = list. stream ( ) . filter ( s -> s. startsWith ( "A" ) ) . map ( String :: toUpperCase ) . sorted ( ) . collect ( Collectors . toList ( ) ) ;
3. Optional避免NPE
Optional < User > user = userService. findById ( id) ;
user. ifPresent ( u -> System . out. println ( u. getName ( ) ) ) ; String name = user. map ( User :: getName ) . orElse ( "Unknown" ) ;