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

MySQL学习笔记5【SQL优化/视图/存储过程/触发器】

MySQL学习笔记


SQL优化


1. 插入数据优化

普通插入:

  • 采用批量插入

    • 每次插入不建议超过1000条记录,这样可以减少事务开销,提高性能。
    • 示例:
    INSERT INTO tb_user (name, age) VALUES ('Alice', 25), ('Bob', 30), ...;
    
  • 手动提交事务

    • 在插入过程中手动控制事务的开始与提交,以减少自动提交的次数。
    • 示例:
    START TRANSACTION;
    INSERT INTO tb_user (name, age) VALUES ('Alice', 25);
    ... 
    COMMIT;
    
  • 顺序插入主键

    • 使用自增主键,避免随机插入造成的页分裂,提升插入速度。

大批量插入:

  • 使用 LOAD DATA INFILE

    • 当需要插入大量数据时,通过文件导入的方式提升性能。
    • 客户端连接时加上参数 --local-infile
    mysql --local-infile -u root -p
    
    • 设置全局参数:
    SET GLOBAL local_infile = 1;
    
    • 使用示例:
    LOAD DATA LOCAL INFILE '/path/to/file.sql' INTO TABLE tb_user 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
    
2. 主键优化
  • 设计原则

    • 在满足业务需求的情况下,尽量降低主键的长度。
    • 尽量选择顺序插入,使用 AUTO_INCREMENT 自增主键。
    • 避免使用 UUID 或其他自然主键(如身份证号),以降低索引效率。
  • 存储与索引维护

    • 在 InnoDB 中,数据根据主键顺序组织。
    • 页分裂:页可以为空,也可以填充部分,也可以填充100%,每个页包含了2-N行数据(如果一行数据过大,会行溢出),根据主键排列。
    • 页合并:当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。当页中删除的记录到达 MERGE_THRESHOLD(默认为页的50%,可自定义,可以在建表,创建索引的时候指定),InnoDB会开始寻找最靠近的页(前后)看看是否可以将这两个页合并以优化空间使用。
3. 排序优化 (ORDER BY)
  • 使用索引优化排序

    • 使用索引按顺序读取数据,避免 Using filesort
    • 如果排序字段全部为升序或降序,可直接利用索引。
    • 如果有多字段排序(升序与降序),需创建联合索引。
  • 示例

CREATE INDEX idx_user_age_phone ON tb_user(age ASC, phone DESC);SELECT id, age, phone 
FROM tb_user 
ORDER BY age ASC, phone DESC;
4. 分组优化 (GROUP BY)
  • 利用索引

    • GROUP BY 查询中使用合适的索引,提高效率。
    • 确保索引列满足最左前缀法则。
  • 示例

SELECT profession, COUNT(*) FROM tb_user GROUP BY profession ORDER BY profession;
5. 分页优化 (LIMIT)
  • 优化大数据量分页

    • 避免高偏移量的 LIMIT 查询,减少不必要的数据排序。
  • 使用覆盖索引加速

    • 通过主键索引排序查询,可以显著提高性能。
  • 示例

-- 慢查询示例
SELECT * FROM tb_sku LIMIT 5000000, 10;-- 优化查询示例
SELECT id FROM tb_sku ORDER BY id LIMIT 5000000, 10;-- 通过联表查询进行优化
SELECT * 
FROM tb_sku AS s
JOIN (SELECT id FROM tb_sku ORDER BY id LIMIT 5000000, 10) AS a 
ON s.id = a.id;
6. 计数优化 (COUNT)
  • 性能差异

    • COUNT(*) ≈ COUNT(1) 性能最好,InnoDB 默认的优化机制。
    • 使用 COUNT(主键)COUNT(字段) 的性能依次降低。
  • 示例

SELECT COUNT(*) FROM tb_user;                 # 性能最好
SELECT COUNT(1) FROM tb_user; 				  # 和上面差不多
SELECT COUNT(id) FROM tb_user;                # 次优
SELECT COUNT(name) FROM tb_user;              # 低效(可能遍历全表)
  • 建议
    • 尽量使用 COUNT(*),并考虑使用 Redis 或其他方式缓存计数。
