Java面试题
# Java面试题
# ☕ Java基础
# 1. Java语言特性
Q: Java的主要特性有哪些?
A:
- 面向对象:封装、继承、多态
- 平台无关性:一次编写,到处运行
- 自动内存管理:垃圾回收机制
- 多线程支持:内置线程支持
- 安全性:字节码验证、安全管理器
- 健壮性:强类型检查、异常处理
# 2. 数据类型
Q: Java中的基本数据类型有哪些?
A:
- 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点型:float(4字节)、double(8字节)
- 字符型:char(2字节)
- 布尔型:boolean(1位)
# 3. String相关
Q: String、StringBuilder、StringBuffer的区别?
A:
- String:不可变,线程安全,适合少量字符串操作
- StringBuilder:可变,非线程安全,适合单线程大量字符串操作
- StringBuffer:可变,线程安全,适合多线程大量字符串操作
// 性能对比示例
public class StringPerformance {
public static void main(String[] args) {
int n = 10000;
// String - 性能最差
long start = System.currentTimeMillis();
String str = "";
for (int i = 0; i < n; i++) {
str += "a";
}
System.out.println("String: " + (System.currentTimeMillis() - start));
// StringBuilder - 性能最好
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append("a");
}
System.out.println("StringBuilder: " + (System.currentTimeMillis() - start));
}
}
# 🧵 多线程
# 1. 线程创建方式
Q: Java中创建线程的方式有哪些?
A:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
- 使用线程池
// 方式1:继承Thread
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running");
}
}
// 方式2:实现Runnable
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable running");
}
}
// 方式3:实现Callable
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Callable result";
}
}
// 使用示例
public class ThreadExample {
public static void main(String[] args) {
// 方式1
new MyThread().start();
// 方式2
new Thread(new MyRunnable()).start();
// 方式3
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new MyCallable());
// 方式4:线程池
ThreadPoolExecutor pool = new ThreadPoolExecutor(
2, 4, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100)
);
pool.execute(() -> System.out.println("Pool task"));
}
}
# 2. 线程同步
Q: Java中的同步机制有哪些?
A:
- synchronized关键字
- ReentrantLock
- volatile关键字
- 原子类(Atomic)
- CountDownLatch、Semaphore等
public class SynchronizationExample {
private int count = 0;
private final Object lock = new Object();
private final ReentrantLock reentrantLock = new ReentrantLock();
private volatile boolean flag = false;
private final AtomicInteger atomicCount = new AtomicInteger(0);
// synchronized方法
public synchronized void syncMethod() {
count++;
}
// synchronized代码块
public void syncBlock() {
synchronized (lock) {
count++;
}
}
// ReentrantLock
public void lockMethod() {
reentrantLock.lock();
try {
count++;
} finally {
reentrantLock.unlock();
}
}
// 原子操作
public void atomicMethod() {
atomicCount.incrementAndGet();
}
}
# 🗂️ 集合框架
# 1. 集合体系
Q: Java集合框架的层次结构?
A: