Java面试题涵盖了多个核心知识点,主要包括:
1. **Java基础**:
- **接口与抽象类的区别**:接口是Java中的纯抽象类型,用于规定方法签名,不允许有实现代码,而抽象类可以包含抽象方法和具体方法。类可以通过extends实现一个抽象类,但可以实现多个接口。
- **String, StringBuffer, StringBuilder的区别**:String是不可变对象,每次修改都会创建新对象;StringBuffer是线程安全的,适合多线程环境;StringBuilder是非线程安全的,但性能更高,适用于单线程或低并发场景。
2. **Java虚拟机(JVM)**:
- **平台无关性**:Java的平台无关性体现在Java代码编译成Class文件后,可以在任何支持Java的平台上运行,由JVM负责跨平台执行。
- **JVM运行时内存结构**:包括堆、栈、本地方法栈、方法区(现在称为元空间)、程序计数器和运行时常量池。堆主要用于对象实例存储,方法区存放类信息和常量,其他区域是线程独享的。
- **垃圾回收**:Java通过垃圾回收机制自动管理内存,包括新生代和老年代的划分,以及标记-清除、复制、标记-整理等垃圾回收算法。
3. **线程**:
- **线程状态**:包括新建、运行、阻塞、等待、死亡等状态。
- **创建线程的方式**:Java提供了Thread类的实例化和Runnable接口的方式创建线程。
- **线程池**:一种复用线程的机制,创建方式(如ThreadPoolExecutor),基本参数包括核心线程数、最大线程数、队列策略等。线程池有多种状态,如运行、空闲、堵塞等。
- **锁机制**:Java提供多种锁,如乐观锁(如ReentrantReadWriteLock的非阻塞读锁)和悲观锁(如synchronized关键字),还有公平锁(如ReentrantLock的公平锁)和非公平锁。
4. **数据库相关**:
- **MySQL锁**:理解事务中的锁类型,如行级锁(悲观锁、乐观锁)和表级锁,以及它们在并发控制中的作用。
5. **Spring框架**:
- **IoC(依赖注入)**:Spring的核心概念,用于解决组件之间的依赖关系,提高代码的灵活性。
- **AOP(面向切面编程)**:Spring AOP用于处理横切关注点,如日志、事务管理等。
- **Bean的作用域**:Spring中Bean的生存周期和作用范围,如singleton、prototype等。
- **Spring MVC流程**:包括请求的接收、处理、视图渲染等步骤。
- **事务管理**:Spring支持的事务隔离级别和传播行为。
6. **设计模式**:虽然这部分没有列出具体的模式,但暗示了Spring中可能会涉及到一些设计模式的使用,如工厂模式、单例模式等。
这份面试题涉及了Java语言基础、内存管理、并发编程、数据库优化、Spring框架的深入理解和设计原则等多个维度,准备应对此类面试时,需全面掌握这些知识点并能灵活运用。