SQL语句
创建及删除数据库和表
  CREATE DATABASE 数据库名;
  CREATE DATABASE school;
  创建新的表
  CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);
   #主键一般选择能代表唯一性的字段,不允许取空值(NULL),值也不允许重复,主键字段的值是唯一的。一个表只能有一个主键。
 USE school;                  #切换school库
  CREATE TABLE class01 (
 id int NOT NULL,
 name char(10) NOT NULL,
 score decimal (5,2),
 passwd char(48) DEFAULT '',
 PRIMARY KEY (id));        #新建表class01
  
 删除指定的数据表
  DROP TABLE [数据库名.]表名;
 USE school
  DROP TABLE class01;
删除指定的数据库
  DROP DATABASE 数据库名;
  DROP DATABASE school;
 管理表中的数据记录 表数据的增删改查
 向数据表中插入新的数据记录(增)
  方法一:为所有字段插入值
  insert into 表名 values (所有字段的值);   #每个字段值用逗号相隔;
  方法二:为指定字段插入值
  INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);    #注意字段的属性not null,则必须为该字段插入值
 #为表中所有字段插入值,此种方式密码会以明文显示。
  INSERT INTO class01 VALUES (2, '张三', 90.5, 654321);
  #为指定字段插入值
  INSERT INTO class01 (id, name, passwd) values (1, '李四', PASSWORD('123456'));
  #PASSWORD ('123456'):查询数据记录时,密码字串以加密形式显示。若不使用PASSWORD(),查询时以明文显示。.
  #下面这条命令不生效,因为name字段设置了not null,不允许为空值。
  INSERT INTO class01 (id, score, passwd) values (3, 88, 123123);
  SELECT * FROM class01;    #查询表的数据记录
查询表数据记录(查)
 SELECT * FROM 表名;      #查询表中所有记录
  
  #按条件查找数据记录,且只显示指定字段的值
  SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
  
  #表中的记录默认是横向展示的,当字段很多时显示很乱,可以将";"换成"\G",改成纵向展示每条记录。
  select * from 表名\G
 #mysql的分页语句:
  select * from 表名 limit 2; 
  select * from 表名 limit 2,3;       #显示第2行后的前3行(即显示第3~5行)
  select * from 表名 limit 19,11;     #查看第20行到第30行的记录
  select * from 表名 id>=10 and id<=20;    #查看id值在10到20之间的数据记录
 修改/更新数据表中的数据记录(改)
 修改字段一般要加上条件,不然会把所有行都修改了。
 UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
 UPDATE class01 SET passwd= PASSWORD(' ') WHERE name='张三';
  #修改name为“张三”的数据记录,将其密码修改为以密文显示。
  
  UPDATE class01 SET score=77,passwd=' ' WHERE id=1;
  #修改id为1的数据记录,将score字段值改为77,passwd字段改为无值。
在数据表中删除指定的数据记录(删)
 DELETE FROM 表名 [WHERE 条件表达式];     #删除一定要加条件,不然会删除整个表
  例:
  DELETE FROM class01 WHERE id=2;     #删除id字段值为2的数据记录
修改表名和表结构
 修改表名 rename
 ALTER TABLE 旧表名 RENAME 新表名
  例:
  ALTER TABLE class01 RENAME tt01;   #将class01的表名修改为tt01
  ALTER TABLE tt01 RENAME class01;   #将tt01的表名修改回class01
扩展表结构(增加字段) add
 ALTER TABLE 表名 ADD 字段名 数据类型;
  例:
  ALTER TABLE class01 ADD address varchar(50) not null default '地址不详';
  #增加“address"字段,不允许为空值,默认值为“地址不详”。
  #default '地址不详':表示此字段设置默认值为"地址不详",可与NOT NULL配合使用。
 修改字段名,添加唯一健 change
 CHANGE可修改字段名、数据类型、约束等所有项。
  ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束];
  例:
  ALTER TABLE class01 CHANGE score phone int unique key;
  #将score字段名修改为phone,数据类型修改为int整数型,并添加唯一键约束。
