ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Java并发面试,看完这篇直接封神

Java并发面试,看完这篇直接封神 Java并发是面试必考也是区分初级和高级的分水岭。很多人背了一堆八股文一问实际场景就露馅。我面过上百个候选人真正能把并发讲透的不到两成。今天不罗列知识点而是站在面试官视角拆解五个最核心的问题。看完这篇你未必“封神”但至少能答到点子上。第一个问题synchronized和ReentrantLock有什么区别大多数人会背一个是JVM层面一个是JDK层面一个自动释放一个手动释放。但面试官想听的是锁升级。synchronized在JDK 1.6后引入偏向锁、轻量级锁、重量级锁。无竞争时用偏向锁CAS失败升级轻量级锁自旋失败再升级重量级锁。ReentrantLock则基于AQS支持公平锁、可中断、可超时。如果你能补一句“synchronized锁升级不可逆ReentrantLock更灵活但需手动释放”这题就稳了。第二个问题volatile解决了什么问题可见性和有序性不保证原子性。底层靠内存屏障写volatile时插入StoreLoad屏障读时插入LoadLoad屏障。经典追问是双重检查锁单例为什么要加volatile因为instance new Singleton()分三步分配内存、初始化、赋值引用。指令重排可能导致赋值先于初始化另一个线程拿到未初始化对象。volatile禁止了这种重排。能讲清楚这个说明你真理解了。第三个问题CAS是什么有什么坑Compare And Swap比较并交换靠Unsafe的native方法实现。三个值内存地址、预期值、新值。如果内存值等于预期值就更新否则失败重试。坑有两个一是ABA问题用AtomicStampedReference加版本号解决二是自旋开销高竞争下CPU空转。所以JDK 1.8的ConcurrentHashMap用synchronized锁桶而不是一味CAS。第四个问题线程池的核心参数和执行流程。七个参数核心线程数、最大线程数、空闲存活时间、时间单位、工作队列、线程工厂、拒绝策略。执行流程核心线程满→入队列→队列满→创建非核心线程→达到最大线程数→触发拒绝策略。面试官常问为什么阿里禁止用Executors因为newFixedThreadPool队列无界可能OOMnewCachedThreadPool最大线程数Integer.MAX_VALUE可能创建过多线程。正确做法是手动new ThreadPoolExecutor明确参数。第五个问题AQS原理你了解多少AQS是ReentrantLock、CountDownLatch、Semaphore的基石。核心是state变量加CLH双向队列。独占模式如ReentrantLockstate0表示无锁0表示重入次数。共享模式如Semaphorestate表示可用许可数。获取失败就入队前驱节点释放后唤醒后继。能画出这个流程并发面试基本通关。最后说一句并发知识不是背出来的是踩坑踩出来的。我见过候选人把AQS讲得头头是道却说不清线上线程池耗尽怎么排查。真正的封神是既懂原理又能落地。下次面试试着把每个知识点连到实际场景你离offer就不远了。
返回列表