varnish
varnish:
vcl语言进行管理
模块:
vcl_recv:用来接收客户端的请求
vcl_hash:如果请求是静态数据 则进入到varnish本身的缓存中
vcl_pass:当请求为动态数据 则去后端获取
注:varnish不缓存动态数据
vcl_pipe:当请求为非正常请求时,则直接拒绝
vcl_hit:在varnish缓存中找到对应的数据(命中)
vcl_miss:在varnish缓存中没有找到对应的数据(未命中)
vcl_fetch:将请求交给后端
vcl_deliver:将请求响应给客户端
预设变量:
req:客户端发送给varnish请求使用的变量(rep request请求)
req.url:客户端对varnish请求的url
req.http:客户端对varnish的请求头部信息
bereq:varnish给后端服务器发送的请求(bereq:backend request)
bereq.url:varnish对后端服务器的请求的url
bereq.http:varnish对后端服务器的请求的头部信息
resp:varnish对客户端的响应(resp:response响应)
resp.http:varnish响应客户端的头部信息
resp.status:返回状态码
beresp:服务器节点给varnish的响应(beresp:backend response)
beresp.uncacheable:响应数据是否不缓存
beresp.ttl:响应数据的缓存时间
obj:缓存在varnish中的数据
obj.ttl:varnish本地缓存的时间
obj.hits:varnish缓存的命中次数
hash_data():对客户端请求的内容进行hash计算
hash_data(req.url)
hash_data(req.url.host)
hash_data(server.ip)
vcl语法
运算符:
= 赋值运算符
== 比较运算符
~ 正则匹配
! 非
!= 不等于
!~ 不匹配
&& | | 与非
数据类型:
字符串 “abc”
布尔值 true false
时间 s秒 m分钟 d天
条件判断:
if else
单主机实例:
环境:
client | 192.168.10.2 |
---|---|
varnish | 192.168.10.3 |
web | 192.168.10.10 |
操作:
web:
安装httpd服务并修改页面内容
varnish:
[root@localhost varnish-4.1.11]# vim /usr/local/varnish/default.vcl
13 vcl 4.0;
16 probe health {17 .url = "/"; #从/开始18 .timeout = 3s; #超时时间19 .interval = 1s; #间隔时间20 .window = 5; #能同时维持5个窗口运行21 .threshold = 3; #至少3个成功22 }23 backend web { #后端主机24 .host = "192.168.10.10";25 .port = "80";26 .probe = health;27 }
28 sub vcl_recv { #用来接收客户端请求的模块29 set req.backend_hint = web; #当请求命中后端web才接收请求30 if(req.http.X-Forwarded-For){ #如果在客户端的请求头当中看到这个字段 则就证明经过了代理31 set req.http.X-Forwarded-For=req.http.X-Forwarded-For + "," + client.ip;32 } #则需要重新建立请求头 把这个字段后面加上代理的ip和客户端的ip 为了服务端能够获取到client的ip33 else{34 set req.http.X-Forwarded-For=req.http.X-Forwarded-For; #如果没有 不改变35 }36 if(req.method != "GET" &&37 req.method != "POST" &&38 req.method != "DELETE" &&39 req.method != "HEAD" && 40 req.method != "PUT" #如果请求是不正常的请求方式41 ){42 return(pipe); 则进入到pipe模块中43 }44 if(req.url ~ "\.(html|htm|png|jpg$)"){ #如果客户端的请求url中是以.html结尾 则是静态数据45 return(hash); #则进入到hash模块中46 }47 if(req.url ~"\.php$"){ #如果请求是以.php结尾 则是动态数据48 return(pass); #则进入到pass模块中49 }50 return(hash); #其余全部进入到hash模块中51 }52 sub vcl_hash{ #静态数据模块53 hash_data(req.url); #对客户端的请求路径进行hash54 if(req.http.host){ #如果请求头当中包含域名55 hash_data(req.http.host); #则hash域名56 }57 else{58 hash_data(server.ip); #其余haship59 }60 }61 sub vcl_pass{ #动态请求数据块62 return(fetch); #直接将请求交给后端63 }64 sub vcl_pipe{ #不正常请求的模块65 return(pipe); #直接结束66 }67 sub vcl_miss{ #缓存未命中68 return(fetch); #直接将请求交给后端69 }70 sub vcl_hit{ #缓存命中71 return(deliver); #直接响应72 }73 sub vcl_backend_response{ #后端数据模块74 if(bereq.url ~ "\.php$"){ #如果varnish对后端请求的是动态数据 则不缓存75 set beresp.uncacheable = true;76 }77 if(bereq.url ~ "\.html$"){ #如果varnish对后端请求的是静态数据 则缓存300s78 set beresp.ttl = 300s;79 }80 }81 sub vcl_deliver{ #结束模块82 if(obj.hits > 0){ #如果命中次数大于083 set resp.http.X-cache = "hit~~~~~"; #则在varnish对客户端的响应头部建立hit~~84 }85 else{86 set resp.http.X-cahe = "miss~~~~~"; #其余 则在varnish对客户端的响应头部建立miss~~87 }88 }[root@localhost varnish-4.1.11]# varnishd -C -f /usr/local/varnish/default.vcl#启动[root@localhost varnish-4.1.11]# varnishd -f /usr/local/varnish/default.vcl
[root@localhost varnish-4.1.11]# netstat -anput | grep varnishd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 73810/varnishd
tcp 0 0 127.0.0.1:44729 0.0.0.0:* LISTEN 73810/varnishd
tcp6 0 0 :::80 :::* LISTEN 73810/varnishd
tcp6 0 0 ::1:42815 :::* LISTEN 73810/varnishd
客户端验证:
[root@localhost ~]# curl -I 192.168.10.3
HTTP/1.1 200 OK
Date: Mon, 22 Jun 2020 03:07:31 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 22 Jun 2020 00:37:46 GMT
ETag: "7-5a8a17399266f"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 2
Age: 0
Via: 1.1 varnish-v4
X-cache: miss~~~~~
Accept-Ranges: bytes
Connection: keep-alive[root@localhost ~]# curl -I 192.168.10.3
HTTP/1.1 200 OK
Date: Mon, 22 Jun 2020 03:07:31 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 22 Jun 2020 00:37:46 GMT
ETag: "7-5a8a17399266f"
Content-Length: 7
Content-Type: text/html; charset=UTF-8
X-Varnish: 5 3
Age: 14
Via: 1.1 varnish-v4
X-cache: hit~~~~~
Accept-Ranges: bytes
Connection: keep-alive
多主机实例
环境:
client | 192.168.10.2 |
---|---|
varnish | 192.168.10.3 |
web1 | 192.168.10.10 httpd 111111 |
web2 | 192.168.10.20 httpd 22222 |
注:实验环境直接关闭防火墙即可
操作:
web:
分别安装httpd服务并修改页面内容
varnish:
[root@localhost ~]# vim /usr/local/varnish/default.vcl
16 probe health {17 .url = "/";18 .timeout = 3s;19 .interval = 1s;20 .window = 5;21 .threshold = 3;22 }23 backend web1 {24 .host = "192.168.10.10";25 .port = "80";26 .probe = health;27 .max_connections = 100; #最大连接数28 }29 30 backend web2 {31 .host = "192.168.10.20";32 .port = "80";33 .probe = health;34 .max_connections = 100;35 }36 acl allow { #访问控制列表 allow是名称37 "127.0.0.1"; #本地回环38 "localhost"; #域名主机39 "192.168.10.3"; #ip40 }41 import directors; #导入集群模块42 sub vcl_init{ #导入轮询模块43 new back = directors.round_robin(); #使用动态轮询的方式44 back.add_backend(web1); #使用上面的主机45 back.add_backend(web2);46 }47 sub vcl_recv {48 set req.backend_hint = back.backend(); #自动屏蔽掉后端不正常的主机49 if(req.method == "PURGE"){ #当请求方式为purge50 if(client.ip !~ allow){ #如果请求的ip不匹配allow列表51 return(synth(405,"not allowed")); #将返回状态码40552 }53 else{54 return(purge); #其余则进入到清除缓存的模块55 }56 }57 if(req.http.host ~ "^qqq"){ #如果客户端的请求域名是以qqq开头58 set req.backend_hint = web1; #则将请求交给web159 }60 if(req.http.host ~ "^www"){ #如果客户端的请求域名是以www开头61 set req.backend_hint = web2; #则将请求交给web262 }63 if(req.url ~ "\.(php|asp|aspx|jsp|do)($|\?)"){ #如果请求的是动态数据64 return(pass); #则把请求交给pass模块65 }66 if(req.url ~"\.(css|html|htm|jpeg|png|mp4)$"){ #如果请求是静态数据67 return(hash); #则把请求交给hash模块68 }69 if(req.method != "GET" &&70 req.method != "POST" &&71 req.method != "DELETE" &&72 req.method != "PUT" &&73 req.method != "HEAD"74 ){75 return(pipe); #如果请求方式不是正常的请求方式 则拒接连接76 }77 if(req.method != "GET" && req.method != "HEAD"){ #当请求方式不是get或者head时78 return(pass); #则进入到动态数据模块 因为其余的请求方式和数据库都是有联系的79 }80 if(req.http.Authorzation){ 如果请求是认证81 return(pass); #则进入到pass模块中82 }83 if(req.http.Accept-Encoding){ #如果在客户端的请求头中有这个字段84 if(req.url ~ "\.(png|gif|bz2|zip)$"){ #客户端如果请求的是压缩文件85 unset req.http.Accept-Encoding; #则不用建立这个请求头 防止web再次压缩86 }87 elseif(req.http.Accept-Encoding ~ "gzip"){ #如果请求头中匹配到gzip88 set req.http.Accept-Encoding = "gzip"; #则建立这个请求头89 }90 elseif(req.http.Accept-Encoding ~ "deflate"){91 set req.http.Accept-Encoding = "deflate";92 }93 else{94 unset req.http.Accept-Encoding; #其余则不用建立95 }96 }97 }98 sub vcl_pipe{ #拒绝连接模块 直接结束99 return(pipe);
100 }
101 sub vcl_pass{ #动态数据模块 进入到后端
102 return(fetch);
103 }
104 sub vcl_hash{ #静态数据模块
105 hash_data(req.url); #hash请求的路径
106 if(req.http.host){
107 hash_data(req.http.host); #hash域名
108 }
109 else{
110 hash_data(server.ip); #其余hash ip
111 if(req.http.Accept-Encoding ~ "deflate"){ #当请求头部中有这个字段 则hash deflate
112 hash_data("deflate");
113 }
114 }
115 if(req.http.Accept-Encoding ~ "gzip"){ #如果客户端请求头部中包含编码类型 web是以压缩文件进行传输的 是由客户端本身来进行解压 那么为了varnish能够把压缩的文件进行缓存 所以填写了这个模块
116 hash_data("gzip");
117 } #注 accept-Encoding字段
118 }
119
120 sub vcl_backend_response{ #后端能够找到对应的数据
121 if(bereq.url ~ "\.(php|asp|do)($|\?)"){ #当是动态数据时
122 set beresp.uncacheable = true; #不缓存 直接响应给客户端
123 return(deliver);
124 }
125 if(bereq.url ~ "\.(css|html|htm|png)$"){ #静态数据
126 set beresp.ttl = 15m; #缓存15分钟时间
127 }
128 if(bereq.url ~ "\.(gz|bz2|zip|mp3)$"){ #压缩文件
129 set beresp.ttl = 300s; #缓存300s
130 }
131 return(deliver);
132 }
133 sub vcl_backend_error{ #后端找不到对应的数据
134 if(beresp.status == 503){ #当状态码为503
135 set beresp.status = 200; #把状态码换成200
136 synthetic("hahahaha"); #返回页面 hahahaha
137 return(deliver);
138 }
139 }
140 sub vcl_purge{ #清除缓存模块
141 return(synth(200,"success~~~~")); #状态码变成200 成功
142 }
143 sub vcl_deliver{ #结束模块
144 if(obj.hits > 0){ #如果命中次数大于0
145 set resp.http.X-cache = "hit~~~~~"; #则在varnish对客户端的响应头部建立hit~~
146 }
147 else{
148 set resp.http.X-cache = "miss~~~~"; #其余则在varnish对客户端的响应头部建立miss~~
149 }
150 }
[root@localhost ~]# killall -9 varnishd
[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl
客户端访问:
[root@localhost ~]# curl -I 192.168.10.3
X-cache: miss~~~~
[root@localhost ~]# curl -I 192.168.10.3
X-cache: hit~~~~~
客户端清除缓存:
[root@localhost ~]# curl -I http://192.168.10.3 -X PURGE
HTTP/1.1 405 not allowed
Date: Tue, 23 Jun 2020 04:24:26 GMT
Server: Varnish
X-Varnish: 5
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 251
Connection: keep-alive
varnish清除:
[root@localhost ~]# curl -I http://192.168.10.3 -X PURGE
HTTP/1.1 200 success~~~~
Date: Tue, 23 Jun 2020 04:27:22 GMT
Server: Varnish
X-Varnish: 32772
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 255
Accept-Ranges: bytes
Connection: keep-alive
错误页面是否能访问成功 把varnish的缓存清除 后端的web关掉
客户端访问的
[root@localhost ~]# curl -I 192.168.10.3
HTTP/1.1 200 OK
Date: Tue, 23 Jun 2020 04:28:39 GMT
Server: Varnish
X-Varnish: 7
Age: 0
Via: 1.1 varnish-v4
X-cache: miss~~~~
Accept-Ranges: bytes
Connection: keep-alive[root@localhost ~]# curl 192.168.10.3
hahahaha[root@localhost ~]#
访问qqq www这两个页面
后端服务开启
反向代理清除缓存 varnish重启
客户端:
[root@localhost ~]# vim /etc/hosts
192.168.10.3 www.abc.com
192.168.10.3 qqq.abc.com
[root@localhost ~]# curl www.abc.com
22222
[root@localhost ~]# curl qqq.abc.com
11111
varnish启动参数:
-a:指定varnish服务的监听端口与ip
例 -a 192.168.1.100:80
-f:指定配置文件
例 -f /usr/local/varnish/default.vcl
-n:指定varnish工作目录
例 -n /usr/local/varnish
-P:指定varnish进程PID号存放的文件
例 -P /usr/local/varnish/varnish.pid
-s:指定varnish缓存数据的文件
例 -s /usr/local/varnish/cache.data,1G
-T:管理varnish主机的IP与端口
例 -T 192.168.8.12:3500
-S:管理varnish主机使用的密钥文件
例 -S /etc/vc
-p:指定varnish运行时的参数
例 -p thread_pools=2:指定varnish开启的线程池的个数,与CPU个数或核心数一致
-p thread_pool_min=50:指定每个线程池中最少开启线程数量
-p thread_pool_max=5000:指定每个线程池中最多开启线程数量
-p thread_pool_timeout=30:当线程池中线程的数量超过最小值,且30s内没有客户端的请求,则对线程数量进行释放的最小值
-p lru_interval=30:没有指定缓时间的数据如果一直处于未命中状态,则缓存时间为该值,单位是s
程序–进程(获取程序所需的资源)–线程
[root@localhost ~]# varnish
varnishadm varnishhist varnishncsa varnishtest
varnishd varnishlog varnishstat varnishtop
varnishadm管理varnish
使用随机数生成密钥:
[root@localhost ~]# dd if=/dev/random of=/etc/vc count=1
0+1 records in
0+1 records out
115 bytes (115 B) copied, 0.000196612 s, 585 kB/s
[root@localhost ~]# cat /etc/vc
#重启varnish
[root@localhost ~]# killall -9 varnishd
[root@localhost ~]# varnishd -a 192.168.2.10:80 -f /usr/local/varnish/default.vcl -n /usr/local/varnish/ -P /usr/local/varnish/varnish.pid -s file,/usr/local/varnish/cache.data,1G -T 192.168.2.10:3500 -S /etc/vc -p thread_pools=2 -p thread_pool_min=50 -p thread_pool_max=1000 -p thread_pool_timeout=30 -p lru_interval=30
[root@localhost ~]# netstat -anput | grep varnishd
tcp 0 0 192.168.2.10:3500 0.0.0.0:* LISTEN 19517/varnishd
tcp 0 0 192.168.2.10:80 0.0.0.0:* LISTEN 19517/varnishd
交互式界面:
[root@localhost ~]# varnishadm -T 192.168.2.10:3500 -S /etc/vc
varnish> status
200
Child in state running
varnish> start
300
Child in state running
stop
200
varnish> start
200
varnish> backend.list
200
Backend name Admin Probe
boot.web1 probe Healthy 5/5
boot.web2 probe Healthy 5/5
quit退出
命令行:
清除缓存
[root@localhost ~]# varnishadm ban req.url "~" / #varnish启动
varnishadm [-t timeout ] [-S 密钥文件] [-T address:port] [-n name] [command]
#
-t 等待操作完成的时间
-S 认证的安全文件
-T 管理的接口和地址
-n 连接接口的名称
command 执行的命令
[root@localhost ~]# varnishadm -S /etc/vc -T 192.168.2.10:3500 stop
[root@localhost ~]# varnishadm -S /etc/vc -T 192.168.2.10:3500 start
[root@localhost ~]# varnishadm -S /etc/vc -T 192.168.2.10:3500 backend.list
Backend name Admin Probe
boot.web1 probe Healthy 5/5
boot.web2 probe Healthy 5/5varnishstat #查看状态和参数
[root@localhost ~]# cd /usr/local/varnish/
[root@localhost varnish]# ls
bin default.vcl lib share varnish.pid _.vsm
cache.data include sbin var vcl_boot.1592884068.760178804
#_.vsm 是通过制定的配置文件启动后生成的文件
[root@localhost varnish]# cd /usr/local/varnish/var/varnish/localhost.localdomain/
[root@localhost localhost.localdomain]# ls
_.secret vcl_boot.1592794538.439760923 vcl_boot.1592882130.538364649
vcl_boot.1592623750.409803391 vcl_boot.1592794742.336751223 vcl_boot.1592882197.950655222
vcl_boot.1592623912.852447987 vcl_boot.1592794773.063064337 vcl_boot.1592882357.811198235
vcl_boot.1592626478.964962482 vcl_boot.1592881557.420217991 _.vsm
[root@localhost localhost.localdomain]# cp /usr/local/varnish/_.vsm ./
cp: overwrite ‘./_.vsm’? y
#varnishstat这个命令只能查看到对应目录的_.vsm这个文件 所以需要把通过制定的配置文件生成的vsm文件复制到对应目录下 这样才能查看到当前这个配置文件的参数和状态
[root@localhost localhost.localdomain]# varnishstat
varnishlog 查看日志
varnishncsa 用来查看简单的日志
[root@localhost ~]# varnishlog -n /usr/local/varnish/ -w /usr/local/varnish/varnish.log
-n 代表工作目录
-w 代表日志生成的文件
#需要有台运行
客户端上访问:
[root@localhost ~]# curl 192.168.2.10
2222
[root@localhost ~]# curl 192.168.2.10
2222
varnish上另开终端:
[root@localhost varnish]# cd /usr/local/varnish/
[root@localhost varnish]# ls
bin default.vcl lib share varnish.log vcl_boot.1592884068.760178804
cache.data include sbin var varnish.pid _.vsm
[root@localhost varnish]# cat varnish.log varnishncsa
[root@localhost ~]# rm -rf /usr/local/varnish/varnish.log
[root@localhost ~]# varnishncsa -n /usr/local/varnish/ -w /usr/local/varnish/varnish.log
后台运行
客户端上访问:
[root@localhost ~]# curl 192.168.2.10
2222
[root@localhost ~]# curl 192.168.2.10
2222
varnish上另开终端:
[root@localhost varnish]# cd /usr/local/varnish/
[root@localhost varnish]# ls
bin default.vcl lib share varnish.log vcl_boot.1592884068.760178804
cache.data include sbin var varnish.pid _.vsm
[root@localhost varnish]# cat varnish.log
[root@localhost varnish]# cat varnish.log
192.168.2.100 - - [23/Jun/2020:12:14:19 +0800] "GET http://192.168.2.10/ HTTP/1.1" 200 5 "-" "curl/7.29.0"
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- STM32 CubeMX HAL库 之红外接收(NEC协议)定时器捕获
第一次自己写完整的硬件驱动,发上来给大家看看,顺便吸收些改进方案,希望各位能够不吝赐教,指出代码的不足之处。同时我也很高兴这代码能给你带来帮助。 工程使用CubeMX创建,使用VS Code编程,单片机为STM32F103VCT6。 首先配置时钟,下载方式,开启USART以方便调试,这里就…...
2024/4/19 9:19:21 - python 格式化、set类型和class类基础知识练习
原创:叫我詹躲躲 来源:CSDN 链接:https://blog.csdn.net/weixin_43779957/article/details/107216697 1.输出 %占位符 lastname = hello firstname = world print(我的名字是%s %s %(lastname,firstname))2.常用的格式化字符 %c 字符 %s 通过str来格式化 %i 有符号十进制整数…...
2024/4/16 5:09:53 - Python基础第4课_符号
加粗样式 字符连接 占位符 s=‘s=’%s’hello’ print(s) 格式化字符串f+str({变量1},{变量2}…)r+strhello 钢铁侠,蜘蛛侠【总结】:如果 有变量,那么用f.+变量 如果没有变量,那么可以用字符串+format<–如果是字母,它是判断ascii码的大小顺序<–分割后是返回列表,…...
2024/4/1 2:32:16 - 慕课网vue播放器最新QQ音乐api
前言:最近做了慕课网上的vue播放器,做的过程中,花费了大量的时间去找api,为了方便大家学习,特意写了个后台来抓取qq音乐的api,有需要的可以粘贴运行,处理一下跨域就能用了: const axios = require(axios) const express = require(express) const app = express() cons…...
2024/5/5 19:05:04 - Java系统的学习路线(新手阅读)
前言 今天浏览博客的时候,无意间看到很多人问:“新手该如何学习Java”,“怎样快速入门Java”之类的问题。现在想想,当初我在学习Java的时候也确实走了不少弯路,虽然当时也在各大网站搜索Java的学习路线,但是每个人说法不一,搞得我眼花缭乱…所以我决定结合我的经历与经验…...
2024/5/3 1:46:39 - selenium的用法总结
文章目录一、声明浏览器对象二、基本方法三、查找节点(一)单个节点(二)多个节点(返回列表)四、节点交互(一)input节点(二)button节点五、节点信息六、切换Frame七、动作链八、执行JS九、Cookies十、延时等待(一)隐式等待(二)显式等待十一、异常十二、防止Seleniu…...
2024/4/16 5:09:53 - linux下Git代理设置
1.设置路由器 2.linux设置 git http proxy note:ip为二级代理机的ip。 $ git config --global http.proxy http://192.168.0.101:808 $ git config --global https.proxy http://192.168.0.101:808 $ cat ~/.gitconfig [http] proxy = http://192.168.0.101:808 [https] proxy …...
2024/4/16 5:10:08 - 安全测试-01
大类细项注册功能注册请求是否安全传输注册时密码复杂度是否后台检验重复注册批量注册问题登录功能登录请求是否传输安全登录请求错误次数限制暴利破解验证码功能验证码更新机制问题验证码绕过短信验证码轰炸短信验证码回显短信验证码可爆破忘记密码功能通过手机号找回通过邮箱…...
2024/3/28 18:30:07 - 晨读-为什么有时控制不了我的情绪?
情绪是天生的,而且每一种情绪都有它的功能。 例如恐惧让我们远离危险,焦虑让我们提升行动力,等等。 但是我们还是会出现的情况是:明明我都理解,那些道理我都懂,为什么我还是忍不住难受,这些冒出来的情绪还是不受控制? 在控制情绪之前,我们先要了解,我们的情绪是怎么产…...
2024/4/19 9:17:08 - Redis-瑞士军刀
一.慢查询1.生命周期2.配置使用(1).slowlog-max-len(2).sslowlog-log-slower-than(3).配置方法1.默认值 config get slowlog-max-len = 128 config get slowlog-log-slower-than = 10000 2.修改配置文件重启 3.动态配置 config set slowlog-max-len 1000 config set slowlog…...
2024/3/31 13:40:28 - Codeforces 1256总结
传送门 A.Payment Without Change 水题,题目大意是有a个价值为n的硬币和b个价值为1的硬币,能否用他们组成S,直接根据题目列式子x∗n+y∗1=S,然后找到最大的不大于S的x,再判断如果xn+b 不小于 S则有答案,否则无答案即可。 B. Minimize the Permutation 给出一串数字,尽可…...
2024/4/16 5:09:27 - 计网复习-CRC校验码-模二除法
网上的模二除法很多都很官方,很难看得懂,因为实在太耗费时间搜索,索性自己写了一个较为简单的,方便以后复习。以这道题为例,又多项式可以得出除数为10011。 在进行除法,要在被除数后面加上“除数位数-1”的0的个数,比如上面的除数为5位,则要在被除数后面补上4个0,即被…...
2024/4/16 5:10:18 - 学习 BFC (Block Formatting Context)
学习 BFC (Block Formatting Context) 什么是BFC BFC全称是Block Formatting Context,即块格式化上下文。它是CSS2.1规范定义的,关于CSS渲染定位的一个概念。要明白BFC到底是什么,首先来看看什么是视觉格式化模型。 视觉格式化模型 视觉格式化模型(visual formatting model)…...
2024/5/2 23:03:18 - 2020年7月图床
6:ubuntu14搭建ros+qt环境...
2024/5/2 23:50:04 - C#专题——特性
一、特性的作用 将额外的数据关联到属性或者其它构造的一种方式 二、如何自定义特性 class TestAttribute:System.Attribute {public TestAttribute (string name){this.Name = name;}public string Name { get; set; }public static void GetValue(){}}class Test2Attribute …...
2024/4/3 3:50:15 - 从零开始学前端 - 17. JS函数
作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正。转载请附带作者信息及出处。从零开始学前端 - 17. JS函数一、函数的定义和调用1. 声明函数2. JS函数的四种调用方法2.1 普通…...
2024/4/16 5:10:54 - Java基础--三元运算符和选择结构
1、三元运算符 格式为:条件?true的结果:false的结果 话不多说,直接上代码 // 三元运算 int num1 = 5; int num2 = 8; int result1 = 5>8?5:8; int result2 = 5<8?5:8; System.out.println(result1); //输出8 System.out.println(result2); //输出55>8为false,所…...
2024/4/2 12:42:45 - 031【毕设课设】基于单片机的水位检测系统仿真设计
031【毕设课设】基于单片机的水位检测系统仿真设计,通过传感器检测水位液位大小,设定范围,当超过范围则报警,并有出水阀和进水阀。以保持水位在某个范围自动调节。包括的电路有传感器电路、液晶显示电路、单片机控制电路、按键电路、进出水电磁阀电路、电源电路。下载链接:…...
2024/4/20 17:04:20 - Pre-Training Graph Neural Networks for Generic Structural Feature Extraction
Paper : Pre-Training Graph Neural Networks for Generic Structural Feature Extraction Code :摘要 作者想要解决的任务是根据图结构进行预测,通过构造三种与图结构相关的损失函数——去噪连接重建、中心得分排名、集群,作者给出的预训练算法得到的模型参数可以包含从图的…...
2024/4/16 5:11:40 - Variational Continual Learning
Variational Continual Learning 讲解视频Variational Continual Learning 论文...
2024/4/16 5:10:59
最新文章
- 【架构篇】软件架构的指南针之架构原则
软件架构的设计原则是一组指导思想,帮助我们在设计系统时做出有效的决策,以确保软件的可维护性、可扩展性和可靠性。以下是一些关键的软件架构设计原则: 模块化(Modularity): 将系统分解为功能独立的模块&…...
2024/5/5 20:10:59 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【开源语音项目OpenVoice](一)——实操演示
目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1)git加入鼠标右键 2)git clone源码 2、VSCode出场 1)创建pyth…...
2024/4/30 4:00:30 - 磁盘管理与文件管理
文章目录 一、磁盘结构二、MBR与磁盘分区分区的优势与缺点分区的方式文件系统分区工具挂载与解挂载 一、磁盘结构 1.硬盘结构 硬盘分类: 1.机械硬盘:靠磁头转动找数据 慢 便宜 2.固态硬盘:靠芯片去找数据 快 贵 硬盘的数据结构:…...
2024/5/5 1:09:39 - 自我介绍的HTML 页面(入门)
一.前情提要 1.主要是代码示例,具体内容需自己填充 2.代码后是详解 二.代码实例和解析 代码 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>自我介绍页面</title>…...
2024/5/5 7:22:10 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57