六、MySQL高级—架构介绍(1)
🌻🌻 目录
- 一、Mysql 简介
- 1.1 概述
- 1.2 Mysql 高手是怎样炼成的
- 二、Mysql Linux 版的安装
- 2.1 mysql5.5
- 2.2 mysql5.7
- 三、Mysql 的用户与权限管理
- 3.1 MySQL的用户管理
- 3.2 权限管理
- 3.3 通过工具远程访问
- 四、 Mysql的一些杂项配置(了解)
- 五、 Mysql 逻辑架构介绍
- 5.1 总体概览
- 5.2 总利用show profile 查看sql的执行周期
- 5.3 查询说明
- 5.4 SQL执行顺序(了解)
- 六、Mysql存储引擎
- 6.1 查看命令
- 6.2 各个引擎简介
- 6.2.1 InnoDB存储引擎
- 6.2.2 MyISAM存储引擎
- 6.2.3 Archive引擎
- 6.2.4 Blackhole引擎
- 6.2.5 CSV引擎
- 6.2.6 Memory引擎
- 6.2.7 Federated引擎
- 6.3 `MyISAM和InnoDB`
- 6.4 阿里巴巴、淘宝用哪个
👉👉 Mysql 基础
文章大纲 👇👇

一、Mysql 简介
1.1 概述
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于
Oracle公司。- MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- Mysql是开源的,所以你不需要支付额外的费用。
- Mysql是可以定制的,采用了
GPL协议,你可以修改源码来开发自己的Mysql系统。- Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- MySQL使用标准的SQL数据语言形式。
- Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
- MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
1.2 Mysql 高手是怎样炼成的
- 数据库内部结构和原理
- 数据库建模优化
- 数据库索引建立
- SQL语句优化
- SQL编程(自定义函数、存储过程、触发器、定时任务)
- mysql服务器的安装配置
- 数据库的性能监控分析与系统优化
- 各种参数常量设定
- 主从复制
- 分布式架构搭建、垂直切割和水平切割
- 数据迁移
- 容灾备份和恢复
shell或python等脚本语言开发- 对开源数据库进行二次开发
二、Mysql Linux 版的安装
2.1 mysql5.5
- 下载地址
官网下载地址:http://dev.mysql.com/downloads/mysql/

- 拷贝&解压缩

- 检查工作
- 检查当前系统是否安装过mysql
① 执行安装命令前,先执行查询命令
1、CentOS6
rpm -qa|grep mysql
② 如果存在mysql-libs的旧版本包如下:

③ 请先执行卸载命令:rpm -e --nodeps mysql-libs
④ 1、CentOS7
rpm -qa|grep mariadb
⑤ 如果存在如下:

⑥ 请先执行卸载命令:rpm -e --nodeps mariadb-libs
- 检查
/tmp文件夹权限
① 由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限
② 执行 :chmod -R 777 /tmp
- 安装
- 在mysql的安装文件目录下执行:
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
- 查看MySQL安装版本
- 或者可以执行 mysqladmin --version命令,类似java -version如果打出消息,即为成功。

- 通过vim 查看 mysql用户和mysql组
- mysql服务的启+停
- 启动:

- 关闭:

- 首次登录
安装完成后会提示出如下的提示:
在mysql首次登录前要给 root 账号设置密码

- MySQL的安装位置
- 在linux下查看安装目录
ps -ef|grep mysql
| 参数 | 路径 | 解释 | 备注 |
|---|---|---|---|
| – – basedir | /usr/bin | 相关命令目录 | mysqladmin mysqldump等命令 |
| – – datadir | /var/lib/mysql/ | mysql数据库文件的存放路径 | |
| – – plugin-dir | /usr/lib64/mysql/plugin | mysql插件存放路径 | |
| – – log-error | /var/lib/mysql/jack.atguigu.err | mysql错误日志路径 | |
| – – pid-file | /var/lib/mysql/jack.atguigu.pid | 进程pid文件 | |
| – – socket | /var/lib/mysql/mysql.sock | 本地连接时用的unix套接字文件 | |
| 空 | /usr/share/mysql | 配置文件目录 | mysql脚本及配置文件 |
| 空 | /etc/init.d/mysql | 服务启停相关脚本 |
- 在linux下查看安装目录
ps -ef|grep mysql
- 自启动mysql服务