7. 更新优化 (UPDATE)
  • 避免锁升级

    • 确保更新条件(WHERE之后)的字段上有索引,以避免行锁升级为表锁。
  • 示例

UPDATE student SET no = '042' WHERE id = 1;      -- 行锁(主键索引)
UPDATE student SET no = '114514' WHERE name = 'test'; -- 表锁(name没有索引,需添加索引以优化)

视图


1. 语法
  • 创建视图

    CREATE [ OR REPLACE ]
    VIEW 视图名称[(列名列表)]
    AS 
    SELECT 语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
    
  • 显示视图

    SHOW CREATE VIEW [ 视图名称 ]; #显示创建视图语句SELECT [查询字段] FROM [ 视图名称 ]  WHERE [.....]; #查看创建的视图中的数据
    
  • 修改

    #方式一
    CREATE [OR REPLACE] 
    VIEW 视图名称[(列名列表)] 
    AS 
    SELECT 语句[ WITH[ CASCADED | LOCAL ] CHECK OPTION ];
    ---------------------------------------------------------
    #方式二
    ALTER 
    VIEW 视图名称 [(列名列表)] 
    AS 
    SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION];
    
  • 删除

    DROP VIEW [IF EXISTS] 视图名称 [视图名称]
    
2. 检查

如果对视图进行插入操作,那么数据将会插入原表之中,如果在创建视图时使用了WITH CHECK OPTION字段,那么在进行插入或更新时将会受到创建视图时设置的检查的限制。

两个检查选项:CASCADED 和 LOCAL ,默认值为 CASCADED。

  • CASCADED:会检查本视图以及递归检查本视图创建时所依赖的视图设置的限制。
  • LOCAL:在的基础上会检查本视图的限制条件,并向上递归检查本视图所依赖的并且设置了检查选项的视图的限制条件
  • 空(即不加检查选项):不会检查本视图的条件,但是会向上检查依赖的并设置了检查选项的视图的限制条件。
3. 更新

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新

  1. 聚合函数或窗口函数 ( SUM()、MIN()、MAX()、COUNT() 等 )
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者UNION ALL
#插入失败的例子
REATE stu_v_count AS SELECT COUNT(*) FROM student;INSERT INTO stu_v_count VALUES(10);

作用

  • 视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件,只需要用户针对于视图进行操作。

  • 安全 数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据,能够屏蔽一些比较敏感的信息,比如密码,身份证号。

  • 数据独立,视图可帮助用户屏蔽真实表结构变化带来的影响

  • 总而言之 类似于给表加上了一个外壳,通过这个外壳访问表的时候,只能按照所设计的方式进行访问与更新。


存储过程

简而言之,就是数据库中的函数。


1. 语法
  • 创建

    CREATE PROCEDURE 存储过程名称( [参数] ) BEGINSQL 语句 
    END;
    
  • 调用

    CALL [存储过程名称](传入参数);
    
  • 删除

    DROP PROCEDURE [ IFEXISTS ] [存储过程名称];
    

    tips: 在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter来指定SQL语句的结束符。默认是以分号作为结束符。delimiter $$,则$$符作为结束符。

2. 用户自定义变量
  • 定义方法:

    SET @自定义变量 := ?;  # := 和 = 都可以SELECT @自定义变量 := ?;SELECT 字段 INTO @自定义变量 FROM ....; #将查询结果传递给自定义变量
    
  • 在函数中的应用示例:

    CREATE PROCEDURE getcount()BEGINDECLARE cnt INT DEFAULT 0; #变量声明SELECT COUNT(*) INTO cnt FROM goods; #给变量赋值SELECT cnt; #输出结果
    END;CALL getcount();
    
