原创 HashMap源碼探討(基於JDK1.8)

HashMap簡介 HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射,該類繼承於AbstractMap,實現了Map、Cloneable、java.io.Serializable接口。 HashMap 的

原创 深入理解樂觀鎖與悲觀鎖

數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。 樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。 無論是悲觀鎖還是樂觀鎖,都

原创 JAVA中的靜態代理、動態代理以及CGLIB動態代理

引語 代理(Proxy)是一種設計模式,提供了對目標對象另外的訪問方式;即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標對象的功能。 舉個例子來說明代理的作用:假設我們想邀請一位明星,

原创 如何正確的停止一個線程?

何爲終止線程? 停止一個線程意味着在任務處理完任務之前停掉正在做的操作,也就是放棄當前的操作。 終止線程的方法 ①使用退出標誌,使線程正常退出,也就是當run方法完成後線程終止。 ②使用stop方法強行終止,但是

原创 Java內存模型之happens-before規則

爲何要有happens-before規則? 在JMM中存在線程本地內存和主內存的原因,再加上重排序,會導致多線程環境下存在可見性的問題。那麼我們正確使用同步、鎖的情況下,線程A修改了變量a何時對線程B可見? 我們無法就所有場景來規定某個線

原创 Mybatis緩存機制

MyBatis的緩存機制 在日常工作中,開發人員多數情況下是使用MyBatis的默認緩存配置,但是MyBatis緩存機制有一些不足之處,在使用中容易引起髒數據,形成一些潛在的隱患。   Mybatis的一級緩存 Mybatis的一級緩存是

原创 Java虛擬機類加載機制和雙親委派模型

什麼是Java虛擬機類加載機制? 虛擬機類加載機制:虛擬機把描述類的數據從class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型。 類加載的時機 類的生命週期是從類被加

原创 JVM內存模型之重排序

爲什麼有重排序? 執行程序時,爲了提高性能,處理器和編譯器常常會對指令進行重排序。我們常將的重排序包括處理器重排序和編譯器重排序。   重排序需要滿足的條件 ①在單線程環境下不能改變程序運行的結果; ②存在數據依賴關係的不允許重排序 如果

原创 JVM中如何做GC

關於GC GC,即垃圾回收(英語:Garbage Collection,縮寫爲GC)是一種自動的內存管理機制,Java編程語言之所以能屹立二十餘載仍廣受歡迎和JVM提供的GC機制密不可分(Java並非是第一門使用GC的編程

原创 Hibernate緩存機制

爲什麼要用Hibernate緩存? Hibernate是一個持久層框架,經常訪問物理數據庫。使用緩存機制,是爲了降低應用程序對物理數據源訪問的頻次,從而提高應用程序的運行性能。 緩存內的數據是對物理數據源中的數據的複製,應用程序在運行時從

原创 Spring知識點總結(概念篇)

Spring的優點 ①方便解耦,簡化開發。通過Spring提供的IoC容器,我們可以將對象之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程序耦合。 ②Spring支持聲明式事務。在Spring中,我們可以從單調煩悶的

原创 Java內存模型和volatile關鍵字

什麼是Java內存模型(JMM)? Java內存模型是用來屏蔽掉各種硬件和操作系統的內存訪問差異,以實現Java程序在各種平臺下能達到相同的內存訪問效果。(JMM的作用) 其目標是定義程序中各個變量的訪問規則,即在JVM中將變量存儲到內存

原创 通過數據庫實現分佈式鎖

引語 針對分佈式鎖的實現目前有多種方案,包括數據庫實現分佈式鎖,基於緩存(redis,memcached)實現分佈式鎖,以及基於Zookeeper實現分佈式鎖。現在我們要討論的是使用數據庫來實現分佈式鎖。     使用數據庫表來實現方法級

原创 Java併發編程之AQS(二)

從自定義獨佔鎖OnlyOneLock去看AQS源碼 先說明本文是基於JDK1.8的源碼分析,其他版本的JDK實現可能有所不同。 在自定義鎖中,我們覆蓋Lock接口的方法,AQS中我們覆蓋的幾個方法只需要處理好拿到鎖和沒有拿到鎖的邏輯,

原创 海量數據處理面試題集錦

1、海量日誌數據,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大文件中。注意到IP是32位的,最多有個2^32個IP。同樣可以採用映射的方法,比如模1000,把整個大文件映射爲1