删除字段 drop
  ALTER TABLE 表名 DROP 字段名;
  例: ALTER TABLE class01 DROP passwd;     #删除passwd字段
 添加主键约束 add primary key
 创建表时设置主键
 create table 表名(字段1 XXX, 字段2 XXX, ....primary key(字段));
 create table 表名(字段1 XXX primary key, . . ..);     #将主键作为字段1的属性
在现有表中添加主键
  ALTER TABLE 表名 add primary key(字段名);
  例:
  ALTER TABLE class01 add primary key(id);     #将id字段添加为主键
 主键primary key 和 唯一键unique key:
 共同点:字段的值都是唯一的,不允许有重复值。
 不同点:
 自定义的表中只能有一个主键,但是可以有多个唯一键。
 主键字段中不允许有null值,唯一键允许有null值。
 (系统的表中可以有多个主键)
MYSQL常见的约束
 主键约束(primary key) PK
 自增长约束(auto_increment)
 非空约束(not null)
 唯一性约束(unique)
 默认值约束(default)
 零填充约束(zerofill)
 外键约束(foreign key)FK
use school;          #切换到school库
  
  create table if not exists tt01 (                 #创建表tt01
  id int(4) zerofill primary key auto_increment,    #对id字段设置零填充约束、主键约束、自增长约束
  name varchar(10) not null default '匿名',         #对name字段设置非空约束、默认值约束
  cardid int(18) not null unique key,               #对cardid字段设置非空约束、唯一键约束
  hobby varchar(50));
  
  if not exists:
  表示检测要创建的表是否已存在,如果不存在就继续创建。如果存在就忽略,不进行创建。
  int(4) zerofill:
  零填充约束,表示若数值不满4位数,则前面用“0”填充到4位,例0001,0012。
  #int(11) zerofill:表示若数值不满11位数,则前面用“0”填充到11位,例如00000001234。
  primary key:
  表示此字段有主键约束,此字段数据不可以重复且不允许为NULL,一张表中只能有一个主键。
  auto_increment: 
  表示此字段为自增长字段,即每条记录自动递增1。
  一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复。
  如果不指定则默认从1开始递增;
  自增长字段数据不可以重复;
  自增长字段必须是主键;
  如果添加的记录数据没有指定此字段的值,那么添加失败也会自动递增一次。                    果添加的记录数据没有指定此字段的值,那么添加失败也会自动递增一次
  auto_increment约束的字段只能是整数型。
  unique key:
  表示此字段有唯一键约束,此字段数据不可以重复;一张表中只能有一个主键,但是一张表中可以有多个唯一键。
  not null:
  表示此字段不允许为NULL。
  default '匿名':
  表示该字段的默认值为“匿名”。
总结
 查看数据库和表:
 show databases;
 use 库名;
 show tables;
 desc 表名;
 desc 表名\G
 show create table 表名;
 创建及删除数据库和表:
 create database 库名;
 create table 表名(字段1 数据类型 [属性], 字段2 .....);
 DROP TABLE [数据库名.]表名;
 DROP DATABASE 数据库名;
 表数据的增删改查:
 insert into 表名 values (所有字段的值);
 insert into 表名 (指定字段名称) values(字段的值);
 delete from 表名 [where ...];
 truncate table 表名;       #删除表中所有数据。相当于格式化,速度很快
 update 表名 set 字段=值[, 字段2=....] [where ...];
 select 字段1[,字段2....] from 表名 [where ...];
 select * from 表名;
 修改表名和表结构:
 alter table 表名 RENAME/ADD/CHANGE/DROP 字段名 数据类型 属性;
 alter table 表名 ADD 键名(字段); //给指定字段添加键约束
 注:零填充约束、非空约束、默认约束、自增长约束不能通过ADD方式添加,可以在建表时设置,或者CHANGE修改字段时添加。
 主键和唯一键:
 主键:primary key
 唯一键:unique key
 共同点: 字段的值都是唯一性,不允许有重复的值
 不同点:
 一个表中 只能有1个主键,但是可以有多个唯一键
 主键字段中不允许有null值,唯一键是允许有null
 添加主键字段的三种方法:
 创建表时指定主键字段的两种方式:
 create table 表名 (字段1 XXX,字段2 xxx,...,primary key(字段));
 create table 表名 (字段1 XXX primary key, ....);
 在现有表中添加主键:
 alter table 表名 ADD primary key(字段);
 MySQL数据表的高级操作
 克隆表,将数据表的数据记录生成到新的表中
 create table 新表名 like 旧表名;             #通过LIKE方法,复制旧表的结构生成新表
 insert into 新表名 select * from 旧表名;     #再将旧表数据导入新表