3. 存储过程
3.1 IF语句示例:
CREATE PROCEDURE score()
BEGINDECLARE cnt INT DEFAULT 58;DECLARE res VARCHAR(6);IF cnt >= 80 THEN		#条件之后接THENSET res := '优秀';ELSEIF cnt >= 60 THEN	#注意这里写为ELSEIF 没有空格SET res := '及格';ELSE					#ELSE 表示最后一个分支SET res := '重开算了';END IF; #END IF;表示IF语句的结束SELECT res;
END;
3.2 传参示例:
CREATE PROCEDURE p1(IN cnt INT, OUT res VARCHAR(10)) #'IN'表示传入参数,'OUT'表示输出
BEGIN												#,'INOUT'表示传入也传出。相当于传入了指针IF cnt > 80 THENSET res := '优秀';ELSEIF cnt > 60 THENSET res := '及格';ELSESET res := '重开算了';END IF;
END;CALL p1(99, @result);
SELECT @result;
3.3 CASE语句示例:
CREATE PROCEDURE p4(IN month INT)
BEGINDECLARE res VARCHAR(25);CASEWHEN month >= 1 AND month <= 3 THENSET res := '第一季度';WHEN month >= 4 AND month <= 6 THENSET res := '第二季度';WHEN month >= 7 AND month <= 9 THENSET res := '第三季度';WHEN month >= 10 AND month <= 12 THENSET res := '第四季度';ELSESET res := '非法参数';END CASE;SELECT res;
END;CALL p4(6);
3.4 WHILE循环语句示例:
CREATE PROCEDURE wh(IN n INT)
BEGINWHILE n > 0 DO	#满足条件,则干DO后面的事,END WHILE;表示于一次循环结束.SET n = n - 1;END WHILE;SELECT n;
END;CALL wh(5);
3.5 REPEAT语句示例(相当于do while)
CREATE PROCEDURE rep(IN n INT)
BEGINDECLARE res INT DEFAULT 0;REPEATSET res = res + n;SET n = n - 1;UNTIL n <= 0END REPEAT;SELECT res;
END;CALL rep(5);
3.6 LOOP语句示例(相当于无限循环但是带有continue和break的while语句)
CREATE PROCEDURE l2(IN n INT)
BEGINDECLARE res INT DEFAULT 0;sum:LOOP		#sum是给这个循环的一个标签IF n <= 0 THENLEAVE sum;  #ITERATE sum 则表示continue,继续该循环,LEAVE sum表示跳出该循环END IF;SET res = res + n;SET n = n - 1;END LOOP sum; 	#sum表示sum这个标签的循环语句结束SELECT res;
END;CALL l2(15);
3.7 CURSOR游标示例:
CREATE PROCEDURE p15(IN n DECIMAL(10,2))
BEGINDECLARE gname VARCHAR(255);DECLARE gprice DECIMAL(10,2);DECLARE cursor_goods CURSOR FOR SELECT price, goods_name FROM goods WHERE price < n; #声明游标DECLARE exit HANDLER FOR NOT FOUND CLOSE cursor_goods;	#创建一个退出条件并设置退出时执行的语句(关闭游标)DROP TABLE IF EXISTS p12_test;CREATE TABLE p12_test(id INT PRIMARY KEY AUTO_INCREMENT,price DECIMAL(10,2),goods_name VARCHAR(255));OPEN cursor_goods;#打开游标后循环遍历所有的数据WHILE TRUE DOFETCH cursor_goods INTO gprice, gname;INSERT INTO p12_test(price, goods_name) VALUES(gprice, gname);END WHILE;
END;CALL p15(51.15);
3.8 条件处理程序
  • 在 MySQL 存储过程中,条件处理程序用于处理运行时可能遇到的特定条件,如警告、未找到结果或其他 SQL 错误。根据不同的条件,可以选择继续执行程序、终止当前程序或执行其他清理操作。

  • 语法

    DECLARE handler_action HANDLER FOR condition_value[statement]
    
  • handler_action:可以是 CONTINUEEXIT

    • CONTINUE:在遇到指定条件时,继续执行后续程序。
    • EXIT:在遇到指定条件时,终止当前程序的执行。
  • condition_value:指定的 SQL 条件,例如:

    • SQLSTATE 值,例如 02000(表示没有数据行被返回)。
    • SQLWARNING:所有以 01 开头的 SQLSTATE 代码的简写。
    • NOT FOUND:所有以 02 开头的 SQLSTATE 代码的简写。
    • SQLEXCEPTION:捕获所有未被 SQLWARNINGNOT FOUND 捕获的 SQLSTATE 代码。
  • 执行示例可以看游标的示例语句

