原创 Java併發之ConcurrentHashMap詳解

一、ConcurrentHashMap是什麼?      ConcurrentHashMap是線程安全的併發容器,是用來替代在多線程環境下的HashMap,因爲HashMap是線程不安全的,多線程環境下put操作可能會導致死循環,CPU利

原创 最通俗易懂的HashMap原理詳解(JDK 1.8)

一、HashMap的數據結構 HashMap是存儲鍵值對的集合,當然HashMap也是線程不安全的,每一個鍵值對存儲在一個Node<K,V>(JDK1.7中是Entry<K,V>。HashMap的主幹是一個名爲table的Node數組。 

原创 二叉樹翻轉的遞歸與非遞歸實現(Java)

二叉樹的翻轉,即以根所在垂直線爲對稱線,對稱位置的兩個節點進行交換。 實現這種算法,可以有兩種思路,即遞歸和非遞歸(棧)。 下面給出Java代碼實現。import java.util.Stack; /** * Created by L

原创 Java虛擬機學習之垃圾收集器

一、爲什麼要學習GC技術 垃圾收集也稱GC,是Java內存動態分配和回收背後的關鍵技術,有了垃圾收集器,Java程序員就與C++程序員有了巨大的區別,C++程序員需要謹慎的申請和釋放內存,而Java程序員就不需要那麼辛苦了,但是我們還是需

原创 偏向鎖、輕量級鎖、重量級鎖、自旋鎖原理講解

一、簡介 在講解這些鎖概念之前,我們要明確的是這些鎖不等同於Java API中的ReentratLock這種鎖,這些鎖是概念上的,是JDK1.6中爲了對synchronized同步關鍵字進行優化而產生的的鎖機制。這些鎖的啓動和關閉策略可以

原创 Dubbo生產者端使用@Service註解無效的原因

在Dubbo生產者端暴露服務的方式有兩種,一種是傳統的xml配置標籤方式,還有一種是使用@Service註解方式。 在使用@Service註解的過程中,踩了很多坑,給大家分享一下。 會導致@Service註解無效的原因大致有以下幾點: 1

原创 Java虛擬機學習之類文件結構

一、語言無關性與平臺無關性語言無關性:Java虛擬機上運行的是Class文件(字節碼文件*.class),而Class文件不一定由Java程序編譯而來,JRuby經過jrubyc編譯器編譯生成的是Class文件,Groovy程序經過gro

原创 SpringMVC 406錯誤

前段時間在做一個前後端分離的項目,在做異步請求的路徑映射時,習慣性的把每個請求的後綴寫成.html,然後配置DispactherServlet攔截.html結尾的請求。 結果就報出406錯誤。 406:Not acceptable。Web

原创 最通俗易懂的synchronized原理解析

之前有文章寫過synchronized的作用,這裏不多說了,直接開始講原理。synchronized是Java的內置鎖,是重量級鎖,也是可重入鎖。性能上不如Lock這種顯示鎖,而且缺乏許多功能,但是其優點是使用便捷。首先看一段代碼及其字節

原创 Java虛擬機學習之Java內存區域篇

一、運行時數據區域 (圖片來自網絡) 上圖是Java運行時內存區域模型,這些區域都有各自的用途,以及創建和銷燬的時間,有的區域隨着虛擬機進程的啓動而存在,有些區域則依賴用戶線程的啓動和結束而建立和銷燬。 二、程序計數器 程序計數器是線程

原创 通俗易懂的紅黑樹簡析

一、基本概念  紅黑樹本質上是一棵近似平衡的二叉樹,它的節點只有兩種顏色即紅與黑,它滿足二叉搜索樹的基本性質,即樹上的任何節點的值大於其左子節點(若左子節點存在),任何節點的值大於其右子節點的值(若右子節點存在)。  近似平衡:深度最大

原创 Tomcat卡住不響應請求但未拋出異常

前段時間在做一個android平臺的QQ,服務器端是跑在Tomcat上的,但是每次測試一會,Tomcat就會卡住,不在響應任何請求,包括HTTP請求和TCP請求都不在響應。 後來想到可能是連接池佔滿了,而且都未被釋放,就通過系統命令查看了

原创 Dubbo傳輸的對象必須序列化(Serializable)

如果生產者返回給消費者的對象中有未實現Serializable接口的,都會報出如下錯誤: 最關鍵的一句 Serialized class com.yykj.mall.dto.ProductListItemDTO must implemen

原创 MySQL 5.6 佔用內存過高解決方案

前段時間在阿里雲服務器上裝了個Mysql,結果發現5.6版本的MySQL一啓動就佔好幾百兆內存,於是上網搜索了一下,找到了一個可靠地解決方案。 在my.ini配置文件中加入如下參數,如已經存在,則修改。performance_schema

原创 Hibernate懶加載對象在session.close()後爲空

Hibernate查詢的結果集對象其實是一個代理對象(可以使用getClass()驗證)。 在session調用close()方法前,該對象是持久化狀態的,是受session管理的,當開啓懶加載後,當我們要訪問該查詢對象的某個懶加載對象屬