博客 / 列表

今夜有點兒涼 - 高併發問題解決方案

高併發問題是指系統需要處理大量用户請求或大量併發操作時所面臨的挑戰,通常表現為請求量大、處理時間長、響應速度慢、資源耗盡等問題。為了應對高併發場景,系統需要設計成能夠高效地處理併發請求,並確保系統的穩定性和可擴展性。以下是一些常見的解決高併發問題的方法和技術: 1. 負載均衡 目的:分擔單個服務器的壓力,提高系統處理能力。 實現方式: 應用層負載均衡:使用負載均衡器(如 N

限流 , 微服務 , 異步處理 , 負載均衡 , 緩存

今夜有點兒涼 - GC的三種收集方法詳解

GC的三種收集方法詳解 1. 標記-清除算法 (Mark-Sweep) 原理 標記階段:從根對象(GC Roots)開始,標記所有可達的對象 清除階段:掃描整個內存區域,回收所有未被標記的對象 特點 優點:實現簡單,不需要對象移動 缺點: 產生內存碎片,導致大對象可能無法找到連續內存空間而提前觸發Full GC 標記和清除兩個階段都需要掃描整個堆內存,效率較低

算法 , gc , 垃圾回收

今夜有點兒涼 - MySQL 事務

MySQL事務詳解 什麼是事務 事務(Transaction)是數據庫操作的最小邏輯單位,是一組要麼全部成功執行要麼全部失敗回滾的操作集合。事務確保數據從一種一致性狀態轉換到另一種一致性狀態,即使在系統故障的情況下也能保持數據的完整性。 事務的ACID特性 事務必須具備ACID特性: 原子性(Atomicity):事務是一個不可分割的工作單位,要麼全部執行成功,要麼全部失敗回滾 一致性(Co

MySQL , 事務

今夜有點兒涼 - MySQL EXPLAIN 命令詳解

MySQL EXPLAIN 命令詳解:解讀執行計劃的關鍵信息 MySQL的EXPLAIN命令用於分析SQL查詢語句的執行計劃,幫助開發者瞭解查詢的執行過程、索引使用情況以及性能瓶頸。通過分析EXPLAIN的輸出結果,我們可以優化SQL語句和數據庫結構。 一、EXPLAIN 輸出列的關鍵信息 1. id 列 含義:查詢的標識符,表示執行順序 解讀: 相同id表示在同一層級執行

MySQL , explain

今夜有點兒涼 - MySQL回表

MySQL回表(Table Return)概念詳解 基本概念 回表(Table Return)是MySQL查詢過程中的一種操作,指的是當查詢使用非聚集索引(普通索引、唯一索引等)找到所需數據後,由於這些索引只包含索引列和主鍵信息,而查詢需要獲取表中的其他列數據,MySQL需要再次根據主鍵值去主鍵索引(聚集索引)中查詢完整數據行的過程。 索引結構與回表關係 要理解回表,首先需要了解MySQL中兩種主

MySQL

今夜有點兒涼 - MySQL主從複製

MySQL主從複製詳解 基本概念與作用 MySQL主從複製是一種數據同步機制,允許將一個MySQL服務器(主服務器)的數據變更實時複製到一個或多個MySQL服務器(從服務器)。主從複製主要有以下作用: 數據備份:從服務器可作為主服務器的實時備份 負載均衡:讀操作分發到從服務器,減輕主服務器壓力 高可用架構:主服務器故障時可快速切換到從服務器 數據分發:將數據複製到地理分佈式服務器 版本

MySQL , 主從複製

今夜有點兒涼 - MySQL日誌系統

MySQL日誌系統詳解 MySQL使用多種日誌來記錄數據庫的運行狀態、數據變更和錯誤信息,這些日誌對於數據庫管理、性能監控、故障排查和數據恢復至關重要。以下是MySQL中主要的日誌類型及其作用: 1. 錯誤日誌(Error Log) 作用 錯誤日誌記錄MySQL服務器啓動、關閉和運行過程中的關鍵信息和錯誤。 內容包括 服務器啓動和關閉的時間信息 啓動過程中加載的配置和存儲引擎信息 運行過程

MySQL , binlog

今夜有點兒涼 - MyISAM與InnoDB對比分析

MySQL存儲引擎:MyISAM與InnoDB對比分析 一、核心架構與特點對比 特性 MyISAM InnoDB 事務支持 不支持事務 支持ACID事務 鎖粒度 表級鎖 行級鎖(支持表級鎖) 併發性能 低(表鎖限制) 高(行鎖優勢) 外鍵約束 不支

innodb , myisam , 存儲引擎

今夜有點兒涼 - Java垃圾回收器詳解

Java垃圾回收器詳解 主要垃圾回收器分類 Java中的垃圾回收器可以根據不同的分類標準進行劃分: 按線程數分類: 串行垃圾回收器(Serial GC) 並行垃圾回收器(Parallel GC) 併發垃圾回收器(CMS, G1, ZGC, Shenandoah) 按工作區域分類: 新生代垃圾回收器(Serial, ParNew, Pa

g1gc , 垃圾回收 , cms

今夜有點兒涼 - HashMap,Java 8 後紅黑樹機制

在HashMap中,當發生哈希衝突且key不同時,追加到鏈表尾部或紅黑樹中的詳細機制如下: 1. 追加到鏈表尾部(Java 8之前) Java 8之前,HashMap使用「頭插法」將新節點插入到鏈表頭部 Java 8及以後,改為使用「尾插法」將新節點追加到鏈表尾部 這樣做的主要原因是避免在多線程環境下可能導致的鏈表成環問題,同時配合紅黑樹優化,使查詢性能更穩定 2. 紅黑樹轉換機制 當滿

hashmap

今夜有點兒涼 - Spring Cloud 和 Dubbo 區別

Spring Cloud 和 Dubbo 是兩種主流的微服務框架,它們在設計理念、技術實現和應用場景上有顯著差異。以下是兩者的核心區別及各自的優缺點分析: 一、核心區別 1. 初始定位與設計理念 Spring Cloud:定位為微服務架構的一站式解決方案,提供完整的分佈式系統開發工具鏈(如服務註冊、配置中心、網關、熔斷器等),注重微服務治理的全面性。 Dubbo:起源於 SOA 時代,核心

dubbo , spring-cloud

今夜有點兒涼 - MySQL 主從延遲及其解決方案

MySQL 主從複製的同步機制是由從庫(Slave)發起請求,然後主庫(Master)通過一個名為 log dump 的線程將日誌推送給從庫。接收到日誌後,從庫會將其保存到中繼日誌(Relay Log)中,並通過 SQL 線程(SQL thread)執行這些日誌操作。這個過程是異步的,且主庫不會關心從庫是否同步。 主從延遲的可能原因: 網絡延遲 主庫與從庫之間的數據是通過網絡進行傳輸

同步 , MySQL , 主從複製

今夜有點兒涼 - Spring Bean 生命週期

Bean 生命週期指的是從 Spring 容器創建一個 Bean 到銷燬它的整個過程。Spring 通過管理 Bean 的生命週期來幫助我們控制 Bean 的創建、初始化、使用和銷燬。 Spring Bean 生命週期 實例化: 通過構造函數或工廠方法創建 Bean 的實例。 屬性賦值(依賴注入): Spring 會為 Bean 設置依賴的屬性(也就是依賴注入,通常是通過

spring , 生命週期

今夜有點兒涼 - 分佈式鎖有哪些應用場景?

分佈式鎖在分佈式系統中用於解決多個服務實例或多個應用節點之間共享資源時的併發問題。它可以確保同一時間只有一個實例對共享資源進行操作,從而避免數據衝突或不一致的問題。以下是一些常見的分佈式鎖應用場景: 1. 高併發下的資源爭搶(秒殺活動中的庫存扣減) 場景:秒殺活動通常會引發大量併發請求,多個用户可能同時嘗試購買同一件商品。在沒有適當的同步機制下,可能會發生 超賣(即系統允許超過庫存數量的購買)

redisson , 分佈式鎖 , etcd , zookeeper

今夜有點兒涼 - 線程池參數設置

1. 線程池的基本概念 線程池是用來管理線程的工具,它可以有效地控制併發任務的執行。通過線程池,可以: 降低創建和銷燬線程的開銷。 限制同時運行的線程數,避免過多線程導致系統資源過載。 提供線程複用,減少上下文切換的開銷。 2. 線程池的核心參數 核心線程數 (corePoolSize):線程池中始終保持活動的線程數。如果任務隊列中有任務,線程池會首先使用這些核心線程來執行任務。

線程池 , JAVA , 參數

今夜有點兒涼 - AOP 項目中的應用

在實際的項目中,AOP(面向切面編程)通常被用於處理一些橫切關注點,這些關注點通常與業務邏輯無關,但卻需要應用到多個業務邏輯中。以下是一些常見的 AOP 應用場景: 1. 日誌記錄 目的:在方法執行的前後,記錄系統的運行日誌,通常用於監控、調試和故障排查。 AOP應用:通過 AOP 切面,在每個方法執行前後插入日誌記錄邏輯,而無需在每個方法中顯式地調用日誌記錄代碼。 示例:記錄方法的執行時

spring , aop , JAVA

今夜有點兒涼 - Spring 的 IOC 和 AOP

Spring IOC(Inversion of Control,控制反轉) 控制反轉(IOC) 是面向對象編程中的一種設計原則,它的核心思想是:控制權的轉移,即不再由程序員顯式地管理對象的創建和生命週期,而是交給容器來管理。Spring 框架的核心理念之一就是 IOC,它通過 Spring IoC 容器 來實現對象的創建、依賴注入和生命週期管理。 1. IOC 的基本概念 依賴注入(DI

spring , aop , di , JAVA , ioc

今夜有點兒涼 - 代碼中的異常處理

在開發過程中,異常處理是保證系統穩定性和提升用户體驗的重要環節。根據不同的情況,我們通常將異常分為 業務異常 和 系統異常,並根據不同類型的異常採取不同的處理策略。 1. 業務異常(Business Exception) 定義: 業務異常通常由應用程序的業務邏輯或用户輸入錯誤引發。它們表示業務操作不符合預期或違反了業務規則,通常不影響系統的穩定性。 何時拋出業務異常? 用户輸入無效,如表單數據

JAVA , 異常處理 , 後端

今夜有點兒涼 - Dubbo 的底層原理

Dubbo 是阿里巴巴開源的一款分佈式服務框架,主要用於解決服務治理、遠程調用和高併發等問題,廣泛應用於微服務架構中。Dubbo 底層原理涉及多個核心組件和機制,主要包括服務註冊與發現、通信機制、集羣容錯和負載均衡等。以下是 Dubbo 的底層原理的詳細解析: 1. 架構設計 Dubbo 的架構主要分為三大角色: 服務提供者(Provider):提供服務的實體。 服務消費者(Consume

服務註冊 , dubbo , 負載均衡 , zookeeper , 分佈式系統

今夜有點兒涼 - 垃圾收集器 CMS 和 G1 有什麼區別?

CMS(Concurrent Mark-Sweep)和G1(Garbage-First)是Java虛擬機中兩種不同的垃圾收集器,各自具有特定的優缺點和適用場景。 CMS(Concurrent Mark-Sweep) 併發性: 標記-清除算法:CMS使用標記-清除算法來進行垃圾回收。在垃圾回收過程中,標記階段和清除階段可以與應用程序的運行同時進行(即併發執行),從而減少了應用程

g1gc , jvm調優 , cms , JAVA

今夜有點兒涼 - JVM 調優

JVM 調優概述 JVM(Java Virtual Machine)調優是指通過對 JVM 的各個方面進行配置、監控和優化,以提高 Java 應用程序的性能。調優的目標是使應用程序在不同的運行環境下達到最佳的響應速度和吞吐量,減少資源消耗(如內存和CPU使用率)。 JVM 調優通常分為以下幾個方面: 堆內存調優(Heap Memory Tuning) 垃圾回收調優(Garbage Colle

g1gc , jvm調優 , 算法 , cms , JAVA

今夜有點兒涼 - Spring IOC 控制反轉

Spring IOC(Inversion of Control,控制反轉)是 Spring 框架的核心特性之一,它通過管理對象之間的依賴關係,實現了對象的解耦和管理。理解 Spring IOC 的關鍵點包括它的概念、作用、實現方式以及優勢。 核心概念和術語: 控制反轉(Inversion of Control,IoC): 控制反轉指的是將對象的創建和依賴關係的管理交給容器(S

di , JAVA , ioc

今夜有點兒涼 - Spring AOP 的通知順序

在 Spring AOP 中,通知(Advice)的順序是由通知的類型和聲明的順序決定的。Spring AOP 提供了幾種不同類型的通知,包括前置通知、後置通知、環繞通知、異常通知和最終通知。它們的執行順序主要依賴於通知的類型和它們在配置中聲明的順序。 通知類型及其執行順序 前置通知(@Before):在方法執行前執行。 執行順序:最先執行。 環繞通知(@A

spring , aop , JAVA

今夜有點兒涼 - Redis怎麼實現分佈式鎖,以及注意事項

Redis 做分佈式鎖是通過利用 Redis 的一些基本命令來實現鎖的獲取、釋放以及避免死鎖等問題。常見的實現方式包括使用 SETNX 命令、SET 命令以及 RedLock 算法。 1. 分佈式鎖的基本實現方式 使用 SETNX 命令實現分佈式鎖 SETNX(SET if Not Exists)是 Redis 提供的一個原子命令,用於設置鍵值對,只在鍵不存在時執行操作。通過這個命令,可以實現簡單

redis , , JAVA , 分佈式 , 後端