3.9 有返回值的函数
CREATE FUNCTION ad(n INT)
RETURNS INT DETERMINISTIC	#定义返回值类型
BEGINDECLARE res INT DEFAULT 0;WHILE n >= 0 DOSET res = res + n;SET n = n - 1;END WHILE;RETURN res;
END;SELECT ad(15);

触发器


1. 基本语法
CREATE TRIGGER trigger_name
[ BEFORE | AFTER ] [ INSERT | UPDATE | DELETE ]
ON table_name
FOR EACH ROW
BEGIN-- 触发器逻辑
END;
2. 作用

触发器(Trigger)用于在对表进行插入(INSERT)、更新(UPDATE)或删除(DELETE)操作时,自动执行某一特定操作。触发器可以帮助我们维持数据完整性、自动记录审计日志、实现复杂的业务逻辑等。

3. 注意事项
  • 触发器会在每一行影响的情况下执行,因此在高并发或大批量数据处理时会对性能有影响。
  • 触发器不能被直接调用,并且不能修改调用触发器的表。
  • 在设计触发器时,要注意避免在触发器内进行无限递归调用。

结语

关于这部分,我主要给的并不是语法示例而是一段语句示例,这样应该更有助于理解存储过程那些语法知识,感觉这部分有点奇怪的感觉了,不知道开发过程实际会怎么使用呢。

相关文章:

MySQL学习笔记5【SQL优化/视图/存储过程/触发器】

MySQL学习笔记 SQL优化 1. 插入数据优化 普通插入&#xff1a; 采用批量插入&#xff1a; 每次插入不建议超过1000条记录&#xff0c;这样可以减少事务开销&#xff0c;提高性能。示例&#xff1a; INSERT INTO tb_user (name, age) VALUES (Alice, 25), (Bob, 30), ...;手动提…...

C++单例模式的设计

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。在C中&#xff0c;单例模式通常用于管理全局资源或共享状态。 以下是C中实现单例模式的几种常见方式&#xff1a; 懒…...

【Linux系统编程】—— 自动化构建工具Makefile指南

文章目录 背景基本使用推导过程适度扩展语法 背景 Makefile 是衡量开发者是否具备完成大型工程能力的一个重要标志。在一个工程中&#xff0c;源文件的数量可能极多&#xff0c;这些文件会按照类型、功能或模块分布在多个目录中。Makefile 通过定义一系列规则&#xff0c;指定…...

【SpringBoot应用篇】SpringBoot+MDC+自定义Filter操作traceId实现日志链路追踪

【SpringBoot应用篇】SpringBootMDC自定义Filter操作traceId实现日志链路追踪 解决的问题解决方案MDC具体逻辑ymllogback-spring.xmlTraceIdUtil操作工具类TraceIdFilter自定义过滤器GlobalExceptionHandler全局异常处理类TraceIdAspect切面UserController测试验证 多线程处理M…...

少一点If/Else - 状态模式(State Pattern)

状态模式&#xff08;State Pattern&#xff09; 状态模式&#xff08;State Pattern&#xff09;状态模式&#xff08;State Pattern&#xff09;概述状态模式&#xff08;State Pattern&#xff09;结构图状态模式&#xff08;State Pattern&#xff09;涉及的角色 talk is c…...

【SVN】版本发布快捷操作

摘要&#xff1a;因为每次发版都需要制作一份相同的文件夹&#xff0c;而大部分的包都不需要变更&#xff0c;但是文件又非常大&#xff0c;记录自己的操作经验。 首先在SVN Repository Browser 界面把上一次的版本复制一份&#xff0c;复制的时候重命名为新的版本号 右击要复…...

