当前位置: 首页 > news >正文

MySql Innodb详细解读


参考文档:https://www.cnblogs.com/acatsmiling/p/18424729

一、数据存储:从磁盘到内存的"黑帮走私"

1. 物理结构:表空间与页的江湖规矩

  • 表空间(Tablespace)
    • 所有InnoDB数据存在表空间里,分两种:
      • 系统表空间(ibdata1):存数据字典、undo log、doublewrite buffer等。
      • 独立表空间(.ibd文件):每个表单独一个文件(MySQL 5.6+默认开启)。
    • 段(Segment):表空间由段组成,比如一个B+树的叶子节点和非叶子节点各占一个段。
    • 区(Extent):每个段由连续的64个页(默认16KB/页)组成,共1MB。
    • 页(Page)InnoDB的最小操作单位(16KB),包括数据页、索引页、undo页等。

2. 页(Page)的解剖学
每个页的结构像一本固定格式的账本:

  • File Header(38字节):记录页的元数据,比如属于哪个表空间、页类型(数据页/索引页)、上一页下一页指针(B+树叶子链表)。
  • Page Header(56字节):页内统计信息,比如槽位数量、空闲空间起始位置。
  • Infimum + Supremum(26字节):两个虚拟的行记录,标识页的最小和最大边界。
  • User Records(行记录):实际存储的数据行,按主键顺序排列(聚簇索引)。
  • Free Space:未使用的空间。
  • Page Directory(槽位):存储行记录的相对位置(类似目录),用于快速二分查找。
  • File Trailer(8字节):校验页完整性(比如是否写完整)。

吐槽

  • “页就像一本16KB的账本,写满了就换一本(分裂),查数据得先翻目录(Page Directory)!”
  • “File Trailer就是页的‘封条’,发现破损直接报警(崩溃恢复)!”

二、B+树:InnoDB的"骨骼系统"

1. B+树的实现细节

  • 非叶子节点(索引页):只存键值+子页指针,比如(key, child_page_number)
  • 叶子节点(数据页):存完整数据行(聚簇索引)或主键+索引列(二级索引)。
  • 页分裂与合并
    • 分裂:插入数据导致页超过16KB → 分裂成两个页,父节点更新指针。
    • 合并:删除数据后页利用率过低 → 合并相邻页(但InnoDB懒合并,减少开销)。

2. 自增主键的玄学

  • 顺序写入:自增主键让新数据按顺序插入B+树最右端,减少页分裂。
  • 随机主键(如UUID)的灾难:数据随机插入 → 页频繁分裂 → 性能暴跌,磁盘碎片爆炸。

底层真相

  • B+树的高度决定查询性能:3层B+树可存约(16KB / (主键大小 + 指针大小))^3条数据。比如主键是BIGINT(8字节)+指针6字节 → 每页存约16KB / 14B ≈ 1170个指针 → 3层树存1170^3 ≈ 16亿条数据。
  • 页内二分查找:Page Directory槽位存储行记录的相对偏移量,查找时先二分槽位,再定位行。

吐槽

  • “B+树的高度就是数据库的‘血压’,超过3层赶紧分库分表!”
  • “自增主键是B+树的亲爹,UUID是后妈养的!”

三、事务与锁:并发控制的"黑暗森林"

1. 事务的ACID实现

  • 原子性(A):靠undo log → 事务失败时反向执行undo log回滚。
  • 一致性(C):靠约束(主键、外键)锁机制 → 防止中间状态被其他事务看到。
  • 隔离性(I):靠MVCC(多版本并发控制)和 → 不同隔离级别用不同策略。
  • 持久性(D):靠redo log → 事务提交前先写redo log,保证崩溃可恢复。

2. 锁机制的底层实现

  • 行级锁:本质是锁索引(没有索引就锁全表!)。
  • 锁的内存结构
    • 锁对象(Lock Struct):记录事务ID、锁类型(共享/排他)、锁模式(记录锁、间隙锁、临键锁)。
    • 哈希表管理:用(space_id, page_no, heap_no)哈希定位锁(heap_no是页内行号)。
  • 间隙锁(Gap Lock):锁住索引区间,防止幻读。比如WHERE id > 100,锁住(100, +∞)的空隙。