- 修改字符集问题
- 尝试插入输入:

- 原因是字符集问题
① 查看字符集
show variables like 'character%';
show variables like '%char%';
看看出现的结果:

默认的是客户端和服务器都用了latin1,所以会乱码。
② 修改my.cnf
在/usr/share/mysql/ 中找到my.cnf的配置文件,拷贝其中的my-huge.cnf 到 /etc/ 并命名为my.cnf
然后修改my.cnf:
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8


③ 重新启动mysql
但是原库的设定不会发生变化,参数修改之对新建的数据库生效
④ 已生成的库表字符集如何变更
修改数据库的字符集
mysql> alter database mydb character set 'utf8';
修改数据表的字符集
mysql> alter table mytbl convert to character set 'utf8';
但是原有的数据如果是用非'utf8'编码的话,数据本身不会发生改变。
2.2 mysql5.7
参考:三、 CentOS-7.5 上面安装 mysql 5.7.16
- 官网下载地址:http://dev.mysql.com/downloads/mysql/

- 本地解压缩&拷贝到服务器


3 . 检查工作
- 检查当前系统是否安装过mysql
执行安装命令前,先执行查询命令
① CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的旧版本包如下:

请先执行卸载命令:rpm -e --nodeps mysql-libs
② CentOS7
rpm -qa|grep mariadb
如果存在如下:

请先执行卸载命令:rpm -e --nodeps mariadb-libs
4 . 检查当前mysql依赖环境
- 执行安装命令前,先执行查询命令
rpm -qa|grep libaio
如果存在libaio包如下:

rpm -qa|grep net-tools
如果存在net-tools包如下:

如果不存在需要到centos安装盘里进行rpm安装
CentOS-7离线安装net-tools
① 下载相关安装包
② 传输安装包到Linux

③ 执行安装命令
rpm -ivh net-tools-2.0-0.25.20131004git.el7.x86_64.rpmrpm -qa|grep net-tools

5 .检查/tmp文件夹权限
由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限
执行 :chmod -R 777 /tmp

6 .安装
- 在mysql的安装文件目录下执行:(
必须按照顺序执行)
rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm
如在检查工作时,没有检查mysql依赖环境在安装mysql-community-server会报错

注意:如果报如上错误,这是由于yum安装了旧版本的GPG keys所造成,从rpm版本4.1后,在安装或升级软件包时会自动检查软件包的签名。
解决:
rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm --force --nodeps

7 .查看MySQL安装版本
- 可以执行
mysqladmin --version命令,类似java -version如果打出消息,即为成功。

通过vim 查看 mysql用户和mysql组
8 .mysql服务的初始化
- 为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化
mysqld --initialize --user=mysql

另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码
查看密码:cat /var/log/mysqld.log
root@localhost: 后面就是初始化的密码比如我的就是:LuPZ53Djs7!l

9 .mysql服务的启+停
启动:systemctl start mysqld.service

关闭:systemctl stop mysqld.service
10 .首次登录
- 首次登陆通过
mysql -uroot -p进行登录,在Enter password:录入初始化密码

- 因为初始化密码默认是过期的,所以查看数据库会报错
show databases;

- 修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
但新密码太简单会报错

再次测试就正常了:

设置完密码就可以用新密码登陆,正常使用数据库了
11 .MySQL的安装位置(了解)
- 在linux下查看安装目录
ps -ef|grep mysql

