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

MySQL库级管理:数据库管理与存储引擎剖析

引言

各位数据库爱好者们好!今天我们要深入探讨MySQL数据库的基本操作,这是每位开发者必须掌握的"内功心法" 💪。无论你是刚接触MySQL的小白,还是需要复习基础的老手,这篇教程都将带你系统学习数据库的核心操作。我们将从最基础的创建、查看数据库开始,逐步深入到字符集设置和存储引擎选择等高级话题。准备好了吗?让我们一起开启这段MySQL探索之旅! 🚀


一、数据库的创建与管理基础

1.1 创建数据库的多种姿势

创建数据库就像盖房子前先规划地基一样重要 🏗️,MySQL提供了灵活的创建方式:

-- 最基础的创建方式(如果数据库已存在会报错)
CREATE DATABASE my_database;-- 推荐的安全创建方式(避免重复创建报错)
CREATE DATABASE IF NOT EXISTS my_database;-- 创建时指定字符集和排序规则(推荐utf8mb4)
CREATE DATABASE IF NOT EXISTS my_database 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;-- 创建带注释的数据库
CREATE DATABASE IF NOT EXISTS inventory 
COMMENT '用于存储产品库存信息的数据库';

注意事项

  • 数据库名称最好使用小写字母和下划线的组合
  • 避免使用MySQL保留关键字作为名称
  • 生产环境务必指定字符集,避免乱码问题

1.2 查看数据库的隐藏技巧

查看数据库不只是简单的SHOW DATABASES,还有很多实用技巧:

-- 基本查看命令
SHOW DATABASES;-- 查看符合特定模式的数据库(如所有以'test'开头的数据库)
SHOW DATABASES LIKE 'test%';-- 查看数据库的创建语句(超级实用!)
SHOW CREATE DATABASE my_database;-- 从information_schema中获取更详细的信息
SELECT * FROM information_schema.SCHEMATA 
WHERE schema_name = 'my_database';-- 查看数据库大小(需要计算所有表的总和)
SELECT table_schema AS '数据库',SUM(data_length + index_length) / 1024 / 1024 AS '大小(MB)'
FROM information_schema.TABLES
GROUP BY table_schema;

1.3 选择/切换数据库的艺术

选择数据库看似简单,但在复杂应用中很有讲究:

