阿里的併發程式設計到底有多牛逼?這些技術點你知道多少!
前言
眾所周知,在Java的知識體系中,併發程式設計是非常重要的一環,也是面試的必問題,一個好的Java程式設計師是必須對併發程式設計這塊有所瞭解的。
然而不論是哪個國家,什麼背景的 Java 開發者,都對自己寫的併發程式相當自信,但也會在出問題時表現得很詫異甚至一籌莫展。
可見,Java 併發程式設計顯然不是一件能速成的能力,基礎搭得越好,越全面,在實踐中才會有更深刻的理解。
因此,大家不難發現 Java 併發問題一直是各個大廠面試的重點之一。我在平時的面試中,也發現很多候選人對一些基本的併發概念表示沒聽過,或原理不理解,可能知道一些卻又講不清楚,最終導致面試失敗。
本文會結合實際中接觸到的一些面試題,重點來聊一聊 Java 併發中的相關知識點。
Synchronized 相關問題
問題一:Synchronized 用過嗎,其原理是什麼?
問題二:你剛才提到獲取物件的鎖,這個“鎖”到底是什麼?如何確定物件的鎖?
問題三:什麼是可重入性,為什麼說 Synchronized 是可重入鎖?
問題四:JVM 對 Java 的原生鎖做了哪些優化?
問題五:為什麼說 Synchronized 是非公平鎖?
問題六:什麼是鎖消除和鎖粗化?
問題七:為什麼說 Synchronized 是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是
問題八:樂觀鎖一定就是好的嗎?
可重入鎖 ReentrantLock 及其他顯式鎖相關問題
問題一:跟 Synchronized 相比,可重入鎖 ReentrantLock 其實現原理有什麼不同?
問題二:那麼請談談 AQS 框架是怎麼回事兒?
問題三:請儘可能詳盡地對比下 Synchronized 和 ReentrantLock 的異同。
問題四:ReentrantLock 是如何實現可重入性的?
問題五:除了 ReetrantLock,你還接觸過 JUC 中的哪些併發工具?
問題六:請談談 ReadWriteLock 和 StampedLock。
問題七:如何讓 Java 的執行緒彼此同步?你瞭解過哪些同步器?請分別介紹下。
問題八:CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
Java 執行緒池相關問題
問題一:Java 中的執行緒池是如何實現的?
問題二:建立執行緒池的幾個核心構造引數?
問題三:執行緒池中的執行緒是怎麼建立的?是一開始就隨著執行緒池的啟動建立好的嗎?
問題四:既然提到可以通過配置不同引數創建出不同的執行緒池,那麼 Java 中預設實現好的執行緒池又有哪些呢?請比較它們的異同。
問題五:如何在 Java 執行緒池中提交執行緒?
Java 記憶體模型相關問題
問題一:什麼是 Java 的記憶體模型,Java 中各個執行緒是怎麼彼此看到對方的變數的?
問題二:請談談 volatile 有什麼特點,為什麼它能保證變數對所有執行緒的可見性?
問題三:既然 volatile 能夠保證執行緒間的變數可見性,是不是就意味著基於 volatile 變數的運算就是併發安全的?
問題四:請對比下 volatile 對比 Synchronized 的異同。
問題五:請談談 ThreadLocal 是怎麼解決併發安全的?
問題六:很多人都說要慎用 ThreadLocal,談談你的理解,使用 ThreadLocal 需要注意些什麼?
如何學習併發程式設計
學習java併發就像進入了另外一個學習領域,就像學習一門新的程式語言,或者是學習一套新的語言概念,要理解併發程式設計,其難度跟理解面向物件程式設計難度差不多。你花一點功夫,就可以理解它的基本機制,但是要想真正掌握它的本質,就需要深入的學習與理解。最後在分享一個併發程式設計知識的學習導圖給大家!

結語
最後我把這些實際遇到的併發程式設計面試題及常見問題的答案總結了一下,由於文字過多,就單獨做了一個文件。以及準備了一些更多關於Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分散式、高併發、效能調優、微服務等架構面試題和架構資料在群裡免費分享,如有需要的朋友的可以來免費領取,,也可以關注我以後還會有更多幹貨分享!
資料獲取方式:加QQ群:935692859 免費領取!
點選連結加入群聊【Java架構交流二群】: 點選進群