| 参数 | 路径 | 解释 | 备注 |
|---|---|---|---|
| – – basedir | /usr/bin | 相关命令目录 | mysqladmin mysqldump等命令 |
| – – datadir | /var/lib/mysql/ | mysql数据库文件的存放路径 | |
| – – plugin-dir | /usr/lib64/mysql/plugin | mysql插件存放路径 | |
| – – log-error | /var/lib/mysql/jack.atguigu.err | mysql错误日志路径 | |
| – – pid-file | /var/run/mysqld/mysqld.pid | 进程pid文件 | |
| – – socket | /var/lib/mysql/mysql.sock | 本地连接时用的unix套接字文件 | |
| 空 | /usr/share/mysql | 配置文件目录 | mysql脚本及配置文件 |
| 空 | /etc/systemd/system/multi-user.target.wants/ | 服务启停相关脚本 |
12 .自启动mysql服务
查看mysql是否自启动(默认自启动)
systemctl list-unit-files|grep mysqld.service

如不是enabled可以运行如下命令设置自启动
systemctl enable mysqld.sercice
删除数据库(建议谨慎删除自己新创建的数据库)

13 .创建数据库

报错问题是编码问题请看 14
14 .修改字符集问题
直接插入中文数据报错。
① 修改配置文件
vim /etc/my.cnf

在最后加上中文字符集配置
character_set_server=utf8

② 重新启动 mysql
systemctl restart mysqld.servicesystemctl status mysqld.service

③ 已生成的库表字符集如何变更
修改数据库的字符集
mysql> alter database mydb character set 'utf8';
修改数据表的字符集
mysql> alter table mytbl convert to character set 'utf8';

远程连接看下面 👇👇
三、Mysql 的用户与权限管理

3.1 MySQL的用户管理
- 创建用户
create user Daniel identified by 'root';
表示创建名称为Daniel 的用户,密码设为root;

- 了解user表
- 查看用户
select host,user,authentication_string,select_priv,insert_priv,drop_priv from mysql.user;

host: 表示连接类型
%表示所有远程通过 TCP方式的连接,
IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定ip地址进行的TCP方式的连接
机器名 通过制定i网络中的机器名进行的TCP方式的连接
::1 IPv6的本地ip地址 等同于IPv4的 127.0.0.1
localhost 本地方式通过命令行方式的连接 ,比如mysql -u xxx -p 123xxx 方式的连接。
User:表示用户名
同一用户通过不同方式链接的权限是不一样的。
password: 密码
所有密码串通过 password(明文字符串) 生成的密文字符串。加密算法为MYSQLSHA1 ,不可逆 。mysql 5.7 的密码保存到authentication_string字段中不再使用password 字段。
select_priv , insert_priv等 , 为该用户所拥有的权限。
远程再次连接,但是进去发现没有权限:


直接跳到3.2进行授权。
- 给刚创建的用户设置密码
修改当前用户的密码:
set password =password('root')
修改某个用户的密码:
update mysql.user set password=password('root') where user='Daniel';flush privileges; #所有通过user表的修改,必须用该命令才能生效。
3.2 权限管理
① 授予权限
- 授权命令:
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
该权限如果发现没有该用户,则会直接新建一个用户。
比如
grant select,insert,delete,drop on root.* to Daniel@localhost ;
这里就给root用户用本地命令行方式下,授予root这个库下的所有表的插删改查的权限。
grant all privileges on *.* to root@'%' identified by 'root';
授予通过网络方式登录的的root用户 ,对所有库所有表的全部权限,密码设为root.

再次远程访问就可以啦!!!

- 收回权限
① 查看当前用户权限
show grants;

② 收回权限命令:
- revoke 权限1,权限2,…权限n on 数据库名称.表名称 from 用户名@用户地址 ;
REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
③ 收回全库全表的所有权限
REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
④ 收回mysql库下的所有表的插删改查权限
必须用户重新登录后才能生效
- 查看权限
- 查看当前用户权限
show grants;
- 查看某用户的全局权限
select * from user ;
- 查看某用户的某个表的权限
select * from tables_priv;
3.3 通过工具远程访问
数据库图形化工具 SQLYog、Navicat
1、先 ping 一下数据库服务器的ip 地址确认网络畅通。
2、关闭数据库服务的防火墙
service iptables stop
3、 确认Mysql中已经有可以通过远程登录的账户
select * from mysql.user where user='Daniel' and host='%';
如果没有用户,先执行如下命令:
grant all privileges on *.* to Daniel@'%' identified by 'root';
4、测试连接:

