MySQL SQL语句性能优化
MySQL SQL语句性能优化指南
- 一、查询设计优化
- 1. 避免 SELECT *
- 2. 使用 WHERE 进行条件过滤
- 3. 避免在索引列上使用函数和表达式
- 4. 使用 LIMIT 限制返回行数
- 5. 避免使用子查询
- 6. 优化 JOIN 操作
- 7. 避免全表扫描
- 二、索引优化
- 1. 使用合适的索引
- 2. 覆盖索引
- 3. 索引选择性
- 4. 多列索引顺序
- 三、表结构优化
- 1. 垂直拆分
- 2. 水平分区
- 3. 使用适当的数据类型
- 四、查询缓存优化
- 1. 查询缓存的工作原理
- 2. 配置查询缓存
- 3. 查询缓存的优缺点
- 4. 查询缓存的最佳实践
- 五、配置优化
- 1. 调整连接池大小
- 2. 使用慢查询日志
- 六、其他优化技巧
- 1. 避免使用临时表
- 2. 使用批量插入
- 3. 定期优化表
- 4. 避免使用锁表
- 七、使用 EXPLAIN 分析查询
- 总结
MySQL作为一款流行的关系型数据库管理系统,广泛应用于各类应用系统中。然而,随着数据量的增加和查询复杂度的提高,SQL查询性能可能会成为系统瓶颈。本文将系统地介绍MySQL SQL语句性能优化的原则和方法,帮助提升数据库的运行效率。
一、查询设计优化
1. 避免 SELECT *
SELECT *
会检索表中的所有列,可能会带来不必要的I/O开销和网络传输。因此,应尽量选择需要的列。
-- 不推荐
SELECT *
FROM users
WHERE id = 1;-- 推荐
SELECT id, username, email
FROM users
WHERE id = 1;
2. 使用 WHERE 进行条件过滤
在查询中尽量使用 WHERE
子句进行条件过滤,减少全表扫描的行数,从而提高查询效率。
-- 不推荐
SELECT *
FROM orders;-- 推荐
SELECT *
FROM orders
WHERE status = 'completed';
3. 避免在索引列上使用函数和表达式
在 WHERE
子句中的索引列上使用函数或表达式会导致无法使用索引,影响查询性能。
-- 不推荐
SELECT *
FROM users
WHERE YEAR(created_at) = 2024;-- 推荐
SELECT *
FROM users
WHERE created_at BETWEEN '2024-12-01' AND '2024-12-10';
4. 使用 LIMIT 限制返回行数
对于需要分页显示的数据,应使用 LIMIT
限制返回的行数,避免一次性读取过多数据。
SELECT *
FROM orders
WHERE status = 'completed'
LIMIT 100;
5. 避免使用子查询
在可能的情况下,尽量避免使用子查询,而是使用连接(JOIN)来优化查询。
-- 不推荐
SELECT *
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE status = 'completed');-- 推荐
SELECT users.*
FROM users
JOIN orders ON users.id = orders.user_id
WHERE orders.status = 'completed';
6. 优化 JOIN 操作
在使用JOIN操作时,确保被连接的列上有索引,并尽量减少JOIN的数量和复杂度。
-- 创建索引
CREATE INDEX idx_orders_user_id ON orders(user_id);-- 使用索引优化JOIN查询
SELECT users.*
FROM users
JOIN orders ON users.id = orders.user_id
WHERE orders.status = 'completed';
7. 避免全表扫描
当表中的数据量非常大时,执行没有过滤条件的查询或者查询条件不适合索引时,数据库可能需要进行全表扫描。
这不仅会增加查询时间,还会加重数据库负担。为了避免全表扫描,应该尽量通过索引列、合理的过滤条件等优化查询,减少扫描的数据量。
-- 不推荐
SELECT * FROM users WHERE name LIKE '%J%';-- 推荐
SELECT * FROM users WHERE user_id = 123 AND name LIKE '%J%';
在上述查询中,name LIKE '%J%'
会导致全表扫描,因为数据库无法利用索引来加速这种模糊匹配操作,特别是当表中的数据量非常大的时候,查询会非常慢。
改进后的查询通过添加具有索引的 user_id
作为条件,能够利用索引优化查询,避免全表扫描。
二、索引优化
1. 使用合适的索引
为常用的查询条件和排序条件添加索引,避免全表扫描。
-- 创建索引
CREATE INDEX idx_users_username ON users(username);-- 使用索引的查询
SELECT *
FROM users
WHERE username = 'john_doe';
2. 覆盖索引
覆盖索引包含查询所需的所有列,可以避免回表查询,进一步提高查询性能。
-- 创建覆盖索引
CREATE INDEX idx_orders_status_created_at ON orders(status, created_at);-- 使用覆盖索引的查询
SELECT status, created_at
FROM orders
WHERE status = 'completed';
3. 索引选择性
索引的选择性(即唯一值的比例)越高,索引的效率越高。对于低选择性的列(如性别),单独建立索引效果不佳,应考虑与其他高选择性列组合建立联合索引。
4. 多列索引顺序
在创建多列索引时,应将选择性高的列放在索引的前面,以提高索引的效率。
-- 选择性高的列在前
CREATE INDEX idx_users_lastname_firstname ON users(lastname, firstname);-- 查询时利用多列索引
SELECT *
FROM users
WHERE lastname = 'Smith' AND firstname = 'John';
三、表结构优化
1. 垂直拆分
将表中使用频率不同的字段拆分到不同的表中,减少查询的复杂度和数据量。
-- 原始表
CREATE TABLE user_details (id INT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100),address TEXT,phone_number VARCHAR(20)
);-- 拆分后的表
CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100)
);CREATE TABLE user_contacts (user_id INT,address TEXT,phone_number VARCHAR(20),FOREIGN KEY (user_id) REFERENCES users(id)
);
2. 水平分区
对于数据量非常大的表,可以使用分区来提高查询性能。
-- 创建分区表
CREATE TABLE orders (id INT,order_date DATE,amount DECIMAL(10, 2)
) PARTITION BY RANGE (YEAR(order_date)) (PARTITION p2020 VALUES LESS THAN (2021),PARTITION p2021 VALUES LESS THAN (2022)
);
3. 使用适当的数据类型
选择适当的数据类型可以减少存储空间和提高查询性能。例如,使用整数类型代替字符串类型作为主键。
-- 使用整数类型作为主键
CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100)
);
四、查询缓存优化
在 MySQL 中,查询缓存是一个用于存储 SELECT
查询结果的机制。通过查询缓存,MySQL 可以避免重复执行相同的查询,直接从缓存中返回结果,从而显著提高查询性能,减少数据库负载。
1. 查询缓存的工作原理
查询缓存将查询的结果存储在内存中,并且是基于查询的文本来缓存的。只要查询的 SQL 语句完全相同,MySQL 会直接从缓存中获取结果,而不是重新执行查询。
工作流程:
- 用户提交查询时,MySQL 会首先检查查询缓存中是否存在相同的查询结果。
- 如果缓存中存在查询结果,MySQL 会直接返回缓存中的结果。
- 如果缓存中不存在结果,MySQL 会执行查询,将结果存入缓存,并返回给用户。
注意:查询缓存只会缓存 SELECT
查询的结果,不会缓存 INSERT、UPDATE、DELETE 等修改数据的操作。
2. 配置查询缓存
启用查询缓存
在 MySQL 配置文件 my.cnf 中,可以通过设置以下选项来启用查询缓存:
适当调整MySQL的缓存参数,如 query_cache_size
、innodb_buffer_pool_size
等,可以提高查询性能。
[mysqld]
query_cache_type = 1 # 启用查询缓存
query_cache_size = 256M # 设置查询缓存大小
query_cache_limit = 1M # 设置缓存的查询大小限制,超过此大小的查询将不缓存
query_cache_type
:指定查询缓存的启用方式。1
表示启用查询缓存,0
表示禁用查询缓存,2 表示只有 SQL_NO_CACHE(禁用缓存)标记的查询才不缓存。query_cache_size
:设置查询缓存的大小,单位为字节。合理设置缓存大小可以避免过多的内存消耗。query_cache_limit
:设置缓存的查询结果大小限制。如果查询的结果超过该大小,则不缓存。
动态调整查询缓存(运行时)
除了在配置文件中设置外,也可以通过 SQL 命令在运行时动态调整查询缓存的大小和启用状态:
-- 启用查询缓存
SET global query_cache_size = 1000000; # 设置查询缓存大小为 1MB
SET global query_cache_type = 1; # 启用查询缓存-- 执行查询
SELECT * FROM users WHERE username = 'John';
SET global query_cache_size
:此命令设置查询缓存的大小。在此示例中,将缓存大小设置为 1MB。
SET global query_cache_type
:设置查询缓存的启用类型。1 表示启用查询缓存。
查看查询缓存的状态
你可以通过以下 SQL 命令查看查询缓存的状态:
SHOW VARIABLES LIKE 'query_cache%';
SHOW STATUS LIKE 'Qcache%';
这些命令会显示与查询缓存相关的配置信息和当前状态:
Qcache_free_blocks
:查询缓存中空闲的块数。Qcache_hits
:查询缓存命中次数。Qcache_inserts
:查询缓存插入次数。Qcache_lowmem_prunes
:查询缓存由于内存不足而被清理的次数。Qcache_not_cached
:未缓存的查询次数。
3. 查询缓存的优缺点
优势
-
减少数据库负载:查询缓存通过缓存 SELECT 查询的结果,避免了对数据库的重复访问,尤其是在读取密集型应用中。
-
提高响应速度:查询缓存使得相同查询不再执行,而是直接返回缓存结果,减少查询时间,提升应用性能。
劣势
-
缓存失效:当表中的数据发生变化(如 INSERT、UPDATE、DELETE 操作)时,查询缓存会失效。这意味着缓存可能会在某些操作后被清空或无效,导致重新计算查询结果。
-
占用内存:查询缓存会占用一定的内存空间,特别是在缓存较大的查询结果时。如果配置不当,可能会导致内存压力过大。
-
适用场景限制:查询缓存对于频繁变更的数据表效果较差,因为每次数据更新都会导致缓存失效。在高并发的环境中,查询缓存可能会造成性能瓶颈。
-
全表扫描问题:对于需要扫描大量数据的查询,查询缓存并不能显著提高性能。
4. 查询缓存的最佳实践
适用于读取密集型的应用
查询缓存对于那些以读取操作为主且数据变化不频繁的应用非常有效。在这种场景下,缓存的查询结果可以显著提高应用性能,减少对数据库的请求。
-
数据分析报表:如果一个报表的查询结果不经常改变,查询缓存可以有效提高查询速度。
-
商品信息查询:电商网站中,商品信息的变化不频繁,查询缓存可以用来缓存商品查询结果,提升响应速度。
不适用于频繁更新的数据表
查询缓存不适用于频繁更新的表,特别是数据表中频繁的 INSERT、UPDATE 或 DELETE 操作会导致查询缓存的频繁失效,降低性能。
-
电商订单表:订单数据频繁变化,查询缓存的使用可能会导致性能瓶颈,因为每次更新都会清除缓存。
-
社交平台的用户动态:频繁的动态数据更新使得查询缓存无法有效提升性能,甚至可能会造成缓存失效和资源浪费。
五、配置优化
1. 调整连接池大小
根据应用的并发需求调整数据库连接池的大小,避免连接不足或过多。
-- 连接池配置示例(在 my.cnf 文件中)
[mysqld]
max_connections = 5000
2. 使用慢查询日志
启用慢查询日志,找出执行时间长的查询,进行针对性优化。
-- 启用慢查询日志(在 my.cnf 文件中)
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
六、其他优化技巧
1. 避免使用临时表
临时表会增加I/O操作,应尽量避免使用。如果必须使用,确保临时表有适当的索引。
2. 使用批量插入
对于大量数据插入操作,使用批量插入可以显著提高效率,减少数据库连接次数和事务开销。
-- 批量插入示例
INSERT INTO users (username, email)
VALUES ('user1', 'user1@example.com'), ('user2', 'user2@example.com');
3. 定期优化表
定期使用 OPTIMIZE TABLE
命令优化表结构,减少碎片,提高查询性能。
-- 优化表
OPTIMIZE TABLE users;
4. 避免使用锁表
尽量避免使用 LOCK TABLES
,以减少锁争用,提升并发性能。
七、使用 EXPLAIN 分析查询
使用 EXPLAIN
语句分析查询执行计划,找出查询中的瓶颈和潜在的优化点。
EXPLAIN
SELECT *
FROM orders
WHERE status = 'completed' AND order_date BETWEEN '2020-01-01' AND '2020-12-31';
通过 EXPLAIN
的输出,可以了解查询是如何执行的,包括使用了哪些索引,扫描了多少行等。根据这些信息,可以进一步优化查询。
总结
- 查询设计:减少数据量,避免复杂计算和函数操作。
- 索引使用:合理创建索引,利用覆盖索引。
- 表结构:垂直拆分和水平分区,选择合适的数据类型。
- 配置优化:调整缓存和连接池,启用慢查询日志。
- 其他技巧:避免临时表和锁表,使用批量插入和定期优化表。
- 分析工具:使用 EXPLAIN 分析查询执行计划。
相关文章:
MySQL SQL语句性能优化
MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...
【潜意识Java】期末考试可能考的选择题(附带答案解析)
目录 选择题一:Java 数据类型 选择题二:Java 控制结构 选择题三:面向对象编程 选择题四:Java 集合框架 选择题五:Java 异常处理 选择题六:Java 方法 选择题七:Java 流程控制 选择题八&a…...
修炼之道 --- 其一
序言 大家对面试中的面经八股文是怎样的看法呢,从他的名字 八股文 就可以看出来大家可能并不喜欢他,八股文一般是 死板、浮于表面、不重实际 的特点。但是,我们需要通过辩证的角度来看待一个事情,不能单方面来定性! …...
【前端】HTML
目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…...
LabVIEW实现GPS通信
目录 1、GPS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
【Python 小课堂】第 2 课 Python 基础知识:语句、常量、变量和注释
第 2 课 基础知识:语句、常量/变量和注释 By Yichen Li 2024/12/14 一、内容简介 在本次课中,介绍Python语句、常量/变量以及代码注释的基本概念,一些详细的概念、扩展及用法等细节,留至后续介绍。 二、Python语句 一般来说&…...
基于STM32设计的工地扬尘与噪音实时监测系统(网页)
一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘(实时更新项目内容):https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 近年来,随着城市化进程的…...
LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面
FastAPI是WEB UI接口,随着LLM的蓬勃发展,FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD,来创建一个个性化的电子邮件写作助手,以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...
JavaScript 中的 Map方法
JavaScript 中的 Map方法 在 JavaScript 中,Map 是一种用于存储键值对的数据结构,相较于传统的对象(Object),Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。 1. 创建 Map const map new Map…...
img引入svg如何修改颜色
方法1:通过css中filter:drop-shadow 首先需要一个容纳图标的父盒子(下方实例中的.svg-img),通过css造一个图标的‘影子’(.svg-color中的drop-shadow),然后设置‘影子’的颜色,再把图标本体移出父盒子&…...
自然语言处理基础及应用场景
自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…...
构建centos docker基础镜像
1、介绍 比较老的版本docker镜像,不太好找,可以尝试自己构建 各版本构建基础镜像方法不太一样,方式也不同,自己尝试,本文只介绍了我自己的尝试 2、构建centos5.11 docker镜像 准备iso文件 (1)安…...
etcd命令大全
默认安装自带etcdctl 命令行客户端,分两个版本ETCDCTL_API2和ETCDCTL_API3,两个版本不一样,操作的数据也不相容。 本文以v3 为例。 使用之前需要先设置:export ETCDCTL_API3。 1 etcd查询集群节点列表及状态 标准输出࿱…...
Go有限状态机实现和实战
Go有限状态机实现和实战 有限状态机 什么是状态机 有限状态机(Finite State Machine, FSM)是一种用于建模系统行为的计算模型,它包含有限数量的状态,并通过事件或条件实现状态之间的转换。FSM的状态数量是有限的,因此称…...
使用torch模拟 BMM int8量化计算。
使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...
vue3的watch一次性监听多个值用法
vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...
【one-api和ollama结合使用】
将Ollama接入one-api one-api是一个开源AI中间件服务,可以聚合各家大模型API,比如OpenAI、ChatGLM、文心一言等,聚合后提供统一的OpenAI调用方法。举个例子:ChatGLM和文心一言的API调用方法并不相同,one-api可以对其进…...
Oracle PDB的开启和关闭
[生产环境关闭与开启Oracle PDB] 【运维场景】 在运维Oracle PDB的时候经常要开启和关闭PDB,对关闭和开启PDB的操作要非常熟悉。 【操作方法】 1. PDB的打开与关闭 关闭和开启DB的时候要看DB的警告日志,日志位置(在Oracle用户下查看&…...
十一、动态构建UI元素
装饰器Builder 装饰器BuilderParam <font style"color:rgba(0, 0, 0, 0.9);">BuilderParam</font> 该装饰器用于声明任意UI描述的一个元素,类似slot占位符。 链接 简而言之:就是自定义组件允许外部传递 UI // SonCom 的实现略…...
智能时代的基石:神经网络
智能时代的基石:神经网络 第一节:神经网络简介 课程目标 本节课程旨在全面介绍神经网络的基本概念、结构以及其在历史发展中的重要里程碑。通过深入理解神经网络的工作原理和演变过程,学员将能够掌握神经网络在现实世界中的多种应用&#…...
VScode配置GIT
在Visual Studio Code(VSCode)中检测不到已安装的Git可以通过以下步骤来解决: 确认Git是否正确安装:首先,确保在计算机上正确安装了Git。可以通过打开命令行窗口并输入git --version来检查是否能够显示Git的版本…...
【CSS】css 如何实现固定宽高比
今天和同事讨论这个问题,一时间还想不到了,于是学习了下,就顺便当个记录吧 要在CSS中实现固定宽高比,有两种主要的方法可以选择。一种是使用新的aspect-ratio属性,另一种是利用padding技巧。随着现代浏览器对aspect-ra…...
使用webrtc-streamer查看实时监控
摄像头配置(海康摄像头为例) 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行,端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…...
ansible部署nginx:1个简单的playbook脚本
文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…...
Ubuntu安装Gitlab详细图文教程
1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…...
前端面试准备问题2
1.防抖和节流分别是什么,应用场景 防抖:在事件被触发后,只有在指定的延迟时间内没有再次触发,才执行事件处理函数。 在我的理解中,简单的说就是在一个指定的时间内,仅触发一次,如果有多次重复触…...
uni-app之web-view组件 postMessage 通信【跨端开发系列】
🔗 uniapp 跨端开发系列文章:🎀🎀🎀 uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…...
IntelliJ IDEA 使用技巧与插件推荐
目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统(VCS) 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…...
zookeeper基础命令详解
zookeeper基础命令详解目录 文章目录 zookeeper基础命令详解目录一、列出所有基础命令 一、列出所有基础命令 先启动一个zookeeper客户端连接zookeeper,如果还没有启动zookeeper集群的参考本文启动之后再做后续操作。 https://blog.csdn.net/weixin_42924400/artic…...
2025周易算命网站搭建详细方法+源码选择php环境的配置
以下是一个详细的搭建教程,包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux(推荐使用Ubuntu或CentOS)Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x(确保小于8.0) 1.2 安…...
16:00面试,16:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
《杨辉三角》
题目描述 给出 n(1≤n≤20)n(1≤n≤20),输出杨辉三角的前 nn 行。 如果你不知道什么是杨辉三角,可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 C语言…...
2024年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析
青少年软件编程(Python)等级考试试卷(五级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下代码的输出结果是?( ) nums = list(range(100, 201)) print...
【游戏设计原理】7 - 加德纳的多元智能理论
虽然多元智能理论是对认知方式的分类,但它也可以为游戏设计提供丰富的思路和策略,帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势,我们可以更精准地设计游戏的元素和玩法,使其能够吸引广泛的…...
Jackson @JsonProperty 注解
1. 概述 Jackson 是一个流行的Java库,用于将Java对象转换为JSON格式以及从JSON反序列化回Java对象。一种常见的需求是在序列化为JSON或从JSON反序列化时自定义字段的命名。Jackson 的 JsonProperty 注解正好满足了这一需求。 JsonProperty 注解概览 JsonProperty…...
【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…...
数据库乐观锁和悲观锁、redis分布式锁使用场景
前言 最近发现我们同事,但凡需要加锁的地方都用的是分布式锁。而且我们的后台系统,并没有什么并发量,而且还是单体应用。我真的有点怀疑我的同事不太清楚数据乐观锁、悲观锁和redis分布式的使用场景。 请今天就说一下各种锁的应用场景吧。 …...
React的状态管理库-Redux
核心思想:单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store(存储) 应用的唯一状态容器,存储整个应用的状态树,使用 createStore() 创建。 getState():获取当前状态。dispatch(action)ÿ…...
《自制编译器》--青木峰郎 -读书笔记 编译hello
在该书刚开始编译hello.cb时就遇到了问题。 本人用的是wsl,环境如下, 由于是64位,因此根据书中的提示,从git上下载了64位的cb编译器 cbc-64bit 问题一: 通过如下命令编译时,总是报错。 cbc -Wa,"--32" -Wl,"-…...
XSS(跨站攻击)
XSS漏洞(跨站脚本) 1.XSS 漏洞简介 XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从…...
华为自反ACL实验
一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器,由于三台服务器的端口都映射出去了,领导要求A网段的三台服务器不能访问内网B,C网段,同时B、C网段内网用户可以访问A段的94、95、96服务器; 也就是PC4\…...
MyBatisPlus实现多表查询
在MyBatisPlus中实现多表查询,主要有以下几种方法: 使用注解进行多表查询: 你可以在Mapper接口中使用Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可…...
【人工智能-中级】循环神经网络(RNN)与Transformer在自然语言处理中的进阶应用
循环神经网络(RNN)与Transformer在自然语言处理中的进阶应用 自然语言处理(NLP)是人工智能领域中的重要分支,其主要任务是使计算机能够理解、生成和处理人类语言。近年来,循环神经网络(RNN)和Transformer模型已成为NLP领域的两大核心技术。本文将探讨这两类模型在自然…...
ZED相机应用
下载SDK wget https://stereolabs.sfo2.cdn.digitaloceanspaces.com/zedsdk/3.6/ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run 安装 ./ZED_SDK_Ubuntu18_cuda11.5_v3.6.5.run skip_python 测试 cd /usr/local/zed/tools ls ZED_Calibration ZED_Depth_Viewer ZED_Diagnostic ZED_E…...
大模型呼入机器人如何赋能呼叫中心?(转)
大模型呼入机器人如何赋能呼叫中心?(转) 原作者:开源呼叫中心FreeIPCC 大模型呼入机器人在赋能呼叫中心方面发挥着重要作用,主要体现在以下几个方面: 一、提升服务效率与质量 24小时不间断服务: 大模型呼入机器人能…...
基于Python对xslxslx文件进行操作
利用python操作表格文件 读取xsl格式文件-源码 import xlrd# 读取xls文件中的工作对象 wb xlrd.open_workbook(示例文件/xxx物理学与信息技术学院.xls) print(wb)# 获取所有的工作表名称 sheet_names wb.sheet_names() # print(sheet_names)# 选择要读取的具体工作表对象 s…...
预处理器Stylus的介绍及使用,并同Less、Sass进行对比(简单介绍)
目录 一、安装与配置 安装Node.js: 安装Stylus: 配置Webpack: 二、编写Stylus代码 定义变量: 使用变量: 嵌套语法: 混合(Mixins): 函数: 6.关键字参…...
ansible自动化运维(四)jinjia2模板
Jinjia2模板 前面说到playbook组成的时候,有介绍到template模块,而template模块对模板文件进行渲染时,使用的就是jinja2模板引擎,jinja2本身就是基于python的模板引擎,所以下面先来了解一下jinjia2模板的一些用法 基…...
ubuntu系统的docker安装(2)
查看系统版本 lsb_release -asudo systemctl status docker查看docker是否安装成功 docker pull拉取镜像不成功/docker run不成功 可能有多种原因:网络链接不稳定,没有重启docker,可以先将docker源设置为国内镜像源 sudo systemctl rest…...
.Net C#医院检验系统源码,实验室管理信息LIS系统
LIS系统源代码,.Net C#医院检验系统源码,三级医院应用案例,自主版权,适合二次开发上项目。 本套实验室管理信息LIS系统采用.Net C#语言开发,用C/S架构。支持DB2,Oracle,MS SQLServer等主流数据库。可根据医院情况配置…...