原创 【精】使用各種場景徹底明白mysql的MVCC原理 1. 多個undo log形成的鏈表 2. MVCC版本控制 3. MVCC爲什麼不能解決幻讀 好文閱讀

1. 多個undo log形成的鏈表 InnoDB存儲引擎中,它的聚簇索引記錄中都包含兩個必要的隱藏列,分別是: trx_id:事務Id,每次一個事務對某條聚簇索引記錄進行改動時,都會把該事務的事務id 賦值給trx_id 隱藏列。 ro

原创 SpringBoot整合Mybatis+druid快速開發 1. 配置類 2.插件類 3. Mapper類

1. 配置類 配置類: @Slf4j @Configuration public class DBConfig { @Value("${mysql.mapperLocations}") private String ma

原创 mysql的頁斷裂(partial write)問題與(double write)技術 1. 頁斷裂 2. double write 推薦閱讀

1. 頁斷裂 1.1 什麼叫做頁斷裂(partial write) 頁斷裂是數據庫宕機時,數據庫頁面只有部分寫入磁盤,導致頁面出現不一致的情況。 1.2 爲什麼會發生頁斷裂 InnoDB中有記錄(Row)被更新時,先將其在Buffer Po

原创 mysql的邏輯日誌、物理日誌與物理邏輯日誌 1. 物理日誌與邏輯日誌的存儲內容 2. 物理日誌與邏輯日誌的比較 3. 工業實踐與典型案例 4. 總結 REFERENCE

轉載:邏輯日誌與物理日誌 日誌主要分爲邏輯日誌和物理日誌: 邏輯日誌 Logic log[1]; 物理日誌 Physical log[2]; 1. 物理日誌與邏輯日誌的存儲內容 1.1 Physical Logging 物理日誌和邏輯日

原创 MySql性能(9)- mysql的order by的工作原理 1. 全字段排序 2. rowid排序 3. 全字段排序和rowid排序 4. 優先隊列算法 5. 優化建議 文章來源

全字段排序 rowid排序 全字段排序和rowid排序 3.1 聯合索引優化 3.2 覆蓋索引優化 優先隊列算法 優化建議 5.1 修改系統參數 5.2 優化sql 1. 全字段排序 CREATE TABLE `t` ( `id`

原创 Spring的getRequestURI與getRequestURL方法導致安全風險 1. 測試代碼 2. 繞過方式 3. 預防措施 推薦閱讀

我們有時候會在Filter中對某些URL進行權限校驗。若使用getRequestURI與getRequestURL方法獲取URL,可能會導致權限繞過的風險。 漏洞原理:請求URL中可以填充一些特殊字符,來跳過權限校驗。 1. 測試代碼

原创 mybatis如何預防不經意間的SQL注入 1. 理論 2. 實踐 文章參考

SQL注入的危害就不多說,但是如何在日常開發中預防SQL注入? 1. 理論 什麼是SQL注入 注入攻擊的本質,是程序把用戶輸入的數據當做代碼執行。這裏有兩個關鍵條件: 第一是用戶能夠控制輸入; 第二是用戶輸入的數據被拼接到要執行

原创 JDK8中lamda表達式中peek和map的區別

peek(窺視)和map(轉換)顧名思義:一個是看一眼參數,一個是轉化參數。 也和其入參有關。 Stream<T> peek(Consumer<? super T> action); <R> Stream<R> map(Function<

原创 SpringBoot2.x之HandlerMethodArgumentResolver(2)—自定義解析器順序 1. 解決方案 2. 源碼分析

在SpringBoot2.x之HandlerMethodArgumentResolver實戰中,我們完成自定義解析器的編寫。那麼如何去定義解析器的優先級呢? 1. 解決方案 @Slf4j @Configuration public cl

原创 Jackson序列化(8)— 支持泛型的反序列化 1. 將帶有泛型的對象進行反序列化 2. Type轉化爲jackson的JavaType類型

1. 將帶有泛型的對象進行反序列化 藉助的是com.fasterxml.jackson.core.type.TypeReference對象,本質是使用匿名內部類來得到泛型對象。 public static void main(Str

原创 spEL表達式注入漏洞以及預防措施 1. 簡介 2. spEL安全漏洞 3. 防禦方法 相關文章 推薦閱讀

1. 簡介 在Spring系列產品中,SpEL是表達式計算的基礎,實現了與Spring生態系統所有產品無縫對接。Spring框架的核心功能之一就是通過依賴注入的方式來管理Bean之間的依賴關係,而SpEL可以方便快捷的對Applicatio

原创 jOOQ系列一:SpringBoot2.x整合jOOQ 1. 引入依賴 2. 配置類 3. 配置文件 4. 使用mvn命令自動生成代碼 推薦閱讀

jOOQ,是一個ORM框架,利用其生成的Java代碼和流暢的API,可以快速構建有類型約束的安全的SQL語句 1. 引入依賴 1.1 依賴的pom文件 <?xml version="1.0" encoding="UTF-8"?> <pr

原创 logback日誌使用if...else邏輯判斷 一、引入依賴 二、條件表達式 三、簡單案例

在項目中,存在使用條件判斷的場景,例如想爲測試和生產設置不同的日誌記錄級別。幸好的是,logback本身已經支持這種場景。 一、引入依賴 <dependency> <groupId>org.cod

原创 mysql分頁場景下SQL_CALC_FOUND_ROWS代替count(*) 1. mysql5.x版本 2. mysql8.x版本 推薦閱讀

1. mysql5.x版本 分頁場景下,我們希望語句在沒有limit的情況下將返回多少行,而無需再次運行該語句。要獲取此行行數,請在select語句中包含SQL_CALC_FOUND_ROWS的選項,然後在調用FOUND_ROWS();

原创 SpringBoot事務失效(1)—dataSource配置問題 1. 問題原因 2. 源碼復現 3. 改進方案

場景:Spring事務沒有生效。 環境:SpringBoot+mybatis 或者SpringBoot+JdbcTemplate等 1. 問題原因 xml等配置信息詳見:SpringBoot2.x實現鏈式事務(分庫事務) @Slf4j @C