3. MVCC的黑暗魔法

  • 版本链:每条数据行隐藏两个字段:
    • DB_TRX_ID:最近修改该行的事务ID。
    • DB_ROLL_PTR:指向undo log的回滚指针,构成版本链。
  • ReadView:事务启动时生成,包含:
    • m_ids:当前活跃事务ID列表。
    • min_trx_id:最小活跃事务ID。
    • max_trx_id:下一个待分配事务ID。
    • creator_trx_id:创建该ReadView的事务ID。
  • 可见性判断
    根据ReadView和行的DB_TRX_ID,判断该行是否对当前事务可见(类似时间戳快照)。

底层真相

  • MVCC的读操作不加锁:通过版本链和ReadView实现“读旧数据”,避免锁竞争。
  • 写操作依然加锁:保证数据一致性,其他事务的写操作被阻塞。

吐槽

  • “MVCC就是数据库的‘平行宇宙’,每个事务看到自己的世界线!”
  • “没有索引还敢更新数据?锁全表警告!”

四、日志系统:崩溃恢复的"时光机"

1. Redo Log:物理日志的暴力美学

  • 写入流程
    1. 事务修改数据 → 先写入内存的redo log buffer
    2. 事务提交 → 强制刷盘(innodb_flush_log_at_trx_commit=1)。
    3. 后台线程定期将脏页(Buffer Pool中修改过的页)刷到磁盘。
  • LSN(Log Sequence Number)
    • 全局递增的日志序列号,标识redo log的写入位置。
    • 数据页头记录Page LSN,崩溃恢复时对比LSN,决定是否应用redo log。
  • Checkpoint机制
    • 定期将Buffer Pool的脏页刷盘,并记录Checkpoint LSN
    • 崩溃恢复时,只需从Checkpoint LSN开始重放redo log。

2. Undo Log:逻辑日志的时光倒流

  • 写入位置:存在系统表空间(ibdata1)或独立undo表空间(MySQL 8.0+)。
  • 版本链管理:每次修改前,将旧数据写入undo log,并通过DB_ROLL_PTR链接成链。
  • Purge线程:后台清理无用的undo log(无活跃事务引用时)。

3. Binlog:逻辑日志的主从复制

  • 两阶段提交(2PC)
    • Prepare阶段 → 写redo log(标记为prepare)。
    • Commit阶段 → 写binlog → 写redo log(标记为commit)。
  • 崩溃恢复逻辑
    • 如果redo log是prepare状态 → 检查对应的binlog是否完整。
    • 若binlog完整 → 提交事务;若binlog不完整 → 回滚事务。

底层真相

  • Redo Log是InnoDB的私有日志,物理记录数据页的修改。
  • Binlog是MySQL Server层的日志,逻辑记录SQL语句或行变更。
  • 两阶段提交是两者的‘结婚协议’,保证数据一致性。

吐槽

  • “Redo Log是InnoDB的‘遗嘱’,Binlog是MySQL的‘广播稿’!”
  • “两阶段提交就像结婚领证,先宣誓(prepare),再发朋友圈(commit)!”

五、内存管理:Buffer Pool的"权力游戏"

1. Buffer Pool的核心地位

  • 内存缓存池:缓存数据页和索引页,减少磁盘IO。
  • LRU算法优化
    • 传统LRU链表分为Young(热数据)和Old(冷数据)区域,防止全表扫描污染缓存。
    • 新加载的页先插入Old区,只有被二次访问才晋升到Young区。

2. Change Buffer:写缓冲的偷懒艺术

  • 适用场景:非唯一二级索引的插入/更新操作。
  • 原理
    • 若目标页不在Buffer Pool → 将修改记录到Change Buffer,等下次读取该页时再合并修改。
    • 减少随机IO,提升写性能(尤其适合写多读少的场景)。

