0%

为什么 Spring Boot 项目可以直接执行?(从打包到启动的完整原理)

Spring Boot 项目能通过 java -jar xxx.jar 直接执行,核心原因是它打包生成的并非普通 JAR 文件,而是经过 spring-boot-maven-plugin 特殊处理的可执行 JAR(Executable JAR)—— 这种 JAR 内置了 “启动器” 和 “自定义类加载器”,能自动加载依赖、初始化 Spring 上下文,最终启动应用。从 “打包结构→启动器原理→类加载机制” 三个维度,彻底讲透 Spring Boot 直接执行的底层逻辑。

先明确:Spring Boot 打包的不是普通 JAR

普通 Java 项目打包的 JAR(如 Maven 的 jar 插件生成的)仅包含项目自身的 .class 文件,无法直接通过 java -jar 执行(会报 “没有主清单属性” 错误),因为它缺少两个关键要素:

  1. 明确的 “启动类” 配置(告诉 JVM 入口在哪);
  2. 依赖的第三方 JAR 包(普通 JAR 不会包含依赖,需手动指定类路径)。

而 Spring Boot 项目通过 spring-boot-maven-plugin 打包后,生成的 JAR 结构和配置完全不同 —— 它解决了 “依赖加载” 和 “启动入口” 两个核心问题

关键文件:MANIFEST.MF 中的启动配置

MANIFEST.MF 是 JAR 文件的 “清单文件”,位于 META-INF/ 目录下,用于描述 JAR 的元信息(如版本、主类)。Spring Boot 生成的 MANIFEST.MF 包含 3 个核心配置,直接决定了 “能否直接执行”:

阅读全文 »

InnoDB 缓冲池:原理、机制与优化

InnoDB 缓冲池(Buffer Pool)是提升数据库性能的核心组件,通过将磁盘上的频繁访问数据缓存到内存,显著减少磁盘 IO 次数。理解缓冲池的工作机制、LRU 管理、Checkpoint 策略及配置优化,对提升 MySQL 性能至关重要。

缓冲池的核心作用

缓冲池是一块内存区域,用于缓存磁盘中的数据页(默认页大小 16KB),其核心目标是:

  • 加速读取:频繁访问的页从内存读取,避免重复磁盘 IO。
  • 优化写入:修改操作先更新内存中的页(脏页),再异步刷新到磁盘,减少实时磁盘写入开销。

缓冲池的管理机制

LRU 列表:页的冷热管理

InnoDB 采用改进的 LRU(最近最少使用)算法管理缓冲池中的页,避免简单 LRU 算法的缺陷(如全表扫描污染热点数据)。

(1)LRU 列表的结构
  • 分为 new 列表(热数据,占比约 63%)和 old 列表(冷数据,占比约 37%),分界点称为 midpoint(由 innodb_old_blocks_pct 控制,默认 37)。
  • 新页加载时,先放入 old 列表的头部(而非 new 列表),避免一次性加载大量数据(如全表扫描)直接占据热数据区域。
阅读全文 »

InnoDB 监控全解析:指标、工具与性能诊断

InnoDB 作为 MySQL 最常用的存储引擎,其性能直接影响数据库整体表现。有效的监控能及时发现潜在问题(如锁竞争、IO 瓶颈、缓冲池不足等)。本文详细介绍 InnoDB 监控的核心工具、关键指标及分析方法。

核心监控工具与命令

1. show engine innodb status:InnoDB 状态全景

该命令输出 InnoDB 核心运行状态,包含后台线程、事务、锁、IO、缓冲池等关键信息,是诊断问题的首要工具。

(1)BACKGROUND THREAD:后台线程状态
1
2
srv_master_thread loops: 19610306 srv_active, 0 srv_shutdown, 9705136 srv_idle
srv_master_thread log flush and writes: 29312902
  • 含义:统计 InnoDB 启动后主线程的活动状态(srv_active:活跃次数;srv_idle:空闲次数)及日志刷新 / 写入次数。
  • 关注点:若 srv_idle 占比过低,可能表示主线程负载过高(如频繁刷脏页)。
(2)SEMAPHORES:信号量与锁等待
1
2
RW-shared spins 0, rounds 77349143, OS waits 9180114
RW-excl spins 0, rounds 179767865, OS waits 2534243
  • 含义:共享锁(RW-shared)、排他锁(RW-excl)的自旋次数(spins)、循环次数(rounds)和 OS 等待次数(OS waits)。
  • 关注点OS waits 持续增长表明锁竞争激烈(如大量事务争抢同一资源),需优化 SQL 或调整隔离级别。
(3)TRANSACTIONS:事务状态
阅读全文 »

Mac 系统实用工具:系统信息查看与问题诊断

Mac 系统内置了多款实用工具,用于监控系统状态、查看硬件信息和诊断问题。其中 System Profiler(系统信息)Console(控制台)Activity Monitor(活动监视器) 是最常用的三款,分别对应系统信息查询、日志分析和进程监控功能。

System Profiler(系统信息):硬件与软件详情查询

System Profiler(在 macOS 10.12 及以上版本中名为 “系统信息”)是查看 Mac 硬件配置、软件环境和网络信息的核心工具。

主要功能

  • 硬件信息:详细列出处理器(CPU)、内存(RAM)、硬盘(SSD/HDD)、显卡、主板等硬件参数。
  • 网络信息:显示网络接口(Wi-Fi、以太网)的 IP 地址、MAC 地址、连接速度等。
  • 软件信息:已安装的操作系统版本、应用程序、系统扩展(如驱动)等。
  • 外设信息:连接的外部设备(如打印机、U 盘、显示器)的型号和状态。

如何打开

  1. 点击 Dock 栏的 启动台(Launchpad),进入 其他 文件夹,找到 系统信息
  2. 或使用 Spotlight:按下 Command + 空格,输入 系统信息 并回车。

系统信息

实用场景

阅读全文 »

ARP 协议详解

ARP 协议(Address Resolution Protocol,地址解析协议)是 TCP/IP 协议栈中网络层的关键协议,其核心功能是实现IP 地址到 MAC 地址的映射转换,这是数据在局域网内传输的基础。

为什么需要 ARP 协议?

  • 网络层使用 IP 地址进行逻辑寻址(如 192.168.1.100),用于确定数据包的最终目的地
  • 数据链路层使用 MAC 地址进行物理寻址(如 00:1A:2B:3C:4D:5E),用于在局域网内实际传输帧
  • 当主机需要发送数据给同一局域网内的其他设备时,必须知道目标设备的 MAC 地址,ARP 协议就是解决这一转换问题的机制

ARP 的工作流程

  1. 发送 ARP 请求
    • 源主机广播发送一个 ARP 请求帧,帧中包含源 IP、源 MAC 以及目标 IP
    • 该广播帧会被同一局域网内的所有设备接收
  2. 接收 ARP 响应
    • 只有目标 IP 对应的设备会处理该请求,其他设备会忽略
    • 目标设备发送 ARP 响应帧(单播),包含自己的 MAC 地址
  3. 更新 ARP 缓存
    • 源主机收到响应后,将目标 IP 与 MAC 的映射关系存入本地 ARP 缓存表
    • 同时,目标设备也会将源主机的 IP 与 MAC 映射存入自己的缓存表
  4. 直接通信
    • 后续通信时,源主机可直接从缓存表中获取目标 MAC 地址,无需再次发送 ARP 请求

ARP 缓存表

  • 是主机或路由器中存储 IP 与 MAC 映射关系的临时表格

  • 表项有过期时间(通常为 2-10 分钟),过期后会被自动删除

  • 可通过命令查看和管理:

阅读全文 »