nacos环境搭建以及SpringCloudAlibaba脚手架启动环境映射开发程序

1&#xff1a;下载nacos 地址&#xff1a;https://github.com/alibaba/nacos/tags 2:选择server的zip包下载 3:启动mysql服务&#xff0c;新建数据库&#xff1a;nacos_yh 4&#xff1a;解压下载的nacos_server 进入conf目录 5&#xff1a;mysql运行sql脚本变得到下面的表 6&a…...

【笔记整理】记录参加骁龙AIPC开发者技术沙龙的笔记

AIoT 首先了解了一个概念叫AIoT&#xff0c;我的理解就是AI IoT 5G&#xff0c;通过AI的发展使得边缘计算、数据整合和处理变得快捷方便&#xff0c;不仅限于传统的云端数据处理&#xff0c;在边缘的IoT设备上也可以进行智能化打造&#xff0c;通过5G的通信能力扩展可以实现…...

Kotlin 协程基础十 —— 协作、互斥锁与共享变量

Kotlin 协程基础系列&#xff1a; Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发&#xff08;一&#xff09; Kotlin 协程基础三 —— 结构化并发&#xff08;二&#xff09; Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...

DAMA CDGA 备考笔记(二)

1. 考点分布 2. 第二章 数据处理伦理知识点总结 伦理是建立在是非观念上的行为准则。伦理准则通常侧重于公平、尊重、责任、诚信、质量、可靠性、透明度和信任等方面。数据伦理是一项社会责任问题不是法律问题。 度量指标&#xff1a;培训员工人数、合规/不合规事件、企业高管…...

【Lua学习之旅】之单行/多行注释

Lua的注释 单行注释多行注释 单行注释 lua中的单行注释采用两个短横线"--" --这是lua单行注释多行注释 写法一&#xff1a; --[[ 这个lua的多行注释&#xff0c; 很多资料说多行注释不可以嵌套&#xff0c; 根据我的测试&#xff0c;这种写法的多行注释在lua54版…...

【线性代数】行列式的概念

d e t ( A ) ∑ i 1 , i 2 , ⋯ , i n ( − 1 ) σ ( i 1 , ⋯ , i n ) a 1 , i 1 a 2 , i 2 , ⋯ , a n , i n det(A) \sum_{i_1,i_2,\cdots,i_n } (-1)^{\sigma(i_1,\cdots,i_n)} a_{1,i_1}a_{2,i_2},\cdots, a_{n,i_n} det(A)i1​,i2​,⋯,in​∑​(−1)σ(i1​,⋯,in​)a1…...

react中hooks之useEffect 用法总结

1. 什么是函数的副作用&#xff08;Side Effects&#xff09; 副作用是指在组件渲染过程中&#xff0c;除了返回 JSX 之外的其他操作&#xff0c;例如&#xff1a; 数据获取&#xff08;API 调用&#xff09;订阅数据源手动修改 DOM设置定时器存储数据日志记录 纯函数是特定的…...

小型、中型无人机执照学习和考试区别详解

小型、中型无人机执照的学习和考试在多个方面存在区别。以下是对两者的详细对比&#xff1a; 一、定义与适用范围 1. 小型无人机&#xff1a; 通常指起飞重量在7kg至25kg之间的无人机。 适用于多种应用场景&#xff0c;包括商业飞行、航拍、农业植保等。 必须持有民航局无人…...

【Go】Go Gin框架初识(一)

1. 什么是Gin框架 Gin框架&#xff1a;是一个由 Golang 语言开发的 web 框架&#xff0c;能够极大提高开发 web 应用的效率&#xff01; 1.1 什么是web框架 web框架体系图&#xff08;前后端不分离&#xff09;如下图所示&#xff1a; 从上图中我们可以发现一个Web框架最重要…...

计算机网络的五层协议

