Java大厂面试全覆盖:30+并发高频面试题详解(含腾讯/阿里/美团/百度真题)

Java大厂面试全覆盖:30+并发高频面试题详解(含腾讯/阿里/美团/百度真题)

1. 什么是进程和线程?

考察知识点:并发基础。

进程是操作系统分配资源的基本单位,线程是CPU调度的最小单位。一个进程可以包含多个线程,线程间资源共享,进程间资源独立。

2. 线程的生命周期有哪些阶段?

考察知识点:线程状态。

包括新建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、等待(waiting)、超时等待(timed waiting)、终止(terminated)。

3. Java创建线程的方式有哪些?

考察知识点:线程创建。

常见三种方式:继承Thread类、实现Runnable接口、实现Callable接口结合Future。推荐用Runnable/Callable,代码解耦、可扩展。

4. Runnable和Callable的区别?

考察知识点:任务接口。

Runnable无返回值、不能抛异常;Callable有返回值且可抛异常。Callable常结合Future使用。

5. 线程的run()和start()方法区别?

考察知识点:线程启动原理。

start()启动新线程并调用run(),run()仅是普通方法,直接调用不会新启线程。

6. 线程的同步和异步?

考察知识点:并发协作。

同步指多线程协作时需要等待,常见如synchronized、Lock;异步不需要等待,可并发执行,常用线程池、回调等实现。

7. synchronized的底层原理?

考察知识点:锁机制。

synchronized基于JVM对象监视器实现互斥锁,保证线程安全。JVM通过对象头Mark Word和monitor来实现锁的获取与释放。

8. Java中有哪些锁?

考察知识点:锁的分类。

包括偏向锁、轻量级锁、重量级锁、可重入锁(ReentrantLock)、读写锁(ReadWriteLock)、自旋锁、悲观锁、乐观锁等。

9. 可重入锁的原理?

考察知识点:锁重入性。

可重入锁允许同一线程多次获取同一把锁,避免死锁。synchronized和ReentrantLock都是可重入锁。

10. volatile关键字的作用?

考察知识点:可见性与有序性。

volatile保证变量对多线程可见性,禁止指令重排序,不保证原子性。

11. 为什么说volatile不保证原子性?

考察知识点:原子性。

volatile仅保证可见性。i++等复合操作不是原子操作,仍需synchronized或原子类保证原子性。

12. 什么是CAS?

考察知识点:无锁并发。

CAS(Compare And Swap)是一种乐观锁机制,通过比较内存中的值与期望值一致时更新,常用于原子类实现。

13. ABA问题及其解决方案?

考察知识点:CAS缺陷。

ABA问题指CAS判断值未变但实际已被修改过。可用AtomicStampedReference等带版本号的原子类解决。

14. Java内存模型(JMM)?

考察知识点:并发内存可见性。

JMM定义了主内存与线程工作内存,保证多线程间内存可见性与有序性。理解JMM是并发编程基础。

15. happens-before原则?

考察知识点:内存可见性。

happens-before约定了操作之间的可见性和顺序性,比如synchronized块、volatile变量写-读、线程启动前-后关系等。

16. 死锁的四个必要条件?

考察知识点:死锁原理。

互斥、占有且等待、不剥夺、循环等待。任一条件被破坏即可避免死锁。

17. 如何避免死锁?

考察知识点:死锁预防。

破坏循环等待、资源分配有序、使用定时锁等。

18. wait和sleep的区别?

考察知识点:线程阻塞。

wait释放锁并进入等待池,需notify唤醒;sleep不释放锁,时间到自动恢复。wait属于Object,sleep属于Thread。

19. notify与notifyAll区别?

考察知识点:线程唤醒。

notify随机唤醒一个等待线程,notifyAll唤醒所有等待线程。推荐用notifyAll避免假死。

20. ThreadLocal的作用和原理?

考察知识点:线程本地变量。

ThreadLocal为每个线程提供独立变量副本,适合存储线程独享数据,底层用ThreadLocalMap实现。

21. 线程池的核心参数?

考察知识点:线程池配置。

包括核心线程数、最大线程数、空闲线程存活时间、阻塞队列、线程工厂、拒绝策略。合理配置提升并发性能。

22. 线程池的常用实现?

考察知识点:Executor框架。

常用有FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledThreadPool,底层均用ThreadPoolExecutor实现。

23. 线程池的工作原理?

考察知识点:任务提交与调度。

线程池通过复用线程执行任务,任务先入队列,线程空闲时取出执行,减少线程创建销毁开销。

24. Callable和Future的配合?

考察知识点:异步任务管理。

Callable可返回结果,Future用于获取任务执行结果与异常,可用于异步编程。

25. CountDownLatch与CyclicBarrier区别?

考察知识点:并发协作工具。

CountDownLatch用于一个线程等待多个线程完成,CyclicBarrier用于多个线程互相等待,适合不同场景。

26. Semaphore的作用?

考察知识点:限流。

Semaphore信号量用于控制并发线程数量,常用于流量控制、连接池。

27. ReadWriteLock原理?

考察知识点:读写分离锁。

ReadWriteLock允许多读单写,提高并发性能。典型实现是ReentrantReadWriteLock。

28. ReentrantLock与synchronized的区别?

考察知识点:锁机制对比。

ReentrantLock功能更强,支持公平锁/非公平锁、可中断、定时锁、条件变量。synchronized易用,但功能较弱。

29. Condition的作用?

考察知识点:线程通信。

Condition配合ReentrantLock实现更灵活的wait/notify机制,可支持多条件队列,功能强于Object的wait/notify。

30. CopyOnWriteArrayList原理?

考察知识点:写时复制。

写时复制容器,写操作复制新数组,读操作无锁,适合读多写少场景。

31. ConcurrentHashMap的实现原理?

考察知识点:并发集合。

JDK8前基于分段锁,JDK8后采用CAS+Synchronized,保证高并发安全和效率。

32. FutureTask的作用?

考察知识点:任务封装。

FutureTask实现了Runnable和Future接口,可通过线程池或Thread运行,用于异步任务执行和结果获取。

33. Fork/Join框架原理?

考察知识点:并行计算。

Fork/Join采用工作窃取算法,适合大任务拆分。可充分利用多核处理器,提升计算效率。


以上题目涵盖了大厂Java并发高频与基础知识点,建议结合源码和实际项目深入理解并掌握,知其然且知其所以然,助力高分通过面试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值