原创 從零開始java郵件篇篇:spring Mail實現郵件發送

一:郵件發送   毋庸置疑,在一個企業級的管理後臺中,企業發送郵件是必要的的。在沒有spring Mail之前,javaMail發送郵件的步驟是繁瑣的。後來spring整合了相關的Mail之後,其API接口方式就變得很簡單了。其實spri

原创 從零開始java數據庫SQL優化(番外):SQL執行性能分析

目錄   一:爲什麼要進行性能分析 二:navcat快速進行性能分析 1.先來看一下一個100多萬條數據表的查詢: 2.添加limit查詢 3.navcat打開語句分析第一步:執行計劃 4、navcat打開語句分析第二步:執行狀態。 5、

原创 從零開始java數據庫SQL優化(一):一篇解決MYSQL查詢優化總綱

目錄 目錄 一:問題場景 二:優化 1.查詢計劃  2.分析計劃  連接類型 三:索引的使用與選擇 1.索引的使用以及優化 (1) MYSQL中的索引原理 (2) 4中樹結構在索引中的應用(附紅黑樹) 2、樹結構選擇合適的索引。 3、my

原创 從零開始java數據庫SQL優化(二):多個LEFT JOIN的SQL優化

一:場景   我代碼裏需要在用戶登錄時將所有用戶相關的用戶,角色,部門,崗位,權限(其中權限放在菜單中,每2張表有一張關聯表),不多說直接上SQL SELECT a.fk_user_id AS "fk_user_id",

原创 從零開始java多線程到分佈式鎖(二):多線程的之間的線程協作

一:java多線程的JVM運行模型   首先當一個單線程轉變成一個多線程運作時,我們需要對JVM的內存模型有一些基本的瞭解。首先我們來看一下在多線程的情況下JVM如何運行線程方式,如圖所示:                       

原创 從零開始java多線程併發---鎖(五):Lock接口源碼以及實現ReentraintLock解析使用

一:locks包   1.我們來看一下locks包含了哪些東西(jdk源碼): 2.相關簡要類說明(這裏爲了方便,部分直接以類圖說明,詳情見文檔) (1)同步器基礎 (2)獨享鎖 (3)讀寫鎖 (共享鎖/獨享鎖) (4)LockS

原创 從零開始java通知篇:Springboot+webSocket實現消息通知

一:實現消息實時通知   實現消息的實時通知有2種方案:即推和拉。拉,就是頁面用Ajax去輪詢訪問後臺是否有新的消息但是資源消耗很大,推即服務器通過“長鏈接”去實時推送消息去前端頁面主要的實現就是使用WwbSocket。   這裏,我們使

原创 從零開始java多線程到分佈式鎖(十四):分佈式鎖的討論

一:分佈式鎖   首先,我們在前面討論了鎖存在的意義:是爲了解決數據共享性和互斥性衝突的一種解決方案,就是實現數據“最終一致性”。現在我們討論一下爲什麼要用分佈式鎖的原因: 1.項目架構的演變(這裏我們主要討論服務應用層) (1)常見小型

原创 從零開始java多線程併發---鎖(七):AQS的共享鎖功能的實現(從CountDownLatch分析)

一:共享鎖   java中一般定義寫鎖爲獨享鎖而讀鎖爲共享鎖,而java中讀鎖單獨存在是沒有意義的,原因如下: 讀鎖只是對資源的讀取沒有對資源的修改,那麼效率會遠小於沒有鎖的讀。  java中只要讀鎖是依賴於寫鎖的,不同於寫鎖的所操作:獲

原创 從零開始java多線程到分佈式鎖(十二):Lock的實現原理

一:Lock鎖接口的實現方式ReentrantLock() ReentrantLock()是已知唯一一個Lock的實現。在上文我們都使用ReentrantLock()作爲實現的。關於   二:Lock的特殊的Api-Condition  

原创 從零開始java多線程到分佈式鎖(六):spring中的線程池框架

一:spring中的線程池框架   在上一張,簡要的說明了幾種線程池的創建。在一般的項目中使用已經足夠了。本節我們就特指springboot中的異步線程池的使用。 二:springboot中的異步線程池 (1)線程池參數的配置 pack

原创 從零開始java前端頁面篇:巧用全局緩存

一:場景問題   在我們的頁面設計中,我們使用了Spring security5在頁面上空到具體的按鈕顯示權限,如圖所示:          但是很尷尬的是在Js中是無法獲取到的,但是Js進行其它的按鈕控制比如以下:  然後,看了幾個網

原创 從零開始java文件服務器篇:文件服務器

一:文件服務器   在一個無論什麼樣的系統中,文件上傳/下載是一個不可或缺的基礎功能。在一個比較小的單體項目中,我們不會去單獨爲文件的存儲開闢一個服務器,但是隨着我們項目的一步一步擴展從ftp,sftp,分佈式存儲的服務器一步一步發展而來

原创 從零開始java多線程併發---鎖(十):LockSupport

一:LockSupport的介紹   在Condition的API中,我們看到其中阻塞和喚醒的方法都用到了park()和unpark()方法,這其實就是工具類LockSupport提供的對於指定線程的操作方法。   對於LockSuppo

原创 從零開始java多線程併發---鎖(六):AQS的獨佔鎖功能的實現(從Lock以及實現ReentraintLock分析)

一:分析獨佔鎖   JUC對於資源的共享資源的分類分爲2種:共享不可改變資源(fianl修飾)和共享可變資源。因此產生了JUC中的2種鎖類型:共享鎖和獨佔鎖。   上一節我們簡述了Lock接口以及其實現類ReentraintLock的源碼