2019阿里Java面试题:并发编程+JVM+数据库+缓存+分布式(含答案)并发编程1. 什么是多线程并发和并行?
- 答案:并发是指多个任务在同一个时间段内交替执行,而并行是指多个任务在同一时刻同时执行。
2. 什么是线程安全问题?
- 答案:当多个线程同时访问共享资源,并且至少有一个线程对共享资源进行了修改,导致程序运行结果不可预期时,就发生了线程安全问题。
3. 什么是共享变量的内存可见性问题?
- 答案:当一个线程修改了共享变量的值,而另一个线程未能及时看到这个修改的值时,就发生了内存可见性问题。
4. 什么是Java中原子性操作?
- 答案:原子性操作是指不可被中断的一个操作序列,即该操作要么全部执行,要么全部不执行。
5. 什么是Java中的CAS操作,AtomicLong实现原理?
- 答案:CAS(Compare and Swap)是一种硬件级别的原子操作,用于比较并交换内存中的值。AtomicLong通过CAS操作实现线程安全的自增、自减等操作。
6. Java中Synchronized关键字的内存语义是什么?
- 答案:Synchronized关键字保证在同一时刻只有一个线程能够进入临界区,同时确保进入临界区的线程能够看到正确的变量值。
7. Java中Volatile关键字的内存语义是什么?
- 答案:Volatile关键字用于修饰变量,确保变量的修改对所有线程立即可见,但无法保证操作的原子性。
8. 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
9. 讲讲ThreadLocal 的实现原理?
- 答案:ThreadLocal为每个线程提供独立的变量副本,通过ThreadLocalMap实现,每个线程都有一个独立的ThreadLocalMap。
10. 谈谈对AQS的理解?
- 答案:AQS(AbstractQueuedSynchronizer)是Java并发包中实现锁和其他同步器的基础框架,通过内部维护一个同步队列来管理线程的排队和唤醒。
JVM1. Java 内存分配?
- 答案:Java内存分为堆内存、栈内存、方法区、程序计数器。堆内存用于存放对象实例,栈内存用于存放局部变量和方法的调用信息,方法区用于存放类的信息、常量、静态变量等,程序计数器用于记录当前线程执行的字节码的行号。
2. 什么是GC? 为什么要有 GC?
- 答案:GC(Garbage Collection)是垃圾回收机制,用于自动回收不再使用的对象占用的内存空间。GC的存在是为了避免程序员手动管理内存导致的内存泄漏和内存溢出问题。
3. 如何判断一个对象是否存活?
- 答案:通过可达性分析算法,从GC Roots出发,如果对象不可达,则被认为是垃圾对象,可以被回收。
4. 垃圾回收器的基本原理是什么?
- 答案:垃圾回收器通过标记-清除、复制、标记-整理等算法来回收不再使用的内存空间。
数据库1. MySQL有哪些存储引擎啊?都有什么区别?
- 答案:MySQL常用的存储引擎有InnoDB和MyISAM。InnoDB支持事务、行级锁定和外键,适合处理大量短期事务;MyISAM不支持事务和外键,但查询性能较高,适合读多写少的场景。
2. 什么是索引?
- 答案:索引是数据库表中一列或多列的值进行排序的一种结构,用于提高查询效率。
3. 聚簇索引和非聚簇索引的区别?
- 答案:聚簇索引的叶节点存储的是实际的数据行,而非聚簇索引的叶节点存储的是指向数据行的指针。
4. 谈谈对Innodb事务的理解?
- 答案:InnoDB事务具有ACID特性(原子性、一致性、隔离性、持久性),通过undo log和redo log实现事务的回滚和崩溃恢复。
缓存1. redis数据结构有哪些?
- 答案:Redis支持的数据结构包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。
2. Redis缓存穿透,缓存雪崩?
3. 如何使用Redis来实现分布式锁?
- 答案:可以使用Redis的setnx命令来实现分布式锁,同时设置过期时间以避免死锁。为了保证锁的释放操作原子性,可以使用Lua脚本。
分布式1. 什么是CAP定理?
- 答案:CAP定理指一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)中的两项。
2. 说说CAP理论和BASE理论?
3. 如何实现分布式锁?
- 答案:可以通过数据库、Redis、Zookeeper等实现分布式锁。Redis实现分布式锁如上所述,Zookeeper通过创建临时顺序节点来实现分布式锁。
4. 如何实现分布式 Session?
- 答案:可以将Session信息存储在Redis、Memcached等分布式缓存中,或者通过数据库来实现Session共享。
5. Dubbo的底层实现原理和机制?
- 答案:Dubbo是一个高性能的Java RPC框架,通过Netty等NIO框架实现网络通信,采用Zookeeper等注册中心实现服务注册与发现,通过动态代理实现服务的调用。
以上仅为部分面试题及答案的简要概述,具体面试时还需根据题目要求详细阐述。