四、 Mysql的一些杂项配置(了解)
MySQL的sql_mode合理设置
- sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。
CREATE TABLE mytbl2 (id INT,NAME VARCHAR(200),age INT,dept INT);
INSERT INTO mytbl2 VALUES(1,'zhang3',33,101);
INSERT INTO mytbl2 VALUES(2,'li4',34,101);
INSERT INTO mytbl2 VALUES(3,'wang5',34,102);
INSERT INTO mytbl2 VALUES(4,'zhao6',34,102);
INSERT INTO mytbl2 VALUES(5,'tian7',36,102);
#每个机构年龄最大的人
SELECT NAME,dept,MAX(age) FROM mytbl2 GROUP BY dept;


show variables like 'sql_mode';
- sql_mode常用值如下:
set sql_mode='ONLY_FULL_GROUP_BY';
- ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
- NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
- STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制- NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
- NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
- ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL
- NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户
- NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
- PIPES_AS_CONCAT:
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
- ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符- ORACLE:
设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.
五、 Mysql 逻辑架构介绍
5.1 总体概览
和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在
存储引擎的架构上,
插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。


1.连接层
最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2.服务层
- 2.1
Management Serveices & Utilities: 系统管理和控制工具- 2.2
SQL Interface: SQL接口
接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface- 2.3
Parser: 解析器
SQL命令传递到解析器的时候会被解析器验证和解析。- 2.4
Optimizer: 查询优化器。
SQL语句在查询之前会使用查询优化器对查询进行优化。
用一个例子就可以理解: select uid,name from user where gender= 1;
优化器来决定先投影还是先过滤。- 2.5
Cache和Buffer: 查询缓存。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
3.引擎层
存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
4.存储层
数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
5.2 总利用show profile 查看sql的执行周期
- 修改配置文件
/etc/my.cnf- 新增一行:
query_cache_type=1- 重启mysql :
systemctl restart mysqld


先开启 show variables like '%profiling%';
set profiling=1;
select * from mytbl;
show profiles; #显示最近的几次查询


show profile cpu,block io for query 编号 #查看程序的执行步骤
show profile cpu,block io for query 1;


5.3 查询说明
查询流程图:

首先,mysql的查询流程大致是:
- mysql客户端通过协议与mysql服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,也就是说,在解析查询之前,服务器会先访问查询缓存(
query cache)——它存储SELECT语句以及相应的查询结果集。如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅仅将缓存中的结果返回给用户即可,这将大大提高系统的性能。- 语法解析器和预处理:首先mysql通过关键字将SQL语句进行解析,并生成一颗对应的“解析树”。mysql解析器将使用mysql语法规则验证和解析查询;预处理器则根据一些mysql规则进一步检查解析数是否合法。
- 查询优化器当解析树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。。
然后,mysql默认使用的
BTREE索引,并且一个大致方向是:无论怎么折腾sql,至少在目前来说,mysql最多只用到表中的一个索引。
5.4 SQL执行顺序(了解)
(1)手写

(2)机读
- 随着Mysql版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的
性能消耗不同而动态调整执行顺序。 下面是经常出现的查询顺序:

六、Mysql存储引擎
6.1 查看命令
如何用命令查看
- 看你的mysql现在已提供什么存储引擎:
mysql> show engines;


- 看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';


