原创 線程sleep,wait,notify,join,yield方法解析

線程的五種狀態 線程從創建到銷燬一般分爲五種狀態,如下圖: 1) 新建 當用new關鍵字創建一個線程時,就是新建狀態。 2) 就緒 調用了 start 方法之後,線程就進入了就緒階段。此時,線程不會立即執行run方法,需要等待獲取CPU資

原创 idea 2019.3 最新版破解教程

背景 最近,idea又被整治了,所以一大批激活碼都失效了。我之前已經有2018版的永久激活了,所以非常淡定~,也沒打算升級版本。但是,最近發現周圍的人都在討論這個問題。於是,我也找到了2019.3最新版的破解方法,感受了一下最新版有什麼不同

原创 併發編程之線程池ThreadPoolExecutor

前言 在我們平時自己寫線程的測試demo時,一般都是用new Thread的方式來創建線程。但是,我們知道創建線程對象,就會在內存中開闢空間,而線程中的任務執行完畢之後,就會銷燬。 單個線程的話還好,如果線程的併發數量上來之後,就會頻繁的創

原创 面試官讓我手寫一個生產者消費者模式

不知道你是否遇到過面試官讓你手寫生產者消費者代碼。別說,前段時間有小夥伴還真的遇到了這種情況。當時是一臉懵逼。 但是,俗話說,從哪裏跌倒就要從哪裏爬起來。既然這次被問到了,那就回去好好研究一下,爭取下一次不再被虐唄。 於是,今天我決定手敲一

原创 怎麼用IDEA快速查看類圖關係

做Java開發的,現在普遍都用上idea了。可以說,idea是當之無愧的Java開發神器。如果,你現在還沒用idea,那肯定是你還沒有感受過它的強大。 好了,話不多說,今天的主題主要是教大家怎麼通過idea快速的查看一個類的類圖關係,即一個

原创 Java設計模式之單例模式

單例模式,是特別常見的一種設計模式,因此我們有必要對它的概念和幾種常見的寫法非常瞭解,而且這也是面試中常問的知識點。 所謂單例模式,就是所有的請求都用一個對象來處理,如我們常用的Spring默認就是單例的,而多例模式是每一次請求都創建一個新

原创 JVM垃圾回收詳解

通常,我們在寫java程序的時候,似乎很少關注內存分配和垃圾回收的問題。因爲,這部分工作,JVM已經幫我們自動實現了。 這樣看起來,好像很美好,但是任何事情都有兩面性。雖然JVM會自動的進行垃圾回收,但是,如果遇到有些問題,JVM自己也處理

原创 Java類加載器和雙親委派機制

前言 之前詳細介紹了Java類的整個加載過程(類加載機制詳解)。雖然,篇幅較長,但是也不要被內容嚇到了,其實每個階段都可以用一句話來概括。 1)加載:查找並加載類的二進制字節流數據。 2)驗證:保證被加載的類的正確性。 3)準備:爲類的靜態

原创 爲什麼大家都說Java中只有值傳遞?

最近跟Java中的值傳遞和引用傳遞槓上了,一度懷疑人生。查了很多資料,加上自己的理解,終於搞清楚了,什麼是值傳遞和引用傳遞。也搞明白了,爲什麼大家都說Java只有值傳遞,沒有引用傳遞。原來,我一直以來的認知都是錯誤的。。。 首先,需要了解一

原创 設計模式之原型模式

我們在創建對象時,通常是通過new關鍵字來創建的。但是,思考一下,如果當前類的構造函數很複雜,每次new對象時都會消耗非常多的資源,這樣肯定是不行的,耗時又費力。 那有沒有什麼辦法解決這種問題呢?當然有,原型模式就可以解決這個痛點。 原型模

原创 類加載機制詳解

之前在介紹JVM內存模型的時候(參看:JVM內存模型),提到了在運行時數據區之前,有個Class Loader,這個就是類加載器。用以把Class文件中的描述信息加載到內存中運行和使用。以下是《深入理解Java虛擬機第二版》對類加載器機制的

原创 代理模式之靜態代理,JDK動態代理和cglib動態代理

代理模式,顧名思義,就是通過代理去完成某些功能。比如,你需要購買火車票,不想跑那麼遠到火車站售票窗口買,可以去附近的火車票代售點買,或者到攜程等第三方網站買。這個時候,我們就把火車站叫做目標對象或者委託對象,也可以叫被代理對象,而火車票代售

原创 簡單工廠、工廠方法和抽象工廠的區別

工廠模式一般分爲簡單工廠、工廠方法和抽象工廠三種,看了很多資料,好多講的都是雲裏霧裏的。要麼是概念太多,讓人看得一臉懵逼,要麼是舉得例子不太恰當,看了更讓人迷惑了。經過自己一番研究,通過一個簡單的例子,終於搞明白了它們之間的區別。 下面以生

原创 軟件設計的六大原則剖析

我們平時編寫代碼時,很少有人爲了刻意迎合軟件設計原則而編寫。其實,有時候是你用到了其中的某個或多個設計原則,而不自知而已。也有可能是有的人壓根就不知道設計原則是什麼。 不過,沒關係,爲了搞明白既抽象又玄幻的六大準則,我總結了一句話來概括每一