创建新表的同时,导入旧表数据
  create table 新表名 (select * from 旧表名);
 查看表结构的三种方法
 方法一:
  desc 表名;      #以表格形式显示表结构
  方法二:
  show create table 表名;     #以创建表的命令形式显示表结构
  方法三:
  desc 表名\G       #如果字段较多,也可以使用"desc 表名\G"的方式竖向显示表结构
清空表,删除表内的所有数据
 delete                               返回的结果内有删除的记录条目;有自增长字段新添加的记录会从原来最大的记录ID后面继续自增写入记录。
 delete from 表名;
  #DELETE清空表后,返回的结果内有删除的记录条目;
  DELETE 工作时是一行一行的删除记录数据的,删除时速度较慢;
  如果表中有自增长字段,使用"DELETE FROM"删除所有记录后,新添加的记录会从原来最大的记录ID后面继续自增写入记录。
  
 truncate              格式化
 truncate table 表名;    #相当于格式化,速度很快
  #TRUNCATE清空表后,没有返回被删除的条目。
  TRUNCATE 工作时是将表结构按原样重新建立,因此在速度方面 TRUNCATE 会比DELETE清空表快。
  使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录。
创建临时表 TEMPORARY        在连接退出后被销毁,用"show tables"查看不到临时表,用于测试使用,
 临时表创建成功之后,使用"SHOW TABLES"命令是看不到创建的临时表的,临时表会在连接退出后被销毁。
 如果在退出连接之前,也可以执行增删改查等操作,比如使用"DROP TABLE"语句手动直接删除临时表。
 临时表一般用于测试使用,只有当前连接的用户才能看到,相同用户换个终端登录也看不到。退出当前连接(退出数据库)之后临时表会被销毁。
 CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);
 复
创建外键约束,保证数据的完整性和一致性
 外键的定义: 如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。
 外键的作用:
 为了一张表记录的数据不要太过冗余。
 保持数据的一致性、完整性。
 主键表和外键表的理解:
 (1)以公共关键字作主键的表为主键表(父表、主表)
 (2)以公共关键字作外键的表为外键表(从表、外表)
 注意:
 与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
 添加外键时必须关联主键(即主表先要添加主键,之后从表再添加外键)
 #创建主表class
  create table class (cid int,cname varchar(10));
  #创建从表student
  create table student (id int,name varchar(10),age int,classid int)
  #为主表class的cid字段添加一个主键约束。constraint为主键创建别名,主键名建议以“PK_”开头。
  alter table class ADD constraint PK_CID primary key (cid);
  #为从表student的classid字段添加外键,并将student 表的classid字段和class 表的cid字段建立外键关联。外键名建议以"FK_”开头。
  #references关联主键表中的字段。
  alter table student ADD constraint FK_CLASSID foreign key (classid) references class(cid);
  #添加外键时必须关联主键(即先要添加主键,再添加外键)
  #添加主键和外键时,即使不设置别名,系统也会自动创建一个别名。
为两个表插入数据:
  INSERT INTO class values(1,'钢琴');          #为主表插入数据
  INSERT INTO student values(1,'张三',18,1);   #为从表插入数据
  INSERT INTO student values(2,'李四',18,2);   #这条数据会插入失败,因为主表的cid字段没有为2的值
删除主键表中的数据记录,添加外键表中数据需要主键表中有对应字段记录
 如果想删除主键表中的某条记录,必须先删除外键表中相关联的字段记录
  #删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录。
  delete from student where classid=1;       //先删从表的数据
  delete from class where cid=1;             //再删主表的数据
