【深入浅出MySQL】之数据类型介绍
【深入浅出MySQL】之数据类型介绍
- MySQL中常见的数据类型一览
- 为什么需要如此多的数据类型
- 数值类型
- BIT(M)类型
- INT类型
- TINYINT类型
- BIGINT类型
- 浮点数类型
- float类型
- DECIMAL(M,D)类型
- 区别总结
- 字符串类型
- CHAR类型
- VARCHAR(M)类型
- 日期和时间类型
- enum和set类型
前言:MySQL是一种广泛使用的关系型数据库管理系统,它提供了多种数据类型供开发者去选择,以此来满足不同的场景。
MySQL中常见的数据类型一览
类别 | 数据类型 | 描述 | 存储范围/长度 | 常见用途 |
---|---|---|---|---|
数值类型 | TINYINT | 非常小的整数 | -128 到 127(有符号);0 到 255(无符号) | 存储小的整数,如状态码(0/1)、年龄等 |
BITM | 位类型,M 指定位数,默认值1 | M 的范围(1~64) | 适用于需要存储二进制信息的情况,例如标志位、布尔值数组等。通过使用 BIT 类型,可以更有效地存储和操作位级别的数据。 | |
SMALLINT | 小整数 | -32,768 到 32,767(有符号);0 到 65,535(无符号) | 存储中等范围的整数,如计数器、小范围的ID | |
MEDIUMINT | 中等大小的整数 | -8,388,608 到 8,388,607(有符号);0 到 16,777,215(无符号) | 存储中等范围的整数,较少使用 | |
INT / INTEGER | 标准整数 | -2,147,483,648 到 2,147,483,647(有符号);0 到 4,294,967,295(无符号) | 存储常用整数,如用户ID、订单号等 | |
BIGINT | 大整数 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符号) | 存储大范围整数,如大型系统的ID、计数器 | |
FLOAT | 单精度浮点数 | 约 ±3.4E+38(7位有效数字) | 存储近似数值,如价格、科学计算数据 | |
DOUBLE | 双精度浮点数 | 约 ±1.79E+308(15位有效数字) | 存储更高精度的近似数值,如金融数据、科学计算 | |
DECIMAL(M,D) | 定点数(精确小数) | M 是总位数,D 是小数位数,例如 DECIMAL(10,2) 存储 8位整数+2位小数 | 存储精确小数,如货币金额(避免浮点误差) | |
字符串类型 | CHAR(M) | 固定长度字符串 | 0 到 255 个字符 | 存储固定长度的字符串,如状态码、性别(‘M’/‘F’) |
VARCHAR(M) | 可变长度字符串 | 0 到 65,535 个字符(取决于字符集和存储引擎) | 存储可变长度的字符串,如用户名、地址 | |
TINYTEXT | 短文本字符串 | 最大 255 个字符 | 存储短文本,如备注、小段描述 | |
TEXT | 标准文本字符串 | 最大 65,535 个字符 | 存储较长的文本,如文章内容、评论 | |
MEDIUMTEXT | 中等长度文本字符串 | 最大 16,777,215 个字符 | 存储中等长度的文本,如长篇文章 | |
LONGTEXT | 超长文本字符串 | 最大 4,294,967,295 个字符 | 存储超长文本,如日志文件、JSON 数据 | |
ENUM('value1', 'value2', ...) | 枚举类型,只能从预定义值中选择一个值 | 最多 65,535 个不同值 | 存储固定选项,如状态(‘active’/‘inactive’)、性别(‘male’/‘female’) | |
SET('value1', 'value2', ...) | 集合类型,可以选择多个预定义值(以逗号分隔) | 最多 64 个不同值 | 存储多选选项,如兴趣(‘reading,swimming’) | |
日期和时间类型 | DATE | 日期 | 1000-01-01 到 9999-12-31 | 存储日期,如生日、注册日期 |
TIME | 时间 | -838:59:59 到 838:59:59 | 存储时间,如一天中的时间点、持续时间 | |
DATETIME | 日期和时间组合 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 存储完整的日期和时间,如创建时间、更新时间 | |
TIMESTAMP | 时间戳(从 1970-01-01 00:00:00 UTC 开始) | 1970-01-01 00:00:00 到 2038-01-19 03:14:07(UTC) | 存储时间戳,常用于记录数据更新时间(自动更新) | |
YEAR | 年份 | 1901 到 2155(4位格式);70 到 69(2位格式,1970-2069) | 存储年份,如出生年份、发布年份 | |
其他类型 | BINARY(M) | 固定长度的二进制字符串 | 0 到 255 个字节 | 存储固定长度的二进制数据,如校验码 |
VARBINARY(M) | 可变长度的二进制字符串 | 0 到 65,535 个字节 | 存储可变长度的二进制数据,如小型文件 | |
BLOB | 二进制大对象 | 最大 65,535 个字节 | 存储二进制数据,如图片、文件 | |
MEDIUMBLOB | 中等长度的二进制大对象 | 最大 16,777,215 个字节 | 存储中等大小的二进制数据,如较大的文件 | |
LONGBLOB | 超长二进制大对象 | 最大 4,294,967,295 个字节 | 存储超大二进制数据,如视频文件 | |
JSON | JSON 格式数据(MySQL 5.7+ 支持) | 最大 1GB(受限于存储引擎) | 存储 JSON 数据,如配置信息、动态字段 |
为什么需要如此多的数据类型
似乎单一数据类型如字符类型可以存储所有的数据,但事实上,我们需要如此多的数据类型的原因有以下几种:
- 数据的准确性与合法性需求:有时候我们描述某一个列时,如果这个列只能是整数,而不能出现小数点(如
id
),此时如果只有字符类型就满足不了需求,而整数类型和浮点数类型的存在就可以有效防止非法的数据进入数据库中。 - 性能上:
- 空间上:如果只有单一的
INT
类型的整数,有时候某些列的大小永远不会超过某一个整数值,这个时候使用INT
就很浪费空间,所以使用 TINYINT 来存储 0 到 255 范围内的整数比使用 VARCHAR 更节省空间。 - 时间上:对于数值运算,直接使用数值类型而不是字符串类型进行计算会更加高效。这是因为数值类型可以直接参与算术运算,而字符串则需要先转换成数值形式才能进行相应的操作,这增加了额外的处理开销。
- 空间上:如果只有单一的
- 功能上:
- 日期时间处理:专门的日期时间类型(如
DATE
,TIME
,DATETIME
)提供了丰富的函数支持,方便进行日期计算、格式化输出等操作。如果用字符串表示日期时间,则需要手动编写代码来进行这些操作,不仅复杂而且容易出错。
- 日期时间处理:专门的日期时间类型(如
- 查询优化:
- 索引利用:某些数据类型允许创建特定类型的索引(如全文索引适用于 TEXT 类型),从而提高查询能力。如果所有数据都以字符串形式存储,则可能无法充分利用这些高级索引功能。
数值类型
BIT(M)类型
BIT是位类型,其中
M
是位数,如果你想精确控制该列的位数,可以使用这个类型。
-
创建一个表
tt1
,表中有一个num
列,它的类型是BIT(1)
: -
表创建成功了:
-
向表中插入数据:
- 超过
1
就插入失败,因为bit
位的位数位1,只能表示0
、1
。 - 但是发现一个很奇怪的现象,就算查表,1没有显示出来。
- 超过
-
这是因为
bit
类型是默认是按照ASCII
码,1
对应的符号是不可显示的特殊符号。 -
测试一下
bit
类型位数的边界情况:create table tt3(num bit(65)); create table tt4(num bit(0));
[!tip]
如果我们有一些列,只需要
0
或者1
就可以使用bit(1)
,这样非常节省空间。
INT类型
INT类型的范围:-2,147,483,648 到 2,147,483,647(有符号);0 到 4,294,967,295(无符号)
这和我们C语言中的是相符的。
但C语言中溢出后会截断,数据库是否会这样呢?
-
首先我们创建表
tt4
:create table tt4(num int);
-
查看表
tt4
:int
后面的数字的含义:这是表示的默认宽度,通常配合ZEROFILL
属性使用,这个后面我们再谈,和C语言中的printf
的格式控制符很像。
-
插入一个数字,我们测试
int
的边界,插入2147483647
、2,147,483,648
,-2,147,483,648
、-2,147,483,649
:
TINYINT类型
TINYINT
也是整数类型,但是它只能表示-128 到 127(有符号),0 到 255(无符号)当你的列需要一个整数类型来表示,但是不会超过255
时就可以使用这个类型。
-
创建表
tt5
:create table tt5(num tinyint);
-
越界测试:
insert into tt5 values(128);
BIGINT类型
大整数类型,它能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符号),适合做大型系统的
id
列的类型、计数器等。
-
创建表
tt6
:create table tt6(num bigint);
-
数据类型边界测试:
insert into tt6 values(-9223372036854775808);
浮点数类型
float类型
语法(syntax):
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个
-
创建表
tt7
,它有一个num
列是float(5,2)
类型,长度为5,小数位数为2,它可以表示999.99 ~ -999.99
的值:create table tt7(float(5,2));
-
插入一些值观察现象:
mysql> insert into tt7 values(999.99999999); ERROR 1264 (22003): Out of range value for column 'num' at row 1 mysql> insert into tt7 values(999.99); Query OK, 1 row affected (0.00 sec)mysql> insert into tt7 values(999.93); Query OK, 1 row affected (0.00 sec)mysql> insert into tt7 values(-999.999); ERROR 1264 (22003): Out of range value for column 'num' at row 1 mysql> insert into tt7 values(-999.99); Query OK, 1 row affected (0.00 sec)mysql> insert into tt7 values(-9999); ERROR 1264 (22003): Out of range value for column 'num' at row 1 mysql> insert into tt7 values(-99);Query OK, 1 row affected (0.00 sec) mysql> select * from tt7; +---------+ | num | +---------+ | 999.99 | | 999.93 | | -999.99 | | -99.00 | +---------+
- 可以看到依旧会发生越界的情况。
-
如果我们插入的值长度超过
M
,但是范围又在此时[M,d]所限定的范围内,就会发生四舍五入的情况:
DECIMAL(M,D)类型
M 是总位数,D 是小数位数,例如 DECIMAL(10,2) 存储 8位整数+2位小数
听上去好像和float
没什么区别呀,我们来建个表插入数据看看:
-
创建表
tt8
,它有一列num,数据类型为decimal(5,2)
,存储3位整数+2位小数:create table tt8(num decimal(5,2));
-
插入一些值,然后观察现象:
insert into tt8 values(999.976) ...
- 它似乎也和
float
一样也会进行越界判断,也会四舍五入,那它们有什么区别呢?
区别总结
我们从实际的现象来观察并思考为什么会这样。
-
创建表
tt9
:create table tt9(num1 float(10,1),num2 decimal(10,1));
-
插入下面的值:
insert into tt9(999999998,999999998);
-
表中最终的结果:
mysql> select * from tt9; +--------------+-------------+ | num1 | num2 | +--------------+-------------+ | 1000000000.0 | 999999998.0 | +--------------+-------------+
- 居然!,
num1
被近似成了1000000000.0
,而且总长度是11位,我们不是规定了总长度吗?这个num2
是正常显示的。
- 居然!,
-
我们手动插入一下一行让
num1
为1000000000.0
,看能否成功:mysql> insert into tt9 values(1000000000.0,999999998); ERROR 1264 (22003): Out of range value for column 'num1' at row 1
- 很明显失败了,
MySQL
报错了。
- 很明显失败了,
总结:
FLOAT
是近似类型:它不保证精确存储和显示,可能会对大数值进行近似处理。DECIMAL
是精确类型:它严格按照定义的范围和精度存储和显示数据。- 显示宽度不受严格限制:FLOAT(M,D) 的定义主要用于限制存储范围(也就是限制用户的),但实际显示的宽可能会因为近似超出定义的范围。
所以如果我们的列对数据的精确性要求很高,且是浮点数,就需要使用DECIMAL
类型。
字符串类型
CHAR类型
语法:char(L):固定长度字符串,不管用户输入的字符串的长度为多少,
MySQL
都会拿出L
的长度给该列,L
的最大值是255
。
[!caution]
MySQL
里面的一个长度就对应一个字符,不管你是中文、英文字符、还是特殊字符都只占一个长度单位,也就是说MySQL
对于字符长度有自己的标准。在 MySQL 中,字符长度单位指的是字符的数量,而不是字节数。但是,实际占用的存储空间取决于字符集。
下面我们创建表,插入一些值来验证一下:
-
创建表
tt10
:create table tt10(s char(5));
-
插入一些字符:
insert into tt10 values('你好世界呀'); insert into tt10 values('abcde'); insert into tt10 values('abcdef');
- 我们都知道实际上中文字符的存储字节和英文字符的存储字节一般是不同的,要看具体的存储编码,所以在 MySQL 中,字符长度单位指的是字符的数量,而不是字节数。
[!caution]
如果你插入的字符的长度比
L
小,MySQL
会自动填充空格。
VARCHAR(M)类型
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
-
创建表
tt11
:create table tt11(s varchar(10));
-
插入一些字符串:
insert into tt11 values("111"); insert into tt11 values("1111111111");
[!caution]
变长并不是这个类型存储的字符的长度可以超过用户指定的长度
L
,而是当用户实际存储的字符长度没有L
时,MySQL
不会使用空格填充,这样节省了空间。
如何选择char
和varchar
类型:
- 如果指定列的字符串长度是固定的,就使用
char
类型。 - 当存储大量可变长度的字符串时,可以使用
varchar
来节省存储空间。 CHAR
因为是定长的,存储和检索效率更高,尤其是在频繁访问和更新的场景中。VARCHAR
因为需要额外的长度信息,存储和检索效率略低,但在现代数据库系统中,这种差异通常不明显。
日期和时间类型
MySQL中日期类型(如
DATE
、DATETIME
、TIMESTAMP
等)是非常重要的数据类型。它们的存在是为了更高效地存储、查询和操作与时间相关的数据。
日期类型可以表示广泛的日期范围,远超过普通字符串或数字能表达的范围。例如:
DATE
类型支持从 ‘1000-01-01’ 到 ‘9999-12-31’ 的日期。DATETIME
和TIMESTAMP
支持精确到秒甚至微秒的时间点。
下面我们创建一个表,使用一下日期类型:
-
创建表
tt12
:create table tt12(d1 date,d2 datetime,t timestamp);
-
插入一些值:
insert into tt12 values('1922-01-22','1922-01-22 00:00:00',FROM_UNIXTIME(1));
-
TIMESTAMP
不支持直接插入原始的 Unix 时间戳(如1742947200
),需要通过FROM_UNIXTIME()
函数进行转换。插入当前时间:可以使用NOW()
或CURRENT_TIMESTAMP
来插入当前时间。 -
DATETIME
存储日期和时间。 -
DATE
只存储日期。
-
enum和set类型
ENUM
(枚举)类型是一种字符串对象,其值范围必须来自一个预定义的列表。这些值是按定义顺序排列的,并且只能选择列表中的值之一。SET 类型是一种字符串对象,它可以包含零个或多个由逗号分隔的值,这些值来自于一个预定义的列表。与 ENUM 不同的是,SET 允许一个字段包含多个值。
使用介绍:
-
创建表
tt13
:create table tt13(identity enum('学生','老师','工人'), set permissions('write','read','exec'));
-
插入一些值:
mysql> insert into tt13 values('学生','write,res'); ERROR 1265 (01000): Data truncated for column 'permissions' at row 1 mysql> insert into tt13 values('学生','write,read'); Query OK, 1 row affected (0.00 sec)mysql> insert into tt13 values('学生','write'); Query OK, 1 row affected (0.00 sec)mysql> insert into tt13 values('学生,老师','write'); ERROR 1265 (01000): Data truncated for column 'identity' at row 1 mysql> insert into tt13 values('学生1','write'); ERROR 1265 (01000): Data truncated for column 'identity' at row 1
应用场景:
- 使用
ENUM
:- 当字段的值是单一选项时。
- 需要确保数据一致性且选项数量较少。
- 场景示例:性别、状态、分类等。
- 使用
SET
:- 当字段的值是多个选项的组合时。
- 需要灵活的多选功能且选项数量较少。
- 场景示例:权限、兴趣爱好、标签等。
相关文章:
【深入浅出MySQL】之数据类型介绍
【深入浅出MySQL】之数据类型介绍 MySQL中常见的数据类型一览为什么需要如此多的数据类型数值类型BIT(M)类型INT类型TINYINT类型BIGINT类型浮点数类型float类型DECIMAL(M,D)类型区别总结 字符串类型CHAR类型VARCHAR(M)类型 日期和时间类型enum和set类型 …...
从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 4 |IMU 死算与校正:惯性导航在资源受限环境的落地
Part 4 |IMU 死算与校正:惯性导航在资源受限环境的落地 本章聚焦 ESP32-S3 平台上如何利用 LSM6DS3 IMU 实现 死算(Dead Reckoning),并结合 零速更新(ZUPT) 或 磁力计辅助 进行 漂移校正,最终通过 EKF/UKF 融合提升定位精度。 一、传感器简介与校准 LSM6DS3 主要参数 加速…...
【iOS】 方法交换
【iOS】 方法交换 method-swizzling 文章目录 【iOS】 方法交换 method-swizzling前言什么是method-swizzling相关API方法交换的风险在load方法中保证只加载一次要在当前类的方法中进行交换如果方法依赖于cmd 方法交换的应用 前言 之前看过有关于消息转发的内容,这里我们可以简…...
PostgreSQL 的 ANALYZE 命令
PostgreSQL 的 ANALYZE 命令 ANALYZE 是 PostgreSQL 中用于收集数据库对象统计信息的关键命令,这些统计信息对于查询优化器生成高效执行计划至关重要。 一 ANALYZE 命令 1.1 基本语法 ANALYZE [ ( option [, ...] ) ] [ table_and_columns [, ...] ] ANALYZE [ …...
初识 iOS 开发中的证书固定
引言 在移动应用安全领域,HTTPS/TLS 是数据传输的第一道防线,但仅依赖系统默认的证书验证仍有被中间人(MITM)攻击的风险。Certificate Pinning(证书固定)通过将客户端信任“钉”在指定的服务器证书或公钥上…...
2025 年如何使用 Pycharm、Vscode 进行树莓派 Respberry Pi Pico 编程开发详细教程(更新中)
micropython 概述 micropython 官方网站:https://www.micropython.org/ 安装 Micropython 支持固件 树莓派 Pico 安装 Micropython 支持固件 下载地址:https://www.raspberrypi.com/documentation/microcontrollers/ 选择 MicroPython 下载 RPI_PIC…...
设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用
🔄 回顾 Day 16:责任链模式小结 在 Day 16 中,我们学习了责任链模式(Chain of Responsibility Pattern): 将请求沿链传递,节点可选择处理或传递下一节点。实现了请求发送者与多个处理者的解耦…...
文章记单词 | 第63篇(六级)
一,单词释义 vegetable [ˈvedʒtəbl] n. 蔬菜;植物人;生活单调乏味的人;adj. 蔬菜的;植物的faint [feɪnt] adj. 模糊的;微弱的;虚弱的;v. 昏倒,昏厥;n. 昏…...
ES类的索引轮换
通过以下请求方法创建一个名为 “tiered-storage-policy” 的 ISM policy: PUT _plugins/_ism/policies/tiered-storage-policy {"policy": {"description": "Changes replica count and deletes.","schema_version": 1,…...
小白机器人假想:分布式关节控制——机器人运动的未来模式?
引言 在机器人技术快速发展的今天,控制架构的创新往往能带来突破性进展。作为一名机器人爱好者,我最近思考了一个大胆的设想:如果机器人的每个关节都配备独立的动作存储器和处理器,并通过高速光纤网络与中央"驱动总脑"…...
LangChain4j +DeepSeek大模型应用开发——9 优化硅谷小鹿
1.预约业务的实现 这部分我们实现硅谷小鹿的查询订单、预约订单、取消订单的功能 创建MySQL数据库表 CREATE DATABASE xiaolu; USE xiaolu; -- 创建预约表 appointment CREATE TABLE appointment (id BIGINT NOT NULL AUTO_INCREMENT COMMENT 主键ID,自增, -- 主…...
Oracle VirtualBox 在 macOS 上的详细安装步骤
Oracle VirtualBox 在 macOS 上的详细安装步骤 一、准备工作1. 系统要求2. 下载安装包二、安装 VirtualBox1. 挂载安装镜像2. 运行安装程序3. 处理安全限制(仅限首次安装)三、安装扩展包(增强功能)四、配置第一个虚拟机1. 创建新虚拟机2. 分配内存3. 创建虚拟硬盘4. 加载系…...
Day110 | 灵神 | 二叉树 | 根到叶路径上的不足节点
Day110 | 灵神 | 二叉树 | 根到叶路径上的不足节点 1080.根到叶路径上的不足节点 1080. 根到叶路径上的不足节点 - 力扣(LeetCode) 思路: 笔者一开始没看懂,只能通过部分的例子,原因是把路径和小于limit的都给删了…...
超详细讲解C语言转义字符\a \b \r \t \? \n等等
转义字符 C语言有一组字符很特殊,叫做转义字符,顾名思义,改变原来的意思的字符。 1 \? ??)是一个三字母词,在以前的编译器它会被编译为] (??会被编译为[ 因此在以前输入(are you ok ??)就会被编译为are you ok ] 解决这个…...
TensorFlow 多卡训练 tf多卡训练
目录 export TF_GPU_ALLOCATORcuda_malloc_async 🔧 具体作用 优势 🧩 依赖条件 ✅ 设置方式(Linux/macOS) export TF_GPU_ALLOCATORcuda_malloc_async 是设置 TensorFlow 使用 CUDA 异步内存分配器 的环境变量。这个设置可…...
数据结构--树状数组
树状数组(Fenwick Tree) 概述 树状数组是一种用于高效处理动态数组中前缀和查询的数据结构。它能够在 O ( l o g n ) O(log n) O(logn) 时间复杂度内完成以下操作: 更新数组中的元素O(logn)查询数组前缀和O(logn) 数组: O(1)…...
如何使用python保存字典
在Python中,可以通过多种方式将字典(dict)保存到文件中,并能够随时读取恢复。以下是几种常见的方法: 1. 使用 json 模块(推荐) 适用场景:需要人类可读的文件格式,且数据不…...
C和指针——预处理
预处理是编译前的过程,主要对define,include以及一些编译器定义的内容进行替换 #define的本质就是替换 1、例子 #define FOREVER for(;;) 2、例子 #define TEMPD "1231231231\ 123123123" \\如果太长了,可以用\换行 3、例子——可…...
windows python ta-lib安装
https://github.com/TA-Lib/ta-lib/releases windows安装ta-lib指令 pip install --no-cache-dir https://github.com/cgohlke/talib-build/releases/download/v0.6.3/ta_lib-0.6.3-cp310-cp310-win_amd64.whl...
机器学习+多目标优化的算法如何设计?
一、核心问题与设计思路 机器学习(ML)与多目标优化(MOO)的结合旨在解决两类核心问题: 利用ML提升MOO算法的性能:通过机器学习模型预测解的质量、优化搜索方向或加速收敛;利用MOO优化ML模型的多…...
爬虫管理平台-最新版本发布
TaskPyro 是什么? TaskPyro 是一个轻量级的 Python 任务调度平台,专注于提供简单易用的任务管理和爬虫调度解决方案。它能够帮助您轻松管理和调度 Python 任务,特别适合需要定时执行的爬虫任务和数据处理任务。 官方文档:https:/…...
SpringCloud教程 — 无废话从0到1逐步学习
目录 什么是微服务? 微服务与单体架构的区别 微服务主要用法概念 远程调用 服务注册/发现&注册中心 配置中心 服务熔断&服务降级 1)服务熔断 2)服务降级 API 网关 环境准备 Nacos OpenFeign Gateway Sentinel Sea…...
Webug4.0通关笔记12- 第17关 文件上传之前端拦截(3种方法)
目录 一、文件上传前端拦截原理 二、第17关 文件上传(前端拦截) 1.打开靶场 2.构造php脚本 3.源码分析 (1)js源码 (2)服务器源码 (3)总结 4.渗透实战 (1)禁用js法 &#…...
使用synchronized关键字同步Java线程
问题 在Java多线程编程中,你需要保护某些数据,防止多个线程同时访问导致数据不一致或程序错误。 解决方案 在需要保护的方法或代码段上使用synchronized关键字。 讨论 synchronized关键字是Java提供的同步机制,用于确保在同一时刻只有一…...
从头训练小模型: 2 监督微调SFT
简介 从头训练小模型是我个人对大语言模型(LLM)学习中的重要部分。 通过对一个小规模模型的最小化复现实践,我不仅能够深入理解模型训练的基本流程,还可以系统地学习其中的核心原理和实际运行机制。这种实践性的学习方法让我能够直观地感受模型训练的每…...
【QT】QT中http协议和json数据的解析-http获取天气预报
QT中http协议和json数据的解析 1.http协议的原理2.QT中http协议的通信流程2.1 方法步骤 3.使用http协议(通过http下载图片和获取天气预报信息)3.1 http下载网络上的图片(下载小文件)3.1.1 示例代码3.1.2 现象 3.2 获取网络上天气预报3.2.1 免费的天气预报…...
PiscTrace针对YOLO深度适配:从v8到v12
一、YOLO简介:目标检测的核心技术 YOLO(You Only Look Once)是近年来最为流行的目标检测模型,凭借其实时性与高精度,广泛应用于自动驾驶、视频监控、安防检测等多个领域。YOLO系列模型自v1问世以来,经过不…...
前端面试每日三题 - Day 24
这是我为准备前端/全栈开发工程师面试整理的第24天每日三题练习,涵盖了: JavaScript 中的 Promise.all()、Promise.race() 和 Promise.allSettled() 的实际应用和性能差异React 中的 Concurrent Rendering 和 useTransition API如何设计一个高并发的在线…...
正态分布习题集 · 题目篇
正态分布习题集 题目篇 全面覆盖单变量正态、多变量正态、参数估计、假设检验、变换以及应用,共 20 题,从基础到进阶。完成后请移步《答案与解析篇》。 1. 基础定义与性质(5题) 1.1 密度函数 写出正态分布 N ( μ , σ 2 ) N(…...
Three.js在vue中的使用(二)-动画、材质
一、Three.js 动画原理与实现 1. 基本原理 Three.js 的动画系统基于 关键帧(Keyframe) 和 时间轴(AnimationClip) 实现: THREE.AnimationMixer:管理多个动画片段的播放器THREE.AnimationClip:…...
【办公类-99-04】20250504闵豆统计表excle转PDF,合并PDF、添加中文字体页眉+边框下划线
需求说明 督导检查,各条线都要收集资料。 今天去加班,遇到家教主任,她让我用保教主任的彩色打印机打印这套活跃度表格。(2023学年上学期下学期-2024学年上学期,就是202309-202504) 每个excle都是内容在A4一…...
ES类迁移方法
快照(s3 file FS)跨集群迁移es-dumpremote-reindexLogstash Elasticsearch 迁移方法 Elasticsearch 迁移是将数据、索引和配置从一个 Elasticsearch 集群转移到另一个集群的过程。以下是几种常见的迁移方法: 1. 快照和恢复 (Snapshot and Restore) 这是最推荐的…...
智能合约部署之全国职业院校技能大赛“区块链技术应用”赛项—“航班延误险案例”
智能合约部署之全国职业院校技能大赛“区块链技术应用”赛项—“航班延误险案例” 1.启动虚拟机上的区块链 (1)打开VMware虚拟机,在桌面中点击右键,选择Open Terminal打开命令行窗口。 (2)使用"cd geth_local/"命令,切换至区块链根目录,输入下面的命令启动…...
STM32外设-GPIO输入(仅数字)
STM32外设-GPIO输入 一,输入的三种类型1. 上拉 (Pull-up)输入2. 下拉 (Pull-down)输入3. 浮空 (Floating / High-Impedance)输入 二,下拉电阻的作用 学完基础的led,接下来学习key即按键,但在连接按键之前,我们必须了解…...
QT开发工具对比:Qt Creator、Qt Designer、Qt Design Studio
前端开发工具—Qt Designer Qt Designer是Qt框架的一部分,是一个图形用户界面设计工具。它允许开发者通过可视化方式设计和布局GUI组件,而无需手动编写UI代码。设计完成后,Qt Designer生成UI文件(通常以.ui为扩展名)&…...
(ADC)数模转换器的不同类型对比
(ADC)数模转换器的不同类型对比 数模转换器(ADC)类型详解1. **并行比较型ADC(Flash ADC)****工作原理****优缺点****应用场景** 2. **逐次逼近型ADC(SAR ADC)****工作原理****优缺点…...
MOS管极间电容参数学习
文章目录 前言1. 输入电容(Ciss)2. 输出电容(Coss)3. 反向转移电容(Crss)4,测试条件解读总结 前言 MOS管在电路设计中非常常用,用途包括DC-DC,电平转换等,所…...
Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷
目录 第18关 渗透实战 1.打开靶场 2.构造php脚本 3.源码分析 (1)客户端源码 (2)服务的源码 4.Nginx解析法渗透 (1)缺陷原因 (2)缺陷条件 (3)构造脚…...
外观模式(Facade Pattern)
非常好!现在我们来讲解结构型设计模式之一:外观模式(Facade Pattern)。 我会通过: ✅ 简洁定义 🎯 为什么需要 🐍 Python 代码(含注释) 🧭 流程图 应用场…...
Javase 基础加强 —— 03 集合
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 集合是一种容…...
【React】 Hooks useTransition 解析与性能优化实践
1.背景 useTransition 是 React 18 引入的一个并发模式下的 Hook,用于区分紧急和非紧急的状态更新,提升应用的响应性和用户体验;它可以管理 UI 中的过渡状态,特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态&…...
C++23 std::tuple与其他元组式对象的兼容 (P2165R4)
文章目录 引言C23 std::tuple概述std::tuple的定义和基本用法std::tuple的特性std::tuple的应用场景 其他元组式对象的特点Python元组的特点Python元组与C std::tuple的对比 P2165R4提案的具体内容提案背景提案主要内容提案的影响 兼容性示例代码总结 引言 在C编程的世界里&am…...
网络Tips20-003
1.E1载波的控制开销占2/32*100%6.25%,E1载波的基本帧传送时间是125uS。 2.计算机在一个指令周期的过程中,为从内存读取指令操作码,首先要将.程序计数器(PC)的内容送到地址总线上 3.3DES算法:密码学中,3DES是三重数据加密算法通称…...
Rust的安全卫生原则
在Rust编程世界里,unsafe关键字常常让初学者感到困惑。他们经常会问:“在unsafe块里能做什么?”“什么时候需要使用unsafe?” 这些问题虽然很常见,但对于真正理解Rust的安全机制来说还远远不够。因为随着Rust操作语义的…...
TestBench激励与待测
TestBench激励与待测 ✅ 一、TestBench 的作用✅ 二、例化的目的✅ 三、TestBench 中的信号类型选择🟢 输入端口(input) → 在 TestBench 中声明为 reg🟡 输出端口(output)→ 在 TestBench 中声明为 wire ✅…...
VulnHub-OSCP靶机
前言:由于这台机器过于简单,所以我会尽量细化和介绍每个步骤以及涉及到的知识点,让正在打入门机器的你不在迷茫和硬化的操作,理解并熟悉每条命令以及参数的含义,以及把前期带给我们的信息进行快速筛选,有利…...
【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?
在 Nuxt.js 的 SSR(服务器端渲染)或 SSG(静态站点生成)应用中,SEO 优化是非常核心的工作内容之一。利用 Nuxt.js 的特性,我们可以通过多个维度系统地提升搜索引擎排名。 下面是我在实际项目中采取的 SEO 优…...
软考 系统架构设计师系列知识点之杂项集萃(53)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(52) 第85题 在静态测试中,主要是对程序代码进行静态分析。“数据初始化、赋值或引用过程中的异常”属于静态分析中的()。 A. 控制流分析 B. 数据…...
【AI面试准备】模型自动化评估经验
面试要求:模型自动化评估经验。 以下是针对模型自动化评估经验的结构化知识总结,涵盖核心概念、工具链、高频考点和面试回答技巧,助你快速掌握关键点: 目录 **一、模型自动化评估的核心逻辑**1. **为什么要自动化评估?…...
indexedDB
indexedDB 特点 **容量大:**不同浏览器不一样,250MB **遵守同源策略:**只能访问同源下的数据库,不能跨域 **异步操作:**防止阻塞(特别是大量数据的操作) 事务支持:确保数据的…...