第二阶段:mysql(学完就隐藏版)
-
第一章:部署数据库系统(注意关闭防火墙,selinux安装)
- 安装mysql配置的相关文件:yum install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm(centos9:yum install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm)
- 安装mysql,建议关闭校验(yum install mysql-community-server)
- 启动mysql(要先启动服务,才会有/var/log/mysqld.log,这个文件才有初始密码):systemctl start mysqld
- 查看密码:grep password | /var/log/mysqld.log
- 登录mysql:mysql -u 用户名 -p(exit退出mysql)
- 运行 MySQL 安全设置:使用临时密码登录 MySQL(看看可不可以用),然后在shell中运行安全设置程序来配置 root 密码等安全选项:mysql_secure_installation(先完成密码重置)
- 表数据一般,放在/var/lib/mysql中
- 我想设置简单密码,但是必须要完成密码重置后才可以
- 登录 MySQL:查看密码策略设置:SHOW VARIABLES LIKE 'validate_password%';
- 修改密码策略(可选):
- 设置密码策略为 LOW:SET GLOBAL validate_password.policy = LOW;设置最小密码长度为 6:SET GLOBAL validate_password.length = 6;可以选择降低对特殊字符和数字的要求:SET GLOBAL validate_password.mixed_case_count = 0; SET GLOBAL validate_password.number_count = 0; SET GLOBAL validate_password.special_char_count = 0;更改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码';
-
第二章:sql数据库操作语言ddl
-
sql语言分类
- sql:结构化查询语言:用于存取数据,查询数据,更新数据,管理关系型数据库系统{sql语言由ibm开发}
-
分类
- DDL:数据定义语言:数据库,数据表,视图,索引,存储过程
- DML:数据操纵语言:插入insert,删除delete,更新update
- DQL:数据查询语言:查询select
- DCL:数据控制语言:控制用户各类权限
-
名词解释
-
数据库服务器
- 运行数据库的物理设备:硬件+系统+mysqlsever
-
数据库(show databases;显示当前数据库管理系统的默认库)
-
默认数据库(管理表的单元)
-
information_schema
- 类型:虚拟库
- 功能:该库存储了系统中的数据库对象信息。它不包含实际的数据,而是提供了对数据库结构(元数据)的查询接口。
- 内容:表、列、权限、约束、触发器等的元数据。
- 用途:通常用于查询数据库结构或对象的信息,例如查询所有表的列表、列的详细信息等。
-
mysql
- 类型:系统库
- 功能:存储 MySQL 数据库服务器的核心数据,包括用户权限、数据库、表的定义、权限管理、时间区信息等。
- 内容:用户、授权、系统变量、存储过程等信息。
- 用途:与安全性和访问控制密切相关,所有关于用户权限的更改都会影响
mysql
数据库中的表。
-
performance_schema
- 类型:虚拟库
- 功能:用于监控 MySQL 服务器的性能,提供低开销的方式来分析服务器的执行情况。
- 内容:它包含与 MySQL 性能相关的各种事件、状态、等待锁定等信息。
- 用途:用于调试和优化 MySQL 的性能,通过收集和显示性能数据来帮助分析查询、锁定、内存使用等。
-
sys
- 类型:视图库
- 功能:MySQL 5.7 开始引入的系统库,基于
performance_schema
和information_schema
,为 DBA 提供了更为友好的性能分析视图。 - 内容:简化了对性能数据的查询,提供了易于理解的视图和帮助调优的建议。
- 用途:为数据库管理员提供有用的系统和性能监控信息的简单视图,常用于性能调优和问题排查。
-
-
-
表
- 管理记录的单元
-
记录(行)
- 信息的载体,数据的管理单元
-
字段(列)
- 字段名,类型(长度),约束条件(可选)。数据的属性。
-
类型
- 对于不同的数据进行分类,比如“你好”是文本,12是数字,这两个类型就不一样了,或者图片和文本,音频和数字。为了方便区分,另外节省空间就有了类型。
-
约束
- 对字段的一些强行命令,比如姓名字段不可为空,就是说必须要有个名字。
-
图示
数据库结构图
-
-
ddl(命令不区分大小写,但是参数区分)
-
ddl-库
-
定义数据库
-
创建数据库
-
create database 数据库名;(分号不能忘)
-
-
查看当前dbms(数据库管理系统)中的所有数据库:show databases;
-
-
选择/进入数据库
-
use 数据库名; 选择并使用数据库
-
select database():查看当前位于的数据库
-
查看创建过程:show create table/database 表名/数据库名
-
-
删除数据库
-
drop database 数据库名;
-
-
系统中的位置
-
/var/lib/mysql(使用yum安装的,mysql实际文件夹位置)
-
-
-
ddl-表
-
目的
- 表是数据库存放数据的基本单位,由若干个字段构成,用记录(行)存放数据。
-
创建表
- create table 表名 【这里有空格】(
列名1 类型(【长度】) 【完整性约束】,
列名1 类型(长度) 【完整性约束】,
…………
)【数据表的一些相关设置】;
- create table 表名 【这里有空格】(
-
查看:当前数据库的所有表:show tables;对应表表结构:desc 表名;
-
-
数据类型(mysql8.0)
-
数值类型
- 整型
- int(有符号-214,783,648到214,783,647,无符号0到4,294,967,295)
- tinyint(有符号-128到127,无符号0到255)
- unsigned用法,在创建表的时候 类型 unsigned。
- zerofill 当不满足类型的最小宽度自动填充0,(同时会自动将列设置为
UNSIGNED
),用法 类型(最小宽度) zerofill。比如:int(最小宽度6) zerofill。
- 浮点型(小数收到长度约束四舍五入)
- float(总位数《整数加小数位数》,小数点后位数):不写默认为float(10,3)双精度形式。{由于
FLOAT
是近似值存储,可能会出现精度损失。例如,在财务计算或精度要求较高的场合,不建议使用FLOAT
} - 精确小数decimal(总位数《整数加小数位数》,小数点后位数):不写默认decimal(7,0){精确存储,适合财务等精确场景}
- float(总位数《整数加小数位数》,小数点后位数):不写默认为float(10,3)双精度形式。{由于
- 整型
-
字符串类型
- 字符型
- char:定长字符串类型(默认1字符),适用于存储长度固定的字符串0-255字符{会删除末尾空格}
- varchar:变长字符串类型(默认1字符),适合存储长度不一致的字符串65,535 字符(在行长度限制下){不会删除末尾空格}
- 枚举与集合(选项为字符串类型)
- 枚举enum(单选):只能选择一个预定义的字符串值(最多 65535 个不同的值)(以整数形式存储,映射到对应的字符串值)【enum('value1', 'value2', 'value3', ...)】
- 集合set(多选):可以选择多个预定义的字符串值(最多 64 个不同的值)(以位图形式存储,多个值用位标识)【set('value1', 'value2', 'value3', ...)】{插入集合的时候insert into 表 values(‘枚举’,‘集合1,集合2……’)}
- 字符型
-
时间日期类型(插入数据时用引号包起来)
- 日期data(YYYY-MM-DD)
- 时间time(HH:MM:SS)
- 日期时间datatime(YYYY-MM-DD HH:MM:SS)
- 时区默认时间timestamp(自动管理插入和更新时间,使用这个类型,不添加值就默认当前时区时间)
- 当前
- curtime()当前时间,curdate()当前日期,now()当前日期时间
- 可以通过select单独查看,也可以直接作为参数
-
-
完整性约束
-
默认值,是否空值:default,【not】null
- create table ly (id int default 1 not null,name varchar(50) default ‘李叶’ not null);
-
设置主键:primary key(数据在表中唯一,且不可以为空,主键唯一但是主键字段不唯一)
- create table ly (id int default 1 primary key auto_increment);
-
设置唯一性约束:unique(标志该字段值唯一不可以重复,可以为空<空可以重复>,一个表可以有多高unique)
- create table ly ( id int ,name varchar(50) unique);
- create table ly ( id int ,name varchar(50), unique(id,name));
-
设置外键约束:foreign key(将多表联动起来,a表改变名字,对应b表也发生改变)(外键就像是硬链接,两个文件一个inode,而且作用只对对应字段值的行整体有用,比如删除主表一行,对应子表行删除,但是不能通过主表对子表行的某一项操作)
- 父表:create table ly (name varchar(50) not null,mail varchar(40),primary key(name));
- 子表:create table ly1(student_name varcah(50),id int not null auto_increment,primary key(id),foreign key(name)reference ly(name)on update cascade on delete cascade);
- 注意子表通过foreign key设置外键,通过reference声明与父表ly(name)关联(ly中的name是ly的主键才可以),on xxx表示在哪些权利上共享。
- 注意
- 外键引用的字段:外键必须引用另一个表中的主键或唯一键(Primary Key 或 Unique Key)
- 字段类型必须匹配:外键字段和被引用字段的数据类型必须兼容。
- 允许NULL值:外键字段可以允许为
NULL
,这意味着某条记录可以不引用父表中的任何记录。 - 父表的记录必须存在:外键要求引用的父表中的主键记录必须已经存在。
-
设置复合主键约束:primary key
- create table ly(id int,name char(10),sex char(2),primary key(id,name,【字段名】));
-
设置字段自增:auto_increment(默认加1)
- create table ly (id int auto_increment);
-
-
-
-
第三章:sql数据库操作语言DML
- 对数据的管理,写入,删除,更新。
-
插入:insert into 表
- insert into 表(表内字段)values (对应字段的值);
- 不给定字段就表示表内所有字段:insert 表 values (按照顺序一次插入);
- 多条数据插入:insert into 表(表内字段)values (对应字段的值),(对应字段的值);
- 注意值的数据类型
-
更新:update 表 set
- update 表 set 列名=值 where 条件;(按照条件行,修改对应列单元格值,如果没有条件就是整列)
-
删除:delete from 表(删除行数据)
- delete from 表 where 条件;(不加条件删整个表的数据)
-
第四章:sql数据库查询语言DQL
-
简单查询
- select */列名(逗号隔开) from 表名;
- select 列名*6 from 表名;(还可以四则运算查询)
-
条件查询where
-
单条件
- select 查看的列 from 表 where 条件;
- 可以使用=,<,>,>=,<=,!=/<>
-
多条件and/or
- select 查看的列 from 表 where 条件1 and/or 条件2……;and表示同时满足,or表示满足一项就可以了。
-
-
关键字between and闭区间
- select 查看的列名 from 表名 where 列名 between 开始 and 结束;在范围之中。
-
关键字in集合查询。
- select 查看列 from 表 where 条件列 in (匹配值,逗号分开);
-
-
关键字is null/is not null,查询是否为空的值
- select 查看列 from 表 where 条件列 is null;(注意空格也是字符,可以通过length(列),查看空格多少,中英文1个字符)
-
-
关键字like模糊查询(%表示任意个(0到任意),_任意一个和shell脚本一样)
- select 查看列 from 表 where 列 like “%”
-
-
查询排序
- select 查看列 from 表 order by 排序的列名(可以多列)asc(升序)/desc(降序)【limit 数字(表示排序到后的前几位,limit可以单独用但是要放到最后,比order还要后)】;(要知道,因为是排序,所以肯定是最后操作,所以排序放在其它操作最后)
-
子查询
- 将select语句的结果看做参数用(无论关键字是否有了()比如in,都建议在子查询外添加括号)包括,比如select * from (select * from 表 limit 30);这里将子查询的结果当做了表
-
多表查询
-
-
第五章:sql数据库控制语言DCL
-
DCL
-
权限级别
-
global level:全局权限,所有表所有库
-
database level:数据库权限
-
table level:数据表权限
-
column level:表中某个字段的权限
-
-
mysql用户管理
-
在 MySQL 数据库中,用户账户的信息存储在
mysql
数据库中的user
表中。user
表中保存了所有 MySQL 用户的权限、认证方式、密码以及其他相关信息。(root下) -
创建用户:
- create user '用户名'@'指定登录主机' identified by '密码';
用户名
:是你要创建的用户名。指定登录主机
:表示允许该用户从哪个主机进行连接。常用的选项:'localhost'
:只允许从本地主机连接。'%'
:允许从任何主机连接。
- 密码:必要大小写数字符号且8位
- create user '用户名'@'指定登录主机' identified by '密码';
-
删除用户:
- drop user '用户名'@'指定主机';
-
修改用户密码:
- select user();查看当前登录用户
- 方法1:alter user '用户名'@'指定主机' identified[译为验证] by '新密码';
- 方法2:set password for '用户名'@'指定主机'= '新密码';
- 方法3:mysqladmin -u root -p'与-p没有空格' password ‘新密码有空格’;
- 丢失root密码怎么办?
- vim /etc/my.cnf添加skip-grant-tables(启动mysql时跳过授权密码)
- 重启mysqld服务
- 进入mysql -u root
- update mysql.user set authentication_string='' where user='root';修改系统用户密码为空
- vim /etc/my.cnf取消之前的skip-grant-tables
- 进入系统修改root密码
- 方法1:set password for '用户'@'localhost'='密码';
- 方法2:alter user ‘用户名’@‘主机’ identified by ‘密码’;
-
登录mysql:mysql -u username -p ‘密码’ 【数据库名,直接进入数据库】
- 如果需要从远程登录 MySQL,请确保 MySQL 服务器的配置允许外部连接,并使用对应的
host
参数:mysql -u username -p -h IP地址 - -P:端口,mysql默认3306端口
- -e ‘sql命令’:免登录mysql直接执行数据库后面是命令
- 如果需要从远程登录 MySQL,请确保 MySQL 服务器的配置允许外部连接,并使用对应的
-
-
mysql权限原理
- grant(给予)/revoke(撤销) 权限列表 on 数据库名.表名 to/from(取消用from) '用户名'@'主机' [IDENTIFIED BY '密码'] [WITH GRANT OPTION];{使用*可以设置整个数据库或者这个dbms中的所有数据库}
- revoke/grant 权限 (列名) on 数据库名.表名 to/from(取消用from) '用户名'@'主机';
-
权限列表:指定要授予的权限,可以是以下任意一个或多个:
ALL PRIVILEGES(all也可以)
:授予所有权限。SELECT
:允许查询数据。INSERT
:允许插入数据。UPDATE
:允许更新数据。DELETE
:允许删除数据。CREATE
:允许创建新数据库和表。DROP
:允许删除数据库和表。GRANT OPTION
:允许将自己的权限授予其他用户。
-
ON 数据库名.表名:指定权限应用于哪个数据库和表。
- 如果是对整个数据库授予权限,可以使用
数据库名.*
。
- 如果是对整个数据库授予权限,可以使用
-
TO '用户名'@'主机':指定要授予权限的用户及其主机。
用户名
:要授予权限的用户名。主机
:指定用户可以从哪个主机连接,常用的有localhost
(仅本地主机)和%
(任意主机,ip,%,网段+%都可以)。
-
[IDENTIFIED BY '密码']:可选项,通常在创建用户时使用,表示设置用户的密码。注意:在使用
GRANT
语句时,如果用户已经存在,则通常不需要这个选项。 -
[WITH GRANT OPTION]:可选项,通常用于授予
GRANT OPTION
权限,允许用户将他们所拥有的权限授予其他用户。-
转授的限制:
- 用户只能转授他们自己拥有的权限。例如,如果某用户只拥有
SELECT
权限,则他们不能授予其他用户UPDATE
或DELETE
权限。
- 用户只能转授他们自己拥有的权限。例如,如果某用户只拥有
-
安全风险:
- 授予
WITH GRANT OPTION
可能带来安全风险,因为它允许用户自行分配权限。因此,谨慎使用,确保只对可信任的用户启用该选项。
- 授予
-
撤销权限时的影响:
- 如果你撤销某用户的权限,并且该用户使用
WITH GRANT OPTION
授予了其他用户权限,系统将自动撤销该用户所转授的权限。
- 如果你撤销某用户的权限,并且该用户使用
-
-
-
刷新:flush privileges;查看:show grants for '用户名'@'主机'(show grants查看当前用户权限);
- grant(给予)/revoke(撤销) 权限列表 on 数据库名.表名 to/from(取消用from) '用户名'@'主机' [IDENTIFIED BY '密码'] [WITH GRANT OPTION];{使用*可以设置整个数据库或者这个dbms中的所有数据库}
-
-
MySQL日志
-
错误日志
- 错误日志记录 MySQL 服务器的启动、停止以及在运行过程中发生的任何错误信息。它是管理员排查问题的关键日志文件,尤其是在 MySQL 启动失败或发生重大错误时。
- 配置错误日志(重启生效):vim /etc/my.cnf 中 通过log-error=/var/log/mysqld.log(默认)
- 查看错误日志
- cat 文件 或者 在mysql 中 select @@log_error;
-
二进制日志
- 二进制日志用于记录所有对数据库进行更改的事件,如
INSERT
、UPDATE
、DELETE
等。它不记录SELECT
,show查询。二进制日志的主要作用是数据恢复和主从复制。 - 配置二进制日志(重启生效):vim /etc/my.cnf 中 通过
server_id = 1 # 设置为一个唯一的整数
log_bin = /var/log/mysql/mysql-bin.log # 启用二进制日志 - 查看二进制日志(每次重启服务都会生成一个新文件)
- mysqlbinlog /var/log/mysql_bin.log # 启用二进制日志(要先创建对应的文件文件夹,chown -R mysql:mysql 目录,给目录权限)
server_id
是 MySQL 中用于标识每个服务器实例的一个唯一整数标识符,主要用于 MySQL 主从复制(Replication)。每个参与复制的 MySQL 服务器(无论是主服务器还是从服务器)都需要设置唯一的server_id
,以便在数据同步时区分不同的服务器。(1 和 4294967295闭区间)-
主从复制:MySQL 的复制机制中,
server_id
是用来唯一标识不同的 MySQL 实例的,防止数据混乱。如果主服务器和从服务器的server_id
相同,会导致复制失败。 -
二进制日志:当启用二进制日志时,
server_id
也用于标识哪些更改事件是当前服务器自己生成的,以防止循环复制。
-
查看二进制日志文件相关状况:show binary logs;
-
-
- mysqlbinlog /var/log/mysql_bin.log # 启用二进制日志(要先创建对应的文件文件夹,chown -R mysql:mysql 目录,给目录权限)
-
二进制日志格式(my.cnf中添加binlog_format=ROW《默认row》)
-
select @@binlog_format;查看binlog格式
- SBR: 记录 SQL 语句,适用于简单操作,日志较小,但可能导致不一致。
- RBR: 记录行级变更,适用于复杂操作,保证一致性,但日志较大。
- MBR: 结合 SBR 和 RBR,灵活应对不同场景,但可能导致复杂性。
-
- 二进制日志用于记录所有对数据库进行更改的事件,如
-
慢日志
- 慢查询日志记录所有执行时间超过指定阈值(
long_query_time
)的查询语句。它是优化 MySQL 性能的重要工具,用于发现执行缓慢的查询。
- 慢查询日志记录所有执行时间超过指定阈值(
-
-
-
第六章:sql数据库备份管理
-
备份技术
-
冷备份
- 冷备份是指在备份数据时,系统或数据库完全停止运行,并且不接受任何读写操作。整个系统处于“离线”状态,这种备份方式相对安全,因为没有用户活动或数据库事务在进行,数据的一致性得以保证。
- 关闭数据库服务——tar数据库数据目录——cp/scp到备份文件存放位置
- scp 本地文件路径 用户名@远程主机:远程路径
-
热备份
- 备份是指在系统或数据库正常运行、不断服务的情况下进行的数据备份。它不需要停机,系统可以在备份过程中继续处理用户请求和事务。为了保证备份数据的一致性,通常会使用锁定机制或事务日志。
-
-
备份模式
-
完备备份
- 完备备份是指将指定的所有数据、文件或数据库完整地备份,无论数据是否发生变化。这是最基础、最全面的一种备份方式。
-
增量备份
- 增量备份是指自上次备份(无论是完备备份还是增量备份)之后,仅备份发生了变化的数据。每次增量备份只包含自上次备份后新增或修改的数据。
-
差异备份
- 差异备份是指自上次完备备份之后,所有发生了变化的数据,不论中间是否有过增量备份或差异备份。每次差异备份的内容包括自上次完备备份以来所有的修改数据。
-
-
备份操作
- (percona-xtrabackup80,mysql8.0),(percona-xtrabackup24,mysql5.7)
-
安装:
- yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpmhttps://repo.percona.com/yum/percona-release-latest.noarch.rpm(无法使用就换版本比如:https://repo.percona.com/yum/percona-release-1.0-9.noarch.rpmhttps://repo.percona.com/yum/percona-release-1.0-9.noarch.rpmhttps://repo.percona.com/yum/percona-release-1.0-9.noarch.rpm)https://repo.percona.com/yum/percona-release-latest.noarch.rpm(仓库配置)yum makecache(刷新一下)
- yum install percona-xtrabackup-80(安装软件)
- yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpmhttps://repo.percona.com/yum/percona-release-latest.noarch.rpm(无法使用就换版本比如:https://repo.percona.com/yum/percona-release-1.0-9.noarch.rpmhttps://repo.percona.com/yum/percona-release-1.0-9.noarch.rpmhttps://repo.percona.com/yum/percona-release-1.0-9.noarch.rpm)https://repo.percona.com/yum/percona-release-latest.noarch.rpm(仓库配置)yum makecache(刷新一下)
-
备份
-
# 1. 完整备份 xtrabackup 【--defaults-file=配置文件位置,如果为/etc/my.cnf就可以不写】 --backup --target-dir=完整备份目录(要先创建) --user=mysql用户 --password=密码 # --backup:指定进行备份操作 # --target-dir:设置备份数据存放的目录 # --user(简写-u用户名):用于连接 MySQL 的用户名 # --password(简写-p密码):连接 MySQL 的密码# 2. 增量备份 xtrabackup 【--defaults-file=配置文件位置,如果为/etc/my.cnf就可以不写】 --backup --target-dir=增量备份目录 --incremental --incremental-basedir=完全备份目录 --user=mysq用户 --password=密码 # --incremental:启用增量备份 # --incremental-basedir:指定上次完整备份的目录# 进行第二次增量备份 xtrabackup 【--defaults-file=配置文件位置,如果为/etc/my.cnf就可以不写】 --backup --target-dir=增量备份目录2 --incremental --incremental-basedir=完全备份目录 --user=mysql目录 --password=密码# 3. 准备完整备份 xtrabackup --prepare --target-dir=已经备份的完整备份目录 # --prepare:准备备份,使其可用于恢复# 4. 准备增量备份 xtrabackup --prepare --apply-log-only --target-dir=完全备份目录 --incremental-dir=某个增量备份 # --apply-log-only:仅应用日志,但不标记为完全恢复(意思是告诉系统,我还有要加的,别急,最后一次增量不写,表示告诉系统可以了,我完整了,是一个完整备份,不要在来数据了,来了也不要。)# 5. 恢复备份(恢复要关mysqld) xtrabackup 【--defaults-file=配置文件位置,如果为/etc/my.cnf就可以不写】 --copy-back --target-dir=完全备份目录 # --copy-back:将准备好的备份文件复制回 MySQL 数据目录# 6. 权限修复 chown -R mysql:mysql /var/lib/mysql # 确保 MySQL 数据目录的权限正确# 7. 启动 MySQL 服务 systemctl start mysqld# 排错: # 如果提示版本问题,就添加--no-server-version-check# 差异备份 # 简单的说,就是基于完全备份+最后一次增量备份就可以了(注意不要有--apply-log-only)# 压缩与解压备份 # --compess(放到备份/增量备份语句中xtrabackup --backup --compress --compress --target-dir=/压缩备份 --user=mysql_user --password=your_password) # --compress-threads=4:设置压缩时使用的线程数,默认为 1,设置为 4 代表用 4 个线程压缩。 # --decmpress(xtrabackup --prepare --target-dir=/压缩目录) # 最后恢复就可以了,记得授权
-
-
-
第七章:数据库代理服务与集群管理
相关文章:

第二阶段:mysql(学完就隐藏版)
第一章:部署数据库系统(注意关闭防火墙,selinux安装) 安装mysql配置的相关文件:yum install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm(centos9:yum install http…...
Spring Cloud微服务
引言 在过去的几十年中,软件架构的发展经历了从单体应用到微服务的演变。微服务架构是一种将应用程序分解为小的、独立的服务的方法,每个服务可以独立地部署和扩展。Spring Cloud为开发和部署基于Spring的微服务提供了一系列的工具和框架,使…...
后端复习资料
后端面试资料 语雀-图灵面试题 语雀-javaGuide 小林coding:https://www.xiaolincoding.com/ 面试鸭: https://www.mianshiya.com/ codehot香菜哥:https://codehot.cn/markdown/welfare 面试题: vizard自行整理 牛客Golang社招面…...

C++和OpenGL实现3D游戏编程【连载14】——VBO、VAO和EBO应用
🔥C和OpenGL实现3D游戏编程【目录】 1、本节实现的内容 我们从一开始学OpenGL到现在,OpenGL的图形绘图必须在glBegin()和glEnd()函数之间完成,在此基础之上,才能进行后续操作功能。但是我们今天要讨论一下OpenGL图形绘制的模式&a…...
AI + 智能互助平台(一点杂想)
随着人工智能的火爆,各种AI产品的兴起,我发现在解决人们日常需求的AI工具还是比较少的,还是比较依赖上一代的搜索功能。 是不是可以有这样的一款产品,需求方在平台上发布需求,提供方在平台上发布能力,AI自动…...

其他浏览器可以联网,但edge不能联网
问题描述: 今早edge无法上网,检测网络连接正常,而且其他chrome,Firefox和360浏览器都可以上网。 解决方案: 注意:为防止是代理问题,可以在扩展中禁用后再试试 如果没有代理或者禁用代理也不…...
Redis 缓存淘汰策略:LRU 和 LFU 的缺点及解决方案详解
引言 Redis 是一款高性能的内存数据库,它的缓存淘汰机制是保障内存使用效率和应用性能的关键。为了在内存有限的情况下保证缓存数据的有效性,Redis 提供了多种缓存淘汰策略,其中 LRU(Least Recently Used,最近最少使用…...

软件工程pipeline梳理
文章目录 软件工程pipeline梳理为什么需要梳理软件工程的pipeline软件工程pipeline的概念与注意点软件工程pipeline中的最大挑战rethink相关资料 软件工程pipeline梳理 为什么需要梳理软件工程的pipeline 反思自己日常工作中的认知和行为。以算法/软件工程师为代表的技术工种往…...

npm运行时出现npm ERR! builtins is not a function报错!
项目场景: 项目运行时什么都没动都没改突然运行不起来了,报错 TypeError: builtins is not a function 代码什么都没动,不是代码问题,排查后只有可能是node和npm的问题,所以卸载掉node重装重启 解决方案: …...

2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识上(分值10+)
第5章软件工程 目录 前言第5章 软件工程基础知识(上)(分值10)5.1 软件工程概述5.1.4 软件过程 5.2 软件过程模型5.2.1 瀑布模型 (Waterfall Model)5.2.2 增量模型5.2.3 演化模型5.2.4 喷泉模型(Water Fountain Model&a…...

C++:vector(题目篇)
文章目录 前言一、只出现一次的数字二、只出现一次的数字 II三、只出现一次的数字 III四、杨辉三角五、删除有序数组中的重复项六、数组中出现次数超过一半的数字七、电话号码的字母组合总结 前言 今天我们一起来看vector相关的题目~ 一、只出现一次的数字 只出现一次的数字…...
JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容
需求背景: 需要禁用部分文本内容的复制事件,并且在复制事件发生时,将复制的文本内容通过接口传给后端。 上代码: // 使用Dom获取需要操作禁用时间的元素let element: any document.getElementById(test1);// 为该元素添加 copy 事…...

安卓使用.9图实现阴影效果box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);
1.安卓实现阴影效果有很多种,一般UX设计会给以H5参数box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);这种方式提供背景阴影效果,这里记录一下实现过程 2.界面xml源码 <?xml version"1.0" encoding"utf-8"?> <layout xmlns…...
CSS3-Day1
CSS3圆角 border-radius CSS3盒阴影 box-shadow CSS3边界图片 border-image CSS3 background-clip属性 padding-box 沿着边框填充 content-box 在边框外面 CSS3 线性渐变 线性渐变 - 从上到下(默认情况下)#grad { background-image: linear…...

网站集群批量管理-Ansible(ad-hoc)
1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…...

github学生认证(Github Copilot)
今天想配置一下Github Copilot,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…...
【SQL调优指南--附带实例】
以下是50个SQL调优的例子,每个例子都附带了可执行的SQL语句: 删除重复记录: DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询: ALTER TABLE table_name ADD…...

Java基础(下)
泛型 Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型 ArrayList<Person> persons new Arra…...
【python】极简教程1-何为程序
程序可以简单地理解为一系列执行运算的指令。这些运算可以是数学计算、符号运算(如检索或替换文档中的内容)或图形运算(如处理图像或播放视频)。 不同编程语言的基础指令大致相同,包括: 输入:从键盘、文件、网络或其他设备获取数据。输出:将数据显示在屏幕上、保存到文…...
【Transformer】Selective Attention Improves Transformer
这篇论文主要介绍了一种新方法——选择性注意力(Selective Attention),用于改善Transformer模型的性能和效率。 🤓 摘要 无关元素在注意力机制中的存在会降低模型性能。论文提出了一种无需额外参数的简单调整方法,即…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...