JAVA面试深度解析:JVM、垃圾回收与并发

需积分: 9 1 下载量 81 浏览量 更新于2024-08-05 收藏 2KB TXT 举报
"这篇文章除了包含一系列高级JAVA面试问题和答案,还涉及了JVM内存模型、垃圾回收机制、并发控制、数据库事务、缓存、持久化、框架原理等多个核心Java后端开发知识点。" 以下是这些知识点的详细解释: 1. **JVM(Java虚拟机)理解**:JVM是Java程序的运行环境,它负责执行字节码并管理内存。JMM(Java内存模型)规定了多线程环境下如何访问共享变量,确保数据一致性。垃圾回收算法主要负责自动回收不再使用的对象所占用的内存。 2. **垃圾回收算法**:垃圾回收通常基于可达性分析,通过判断对象是否可达来决定其生死。三色标记算法是CMS(Concurrent Mark Sweep)收集器的一种实现策略,用于标记对象。 3. **并发情况下的垃圾回收**:ZGC、CMS和G1都是为了解决并发标记和回收的问题。ZGC使用有色指针和内存屏障防止并发时的错误标记,CMS使用写屏障和增量更新,G1则采用SATB(Snapshot-At-The-Beginning)和写屏障。 4. **逃逸分析**:逃逸分析是一种优化技术,用于识别对象是否会被外部访问。如果不会,可能会进行标量替换(将对象分解为成员变量)、栈上分配(对象直接在栈上创建)或同步锁消除等优化。 5. **Synchronized**:Synchronized是Java中的同步关键字,其底层实现涉及monitorenter/monitorexit字节码,锁状态从无锁到偏向锁,再到轻量级锁和重量级锁,逐步升级。 6. **volatile**:volatile保证了线程间共享变量的可见性和有序性,借助缓存一致性协议和总线嗅探机制,以及内存屏障来实现。 7. **AQS(AbstractQueuedSynchronizer)**:AQS是Java并发编程中的一种抽象队列同步器,用于构建锁和同步原语,如ReentrantLock和Semaphore。 8. **MVCC(多版本并发控制)**:MVCC是数据库中的并发控制机制,如MySQL的InnoDB引擎,通过保存历史版本使读写操作并发进行。 9. **MySQL两阶段提交**:在更新数据时,两阶段提交是为了保证redo log和binlog的一致性,避免数据不一致的情况。 10. **Double Write**:MySQL的一种机制,用于提高数据安全性,通过双写缓冲区来保证redo log的数据完整写入数据文件。 11. **Redis持久化**:Redis提供了RDB(定期生成快照)和AOF(记录操作日志)两种持久化方式。RDB通过fork子进程生成快照,AOF则是追加写入操作并定期重写。 12. **Redis主从复制**:包括建立连接、发送ping指令、传输RDB文件等步骤,确保数据在主从之间同步。 13. **Spring BeanFactory**:在刷新BeanFactory时,先检查其是否存在是为了避免重复加载或干扰现有上下文。 14. **Spring处理注解**:Spring通过`doProcessConfigurationClass`方法解析配置类上的注解,进行组件扫描和依赖注入。 15. **自定义XML标签**:要自定义XML标签,需深入Spring的源码,理解并扩展其XML解析逻辑。 这些知识点涵盖了Java后端开发中的关键概念,对于准备高级面试或提升技术水平非常有帮助。