查看和删除外键约束
 第一步删除外键约束,第二步删除别名。
 #查看外键约束
  show create table student;
  desc student;
  #删除外键约束。
  alter table student drop foreign key FK_CLASSID;   //先删除外键约束
  alter table student drop key FK_CLASSID;           //再删除键(即删除别名)
数据库用户管理
 新建用户
 CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
 '用户名': 指定将创建的用户名。
 '来源地址': 指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost, 允许任意主机登录可用通配符%
 '密码':
 若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
 若使用加密密码,需要先使用SELECT PASSWORD('密码'); 获取密文,再在语句中添加PASSWORD '密文';
 若省略"IDENTIFIED BY" 部分,则用户的密码将为空(不建议使用)
 使用明文密码创建用户
 CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123123';
 使用密文密码创建用户
  SELECT PASSWORD('123456');    #先获取密文
  CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '密文';
 查看用户信息
 创建后的用户保存在 mysql 数据库的 user 表里
  USE mysql;    #切换到mysql库
  SELECT User,authentication_string,Host from user;  #查看user表中的用户信息
 重命名用户 rename
 将用户zhangsan改名为wangwu :
  RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost';
 删除用户信息 drop
  DROP USER 'lisi'@'localhost';
  修改当前登录用户的密码
 set password = password('123456');
 修改其他用户的密码
  set password for 'nancy'@'localhost' = password('abc123');
 忘记root用户密码的解决办法
 #修改配置文件/etc/my.cnf,不使用密码直接登录到mysql。
 vim /etc/my.cnf
 [mysqld]下添加:
 skip-grant-tables          #添加此行,使登录mysql不使用授权表
 service mysqld restart     #重启服务
 mysql    #直接登录,无需密码
 #使用update命令修改root密码,刷新数据库。
 UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('123456') where user='root';
 flush privileges;   #刷新数据库
 quit                #退出
 mysql -uroot -p123456      #免交互登录的话,"-p密码"不能有空格
 查看当前登录用户
 select user ();    #查看当前登录用户和来源地址
 数据库用户授权
 授予用户权限
 GRANT语句:专门用来设置数据库用户的访问权限。
 当指定的用户名不存在时,GRANT语句将会创建新的用户;
 当指定的用户名存在时,GRANT 语句用于修改用户信息。
  GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
  权限列表:
  用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。
  使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
  数据库名.表名:
  用于指定授权操作的数据库和表的名称,其中可以使用通配符*。
  例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。
  '用户名'@'来源地址':
  用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。
  来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.tt.com"、 “192.168.80.8"等。
  IDENTIFIED BY:
  用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
允许用户 zhangsan 在本地查询school数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。使用密码“123456”进行登录。
  GRANT select ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';
 使用zhangsan 用户在本地登录查看:
 mysql -u zhangsan -p123456     #免交互登录时,"-p密码"不能有空格
 允许用户 nancy 在所有终端远程连接mysql,并拥有所有权限。使用密码“123456”进行登录
 GRANT ALL PRIVILEGES ON *.* TO 'nancy'@'%' IDENTIFIED BY '123456';
 使用nancy用户远程连接mysql:
  mysql -unancy -p123456 -h 192.168.72.50 -P3306
 #-p123456,小写p指定登录密码
  #-P3306,大写P指定端口号
  #-h 192.168.72.50,指定目标IP/主机名
查看用户的权限
 SHOW GRANTS;     #查看当前用户(自己)的权限
  SHOW GRANTS FOR 用户名@来源地址;    #查看其他用户的权限
  show grants for 'zhangsan'@'localhost';
 撤销用户的权限
  revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';
 针对用户 nancy@%,撤销其除了登录权限外的其他权限。
 revoke all on *.* from 'nancy'@%;
总结
 用户管理
 create user 'username'@'address' identified by 'password';   #创建用户
  select user,host,authentication_string from mysql.user;      #查看用户信息
  rename user old_user to new_user;        #修改用户名
  drop user '用户名'@'来源地址';            #删除用户
  set password = password('XXXX');         #修改当前登录用户的密码
  set password for '用户名'@'来源地址' = password('XXXX');     #修改其他用户的密码
  select user ();      #查看当前登录用户和来源地址
  ###忘记root用户密码的解决方法:
  修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables
  service mysqld restart   #重启服务
  mysql    #免密登陆  
  update mysql.user set authentication_string=password('XXX') where user='root';  #修改密码
  flush privileges;    #刷新数据库
