博客 / 列表

愛學習的懶洋洋 - Spring AOP + Guava RateLimiter:我是如何用註解實現優雅限流的?

寫在前面 提起 AOP(面向切面編程),大家的第一反應往往是:“哦,那個用來打印日誌、管理事務、或者做權限校驗的。” 其實,AOP 的能力遠不止於此。在面對高併發場景下的接口自我保護時,它同樣能發揮奇效。 最近在項目中遇到了一個真實場景:這是一個基於 MQ 觸發的定時跑批任務。平日裏風平浪靜,可是一旦大促或者數據量激增,MQ 裏的積壓消息就會瞬間推送給消費者。 雖然消費者服務雖然處理得過

後端

愛學習的懶洋洋 - MyBatis踩坑實錄:那些不報錯但讓你debug到深夜的Bug

早上剛到公司,打開電腦,寫着需求聽着歌。突然釘釘一響,測試發來消息:"你那個接口報錯了"。打開日誌一看,MyBatis又炸了。 説實話,MyBatis這玩意兒平時挺好用的,但有時候報的錯真讓人摸不着頭腦。尤其是那種本地跑得好好的,一上線就炸的Bug,簡直讓人懷疑人生。今天就記錄兩個讓我debug到深夜的坑,它們都有個共同特點:代碼看起來完全沒問題,但運行時就是莫名其妙地報錯。 如果你也被My

後端

愛學習的懶洋洋 - Spring Boot WebSocket方案終極指南:Netty與官方Starter對比與實踐

一、Maven依賴引入 1. Netty-WebSocket-Spring-Boot-Starter dependency groupIdorg.yeauty/groupId artifactIdnetty-websocket-spring-boot-starter/artifactId version0.13.0/version !-- 請使用最新版本 -- /depen

後端

愛學習的懶洋洋 - MCP 爆火背後:是技術革命,還是精心包裝的“新瓶舊酒”?

2024 年末,MCP(Model Context Protocol)火了。各種技術文章蜂擁而至:"MCP 革命性突破!"、"AI 工具調用的未來!"、"不懂 MCP 就out了!" 但當你真正去了解時,會發現很多文章要麼是概念科普(講了半天不知道怎麼用),要麼是願景描繪(聽起來很美好但落不了地)。 這篇文章就是來破局的。 我們不講故事,只講本質:MCP 到底是什麼?它解決了什麼問題?和

AI

愛學習的懶洋洋 - Spring監聽器(ApplicationEvent):比MQ更輕的異步神器!