6.2 各个引擎简介
6.2.1 InnoDB存储引擎
InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
6.2.2 MyISAM存储引擎
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
6.2.3 Archive引擎
Archive档案存储引擎只支持INSERT和SELECT操作,在MySQL5.1之前不支持索引。
Archive表适合日志和数据采集类应用。
根据英文的测试结论来看,Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。
6.2.4 Blackhole引擎
Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存。但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但这种应用方式会碰到很多问题,因此并不推荐。
6.2.5 CSV引擎
CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。
CSV引擎可以作为一种数据交换的机制,非常有用。
CSV存储的数据直接可以在操作系统里,用文本编辑器,或者excel读取。
6.2.6 Memory引擎
如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表是非常有用。Memory表至少比MyISAM表要快一个数量级。
6.2.7 Federated引擎
Federated引擎是访问其他MySQL服务器的一个代理,尽管该引擎看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的。
6.3 MyISAM和InnoDB
| 对比项 | MyISAM | InnoDB |
|---|---|---|
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 |
| 缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
| 关注点 | 节省资源、消耗少、简单业务 | 并发写、事务、更大资源 |
| 默认安装 | Y | Y |
| 默认使用 | N | Y |
| 自带系统表使用 | Y | N |
6.4 阿里巴巴、淘宝用哪个