用户授权
 #授予用户权限
  grant 权限列表/ALL ON 库名.表名 to 'username'@'address' [identified by 'XXXXX'];
  show grants;                               #查看当前用户(自己)的权限                 
  show grants for 'username'@'address';      #查看其他用户的权限
  revoke 权限列表/ALL on 库名.表名 from 'username'@'address';    #撤销用户的权限
  mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号              #远程连接mysql
 MySQL数据库之索引
 索引的概念
 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。
 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
 索引是表中一列或者若干列值排序的方法。
 建立索引的目的是加快对表中记录的查找或排序。(加快查询速度、对字段值进行排序)
 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。
 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
 索引是表中一列或者若干列值排序的方法。
 建立索引的目的是加快对表中记录的查找或排序。(加快查询速度、对字段值进行排序)
 索引的作用
 优点
 设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
 可以降低数据库的I/O成本,并且索引还可以降低数据库的排序成本。
 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
 可以加快表与表之间的连接。
 使用分组和排序时,可大大减少分组和排序的时间。
 建立索引在搜索和恢复数据库中的数据时能显著提高性能。
 缺点
 索引需要占用额外的磁盘空间。
 对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。
 而 InnoDB 引擎的表数据文件本身就是索引文件。(索引文件和数据文件是同一个)
 在插入和修改数据时要花费更多的时间、消耗更多性能,因为索引也要随之变动。
创建索引的原则依据
 当一个表写入多、读取很少的时候,不需要建立索引。
 唯一性太差的字段、更新太频繁地字段、大字段,不适合做索引
 索引的分类和创建
 先创建一个数据表member
  create table member(id int(10) ,name varchar(10) ,cardid int(18) ,phone int(11) ,address varchar(50),remark text);
 普通索引
 普通索引是最基本的索引类型,没有唯一性之类的限制。
 直接创建索引
  CREATE INDEX 索引名 ON 表名 (列名(length));
相关文章:
SQL语句
创建及删除数据库和表 CREATE DATABASE 数据库名; CREATE DATABASE school; 创建新的表 CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]); #主键一般选择能代表唯一性的字段,不允许取空值(NULL),值也不允许重复&…...
 
Mysql 学习(八)单表查询方法二
复杂查询 上一节说了5种访问类型的查询,这一节就来说说关于这些比较复杂的查询 情况一:多个二级索引查询 sql:SELECT * FROM index_value_table WHERE value1 abc AND value2 > 1000;搜索条件: value1 等于 abcvalue2 大于…...
 
安卓系统下的截屏和录屏
可以抓取手机屏幕画面(屏幕截图),也可以录制屏幕画面视频。拍摄屏幕后,可以查看、编辑和分享所拍的图片或视频。 抓取屏幕截图 打开要抓取的屏幕。视手机情况执行下列一个操作,3种方法看你手机有效的: 同…...
 
行为型模式-中介者模式
中介者模式 概述 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中…...
辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-功能ODD定义
1.系统定义 智能驾驶系统包含行车场景功能和泊车场景功能,行车场景功能包括安全ADAS功能、基础ADAS功能和高阶ADAS功能三大类,本文档定义高阶ADAS功能中的导航辅助驾驶功能用例。 1.1.高阶ADAS功能列表 功能需求ID 功能分类 功能名称...
 
PMP/高项 06-项目成本管理
项目成本管理 概念 项目成本管理 项目成本管理又被称为项目造价管理,是有关项目成本和项目价值两个方面的管理,是为保障以最小的成本实现最大的项目价值而开展的项目专项管理工作。 确保在批准的项目预算内完成项目 成本管理内容 规划成本管理 制定项目…...
 
XXL-JOB中间件【实现分布式任务调度】
目录 1:XXL-JOB介绍 2:搭建XXL-JOB 2.1:调度中心 2.2:执行器 2.3:执行任务 3:分片广播 1:XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学…...
 