3. Doublewrite Buffer:防数据页写断裂

  • 问题背景:页写入磁盘时可能部分写入(比如16KB只写了8KB),导致页损坏。
  • 解决方案
    1. 脏页刷盘前,先写到Doublewrite Buffer(内存+磁盘共享区域)。
    2. 再将页写入真实位置,如果中途崩溃,用Doublewrite Buffer恢复。

底层真相

  • Change Buffer是‘延迟写’的骚操作,但唯一索引无法使用(需要立即检查唯一性)。
  • Doublewrite Buffer是InnoDB的‘备胎’,牺牲10%写性能换数据页安全。

吐槽

  • “Change Buffer就是快递代收点,攒一波再送!”
  • “Doublewrite Buffer:你可以说我慢,但不能说我菜(数据损坏)!”

六、崩溃恢复:InnoDB的"复活甲"

1. 恢复流程

  • Step 1:重放Redo Log
    从Checkpoint LSN开始,按顺序应用所有redo log,将数据页恢复到崩溃前的状态。
  • Step 2:回滚未提交事务
    扫描undo log,对未提交的事务执行回滚操作。
  • Step 3:清理残留锁
    崩溃时可能遗留未释放的锁,全部强制释放。

2. 核心依赖

  • Redo Log的持久化:保证已提交事务的数据不丢失。
  • Undo Log的完整性:保证未提交事务能正确回滚。

底层真相

  • 崩溃恢复就像玩单机游戏的‘读档’,Redo Log是存档文件,Undo Log是回档指令。

七、总结:InnoDB底层原理的"七宗罪"

模块核心机制优化启示
数据存储页分裂、区段管理、B+树高度用自增主键,避免随机写入
事务与锁MVCC版本链、间隙锁、两阶段提交短事务、避免长锁、合理选择隔离级别
日志系统Redo持久化、Undo回滚、Binlog复制平衡innodb_flush_log_at_trx_commit参数
内存管理Buffer Pool LRU、Change Buffer偷懒分配足够Buffer Pool,监控命中率
崩溃恢复Redo重放、Undo回滚、Doublewrite备胎确保日志文件足够大,用高可靠存储

终极暴论

  • “不懂InnoDB底层原理的调优,就像蒙眼飙车——迟早翻车!”
  • “B+树、MVCC、Redo Log——这三板斧砍不明白,别自称数据库高手!”
  • “记住:InnoDB的每一行代码,都是性能和可靠性的血腥博弈!”

完活儿!现在你可以去给MySQL内核贡献代码了(或者去ICU躺会儿)!

相关文章:

MySql Innodb详细解读

参考文档:https://www.cnblogs.com/acatsmiling/p/18424729 一、数据存储:从磁盘到内存的"黑帮走私" 1. 物理结构:表空间与页的江湖规矩 表空间(Tablespace): 所有InnoDB数据存在表空间里&…...

每日两道leetcode

399. 除法求值 - 力扣(LeetCode) 题目 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 …...

在RK3588上使用哪个流媒体服务器合适

在RK3588平台上选择合适的流媒体服务器时,需考虑其ARM Cortex-A76/A55架构、硬件编解码能力(如支持H.264/H.265/AV1解码)以及Linux/Android系统支持。以下是推荐的方案: 1. 轻量级方案:GStreamer RTSP 适用场景&…...

分享一个DeepSeek+自建知识库实现人工智能,智能回答高级用法。

这个是我自己搞的DeepSeek大模型自建知识库相结合到一起实现了更强大的回答问题能力还有智能资源推荐等功能。如果感兴趣的小伙伴可以联系进行聊聊,这个成品已经有了实现了,所以可以融入到你的项目,或者毕设什么的还可以去参加比赛等等。 1.项…...

PyTorch 深度学习实战(38):注意力机制全面解析(从Seq2Seq到Transformer)

在上一篇文章中,我们探讨了分布式训练实战。本文将深入解析注意力机制的完整发展历程,从最初的Seq2Seq模型到革命性的Transformer架构。我们将使用PyTorch实现2个关键阶段的注意力机制变体,并在机器翻译任务上进行对比实验。 一、注意力机制演…...

Android Studio 获取配置资源与第三方包信息详解

