原创 視圖在SQL中的應用

我們之前對 SQL 中的數據表查詢進行了講解,今天我們來看下如何對視圖進行查詢。視圖,也就是我們今天要講的虛擬表,本身是不具有數據的,它是 SQL 中的一個重要概念。從下面這張圖中,你能看到,虛擬表的創建連接了一個或多個數據表,不同的查詢應

原创 存儲過程在SQL中的應用

SQL 的存儲過程,它是 SQL 中另一個重要應用,和視圖一樣,都是對 SQL 代碼進行封裝,可以反覆利用。它和視圖有着同樣的優點,清晰、安全,還可以減少網絡傳輸量。不過它和視圖不同,視圖是虛擬表,通常不對底層數據表直接操作,而存儲過程是程

原创 SQL是如何執行的

雖然 SQL 是聲明式語言,我們可以像使用英語一樣使用它,不過在 RDBMS(關係型數據庫管理系統)中,SQL 的實現方式還是有差別的。接下里從數據庫的角度來思考一下 SQL 是如何被執行的。 Oracle 中的 SQL 是如何執行的 我們

原创 Java BIO模型

前面介紹了IO的分類和區別,本文將實現一個輸入字符表達式,輸出算術結果的BIO程序。通過該程序幫助進一步理解什麼是同步阻塞IO。 服務端 BIOServer,啓動服務端,並循環監聽客戶端連接,每監聽到一個請求,創建一個新線程處理數據。注意s

原创 Redis分佈式鎖的實現

分佈式鎖一般有三種實現方式:1. 數據庫樂觀鎖;2. 基於Redis的分佈式鎖;3. 基於ZooKeeper的分佈式鎖。本文將基於Redis實現分佈式鎖。 可靠性 爲了確保分佈式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件: 互斥性

原创 高併發環境下的限流策略

本文將從以下幾個方面分析限流策略: 什麼是限流 限流算法 限流算法的應用 什麼是限流 在開發高併發系統時,有很多手段來防止系統過載:緩存、降級、限流。緩存的目的是提升系統訪問速度和增大系統的吞吐量,降級和限流的目的如下: 降級 降級

原创 分佈式事務的解決方案

本文從以下幾個方面介紹分佈式事務的解決方案: 爲什麼會有分佈式事務 分佈式事務經典模型 分佈式事務解決方案 爲什麼會有分佈式事務 假設有如下一個架構,這是一個簡單的電商架構平臺,兩個應用節點,一個數據庫,一個負載均衡器。這個架構下,

原创 單點登錄解決方案

本文將從以下幾個方面介紹單點登錄問題,和單點登錄的解決方案: http 協議的特性 集羣環境下的 session 共享問題 關於負載均衡算法分析 session 共享問題的解決辦法 http 協議 無狀態性 Http 協議本身是無狀

原创 Java NIO之Selector

最後介紹一下Selector,選擇器提供選擇執行已經就緒的任務的能力,這使得多元I/O成爲了可能,就緒執行和多元選擇使得單線程能夠有效地同時管理多個I/O通道。選擇器的執行主要分爲以下幾個步驟: 1、創建一個或者多個可選擇的通道(Selec

原创 Java NIO之Buffer

Buffer是固定大小的數據的容器,其作用是一個存儲器,或者分段運輸區,在這裏數據可被存儲並在之後用於檢索。緩衝區的工作與通道緊密聯繫,待傳遞出去的數據被置於一個緩衝區,被傳送到通道;待傳回的緩衝區的傳輸,一個通道將數據放置在所提供的緩衝區

原创 One BIO Demo

本文將實現一個輸入字符表達式,輸出算術結果的BIO程序。通過該程序能進一步幫助理解什麼是同步阻塞IO。 服務端 BIOServer,啓動服務端,並循環監聽客戶端連接,每監聽到一個請求,創建一個新線程處理數據。注意serverSocket.a

原创 Java NIO之Channel

本文開始講解Java NIO 的三個核心組件,Channel,Buffer,Selector。先從Channel開始,Channel指的是通道。Channel用於在字節緩衝區和位於通道另一側的實體(通常是一個文件或套接字)之間有效地傳輸數據

原创 MyBatis一級緩存原理解析

Batis是一個簡單,小巧但功能非常強大的ORM開源框架,它的功能強大也體現在它的緩存機制上。MyBatis提供了一級緩存、二級緩存 這兩個緩存機制,能夠很好地處理和維護緩存,以提高系統的性能。本文將介紹MyBatis的一級緩存,並深入源碼

原创 Mybatis數據源和連接池

本文將從以下幾個方面介紹Mybatis的數據源和連接池: MyBatis數據源DataSource分類 數據源DataSource的創建過程 DataSource什麼時候創建Connection對象 MyBatis數據源DataSo

原创 MyBatis事務管理機制

MyBatis作爲Java語言的數據庫框架,對數據庫的事務管理是其非常重要的一個方面。本文將從事務的分類、配置和實現分析MyBatis的事務管理的實現機制。 MyBatis事務的分類 對數據庫的事務而言,應該具有以下幾點:創建(create