引言:當咖啡店遭遇程序員 “顧客擠爆櫃枱時,優秀的店長不會催促咖啡師加速,而是啓動一套科學的協作機制—— 就像Spring事件驅動,用發佈-訂閲模式讓系統像頂級咖啡團隊般優雅應對洪峯流量” 一、咖啡店裏的監聽器:3位靈魂角色 真實戰場還原(每秒1000訂單的咖啡店): graph LR 顧客["🔥 顧客喊單(事件發佈者)"] -- 訂單事件["📦 OrderEvent(事件對

後端

愛學習的懶洋洋 - Elasticsearch 避坑指南:我在項目中總結的 14 條實用經驗

剛開始接觸 Elasticsearch 時,我覺得它就像個黑盒子——數據往裏一扔,查詢語句一寫,結果就出來了。直到負責公司核心業務的搜索模塊後,我才發現這個黑盒子裏面藏着無數需要注意的細節。 今天就把我在實際項目中積累的 ES 使用經驗分享給大家,主要從索引設計、字段類型、查詢優化、集羣管理和架構設計這幾個方面來展開。 索引設計:從基礎到進階 1. 索引別名(alias):為變更留條後

數據庫

愛學習的懶洋洋 - 與產品經理的“模糊”對決:Elasticsearch實現MySQL LIKE '%xxx%'

掘金原文(個人技術文章優先在掘金髮布):https://juejin.cn/post/7559981310472470562 曾以為掌握了Elasticsearch的match查詢就征服了搜索世界——直到產品經理輕叩桌面,拋出一個看似簡單的要求:"我們需要像MySQL的LIKE '%關鍵詞%'那樣前後通配的模糊搜索。" 我嘴角微揚,意識到真正的技術探險才剛剛開始。 引子:一場關於“模

數據庫

愛學習的懶洋洋 - 有了TCP為什麼還需要HTTP?再用RPC?這次徹底講明白了

掘金原文(個人技術文章優先在掘金髮布):https://juejin.cn/post/7559981310472470562 記得剛工作那會兒,第一次接觸RPC概念時,我內心滿是疑惑——明明HTTP用得好好的,為什麼要搞出個RPC?直到參與了幾個微服務項目後,我才真正能理解它們各自的價值。今天,就讓我們一起理清這些協議之間的關係。 從網絡基礎説起:TCP的能力與侷限 剛開始接觸網絡

後端

愛學習的懶洋洋 - Spring Boot自動裝配實戰:多數據源SDK解決Dubbo性能瓶頸

Spring文章專欄:https://juejin.cn/column/7511884538579877939 明明學了自動裝配,卻鮮有機會實戰?當我面對Dubbo性能瓶頸時,一個自定義Starter的構想讓我開啓了Spring Boot條件化裝配的奇妙之旅。 引言:那些年我們學過的自動裝配 記得畢業那會剛開始學習Spring Boot的時候,自動裝配機制讓我眼前一亮——"約定大於配置

後端

愛學習的懶洋洋 - MySQL EXPLAIN中的key_len:精準掌握索引使用情況

MySQL系列文章 深入解析MySQL執行計劃中最關鍵的指標之一,助你快速定位索引優化點,提升查詢性能! 一、key_len:索引使用的精準標尺 在MySQL執行計劃中,key_len表示查詢實際使用索引的字節長度。這個指標是索引優化的核心,它能揭示: 複合索引使用深度:顯示使用了複合索引的前幾列 索引利用效率:值越大,索引利用率越高 索引失效檢測:NULL值表示索引未被使用 數

數據庫

愛學習的懶洋洋 - MySQL EXPLAIN執行計劃:SQL性能翻倍的秘密武器

MySQL系列文章 在數據庫性能優化領域,Explain執行計劃是MySQL開發者與DBA必須掌握的利器。它揭示了SQL語句的執行路徑、索引使用情況及資源消耗模型,是診斷慢查詢和優化索引策略的核心工具。本文將全方位解析Explain的機制與實踐技巧,助你徹底掌握SQL性能調優。 一、Explain工具概述 Explain是MySQL提供的SQL分析指令,通過在SELECT前添加EXPLAI

數據庫

愛學習的懶洋洋 - MySQL索引(四):深入剖析索引失效的原因與優化方案

MySQL系列文章 本文是 MySQL索引系列的第四篇。在前三篇文章中,我們系統介紹了索引的數據結構、覆蓋索引、最左前綴原則、索引下推等核心優化技術,以及字符串索引的優化方法。本文將深入分析索引失效的多種場景及其背後的原理,幫助你全面理解索引為何有時會“失效”,以及如何有效避免和優化這類問題。 一、核心原理:B+樹索引的有序性特性 要理解索引失效的原因,我們首先需要回顧B+樹索引的核心特性

數據庫

愛學習的懶洋洋 - 【MySQL優化】扔掉ORDER BY RAND()!隨機推薦的性能提升方案

MySQL系列文章 面對海量數據隨機推薦需求,如何平衡性能與隨機性成為關鍵挑戰 背景與需求分析 在電商平台開發中,我們經常需要實現“隨機推薦”功能:從商品庫中隨機選取指定數量的商品展示給用户。假設商品表(product)有10000條數據,需要隨機獲取3個不重複的商品。 許多開發者第一反應是使用 ORDER BY RAND() 實現(如果你不知道,那當我沒説),但這種方法的性能代價極高,在

數據庫

愛學習的懶洋洋 - MySQL DATETIME類型存儲空間詳解:從8字節到5字節的演變

MySQL系列文章 在MySQL數據庫設計中,DATETIME類型用於存儲日期和時間信息,但其存儲空間大小並非固定不變,而是隨MySQL版本迭代和精度定義動態變化。本文將詳細説明其存儲規則,並提供清晰的對比表格。 一、核心結論 MySQL 5.6.4 是分水嶺:此前固定佔用 8 字節;此後優化為 5 字節基礎 + 精度附加空間。 精度決定擴展空間:若定義小數秒(如 DATETIME(

數據庫

愛學習的懶洋洋 - MySQL索引(三):字符串索引優化之前綴索引

MySQL系列文章 在數據庫優化中,字符串字段的索引設計往往是個棘手的問題。過長字符串的完整索引會佔用大量空間,而不合適的索引又會導致查詢性能低下。今天我們來探討一個平衡的藝術——前綴索引。 字符串索引的現實挑戰 假設我們正在開發一個內容管理平台,文章表結構如下: CREATE TABLE articles ( id BIGINT UNSIGNED PRIMARY KEY AUTO

數據庫

愛學習的懶洋洋 - MySQL 基礎架構(二):連接層與數據存儲層深度解析

本文將聚焦於MySQL架構的另外兩個關鍵組成部分:**連接層**與數據存儲層,揭秘客户端如何與MySQL建立通信橋樑,以及數據如何持久化到物理磁盤。 MySQL系列文章 在上一篇文章《MySQL 基礎架構(一):SQL語句的執行之旅》中,我們深入探討了MySQL的核心服務層與存儲引擎層。本文將聚焦於MySQL架構的另外兩個關鍵組成部分:連接層與數據存儲層,揭秘客户端如何與My

MySQL

愛學習的懶洋洋 - MySQL索引(一):從數據結構到存儲引擎的實現

索引的本質是一種數據結構,用於快速定位數據,就像書的目錄一樣,可以幫助我們快速找到需要的內容,而不必逐頁翻閲。 MySQL系列文章 MySQL索引是數據庫性能優化的核心知識之一。正確理解索引的原理和使用場景,對於編寫高效的SQL語句和設計合理的表結構至關重要。本文將系統介紹MySQL索引的相關知識,包括常見的數據結構、不同存儲引擎的索引實現方式,以及聚簇索引和非聚簇索引的區別

MySQL

愛學習的懶洋洋 - MySQL 基礎架構(一):SQL語句的執行之旅

MySQL 採用經典的分層架構設計,整體可分為 Server 層和存儲引擎層兩大部分。這種設計實現了核心功能與存儲實現的分離,為不同類型的應用場景提供了靈活的存儲方案。 MySQL系列文章 你是否好奇過,一條看似簡單的SQL查詢語句,在MySQL內部究竟經歷了怎樣的"奇幻之旅"?從連接建立到結果返回,MySQL是如何層層處理、優化執行,最終將數據呈現在我們面前的? 作為一

MySQL

愛學習的懶洋洋 - MySQL索引(二):覆蓋索引、最左前綴原則與索引下推詳解

MySQL系列文章 本文是MySQL索引系列的第二篇,接續前文《MySQL索引(一):從數據結構到存儲引擎的實現》的基礎知識,將深入探討索引的高級特性和優化技巧。本文將通過實際案例,詳細解析覆蓋索引、最左前綴原則和索引下推這三個核心優化技術。 在數據庫性能優化中,合理使用索引是最有效的手段之一。前文我們介紹了索引的基本數據結構和工作原理,今天我們將繼續探索MySQL索引的三個特

數據庫