原创 JVM虛擬機-垃圾回收機制與垃圾收集器概述

目錄前言什麼是垃圾回收垃圾回收的區域垃圾回收機制流程怎麼判斷對象已經死亡引用計數法可達性分析算法不可達的對象並非一定會回收關於引用強引用(StrongReference)軟引用(SoftReference)弱引用(WeakReference

原创 JVM虛擬機 類加載過程與類加載器

目錄前言類的生命週期類加載過程加載連接驗證準備解析初始化類加載器三大類加載器雙親委派模型概念爲什麼要使用雙親委派模型源碼分析反雙親委派模型參考 前言 類裝載器子系統是JVM中非常重要的部分,是學習JVM繞不開的一關。 一般來說,Java 類

原创 輕鬆理解分庫分表

目錄前言什麼是分別分庫分表垂直分表水平分表分庫垂直分庫水平分庫分庫分表的缺點分頁/排序主鍵重複事務的一致性關聯查詢總結 前言 現代業務越來越複雜,數據量也越來越大,關係型數據庫本身就比較容易形成系統瓶頸,單機存儲容量,連接數,處理能力都有限

原创 搞懂什麼是數據庫事務

目錄前言事務的定義事務中的四大特性:ACID小案例ACID原子性一致性隔離性持久性回到案例實現原理併發控制日誌恢復事務的隔離級別一次封鎖鎖/兩段鎖四種隔離級別前置概念髒讀不可重複讀幻讀隔離級別總結 前言 事務(Transaction)是數據

原创 JVM虛擬機-瞭解Java堆中對象分配、佈局和訪問的全過程

目錄前言對象的創建類加載檢查分配內存內存空間分配方式指針碰撞空閒列表併發時的內存分配同步處理:CAS本地線程分配緩衝:TLAB初始化零值設置對象頭執行 init 方法對象的內存佈局對象的訪問定位使用句柄直接指針二者對比 前言 對象是Java

原创 JVM虛擬機-運行時數據區概述

目錄運行時數據區域總覽概念掃盲什麼是棧幀(Stack Frame)JVM常見出現兩種錯誤程序計數器虛擬機棧結構局部變量表方法是如何調用的本地方法棧堆淺堆和深堆堆的細分方法區方法區和永久代的關係爲什麼要將永久代替換爲元空間 ?運行時常量池直接

原创 Java 輕鬆理解深拷貝與淺拷貝

目錄前言直接賦值拷貝淺拷貝舉例原理深拷貝實現:Serializable 實現深拷貝總結 前言 本文代碼中有用到一些註解,主要是Lombok與junit用於簡化代碼。 主要是看到一堆代碼會很亂,這樣理解更清晰。如果沒用過不用太過糾結。 對

原创 輕鬆理解 Spring AOP

目錄Spring AOP 簡介Spring AOP 的基本概念面向切面編程AOP 的目的AOP 術語和流程術語流程五大通知執行順序例子圖例實際的代碼使用 Spring AOP使用註解開發AOP第一步:選擇連接點第二步:創建切面第三步:定義切

原创 輕鬆理解 Java 靜態代理/動態代理

目錄什麼是代理模式定義代理模式的主要角色優點缺點靜態代理動態代理JDK原生動態代理例子分析小結CGLIB動態代理例子分析final類型其他方案尾聲 理解Java動態代理需要對Java的反射機制有一定了解 什麼是代理模式 在有些情況下,一

原创 輕鬆理解 Spirng IoC/控制反轉

目錄Spring IoC 概述IoC:Inverse of Control(控制反轉)一個例子Spring IoC 的好處IoC實例Spring IoC 容器的設計設計BeanFactoryApplicationContextApplica

原创 解決頁面加載閃白問題-背景圖片加載優化

頁面加載閃白 今天遇到一個問題,寫了一個使用深色背景圖的網頁,發現訪問/刷新時,會出現短暫的閃白現象。 之前使用淺色背景時沒有發現過這個問題,搜索半天也沒有找到特別直白有效的回答。 找到的幾個答案,有說預加載的,有說降低背景圖片的分辨率的,

原创 Java-Servlet知識總結

目錄Servlet概述爲什麼要學習Servlet什麼是 Servlet工作流程生命週期處理請求的方法HttpServletRequest 和 HttpServletResponseHttpServletRequest 常用方法獲取請求參數的

原创 Java-Stream流式計算

目錄什麼是 Stream流式計算舉例:對5個用戶進行篩選Stream 操作分類串行處理和並行處理建議 什麼是 Stream流式計算 在 Java8 之前,如果我們想重新排序合併數據,一般是通過 for 循環或者 Iterator 迭代等方式

原创 Java併發/多線程-CAS原理分析

目錄什麼是CAS併發安全問題舉一個典型的例子i++如何解決?底層原理CAS需要注意的問題使用限制ABA 問題概念解決方案高競爭下的開銷問題 什麼是CAS CAS 即 compare and swap,比較並交換。 CAS是一種原子操作,同時

原创 Java 四大函數式接口

Java四大函數式接口 函數式接口: 只有一個方法的接口 Consumer<T>消費型 給定一個參數,沒有返回值 void accept(T t); Consumer<String> c = (x) -> System.out.pr