MySQL篇
优化
定位慢查询
聚和查询
多表查询
表数据量过大查询
深度分页查询
表现:页面加载过慢、接口测压响应时间过长(超过1s)
如何定位
开源工具
调试工具:Arthas
运维工具:Prometheus、Skywalking
MySQL自带慢日志
它记录了所有执行时间超过指定参数(默认10秒)所有SQL语句的日志,默认是关闭的,要开启需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息。慢日志文件存储在/var/lib/mysql/localhost-slow.log。
show_query_log=1
long_query_time=2# 一般配置在2秒左右
注:在调试阶段开启就可以了,生产阶段开启会损耗一点性能。
如何分析,解决
深度分页查询:
SQL执行计划
聚和查询:新增一张临时表。
多表查询:尝试优化SQL的结构。
表数据量过大查询:添加索引,添加了还是慢怎么办?
可以使用EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息。在SELECT前面添加EXPLAIN或者DESC。
返回的不是查询结果,而是执行SQL的一些信 ...
Redis篇
Redis有哪些使用场景?
一、缓存穿透
例如查询根据文章,通常情况下,应该是先查redis,若redis中有,则直接返回。若redis中没有,那么就需要去数据库中查,从数据库中查到数据后,将数据保存到redis中,然后再返回给客户端。
这时候就会出一个一个问题,如果查询一个不存在的数据,数据库中查不到数据也不会直接写入到缓存,就会导致每次请求都需要查询数据库,就是这缓存穿透。
解决方案
缓存空数据。查询放回的数据为空,任给这个空结果进行缓存。
优点:简单
缺点:消耗内存。可能会导致不一致的问题。
布隆过滤器。在查询redis之前,先查布隆过滤器。在缓存预热的时候,需要给数据添加到布隆过滤器中。
优点:内存占用少,没有多余的key。
缺点:实现起来复杂,存在误判。
缓存穿透是指查询一个不存在的数据,如果从数据库中找不到这个数据则不会写入缓存,这样就导致这个不存在的数据每次请求都需要到数据库中查询,可能会导致数据库挂掉。这种情况大概率是受到了攻击。
通常使用布隆过滤器来解决。
什么是布隆过滤器呢?
布隆过滤器主要是检索一个数据是否存在一个集合中。当时是使用redissio ...
AcWing 901. 滑雪
题目
原题链接
题目描述
给定一个 RRR 行 CCC 列的矩阵 GGG,表示一个矩形网格滑雪场。
矩阵中第 iii 行第 jjj 列的点表示滑雪场的第 iii 行第 jjj 列区域的高度。
一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。
当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。
下面给出一个矩阵作为例子:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
在给定矩阵中,一条可行的滑行轨迹为 24−17−2−124 - 17 - 2 - 124−17−2−1。
在给定矩阵中,最长的滑行轨迹为 25−24−23−…−3−2−125 - 24 - 23 - … - 3 - 2 - 125−24−23−…−3−2−1,沿途共经过 252525 个区域。
现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。
输入格式
第一行包含两个整数 RRR ...
Debian安装Docker Compose
1. 下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果你想下载其他版本,可以将代码中的1.29.2修改为你需要的版本。版本列表
2. 设置权限
sudo chmod +x /usr/local/bin/docker-compose
注:如果执行/usr/local/bin/docker-compose这个文件出现了某些问题,才需要设置权限。
也可以设置软链接,也就是快捷方式。
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
3. 查看版本
docker-compose --version
应该可以看到以下版本信息
docker-compose version 1.29.2, build 5becea4c
卸载
无论什么原因,如果 ...
常用模板
快排模板
void quick_sort(int q[], int l, int r)
{
if ( l >= r ) return;
int x = q[l + r >> 1], i = l - 1, j = r + 1;
while ( i < j )
{
while ( x > q[++ i] );
while ( x < q[-- j] );
if ( i < j ) swap(q[i], q[j]);
}
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}
归并模板
const int t[N];
void merge_sort(int l, int r)
{
if ( l >= r ) return;
int m = l + r >> 1;
merge_sort(l, m);
me ...
nginx中文乱码
需要修改nginx的server的配置内容,增加一行:charset utf-8;
比方说:
server {
listen 80;
listen [::]:80;
server_name localhost;
# 这里
charset utf-8;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
再重启nginx。
nginx开启目录功能
autoindex on; #开启目录树功能
# 默认为on,显示出文件的确切大小,单位是bytes。
# 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_exact_size off;
# 默认为off,显示的文件时间为GMT时间。
# 改为on后,显示的文件时间为文件的服务器时间
autoindex_localtime on; #显示时间为服务器端的修改时间
比方说:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
这样就显示了/usr/share/nginx/html这个目录下所有文件及目录了。
Windows11使用旧版菜单
用管理员身份运行CMD,输入:reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve,开启旧版右键菜单。
输入:reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f ,恢复Windows11新版右键菜单。
Linux查看文件夹大小
查看当前目录下,所有文件(目录)的大小。
du -sh *
查看当前目录下,指定文件(目录)的大小。
du -sh 文件(目录)名
LeetCode 1588. 所有奇数长度子数组的和
原题链接
题目描述
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
子数组 定义为原数组中的一个连续子序列。
请你返回 arr 中 所有奇数长度子数组的和 。
数据范围
1≤arr.length≤1001 \le arr.length \le 1001≤arr.length≤100
1≤arr[i]≤10001 \le arr[i] \le 10001≤arr[i]≤1000
样例
输入样例1:
arr = [1,4,2,5,3]
输出样例1:
58
样例1解释:
所有奇数长度子数组和它们的和为:
[1] = 1
[4] = 4
[2] = 2
[5] = 5
[3] = 3
[1,4,2] = 7
[4,2,5] = 11
[2,5,3] = 10
[1,4,2,5,3] = 15
我们将所有值求和得到 1+4+2+5+3+7+11+10+15=581 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 581+4+2+5+3+7+11+10+15=58
输入样例2:
arr = [1,2]
输出样例2:
3
样例2解释: ...