计算机网络的五层协议 ‌计算机网络的五层协议模型包括物理层、数据链路层、网络层、传输层和应用层&#xff0c;每一层都有其特定的功能和相关的协议。‌‌1 ‌物理层‌&#xff1a;负责传输原始的比特流&#xff0c;通过线路&#xff08;有线或无线&#xff09;将数据转换为…...

QT中,在子线程中更新UI,会出现哪些问题,如何避免这种情况发生。

在Qt中&#xff0c;直接从子线程更新UI&#xff08;用户界面&#xff09;通常会导致各种问题&#xff0c;主要是因为Qt的UI组件&#xff08;如QWidget及其子类&#xff09;并不是线程安全的。具体来说&#xff0c;可能会出现以下问题&#xff1a; 崩溃和未定义行为&#xff1a;…...

C++并发编程之多线程环境下使用无锁数据结构的重要准则

在多线程环境中使用无锁数据结构&#xff08;Lock-Free Data Structures&#xff09;能够显著提高程序的并发性能&#xff0c;因为它们避免了传统锁机制带来的竞争和阻塞问题。然而&#xff0c;无锁编程本身也带来了许多挑战&#xff0c;如内存管理、数据一致性和正确性等问题。…...

Vue篇-07

Vue UI组件库 一、移动端常用的UI组件库 1.1、Vant 1.2、Cube UI 1.3、Mint UI 二、PC端常用的UI组件库 2.1、Element UI Element - The worlds most popular Vue UI framework 安装&#xff1a; 按需引入&#xff1a; 135_尚硅谷Vue技术_element-ui按需引入_哔哩哔哩_b…...

Zookeeper 数据迁移实战:基础环境搭建与高效迁移方案全览

文章目录 一、Zookeeper数据迁移简介二、迁移zookeeper数据基础环境三、利用快照迁移zookeeper数据1、Node1最新的zk快照文件和日志文件2、将被迁移方node2的zookeeper的集群全部stop3、将源node1集群数据和日志拷贝到指定目录下4、验证优先启动拷贝的数据、日志的zookeeper节点…...

内联变量(inline variables):在多个文件中共享全局常量

在 C17 中&#xff0c;引入了 内联变量&#xff08;inline variables&#xff09; 的概念&#xff0c;可以用于在多个文件中共享全局常量。内联变量允许在头文件中定义变量&#xff0c;而不会导致链接错误&#xff08;如重复定义&#xff09;。这种方式非常适合用于定义跨多个文…...

WOA-CNN-LSTM-Attention、CNN-LSTM-Attention、WOA-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测

WOA-CNN-LSTM-Attention、CNN-LSTM-Attention、WOA-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测 目录 WOA-CNN-LSTM-Attention、CNN-LSTM-Attention、WOA-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-LSTM-A…...

【kubernetes】K8S节点状态的维护

1 节点状态 节点是K8S集群中的一类重要资源&#xff0c;节点的状态通常可以作为判断集群异常的重要手段。 为了展示节点在各方面的健康程度&#xff0c;在kubectl describe node k8s-master的输出结果中的Conditions部分可以查看k8s-master节点的一些状态数据&#xff1a; N…...

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结&#xff0c;具体如下&#xff1a; 一、按芯片类型 CCD相机&#xff1a;采用电荷耦合器件&#xff08;CC…...

Oracle查询-in条件超过1000

目录 1.不分页 2.分页 oracle数据库中&#xff0c;in的查询条件超过1000的话&#xff0c;就会报错&#xff0c;应该怎样处理这样的情况呢&#xff1f; 1.不分页 把查询条件分成几个list&#xff0c;每个list有1000个数据&#xff0c;有几个list查询几次数据库就行了 2.分…...

使用rknn进行retinaface部署(C++)

文章目录 RetinaFace导出ONNX导出RKNN编译运行学生课堂开源数据集RetinaFace RetinaFace是一种基于深度学习的高性能人脸检测方法,由InsightFace团队提出。它的核心思想是在单阶段检测器(如RetinaNet)的基础上,结合多任务学习来实现精确的人脸检测和特征点定位。以下是Ret…...