文章目录 Android Studio 获取配置资源与第三方包信息详解一、获取资源文件中的配置1. 获取颜色值Java 中获取:Kotlin 中获取: 2. 获取字符串Java 中获取:Kotlin 中获取: 3. 获取尺寸值Java 中获取:Kotlin 中获取&…...

【网络初识】从零开始彻底了解网络编程(一)

本篇博客给大家带来的是网络的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 一. 网络…...

Vivado比特流生成、下载及板级验证操作步骤

1. 前期准备 安装Vivado软件:确保Vivado开发环境已正确安装并配置。创建工程: 打开Vivado,点击“Create Project”新建工程。设置工程名称(例如“led_flow”)和路径。选择目标FPGA型号(例如XC7A35TFFG484&…...

【Flutter DevTools】性能优化的瑞士军刀

一、性能分析:帧率与资源监控 1.1 帧率监控(Performance面板) 通过Performance面板可实时捕获应用的渲染流水线数据。开发者点击"Record"按钮后,DevTools会以时间轴形式展示每一帧的构建、布局、绘制耗时。当帧率低于…...

使用Redis实现实时排行榜

为了实现一个实时排行榜系统,我们可以使用Redis的有序集合(ZSet),其底层通常是使用跳跃表实现的。有序集合允许我们按照分数(score)对成员(member)进行排序,因此非常适合…...

HTML5 应用程序缓存:原理、实践与演进

在 Web 技术的发展历程中,HTML5 引入的应用程序缓存(Application Cache)曾是提升 Web 应用离线体验的重要技术。它允许 Web 应用进行缓存,使用户在没有因特网连接时也能访问应用,为 Web 应用带来了显著的优势。然而&am…...

Compose笔记(十七)--AsyncImage

这一节了解一下Compose中的AsyncImage的使用,AsyncImage是由 Coil库提供的一个用于异步加载图片的组件。它支持加载网络图片、本地图片资源,并提供了占位符、错误处理、过渡动画等功能,简单介绍如下: API 1. model 含义:指定要加…...

Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构

上一期小练习解答(第6期回顾) ✅ 练习1:统计文件行数 with open("data.txt", "r", encoding"utf-8") as f:lines f.readlines()print(f"总行数:{len(lines)}")✅ 练习2:反…...

Redis--主从复制

目录 一、配置 1.1 建立复制 1.2 断开复制 1.3 安全性 1.4 只读 1.5 传输延迟 二、拓扑 2.1 一主一从结构 2.2 一主多从结构 2.3 树形主从结构 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满足故障恢 复和负载均衡等需求…...

FPGA练习———DDS波形发生器

简介:使用DDS波形发生器可以在fpga上生成方波、正弦波等波形,其具体方法是计算相位的变化,然后根据数据表的数值进行数模转化改变波形。 DDS的第一步是生成一个相位加法器 相位加法器 在生成一个波,例如正弦波时,我们…...

力扣面试150题-- 存在重复元素 II和最长连续序列

Day 26 题目描述 思路 定义一个map用来存放每个元素以及它对应的序号从前向后遍历数组如果该元素存在于map(说明满足了重复元素的条件),用当前元素的序号值减去map中存放的序号值(因为是从前遍历的所以当前元素序号一定大于存放…...

卸载Anaconda并保留虚拟环境,重装Anaconda并还原之前的虚拟环境

参考 https://blog.csdn.net/qq_63611690/article/details/134560333 该博文是虚拟环境和Anaconda安装路径在一起 我的是虚拟环境早就搞到了别的盘 问题描述 我之前把Anaconda安装到了C盘,随之时间推移,C盘占用空间越来越大。我想把Anaconda卸载重装…...

ArcGIS及其组件抛出 -- “Sorry, this application cannot run under a Virtual Machine.“

产生背景: 使用的是“破解版本”或“被套壳过”的非官方 ArcGIS 版本 破解版本作者为了防止: 被研究破解方式 被自动化抓包/提权/逆向 被企业环境中部署多机使用 通常会加入**“虚拟化环境检测阻断运行”机制** 原因解释: 说明你当前运…...

Ubuntu 25.04 “Plucky Puffin” 正式发布

Ubuntu 25.04 “Plucky Puffin” 于 2025 年 4 月 17 日正式发布。这是一个短期支持版本,只支持到 2026 年 1 月1。以下是该版本的一些主要新变化: 内核与系统:采用 Linux 6.14 内核;systemd v257.4 带来重要上游更新,…...

2. ubuntu20.04 和VS Code实现 ros的输出 (C++,Python)

本节对应赵虚左ROS书籍的1.4.2 1)创建工作空间 mkdir -p catkin_ws/src cd catkin_ws catkin_make 2) 终端进入VS Code code . 3) vscoe 的基本配置 3.1)修改.vscode/tasks.json ,修改内容如下: { // 有关 tasks.json 格式的文档,请参见…...

0801ajax_mock-网络ajax请求1-react-仿低代码平台项目

0 vite配置proxy代理 vite.config.ts代码如下图所示: import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…...

前端vue+后端ssm项目

下载地址: 前端:https://download.csdn.net/download/2401_83418369/90649449 后端: https://download.csdn.net/download/2401_83418369/90649441 一、项目基础环境搭建 1、新建Maven项目 2、创建目录,结构如下: …...

Python实例题:Python获取阴阳师壁纸

目录 Python实例题 题目 实现思路 代码实现 代码解释 get_wallpaper_links 函数: download_wallpapers 函数: 主程序: 运行思路 注意事项 Python实例题 题目 Python获取阴阳师壁纸 实现思路 发送请求获取网页内容:使…...

考研408操作系统文件管理——4.2目录系统详解

考研408操作系统文件管理——目录系统详解 一、目录管理基本概念 1.1 目录的核心功能 目录是文件系统的核心管理组件,主要实现: 按名存取:通过文件名快速定位物理地址路径解析:将逻辑路径转换为物理块地址共享控制:支持多用户共享同一文件命名空间管理:维护全局唯一的…...

国产SMT贴片机自主技术突破解析

内容概要 随着电子信息产业对精密制造需求的持续升级,国产SMT贴片机的技术突破已成为装备自主化进程的关键节点。本文聚焦设备研发的三大核心领域:高动态运动控制系统通过线性电机与数字信号处理技术的融合,将重复定位精度提升至5μm级别&am…...

Ai Agent 在生活领域的深度应用与使用指南

在科技不断革新的时代,Ai Agent 正以前所未有的态势融入生活的各个角落,成为提升生活品质与效率的得力助手。它凭借强大的智能处理能力,解决了传统生活模式中的诸多痛点,在家庭、出行、健康管理等多个场景中展现出巨大的应用价值…...

CPU与GPU之间的交互

命令队列和命令列表 每个GPU都维护着一个命令队列&#xff0c;本质上是一个环形缓冲区&#xff0c;等待着cpu提交到gpu的命令&#xff0c;同时执行命令 在Direct3D中命令队列被抽象为ID3D12CommandQueue接口来表示。通过下面的方式创建命令队列。 ComPtr<ID3D12CommandQue…...

MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境

文章目录 一、服务器选型——给数据库一个舒适的家二、系统调优——打造高性能跑道三、MySQL配置——让数据库火力全开四、监控体系——数据库的体检中心五、备份恢复——数据安全的最后防线六、主从复制——数据同步的艺术七、安全加固——守护数据长城 引言&#xff1a;从小白…...

Python制作简易PDF查看工具PDFViewerV1.0查找功能优化

原文说明 为不破坏原文结构&#xff0c;因此功能优化不在原文中维护了。关于这款工具原文请通过下面链接访问。Python制作简易PDF查看工具PDFViewerV1.0 这款小工具基本功能已经可以作为一款文档浏览器使用&#xff0c;但还有一些美中不足的地方&#xff0c;本文将介绍对文本查…...

MOPSO实现无人机多目标路径规划(Matlab完整源码和数据)

一、MOPSO算法核心原理 MOPSO&#xff08;多目标粒子群优化算法&#xff09;通过模拟鸟群觅食行为&#xff0c;在搜索空间中寻找满足多个冲突目标的Pareto最优解集。其核心流程包括&#xff1a; 粒子初始化&#xff1a;随机生成粒子群&#xff0c;每个粒子代表一条候选路径&a…...

Python:使用web框架Flask搭建网站

Date: 2025.04.19 20:30:43 author: lijianzhan Flask 是一个轻量级的 Python Web 开发框架&#xff0c;以简洁灵活著称&#xff0c;适合快速构建中小型 Web 应用或 API 服务。以下是 Flask 的核心概念、使用方法和实践指南 Flask 的核心特点&#xff1a; 轻量级 核心代码仅约…...

芝法酱躺平攻略(21)——kafka安装和使用

本节内容比较初级&#xff0c;故接着躺平攻略写 一、官网的下载 1.1 下载解压 首先&#xff0c;去官网下载jar包&#xff0c;放进linux中&#xff0c;解压到对应位置。 我的位置放在/WORK/MIDDLEWARE/kafka/4.0 1.2 常见配置 # 每个topic默认的分片数 num.properties4 # 数…...

C语言知识复习资料

## 第一章 C语言基本知识 ### 【考点1】C程序 - 用C语言编写的程序称为C语言源程序,源程序文件后缀名为".c" - 源程序经编译后生成后缀名为".obj"的目标文件 - 再把目标文件与各种库函数连接起来,生成后缀名为".exe"可执行文件 - C语言有三…...

CMFA在自动驾驶中的应用案例

CMFA在自动驾驶中的典型应用案例 CMFA&#xff08;Cross-Modal Feature Alignment&#xff09;方法在自动驾驶领域有多个成功的应用场景&#xff0c;以下是几个典型案例&#xff1a; 1. 多模态3D目标检测 ‌应用场景‌&#xff1a;车辆、行人、骑行者等交通参与者的精确检测 ‌…...

进程控制(下)【Linux操作系统】

文章目录 进程程序替换进程替换有关函数和指令函数&#xff1a;execl函数&#xff1a;execv函数&#xff1a;execlp函数&#xff1a;execvp函数&#xff1a;execvpe 进程替换的原理为什么进程替换时&#xff0c;原进程的环境变量不会被覆盖&#xff1f; 进程替换具体会造成什么…...

【后端】【python】Python 爬虫常用的框架解析

一、总结 Python 爬虫常用的框架主要分为 三类&#xff1a; 轻量级请求库&#xff1a;如 requests、httpx&#xff0c;用于快速发请求。解析与处理库&#xff1a;如 BeautifulSoup、lxml、pyquery。爬虫框架系统&#xff1a;如 Scrapy、pyspider、Selenium、Playwright 等&am…...

JDBC 数据库连接全解析:从驱动配置到工具类封装

目录 一. 将MySQL对应版本的jar包放入Java项目中 1. 准备工作 2. 复制到Java项目 二. 获取数据库连接 1. 连接Mysql数据库的URL 2. 连接数据库的用户名 3. 连接数据库的密码 4. 通过反射实例化 三. Properties文件用法 1. properties文件介绍 2. Properties工具类 a.…...

【图片识别分类】如何快速识别照片中的水印文字,对图片进行关键字分类,快速整理水印相机拍摄图片,基于WPF和腾讯OCR的技术实现

项目背景 在施工现场&#xff0c;施工人员通常会使用水印相机拍摄照片&#xff0c;这些照片带有时间、地点、施工阶段等水印信息。为了便于管理和归档&#xff0c;需要快速识别照片中的水印文字&#xff0c;并根据关键字对照片进行分类和整理。 界面设计 界面设计简洁直观&…...

第32讲:卫星遥感与深度学习融合 —— 让地球“读懂”算法的语言

目录 🔍 一、讲讲“遥感+深度学习”到底是干啥的? ✅ 能解决什么问题? 🧠 二、基础原理串讲:深度学习如何“看懂”遥感图? 🛰 遥感图像数据类型: 🧠 CNN的基本思路: 🧪 三、实战案例:用CNN对遥感图像做地类分类 📦 所需R包: 🗂️ 步骤一:构建训…...

Java 静态变量、静态方法及工具类介绍

目录 一、静态变量&#xff08;Static Variables&#xff09; 1. 基本概念 2. 核心特性 (1)类级别共享 (2)生命周期 (3)内存分配 3. 使用方法 (1)访问方式 (2)初始化时机 4. 典型应用场景 (1)共享常量 (2)计数器功能 (3)配置信息 二、静态方法&#xff08;Static …...

【win 1】win 右键菜单添加 idea pycharm vscode trae 打开文件夹

编程时经常需要通过 程序 打开文件夹&#xff0c;有时安装时没注意选上添加到右键菜单&#xff0c;又不想重新安装&#xff0c;有什么方法&#xff1f; 之前教程都是改注册表有点繁琐&#xff0c;这里利用开源的 windows 右键管理软件&#xff0c;可以快捷简单的添加。 右键菜…...

XSS跨站脚本攻击漏洞

目录 一、基本概念 二、XSS分类 1、反射型XSS 2、存储型XSS 3、DOM型XSS 三、手工测试 1、反射型XSS漏洞 &#xff08;1&#xff09;安全等级low &#xff08;2&#xff09;DOM的XSS &#xff08;3&#xff09;安全等级medium &#xff08;4&#xff09;安全等级hig…...

TensorFlow 实现 Mixture Density Network (MDN) 的完整说明

本文档详细解释了一段使用 TensorFlow 构建和训练混合密度网络&#xff08;Mixture Density Network, MDN&#xff09;的代码&#xff0c;涵盖数据生成、模型构建、自定义损失函数与预测可视化等各个环节。 1. 导入库与设置超参数 import numpy as np import tensorflow as t…...

servlet-服务器内部转发和客户端重定向

服务器内部转发以及客户端重定向 服务器内部转发以及客户端重定向1&#xff09;服务器内部转发&#xff1a;request.getRequestDispatcher("...").forward(request,response);--- 一次请求响应的过程&#xff0c;对于客户端而言&#xff0c;内部转发多少次&#xff…...

手动实现LinkedList

前言 大家好&#xff0c;我是Maybe。最近在学习数据结构中的链表&#xff0c;自己手动实现了一个LinkedList。我想与大家分享一下。 思维导图 代码部分 package Constant;public class constant {public static final String INDEX_IS_WRONG"输入的下标不合法"; }p…...

实现AWS Step Function安全地请求企业内部API返回数据

需要编写一个Step Function在AWS云上运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账号&#xff0c;让Step Fun…...

掌握 MySQL:从命令行操作到数据类型与字段管理

掌握 MySQL&#xff1a;从命令行操作到数据类型与字段管理 MySQL 作为全球最流行的开源关系型数据库管理系统&#xff0c;广泛应用于 Web 开发、数据分析和企业级应用中。无论是初学者还是资深开发者&#xff0c;掌握 MySQL 的基本命令行操作、了解其数据库类型、数据类型、字…...

基于大语言模型的自动化单元测试生成系统及测试套件评估方法

A System for Automated Unit Test Generation Using Large Language Models and Assessment of Generated Test Suites 翻译于上述论文 基于大语言模型的自动化单元测试生成系统及测试套件评估方法 摘要 单元测试是软件测试生命周期中最基础的测试层级&#xff0c;对确保软…...

使用vue2技术写了一个纯前端的静态网站商城-鲜花销售商城

先给大家看一下网站的整体效果截图&#xff1a; 这个前端静态网站项目主要实现了以下功能&#xff1a; 商城首页、商品分类页、登录注册页、个人中心页、我的收藏页、我的订单页、商品详情页等功能。 最近不是在学习前端开发嘛&#xff0c;肯定要做一些项目来练习以下自己学…...

PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(一)

PyTorch深度学习框架60天进阶学习计划 - 第46天&#xff1a;自动化模型设计&#xff08;一&#xff09; 第一部分&#xff1a;使用ENAS算法生成图像分类网络 大家好&#xff01;欢迎来到我们PyTorch深度学习框架60天进阶学习计划的第46天。今天我们要深入探讨一个话题——使用…...