Vue3+Element Plus环境搭建和一键切换明暗主题的配置
Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。而Element Plus是一款基于Vue3面向设计师和开发者的组件库。 最终效果: 环境搭建 已安装 16.0 或更高版本的 Node.js,终端: npm init vuelatest这一…...
 
Leetcode326. 3 的幂
Every day a leetcode 题目来源:326. 3 的幂 相似题目:342. 4的幂 解法1:递归 代码: /** lc appleetcode.cn id326 langcpp** [326] 3 的幂*/// lc codestart class Solution { public:bool isPowerOfThree(int n){if (n <…...
【运动规划算法项目实战】如何在栅格地图中实现Dijkstra算法
文章目录 简介一、算法介绍1.1 Dijkstra算法流程1.2 Dijkstra算法伪代码二、代码实现2.1 ROS实现2.2 RVIZ演示三、总结简介 Dijkstra算法是一种用于图中单源最短路径的贪心算法。在计算机科学和网络设计中广泛应用。该算法从起点开始,通过优先选择距离起点最近的未标记节点来…...
 
【算法】一文彻底搞懂ZAB算法
文章目录 什么是ZAB 算法?深入ZAB算法1. 消息广播两阶段提交ZAB消息广播过程 2. 崩溃恢复选举参数选举流程 ZAB算法需要解决的两大问题1. 已经被处理的消息不能丢2. 被丢弃的消息不能再次出现 最近需要设计一个分布式系统,需要一个中间件来存储共享的信息…...
 
【软考高级】2022年系统分析师综合知识
1.( )是从系统的应用领域而不是从系统用户的特定需要中得出的,它们可以是新的功能性需求,或者是对已有功能性需求的约束,或者是陈述特定的计算必须遵守的要求。 A.功能性需求 B. 用户需求 C.产品需求 D.领域需求 2.对于安全关键系…...
关于AI未来的思考和应用场景
关于AI未来的思考和应用场景 AI(人工智能)是当今最热门的技术领域之一,它已经在多个领域产生了深远的影响,如医疗、金融、制造业等。未来,AI将继续发展,并在更多领域产生重要的影响。 AI的未来发展方向有…...
 
智慧城市规划数字化管理:数字孪生技术的创新应用
随着智能城市的不断发展,数字孪生技术也开始在智慧城市的建设中得到了广泛应用。数字孪生作为一种数字化的复制技术,它可以模拟真实世界中的实体和过程。 在城市规划方面,数字孪生可以帮助城市规划师更加直观地了解城市的整体规划和发展趋势&…...
开心档之C++ 指针
C 指针 学习 C 的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。 正如您所知…...
 
零基础搭建私人影音媒体平台【远程访问Jellyfin播放器】
文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 转载自内网穿透工具的文章:零基础搭建私人影音媒体平台【远程访问Jelly…...
 
Abstract Expressionist
古董地图画集 10大最有名的抽象艺术家 抽象表现主义是现代许多不同艺术思想和表达流派中最奇特的艺术运动之一。这场运动开始从社会变革中涌现出来,恰逢第二次世界大战的最后几周和几个月。 这一次,来自世界各地的人们开始欢迎在经历了多年有史以来最致…...
 
【郭东白架构课 模块二:创造价值】24|节点四:如何减少语义上的分歧?
你好,我是郭东白。上节课我们通过一个篇幅比较长的电商案例,详细展示了为什么在架构活动中会出现语义分歧。同时也描述了,架构师在统一语义这个环节中所要创造的真正价值是什么。即,看到不同角色之间语境的差异,然后通…...
 
windows下免费本地部署类ChatGpt的国产ChatGLM-6B
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 Chat…...
 
flask+opencv+实时滤镜(原图、黑白、怀旧、素描)
简介:滤镜,主要是用来实现图像的各种特殊效果。图像滤镜用于改变图像的视觉效果,使其具有特定的风格。下面是这三种滤镜的详细说明: 1、黑白(Grayscale):黑白滤镜将彩色图像转换为灰度图像&…...
 
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
 
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
 
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
 
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
 
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
 
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
 
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