微服务拆分

微服务拆分 接下来&#xff0c;我们就一起将黑马商城这个单体项目拆分为微服务项目&#xff0c;并解决其中出现的各种问题。 熟悉黑马商城 首先&#xff0c;我们需要熟悉黑马商城项目的基本结构&#xff1a; 大家可以直接启动该项目&#xff0c;测试效果。不过&#xff0c…...

【matlab】matlab知识点及HTTP、TCP通信

1、矩阵运算 点乘&#xff1a;对于两个同维度的向量&#xff0c;点乘结果是这两个向量对应分量的乘积之和。 点除&#xff1a;是指对两个数组的对应元素进行除法运算。 点幂&#xff1a;表示元素对元素的幂运算。 >> A[1,2,3;4,5,6]; B[1,1,1;2,2,2]>> D1B.*AD…...

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…...

C++并发编程之并发可扩展性与阿姆达尔定律

在C并发编程中&#xff0c;可扩展性和阿姆达尔定律&#xff08;Amdahl’s Law&#xff09;是两个非常重要的概念&#xff0c;它们帮助我们理解和优化并发程序的性能。下面我们分别讨论这两个概念&#xff0c;并探讨它们在C并发编程中的应用。 可扩展性 可扩展性&#xff08;S…...

java 迪米特法则,原理、思想、工作流程、实现细节、稳定性、优缺点、应用场景等

迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也被称为“最少知识原则”&#xff0c;是一种指导面向对象设计的原则&#xff0c;旨在减少对象之间的耦合度。以下是对迪米特法则的详细解析。 1. 定义 迪米特法则指出&#xff1a;一个对象应该…...

使用 Docker 部署 Java 项目(通俗易懂)

目录 1、下载与配置 Docker 1.1 docker下载&#xff08;这里使用的是Ubuntu&#xff0c;Centos命令可能有不同&#xff09; 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile&#xff0c;并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …...

DuckDB:精通Insert语句处理数据冲突

本文介绍DuckDB insert语句用法&#xff0c;包括常规的批量插入&#xff0c;尤其是插入数据冲突的处理&#xff0c;最后还提及returning子句的用法&#xff0c;每个用法提供示例说明。 insert插入数据 INSERT INTO向表中插入新行。可以插入由值表达式指定的一行或多行&#xf…...

DFT可测性设置与Tetramax测试笔记

1 DFT 1.1 DFT类型 1、扫描链&#xff08;SCAN&#xff09;&#xff1a; 扫描路径法是一种针对时序电路芯片的DFT方案.其基本原理是时序电路可以模型化为一个组合电路网络和带触发器(Flip-Flop&#xff0c;简称FF)的时序电路网络的反馈。 Scan 包括两个步骤&#xff0c;scan…...

AttributeError: Unknown IMAP4 command: ‘idle‘

imaplib 原生并不支持 IDLE 命令&#xff0c;这可能导致 AttributeError: Unknown IMAP4 command: idle 错误。解决办法是使用支持 IDLE 命令的库&#xff0c;例如 imapclient&#xff0c;或者通过扩展 imaplib 的方式实现。 以下是两种解决方案&#xff1a; 方法 1&#xff1…...

css实现响应式详解

一、媒体查询&#xff08;Media Queries&#xff09; 基本概念 媒体查询是 CSS3 中用于根据不同的设备特性&#xff08;如屏幕宽度、高度、设备类型等&#xff09;应用不同样式规则的技术。它允许你为特定的媒体类型&#xff08;如屏幕、打印、手持设备等&#xff09;和条件&a…...

hot100_240. 搜索二维矩阵 II

hot100_240. 搜索二维矩阵 II 直接遍历列减行增 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,1…...

【网络云SRE运维开发】2025第3周-每日【2025/01/15】小测-【第14章ospf高级配置】理论和实操解析