Percona为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
该公司新建了一款存储引擎叫
xtradb完全可以替代innodb,并且在性能和并发上做得更好,
阿里巴巴大部分mysql数据库其实使用的percona的原型加以修改。
AliSql+AliRedis
相关文章:
六、MySQL高级—架构介绍(1)
🌻🌻 目录 一、Mysql 简介1.1 概述1.2 Mysql 高手是怎样炼成的 二、Mysql Linux 版的安装2.1 mysql5.52.2 mysql5.7 三、Mysql 的用户与权限管理3.1 MySQL的用户管理3.2 权限管理3.3 通过工具远程访问 四、 Mysql的一些杂项配置(了解)五、 Mysql 逻辑架构…...
TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)
项目地址:https://github.com/Linaom1214/TensorRT-For-YOLO-Series/tree/cuda-python 算法支持状态: 2024.6.16 Support YOLOv9, YOLOv10, changing the TensorRT version to 10.0 2023.8.15 Support cuda-python 2023.5.12 Update 2023.1.7 support YO…...
码上君量化互助社群介绍
写在前面 量化投资是一个漫长的过程,一个人单打独斗会走很多弯路,所以建立一个交流沟通互助群是有必要的。 无论是加入我的这个量化互助社群,还是加入其他的社群,首先要想想自己加入社群的目的是什么,自己想从中获得…...
Qt使用小技巧之按钮动态变化
前言 最近写小demo中无意发现的,是想实现当鼠标悬停到按钮上面的时候,按钮实现动态变化,让人知道鼠标经过了按钮,效果如下 hoverDynamicPushButton 正文 首先是将按钮的边框给去掉,然后设置下它的悬停伪状态就行了 格…...
MySQL——事务与存储过程(三)存储过程的使用(1)调用存储过程
使用存储过程可以使程序执行效率更高、安全性更好,增强程序的可重用性和维护性。接下来将针对存储过程的使用进行详细的讲解。 存储过程有多种调用方法。存储过程必须使用CALL语句调用,并且存储过程和数据库相关,如果要执行其他数据库…...
基于VUE2-dataV和echarts实现的可视化大屏,百分比适配PC端
可视化平台中,数据分别通过仪表盘、环状图、柱形图、曲线图、 滚动表格等多种形式展示数据变化。 可视化平台大致分为左、中、右三部分,左侧由能耗总览、耗能 占比、库存预警构成,中间由数据总览、销售计划完成率构成,右侧 由销售…...
FastAPI模块化:为复杂应用程序提供清晰的结构
开题描述: 在现代软件开发中,随着应用程序规模的扩大和功能的增加,传统的单体架构逐渐暴露出其局限性。FastAPI,作为一款高性能的现代Web框架,通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建…...
【Hot100】LeetCode—215. 数组中的第K个最大元素
目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接:215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标: int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…...
pycharm如何安装selenium
在pycharm中打开一个项目后,点击Setting(ALTCtrlS快捷键) 然后点击install package完成后点击关闭这个窗口,就可以在代码中使用selenium了 成功后出现如下界面 编写一段正常可以运行操作chorme浏览器的 from selenium import webdriver # 指定ChromeDriver的路径driver we…...
css三点闪烁(可用于加载样式、标题等)
代码案例 HTML <div class"flexAlign loading"><div class"loading_item"></div><div class"loading_item"></div><div class"loading_item"></div> </div> <div class"ot…...
支持向量机 (Support Vector Machines, SVM)
支持向量机 (Support Vector Machines, SVM) 通俗易懂算法 支持向量机(SVM)是一种用于分类和回归任务的机器学习算法。在最简单的情况下,SVM是一种线性分类器,适用于二分类问题。它的基本思想是找到一个超平面(在二维…...
上海市计算机学会竞赛平台2024年8月月赛丙组调和级数
题目描述 给定一个整数 nn,记 ⌊x⌋⌊x⌋ 表示不超过实数 xx 的最大整数,请求出 ⌊n1⌋⌊n2⌋⌊n3⌋⋯⌊nn−1⌋⌊nn⌋⌊1n⌋⌊2n⌋⌊3n⌋⋯⌊n−1n⌋⌊nn⌋ 输入格式 单个整数:表示 nn 输出格式 单个整数:表示答…...
【重学 MySQL】二十、运算符的优先级
【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级(由高到低)注意事项示例 在 MySQL 中,运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…...
十种优化MySQL数据库的最佳建议
优化MySQL数据库可以提高查询性能和系统响应能力,以下是一些MySQL数据库优化的建议: 优化查询语句:避免使用SELECT *,只选择需要的字段;使用索引来加快查询速度;避免使用慢查询。 优化表结构:使…...
springboot组件使用-mybatis组件使用
文章目录 springboot使用mybatis组件1. 添加依赖2. 配置数据源3. 创建实体类4. 创建Mapper接口5. 创建Mapper XML文件6. 使用Mapper7. 启动类配置 mybtis 动态SQL1. Mapper 注解2. Select 注解3. Insert 注解4. Update 注解5. Delete 注解6. Results 注解7. Param 注解8. Cache…...
Ribbon 源码分析【Ribbon 负载均衡】
前言 在 Spring Cloud 2020 版本以后,移除了对 Netflix 的依赖,也就移除了负载均衡器 Ribbon,Spring Cloud 官方推荐使用 Loadbalancer 替换 Ribbon,而在 LoadBalancer 之前 Spring Cloud 一直使用的是 Ribbon 来做负载[均衡器的…...
Python | Leetcode Python题解之第385题迷你语法分析器
题目: 题解: class Solution:def deserialize(self, s: str) -> NestedInteger:if s[0] ! [:return NestedInteger(int(s))stack, num, negative [], 0, Falsefor i, c in enumerate(s):if c -:negative Trueelif c.isdigit():num num * 10 int…...
进程间通信-进程池
目录 理解 完整代码 完善代码 回收子进程: 不回收子进程: 子进程使用重定向优化 理解 #include <iostream> #include <unistd.h> #include <string> #include <vector> #include <sys/types.h>void work(int rfd) {…...
【PYTHON 基础系列-request 模块介绍】
一、requests库简介 使用requests库能快速构建 HTTP 请求,而无需深入了解底层网络协议细节。其API设计直观,使得发送请求就像调用函数一样简单,同时提供了丰富的选项以满足复杂网络交互的需求。这种设计使得无论是初学者还是经验丰富的开发者…...
springboot 实现策略模式通过id进入不同的服务类service
在Spring Boot中实现策略模式,通常是将不同的算法封装在单独的类中,并使它们可以相互替换。这些类通常都实现同一个接口。在Spring Boot应用中,你可以通过Spring的依赖注入(DI)来管理这些策略类的实例,并通…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
