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" ) ;