文章目录 14.1 选择题解题思路和参考答案14.2 理论题解题思路和参考答案14.3 实操题解题思路和参考答案思科&#xff08;Cisco&#xff09;设备华为&#xff08;Huawei&#xff09;设备小米/锐捷&#xff08;或其他支持标准CLI命令的设备&#xff09;通过网络管理工具注意事项 …...

c#-Halcon入门教程——标定

Halcon代码 read_image (NinePointCalibration, D:/Desktop/halcon/ca74d-main/九点标定/NinePointCalibration.gif)rgb1_to_gray (NinePointCalibration, GrayImage)get_image_size (GrayImage, Width, Height) dev_display (GrayImage)* 获取当前显示的窗口句柄 dev_get_win…...

设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅

表面浮雕光栅是许多光学系统中的关键组件&#xff0c;在控制增强现实 &#xff08;AR&#xff09; 显示器、平视显示器 &#xff08;HUD&#xff09; 和其他先进光子器件中的光传播方面发挥着关键作用。作为在这个领域工作的工程师和设计师&#xff0c;您了解针对特定应用优化这…...

编译pytorch——cuda-toolkit-nvcc

链接 https://blog.csdn.net/wjinjie/article/details/108997692https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#switching-between-driver-module-flavorshttps://forums.developer.nvidia.com/t/can-not-load-nvidia-drivers-on-ubuntu-22-10/239750https://…...

Linux 系统资源监控笔记

本文介绍如何在 Linux 系统中查看服务资源剩余情况&#xff0c;包括 CPU、内存、磁盘、网络等资源的监控方法和常用命令。 目录 查看 CPU 和内存使用情况查看磁盘使用情况查看网络使用情况查看服务资源占用查看系统整体资源使用情况图形化工具 1. 查看 CPU 和内存使用情况 使…...

在Linux系统中无网络安装Nginx并配置负载均衡

在Linux系统中无网络安装Nginx并配置负载均衡 在现代的Web开发和运维中&#xff0c;Nginx作为一个高性能的HTTP和反向代理服务器&#xff0c;被广泛应用于负载均衡、静态资源服务、SSL终端等场景。然而&#xff0c;在某些特殊环境下&#xff0c;服务器可能无法访问互联网&…...

Franka例程学习——examples_common

这一次我们学习Franka所有例程里面都要调用的examples_common.h和examples_common.cpp&#xff0c;一个是.h头文件放置声明的函数、类、变量以及宏等内容&#xff0c;.c文件里面是具体的函数实现。 一、源代码 examples_common.h // Copyright (c) 2017 Franka Emika GmbH /…...

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...

Golang概述

文章目录 1. 什么是程序2. Go语言的诞生小故事2.1 Go 语言的核心开发团队--三个大牛2.2 Google 创造 Golang 的原因2.3 Golang 的发展历程 3. Golang 的语言的特点 1. 什么是程序 程序&#xff1a;就是完成某个功能的指令的集合。画一个图理解&#xff1a; 2. Go语言的诞生小故…...

【STM8S】STM8S之IIC从机

本文最后修改时间&#xff1a;2018年10月30日 18:48 一、本节简介 本文介绍STM8S系列如何使用IIC从机接收来自IIC主机的数据。 二、实验平台 编译软件&#xff1a;IAR for STM8 1.42.2 硬件平台&#xff1a;stm8s003f3p6开发板 仿真器&#xff1a;ST-LINK 库函数版本&…...

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…...

实战:FRP内网穿透部署-支持ssh、web访问

目录 1 准备工作2 公网服务器部署server端2.1 frps.ini配置 3 内网客户端部署client端3.1 frpc.ini配置&#xff08;内网服务器01&#xff09;3.2 frpc.ini配置&#xff08;内网服务器02&#xff09; 4 服务启动脚本4.1 公网服务器 server4.2 内网服务器 client 2 systemctl常见…...

基于Web的宠物医院看诊系统设计与实现(源码+定制+开发)在线预约平台、宠物病历管理、医生诊疗记录、宠物健康数据分析 宠物就诊预约、病历管理与健康分析

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...