-- 基本选择命令
USE my_database;-- 在连接时直接选择数据库
mysql -u username -p -D my_database-- 查看当前选择的数据库
SELECT DATABASE();-- 在SQL脚本中安全切换(先检查是否存在)
SET @db_name = 'my_database';
SET @sql = CONCAT('USE ', @db_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

多数据库操作技巧

  • 可以在不切换数据库的情况下操作其他数据库的表:SELECT * FROM another_db.users;
  • 使用完全限定名称:数据库名.表名

1.4 删除数据库的安全之道

删除数据库是危险操作,必须谨慎! 💥

-- 基本删除命令(危险!如果数据库不存在会报错)
DROP DATABASE my_database;-- 安全删除方式(推荐)
DROP DATABASE IF EXISTS my_database;-- 删除前先备份(命令行操作)
mysqldump -u username -p my_database > my_database_backup.sql

删除数据库的注意事项

  1. 删除前务必备份重要数据
  2. 检查是否有应用程序正在使用该数据库
  3. 考虑使用权限控制,限制删除操作
  4. 生产环境建议先重命名数据库观察一段时间再删除

二、深入字符集与排序规则

2.1 字符集(Character Set)深度解析

字符集是数据库的"语言系统",选错会导致各种乱码问题 🌐:

查看支持的字符集

SHOW CHARACTER SET;
-- 或者
SELECT * FROM information_schema.CHARACTER_SETS;

重点字符集对比

字符集描述最大长度推荐场景
latin1西欧字符1字节仅需西欧语言支持
utf8MySQL中的UTF-8(伪实现)3字节不推荐使用
utf8mb4真正的UTF-8实现4字节所有现代应用
gbk简体中文2字节仅需简体中文支持

关键结论:永远使用utf8mb4!因为它:

  • 支持完整的Unicode字符集(包括emoji 😊)
  • 是真正的UTF-8实现
  • 已经成为MySQL的默认字符集(8.0+)

2.2 排序规则(Collation)高级应用

排序规则决定了字符串如何比较和排序,对查询性能有重要影响 🔍:

查看支持的排序规则

SHOW COLLATION;
-- 或
SHOW COLLATION LIKE 'utf8mb4%';

常见排序规则解析

  • utf8mb4_general_ci:快速但不精确的比较
  • utf8mb4_unicode_ci:基于Unicode标准的精确比较
  • utf8mb4_bin:二进制比较,区分大小写
  • utf8mb4_0900_ai_ci:MySQL 8.0引入的更先进算法

排序规则后缀含义

  • _ci:Case Insensitive(不区分大小写)
  • _cs:Case Sensitive(区分大小写)
  • _bin:Binary(二进制比较)
  • _ai:Accent Insensitive(不区分重音)
  • _as:Accent Sensitive(区分重音)

性能考虑

  • _general_ci_unicode_ci快,但排序准确性稍差
  • _bin规则性能最好,但可能不符合语言习惯
  • MySQL 8.0的_0900系列规则在准确性和性能间取得了更好平衡

2.3 字符集与排序规则实践指南

创建时指定

CREATE DATABASE my_app 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_0900_ai_ci;

修改已有数据库

ALTER DATABASE my_app 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

查看当前设置

SELECT DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME 
FROM information_schema.SCHEMATA 
WHERE schema_name = 'my_app';

表级别覆盖

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

连接级别设置

# 在my.cnf/my.ini中配置
[client]
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4

三、存储引擎深入对比与实践

3.1 存储引擎全景概览

MySQL的存储引擎就像汽车的发动机,决定了数据库的性能特性 🚗:

查看支持的引擎

SHOW ENGINES;

主要引擎对比表

特性InnoDBMyISAMMEMORYArchive
事务支持✅ 完整ACID❌ 不支持❌ 不支持❌ 不支持
锁粒度行级锁表级锁表级锁行级锁
外键支持✅ 支持❌ 不支持❌ 不支持❌ 不支持
MVCC✅ 支持❌ 不支持❌ 不支持❌ 不支持
崩溃恢复✅ 优秀❌ 较差❌ 数据丢失✅ 有限支持
全文索引✅ (5.6+)✅ 支持❌ 不支持❌ 不支持
压缩能力✅ 表压缩✅ 行压缩❌ 不支持✅ 极高压缩比
适用场景高并发OLTP读密集型报表临时表/缓存归档数据

3.2 InnoDB深度剖析

作为默认引擎,InnoDB是大多数应用的最佳选择 🏆:

核心特性

  • ACID事务:保证数据完整性
  • 行级锁定:提高并发性能
  • 外键约束:维护数据一致性
  • 聚集索引:主键索引与数据存储在一起
  • 多版本并发控制(MVCC):非阻塞读

配置优化

[mysqld]
# 缓冲池大小(建议物理内存的50-75%)
innodb_buffer_pool_size = 4G# 日志文件大小(建议256M-2G)
innodb_log_file_size = 1G# 刷新日志频率
innodb_flush_log_at_trx_commit = 1  # 最安全
# innodb_flush_log_at_trx_commit = 2 # 折衷方案
# innodb_flush_log_at_trx_commit = 0 # 最佳性能# IO线程数
innodb_read_io_threads = 8
innodb_write_io_threads = 8

创建InnoDB表

CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,amount DECIMAL(10,2) NOT NULL,order_date DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_user (user_id),FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB 
ROW_FORMAT=COMPRESSED  -- 启用压缩
KEY_BLOCK_SIZE=8;

3.3 MyISAM适用场景与技巧

虽然逐渐被淘汰,但在特定场景仍有价值 💾:

适用场景

  • 只读或读多写少的应用
  • 数据仓库和报表系统
  • 需要全文索引(MySQL 5.6以前版本)
  • 空间数据(GIS功能)

特性示例

CREATE TABLE log_data (id BIGINT AUTO_INCREMENT PRIMARY KEY,log_time DATETIME NOT NULL,message TEXT NOT NULL,INDEX idx_time (log_time),FULLTEXT INDEX idx_message (message)
) ENGINE=MyISAM
KEY_BLOCK_SIZE=1024;-- 压缩MyISAM表(节省空间)
myisampack table_name.MYI

MyISAM关键文件

  • .frm:表结构定义
  • .MYD:数据文件
  • .MYI:索引文件

3.4 其他存储引擎精要

MEMORY引擎

CREATE TABLE session_cache (session_id VARCHAR(128) PRIMARY KEY,user_id INT NOT NULL,data JSON,expires DATETIME NOT NULL
) ENGINE=MEMORY;

特点:

  • 数据存储在内存中,速度极快 ⚡
  • 表结构持久化,数据在重启后丢失
  • 支持HASH索引(默认)和BTREE索引

Archive引擎

CREATE TABLE audit_log (id BIGINT AUTO_INCREMENT PRIMARY KEY,action_time DATETIME DEFAULT CURRENT_TIMESTAMP,user_id INT,action VARCHAR(50),details TEXT
) ENGINE=ARCHIVE;

特点:

  • 极高的压缩比(比MyISAM小75%)
  • 只支持INSERT和SELECT操作
  • 适合存储历史归档数据

3.5 存储引擎转换实战

转换方法

-- 方法1:ALTER TABLE
ALTER TABLE my_table ENGINE=InnoDB;-- 方法2:导出/导入
mysqldump -u username -p my_database my_table > my_table.sql
sed -i 's/ENGINE=MyISAM/ENGINE=InnoDB/' my_table.sql
mysql -u username -p my_database < my_table.sql-- 方法3:CREATE TABLE...SELECT
CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table ENGINE=InnoDB;
INSERT INTO new_table SELECT * FROM old_table;
RENAME TABLE old_table TO old_table_backup, new_table TO old_table;

转换注意事项

  1. 大表转换可能耗时较长,建议在低峰期进行
  2. 转换前务必备份数据
  3. 检查外键约束和索引是否兼容
  4. 验证转换后的应用功能是否正常

四、综合实战演练

4.1 场景1:电商系统数据库设计

-- 创建电商数据库
CREATE DATABASE IF NOT EXISTS ecommerce 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_0900_ai_ci
COMMENT '电商系统主数据库';USE ecommerce;-- 用户表(InnoDB)
CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password CHAR(60) NOT NULL COMMENT 'bcrypt哈希',email VARCHAR(100) NOT NULL UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;-- 商品表(InnoDB)
CREATE TABLE products (product_id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,description TEXT,price DECIMAL(10,2) NOT NULL,stock INT NOT NULL DEFAULT 0,category_id INT,INDEX idx_category (category_id),FULLTEXT INDEX idx_search (name, description)
) ENGINE=InnoDB;-- 订单表(InnoDB)
CREATE TABLE orders (order_id BIGINT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,total_amount DECIMAL(12,2) NOT NULL,status ENUM('pending','paid','shipped','completed','cancelled') DEFAULT 'pending',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users(user_id)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;-- 日志表(MyISAM)
CREATE TABLE access_logs (log_id BIGINT AUTO_INCREMENT PRIMARY KEY,user_id INT,ip_address VARCHAR(45),action VARCHAR(50) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,INDEX idx_user (user_id),INDEX idx_time (created_at)
) ENGINE=MyISAM;

4.2 场景2:数据库维护操作

-- 修改数据库字符集(需要转换现有数据)
ALTER DATABASE ecommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 优化所有表
USE ecommerce;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_name) INTO @tables 
FROM information_schema.tables 
WHERE table_schema = 'ecommerce';
SET @tables = CONCAT('OPTIMIZE TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;-- 备份单个数据库(命令行执行)
# mysqldump -u root -p --single-transaction --routines --triggers ecommerce > ecommerce_backup.sql-- 迁移存储引擎(MyISAM转InnoDB)
SELECT CONCAT('ALTER TABLE ', table_name, ' ENGINE=InnoDB;') 
FROM information_schema.tables 
WHERE table_schema = 'ecommerce' AND engine = 'MyISAM';

五、性能优化与故障排查

5.1 数据库操作性能优化

创建数据库优化

  • 预分配大小(适用于某些存储引擎)
  • 合理配置字符集和排序规则
  • 考虑文件系统特性(如ext4的dir_index)

字符集优化建议

  1. 所有数据库对象使用一致的字符集
  2. 连接字符集与数据库字符集保持一致
  3. 对于纯ASCII数据,可以考虑使用latin1节省空间

存储引擎选择策略

  • 事务需求:需要→InnoDB,不需要→考虑其他
  • 并发写入:高并发→InnoDB,低并发→MyISAM
  • 数据特性:临时数据→MEMORY,归档数据→ARCHIVE
  • 特殊需求:全文搜索→MyISAM或InnoDB+外部方案

5.2 常见问题解决方案

问题1:创建数据库时报权限错误

解决方案

-- 检查当前用户权限
SHOW GRANTS;-- 授予创建数据库权限
GRANT CREATE ON *.* TO 'username'@'host';

问题2:字符集不一致导致乱码

排查步骤

  1. 检查数据库、表和列的字符集设置
  2. 确认客户端连接字符集
  3. 验证应用程序连接字符串配置

问题3:存储引擎不支持特定功能

解决方案

  1. 修改表使用的存储引擎
  2. 使用替代方案实现功能(如应用层实现外键约束)
  3. 考虑使用触发器或存储过程弥补功能缺失

总结 🎯

今天我们全面掌握了MySQL数据库的基本操作 🎓,重点内容包括:

  1. 数据库生命周期管理:创建→查看→选择→删除的全套操作
  2. 字符集与排序规则:深入理解了utf8mb4的重要性和各种排序规则的区别
  3. 存储引擎对比:详细分析了InnoDB、MyISAM等引擎的特性和适用场景

关键收获

  • 始终使用IF EXISTS/IF NOT EXISTS避免常见错误
  • 生产环境必须使用utf8mb4字符集
  • InnoDB是大多数场景的最佳选择
  • 不同的业务场景可能需要混合使用多种存储引擎

最佳实践建议

  1. 数据库命名采用小写+下划线规范
  2. 创建数据库时明确指定字符集和排序规则
  3. 重要操作前先备份数据
  4. 定期优化和维护数据库

PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄

相关文章:

MySQL库级管理:数据库管理与存储引擎剖析

引言 各位数据库爱好者们好&#xff01;今天我们要深入探讨MySQL数据库的基本操作&#xff0c;这是每位开发者必须掌握的"内功心法" &#x1f4aa;。无论你是刚接触MySQL的小白&#xff0c;还是需要复习基础的老手&#xff0c;这篇教程都将带你系统学习数据库的核心…...

LeetCode 2094.找出 3 位偶数:遍历3位偶数

【LetMeFly】2094.找出 3 位偶数&#xff1a;遍历3位偶数 力扣题目链接&#xff1a;https://leetcode.cn/problems/finding-3-digit-even-numbers/ 给你一个整数数组 digits &#xff0c;其中每个元素是一个数字&#xff08;0 - 9&#xff09;。数组中可能存在重复元素。 你…...

机器学习-计量经济学

机器学习 不要事前决定变量关系&#xff0c;关键是谁也不知道啊&#xff0c;机器学习学习的模型&#xff08;那也不是真实的关系啊&#xff09; 这就是自然学科的好处&#xff1a;只要不断的优化这个未知的东西&#xff08;函数&#xff09;&#xff0c;然后在数据上&#xff…...

工具篇-扣子空间MCP,一键做游戏,一键成曲

一、登陆扣子空间 地址如下&#xff1a; 扣子空间 打开&#xff0c;然后登陆扣子 登陆之后快速开始&#xff1a; 二、生成游戏 小试牛刀&#xff0c;我们让它做一个打地鼠的游戏&#xff1a; 已经开始设计制作&#xff1a; 制作完成&#xff1a; 三、制作音乐 新…...

5.6 - 5.9 MySQL

数据库&#xff1a;存储和管理数据的仓库DB。 数据库管理系统&#xff1a;操纵和管理数据库的大型软件DBMS。 关系型数据库 一个数据库内可以创建多张表&#xff0c;在一个表内能存放多个数据。 SQL语句&#xff1a; DDL&#xff1a; 存储字符串用varchar。&#xff08;类似于…...

C# WinForm 如何高效地将大量数据从 CSV 文件导入 DataGridView

如果你有非常多的csv文件&#xff0c;每个文件包含N多行与M多列&#xff0c;如&#xff1a;18000 行和 27 列。现在&#xff0c;想制作一个 Windows 窗体应用程序&#xff0c;导入它们并在 datagridview 中显示&#xff0c;然后进行一些数学运算。可是&#xff0c;发现数据导入…...

【redis】redis常见数据结构及其底层,redis单线程读写效率高于多线程的理解,

redis常用数据结构及底层 string字符串、list链表、set无序集合、zset有序集合、hash哈希 1.string 底层结构是SDS简单动态字符串 struct sdshdr {int len; // 已用长度&#xff08;字符串实际长度&#xff09;int free; // 剩余可用空间char buf[]; // 数组&#…...

2025年5月AI科技领域周报(5.5-5.11):AGI研究进入关键验证期 具身智能开启物理世界交互新范式

2025年5月AI科技领域周报&#xff08;5.5-5.11&#xff09;&#xff1a;AGI研究进入关键验证期 具身智能开启物理世界交互新范式 一、本周热点回顾1. OpenAI发布GPT-5多模态大模型 突破通用智能关键阈值2. 特斯拉Optimus机器人量产版发布 具身智能进入工业场景3. 百度文心ERNIE…...

SQLPub:一个提供AI助手的免费MySQL数据库服务

给大家介绍一个免费的 MySQL 在线数据库环境&#xff1a;SQLPub。它提供了最新版本的 MySQL 服务器测试服务&#xff0c;可以方便开发者和测试人员验证数据库功能&#xff0c;也可以用于学习 MySQL。 免费申请 在浏览器中输入以下网址&#xff1a; https://sqlpub.com/ SQLP…...

URP相机如何将场景渲染定帧模糊绘制

1&#xff09;URP相机如何将场景渲染定帧模糊绘制 2&#xff09;为什么Virtual Machine会随着游戏时间变大 3&#xff09;出海项目&#xff0c;打包时需要勾选ARMv7吗 4&#xff09;Unity是手动还是自动调用GC.Collect 这是第431篇UWA技术知识分享的推送&#xff0c;精选了UWA社…...

WeakAuras Lua Script ICC (BarneyICC)

WeakAuras Lua Script ICC &#xff08;BarneyICC&#xff09; https://wago.io/BarneyICC/69 全量英文字符串&#xff1a; !WA:2!S33c4TXX5bQv0kobjnnMowYw2YAnDKmPnjnb4ljzl7sqcscl(YaG6HvCbxaSG7AcU76Dxis6uLlHNBIAtBtRCVM00Rnj8Y1M426ZH9XDxstsRDR)UMVCTt0DTzVhTjNASIDAU…...

为什么 mac os .bashrc 没有自动加载?

原因说明 在macOS中&#xff0c;默认情况下&#xff0c;终端使用的是Bash或Zsh作为shell。对于较新版本的macOS&#xff08;从Catalina开始&#xff09;&#xff0c;默认的shell已经切换为Zsh。因此&#xff0c;如果你正在使用Zsh&#xff0c;.bashrc文件不会自动生效&#xf…...

FramePack - 开源 AI 视频生成工具

&#x1f3ac; 项目简介 由开发者 lllyasviel 创建的一个轻量级动画帧处理工具库&#xff0c;专门用于游戏开发、动画制作和视频处理中的帧序列打包与管理。该项目采用高效的算法实现&#xff0c;能够显著提升动画资源的处理效率。 此 AI 视频生成项目&#xff0c;旨在通过低显…...

断点续传使用场景,完整前后端实现示例,包括上传,下载,验证

断点续传在多个场景中非常有用&#xff0c;包括但不限于大文件上传、跨国或跨区域文件传输、移动设备文件传输、备份和同步以及软件更新等。接下来&#xff0c;我将为你提供一个基于Java的后端实现示例&#xff0c;结合前端逻辑来完成整个断点续传的功能&#xff0c;包括上传、…...

【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓

文章目录 &#x1f504; 迭代器模式&#xff08;Iterator Pattern&#xff09;深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码&#xff08;背包系统遍历&#xff09;1. 定义迭代器与聚合接口2. 实现具体聚合类&#xff08;背包物品集合&#xff09;3. 实现具…...

Vuetify框架使用(一)之v-snackbar 组件封装及全局使用

说明&#xff1a;v-snackbar 组件适用于统一管理消息提示框(操作反馈的提示) 看效果&#xff1a; 1、在状态管理中创建文件&#xff0c;统一管理 // stores/snackbar.js /*** 统一管理消息提示框(操作反馈的提示)*/import { defineStore } from pinia; // 消息类型 export co…...

FPGA: UltraScale+ bitslip实现(方案+代码)

收获 一晃五年~ 五年前那个夏夜&#xff0c;我对着泛蓝的屏幕敲下《给十年后的自己》&#xff0c;在2020年的疫情迷雾中编织着对未来的想象。此刻回望&#xff0c;第四届集创赛的参赛编号仍清晰如昨&#xff0c;而那个在家熬夜焊电路板的"不眠者"&#xff0c;现在…...

【SpeechLMs】语音大型语言模型综述《A Survey on Speech Large Language Models》

摘要 大型语言模型 (LLM) 表现出强大的上下文理解能力和显著的多任务性能。 因此&#xff0c;研究人员一直在寻求将 LLM 整合到更广泛的语音语言理解 (SLU) 领域。 与传统方法不同&#xff0c;传统方法是将 LLM 级联以处理自动语音识别 (ASR) 生成的文本&#xff0c;而新方法则…...

C# 实现雪花算法(Snowflake Algorithm)详解与应用

在现代分布式系统中&#xff0c;生成全局唯一的标识符&#xff08;ID&#xff09;是一个非常重要的问题。随着微服务架构和分布式系统的普及&#xff0c;传统的单机数据库生成 ID 的方式已无法满足高并发和高可用的需求。为了解决这个问题&#xff0c;Twitter 提出了 雪花算法&…...

吴恩达机器学习笔记:特征与多项式回归

1.特征和多项式回归 如房价预测问题&#xff0c; ℎθ (x) θ0 θ1 frontage θ2 deptℎ x1 frontage&#xff08;临街宽度&#xff09;&#xff0c;x2 deptℎ&#xff08;纵向深度&#xff09;&#xff0c;x frontage ∗ deptℎ area &#xff08;面积&#xff09;…...

Flutter 与HarmonyOS Next 混合渲染开发实践:以 fluttertpc_scan 三方库为例

一、背景与价值 在跨平台开发中&#xff0c;Flutter 以其高效的 UI 构建能力著称&#xff0c;而鸿蒙 Next&#xff08;OpenHarmony&#xff09;则提供了深度系统集成的原生能力。将两者结合&#xff0c;可实现 UI 跨平台 原生功能深度融合 的混合渲染模式。本文以扫描库 flut…...

LangChain4j正式发布-简化将 LLM 集成到 Java 应用程序过程

LangChain4j 的目标是简化将 LLM 集成到 Java 应用程序中的过程。 官网地址 源码地址 开源协议&#xff1a;Apache License 2.0 实现方法 统一 API&#xff1a;LLM 提供程序&#xff08;如 OpenAI 或 Google Vertex AI&#xff09;和嵌入&#xff08;矢量&#xff09;存储…...

【C++】汇编角度分析栈攻击

栈攻击 介绍原理示例代码汇编分析 介绍原理 核心原理是通过 缓冲区溢出&#xff08;Buffer Overflow&#xff09; 等漏洞&#xff0c;覆盖栈上的关键数据&#xff08;如返回地址、函数指针&#xff09;&#xff0c;从而改变程序执行流程&#xff1b; 在 C 中&#xff0c;每个…...

Vue 3 打开 el-dialog 时使 el-input 获取焦点

运行代码&#xff1a;https://andi.cn/page/622178.html 效果&#xff1a;...

C++23 views::repeat (P2474R2) 深入解析

文章目录 引言C20 Ranges库回顾什么是Rangesstd::views的作用 views::repeat概述基本概念原型定义工作原理应用场景初始化容器模拟测试数据 总结 引言 在C的发展历程中&#xff0c;每一个新版本都会带来一系列令人期待的新特性&#xff0c;这些特性不仅提升了语言的性能和表达…...

HTML5 定位详解:相对定位、绝对定位和固定定位

在HTML5和CSS中&#xff0c;定位(positioning)是控制元素在页面上位置的重要机制。主要有四种定位方式&#xff1a;静态定位(static)、相对定位(relative)、绝对定位(absolute)和固定定位(fixed)。下面我将详细讲解这三种非静态定位方式&#xff0c;并提供相应的源代码示例。 …...

OpenCv高阶(4.0)——案例:海报的透视变换

文章目录 前言一、工具函数模块1.1 图像显示函数1.2 保持宽高比的缩放函数1.3 坐标点排序函数 二、透视变换核心模块2.1 四点透视变换实现 三、主流程技术分解3.1 图像预处理3.2 轮廓检测流程3.3 最大轮廓处理 四、后处理技术4.1 透视变换4.2 形态学处理 五、完整代码总结 前言…...

光谱相机的图像预处理技术

光谱相机的图像预处理技术旨在消除噪声、增强有效信息&#xff0c;为后续分析提供高质量数据。 一、预处理流程与技术要点 ‌辐射校正‌ ‌辐射定标‌&#xff1a;将图像灰度值转换为绝对辐射亮度&#xff0c;常用反射率法、辐亮度法和辐照度法消除传感器响应差异&#xff0…...

CSS 溢出内容处理、可见性控制与盒类型设置深度解析

CSS溢出内容处理、可见性控制与盒类型设置深度解析 一、溢出内容处理&#xff08;Overflow&#xff09; 在网页设计中&#xff0c;内容超出容器边界是常见问题。CSS提供了overflow属性及其变体来控制这种情况。 1.1 溢出基本属性 核心属性&#xff1a; overflow: visible&…...

k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持

k8s监控方案实践补充&#xff08;一&#xff09;&#xff1a;部署Metrics Server实现kubectl top和HPA支持 文章目录 k8s监控方案实践补充&#xff08;一&#xff09;&#xff1a;部署Metrics Server实现kubectl top和HPA支持一、Metrics Server简介二、Metrics Server实战部署…...