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

win环境nginx实战配置详解

项目中经常使用nginx做负载均衡,接口路由、文件、文档的上传及下载、视频的代理播放等等,都离不开nginx的支持,今天我们分享一下其个使用场景。

1、配置文件 nd-nginx.conf

全局配置


#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
#user  nobody;
#user nginx nginx;#启动Nginx工作进程的用户和组
worker_processes  1; #启动工作进程数数量
#worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
#worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ; 
#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,
#但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,
#减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;#events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,
#使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
events {#设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,#作为反向代理的时候为(worker_connections * worker_processes)/2worker_connections  1024;
}

文件上面全局配置

2、http 模块详解

#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,
#http块可以包含多个server块,而一个server块中又可以包含多个location块,
#server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
http {#通用配置....# N个server 模块虚拟服务器 }

3、http模块里面通用的配置

    include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录,在响应报文中将指定的文件扩展名映射至MIME对应的类型default_type  application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,#sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,#操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;  #长连接超时时间,单位是秒#开启gzip压缩,若想关闭gzip压缩,则需要注释掉这句话,或者将on换成off#gzip  on;#配置允许压缩的页面的最小字节数,页面字节数从header头中的Content-Length中获>取,建议设置成1k,因为如果数据小于1k,他也会压缩成1k,这样会起到反作用。#gzip_min_length 1k;#4个16k的数据流用于存储gzip的压缩结果数据流#gzip_buffers 4 16k;#支持的http版本为1.1#gzip_http_version 1.1;#判断客户端是否支持gzip技术,若不支持则不会进行gzip处理#gzip_vary on;# 全局跨域配置#为 * 表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求,也可以指定一个确定的URLadd_header 'Access-Control-Allow-Origin' '*' always;#可选字段,为true表示允许发送Cookie。同时,发送时,必须设置XMLHttpRequest.withCredentials为true才有效,请求若服务器不允许浏览器发送,删除该字段即可。add_header 'Access-Control-Allow-Credentials' 'true';#代表允许使用指定的方法请求该地址add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, PUT, OPTIONS';#代表允许在请求该地址的时候带上指定的请求头,例如:Content-Type,Authorization,使用逗号(,)拼接起来放在双引号(")中add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization';add_header 'Access-Control-Allow-Headers'  '*';#代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求,也就是跨域缓存。add_header 'Access-Control-Max-Age' 1728000;

4、server 虚拟服务器详解及通用配置

#每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器server {#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。#比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务listen       80; #配置server监听的端口server_name  localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。#是否在响应报文中的Content-Type显示指定的字符集,默认off不显示#charset charset | off;#charset koi8-r;#设置编码格式,默认是俄语格式,建议改为utf-8#示例#charset utf-8;#access_log  logs/host.access.log  main;autoindex on; # 显示目录,默认不开启autoindex_localtime on;# 显示文件修改时间 # 显示文件大小#多个 location 配置....}

5、server 中 多个location 配置 

        #以http的方式转发mp4请求到指定web服务器。#访问 http://127.0.0.1/6d.mp4 就可以播放视频,而视频6d.mp4就在html/dist目录下。location ~ /.mp4$ {#root E:\sh\nginx; # 你的文件目录mp4;			# 支持mp4mp4_buffer_size 10m;#处理mp4初始内存大小mp4_max_buffer_size 50m;#处理mp4最大内存大小}location / {root   html/dist;#相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。index  index.html index.htm;#默认的页面文件名称#给OPTIONS 添加 204 的返回,为了处理在发送POST请求时Nginx依然拒绝访问的错误,发送"预检请求"时,需要用到方法 OPTIONS,所以服务器需要允许该方法。if ($request_method = 'OPTIONS') {return 204;}}#proxy_pass的配置详解在后面location /test {proxy_pass http://127.0.0.1:9006;proxy_redirect off;#关闭重定向#proxy_redirect #旧地址 新地址;#proxy_redirect default;  #默认配置#若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是http://demo.com,那么反代后还是http://demo.com。proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ipproxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip}location /ars {proxy_pass http://192.8.3.211:9006;}#/person/getPersonUrllocation /kvc {add_header 'Access-Control-Allow-Origin' '*' ;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' '*';add_header 'Access-Control-Allow-Headers'  '*';add_header 'Access-Control-Max-Age' 1728000;proxy_pass http://192.8.3.211:1288;}location /about {root /app/html; #必须要在html目录中创建一个名为about的目录才可以访问,否则报错。}location /about { #注意about后不要加/ , 使用alias的时候uri后面如果加了斜杠,则下面的路径配置必须加斜杠,否则403alias /opt/html/about; #当访问about的时候,会显示alias定义的/opt/html/about里面的内容。}#注意:location中使用root指令和alias指令的意义不同#root 给定的路径对应于location中的/uri 左侧的/#alias 给定的路径对应于location中的/uri 的完整路径#error_page  404              /404.html;#错误页面的文件名称# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;#错误页面的文件名称location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。root   html;#定义默认页面所在的目录}

6、第二个server,单独处理视频播放

#serverd第二个服务虚拟服务器#访问http://127.0.0.1:8088/6d.mp4 就可以播放视频,而视频6d.mp4就在E:/sh/nginx/nginx目录下。server {listen 8088;server_name 127.0.0.1;charset utf-8,gbk;#root /usr/local/nginx/html/files; # 你的文件目录root E:/sh/nginx/nginx; # 你的文件目录# 显示目录,默认不开启autoindex on;# 显示文件大小# 显示文件修改时间autoindex_localtime on;location ~ /.mp4$ {mp4;			# 支持mp4mp4_buffer_size 10m;mp4_max_buffer_size 50m;}}

7、第三个server 单独展示图片

#作为下载服务器配置#官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html#作为上传服务器# 定义缓存目录proxy_cache_path E:/sh/nginx/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;server {listen 8081;location ~* /.(jpg|jpeg|png|gif)$ {# 开启缓存功能proxy_cache my_cache;# 指定缓存时间(单位为秒)proxy_cache_valid any 30d;# 如果未命中缓存则从后端服务器获取并进行缓存#proxy_pass http://backend-server;# 其他相关配置...}location ~* /.(css|js)$ {#1h代表一小时expires 1h;# 开启缓存功能proxy_cache my_cache;# 指定缓存时间(单位为秒)proxy_cache_valid any 30d;}}

8、整个配置文件展示


#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
#user  nobody;
#user nginx nginx;#启动Nginx工作进程的用户和组
worker_processes  1; #启动工作进程数数量
#worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
#worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ; 
#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,
#但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,
#减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;#events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,
#使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
events {#设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,#作为反向代理的时候为(worker_connections * worker_processes)/2worker_connections  1024;
}#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,
#http块可以包含多个server块,而一个server块中又可以包含多个location块,
#server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
http {include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录,在响应报文中将指定的文件扩展名映射至MIME对应的类型default_type  application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,#sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,#操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;  #长连接超时时间,单位是秒#开启gzip压缩,若想关闭gzip压缩,则需要注释掉这句话,或者将on换成off#gzip  on;#配置允许压缩的页面的最小字节数,页面字节数从header头中的Content-Length中获>取,建议设置成1k,因为如果数据小于1k,他也会压缩成1k,这样会起到反作用。#gzip_min_length 1k;#4个16k的数据流用于存储gzip的压缩结果数据流#gzip_buffers 4 16k;#支持的http版本为1.1#gzip_http_version 1.1;#判断客户端是否支持gzip技术,若不支持则不会进行gzip处理#gzip_vary on;# 全局跨域配置#为 * 表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求,也可以指定一个确定的URLadd_header 'Access-Control-Allow-Origin' '*' always;#可选字段,为true表示允许发送Cookie。同时,发送时,必须设置XMLHttpRequest.withCredentials为true才有效,请求若服务器不允许浏览器发送,删除该字段即可。add_header 'Access-Control-Allow-Credentials' 'true';#代表允许使用指定的方法请求该地址add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, PUT, OPTIONS';#代表允许在请求该地址的时候带上指定的请求头,例如:Content-Type,Authorization,使用逗号(,)拼接起来放在双引号(")中add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization';add_header 'Access-Control-Allow-Headers'  '*';#代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求,也就是跨域缓存。add_header 'Access-Control-Max-Age' 1728000;#每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器server {#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。#比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务listen       80; #配置server监听的端口server_name  localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。#是否在响应报文中的Content-Type显示指定的字符集,默认off不显示#charset charset | off;#charset koi8-r;#设置编码格式,默认是俄语格式,建议改为utf-8#示例#charset utf-8;#access_log  logs/host.access.log  main;autoindex on; # 显示目录,默认不开启autoindex_localtime on;# 显示文件修改时间 # 显示文件大小#以http的方式转发mp4请求到指定web服务器。#访问 http://127.0.0.1/6d.mp4 就可以播放视频,而视频6d.mp4就在html/dist目录下。location ~ /.mp4$ {#root E:\sh\nginx; # 你的文件目录mp4;			# 支持mp4mp4_buffer_size 10m;#处理mp4初始内存大小mp4_max_buffer_size 50m;#处理mp4最大内存大小}location / {root   html/dist;#相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。index  index.html index.htm;#默认的页面文件名称#给OPTIONS 添加 204 的返回,为了处理在发送POST请求时Nginx依然拒绝访问的错误,发送"预检请求"时,需要用到方法 OPTIONS,所以服务器需要允许该方法。if ($request_method = 'OPTIONS') {return 204;}}#proxy_pass的配置详解区别 https://blog.csdn.net/jsxztshaohaibo/article/details/134578031location /test {proxy_pass http://127.0.0.1:9016;proxy_redirect off;#关闭重定向#proxy_redirect #旧地址 新地址;#proxy_redirect default;  #默认配置#若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是http://demo.com,那么反代后还是http://demo.com。proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ipproxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip}location /artemis {proxy_pass http://192.8.3.211:9006;}#/person/getPersonUrllocation /kcvc {add_header 'Access-Control-Allow-Origin' '*' ;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' '*';add_header 'Access-Control-Allow-Headers'  '*';add_header 'Access-Control-Max-Age' 1728000;proxy_pass http://192.8.3.211:1288;}location /about {root /app/html; #必须要在html目录中创建一个名为about的目录才可以访问,否则报错。}location /about { #注意about后不要加/ , 使用alias的时候uri后面如果加了斜杠,则下面的路径配置必须加斜杠,否则403alias /opt/html/about; #当访问about的时候,会显示alias定义的/opt/html/about里面的内容。}#注意:location中使用root指令和alias指令的意义不同#root 给定的路径对应于location中的/uri 左侧的/#alias 给定的路径对应于location中的/uri 的完整路径#error_page  404              /404.html;#错误页面的文件名称# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;#错误页面的文件名称location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。root   html;#定义默认页面所在的目录}}#serverd第二个服务虚拟服务器#访问http://127.0.0.1:8088/6d.mp4 就可以播放视频,而视频6d.mp4就在E:/sh/nginx/nginx目录下。server {listen 8088;server_name 127.0.0.1;charset utf-8,gbk;#root /usr/local/nginx/html/files; # 你的文件目录root E:/sh/nginx/nginx; # 你的文件目录# 显示目录,默认不开启autoindex on;# 显示文件大小# 显示文件修改时间autoindex_localtime on;location ~ /.mp4$ {mp4;			# 支持mp4mp4_buffer_size 10m;mp4_max_buffer_size 50m;}}#作为下载服务器配置#官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html#作为上传服务器# 定义缓存目录proxy_cache_path E:/sh/nginx/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;server {listen 8081;location ~* /.(jpg|jpeg|png|gif)$ {# 开启缓存功能proxy_cache my_cache;# 指定缓存时间(单位为秒)proxy_cache_valid any 30d;# 如果未命中缓存则从后端服务器获取并进行缓存#proxy_pass http://backend-server;# 其他相关配置...}location ~* /.(css|js)$ {#1h代表一小时expires 1h;# 开启缓存功能proxy_cache my_cache;# 指定缓存时间(单位为秒)proxy_cache_valid any 30d;}}
}

9、参考proxy_pass的配置详解区别

参考代理uri区别文章

到此,单体服务的多种使用场景从不同角度展示出来了,分享告一段落,后面会持续更新,敬请期待!

相关文章:

win环境nginx实战配置详解

项目中经常使用nginx做负载均衡,接口路由、文件、文档的上传及下载、视频的代理播放等等,都离不开nginx的支持,今天我们分享一下其个使用场景。 1、配置文件 nd-nginx.conf 全局配置 #全局配置端,对全局生效,主要设置…...

数字化转型导师坚鹏:如何制定证券公司数字化转型年度培训规划

如何制定与实施证券公司数字化转型年度培训规划 ——以推动证券公司数字化转型战略落地为核心,实现知行果合一 课程背景: 很多证券公司都在开展数字化转型培训工作,目前存在以下问题急需解决: 缺少针对性的证券公司数字化转型…...

新王炸:文生视频Sora模型发布,能否引爆AI芯片热潮

前言 前方高能预警,Sora来袭! 浅析Sora的技术亮点 语言模型中构建关键词联系 视频素材分解为时空碎片 扩散模型DiT Not for play, But change world! OpenAI的宏大目标 未来已来,只是尚未流行 Sora的成本与OpenAI的7万亿美金豪赌 算…...

代码随想录算法训练营|day48

第九章 动态规划 121.买卖股票的最佳时机122.买卖股票的最佳时机II代码随想录文章详解 121.买卖股票的最佳时机 本题中股票只能买卖一次 dp[i][0] 表示第i天不买入股票持有的最大现金;dp[i][1] 表示第i天买入股票持有的最大现金。 不买股票持有的最大现金买入股票…...

架构面试题汇总:并发和锁(三)

在现代软件开发中,并发编程和多线程处理已成为不可或缺的技能。Java作为一种广泛使用的编程语言,提供了丰富的并发和多线程工具,如锁、同步器、并发容器等。因此,对于Java开发者来说,掌握并发编程和多线程处理的知识至…...

蓝桥杯(3.2)

1209. 带分数 import java.io.*;public class Main {static BufferedReader br new BufferedReader(new InputStreamReader(System.in));static PrintWriter pw new PrintWriter(new OutputStreamWriter(System.out));static final int N 10;static int n, cnt;static int[…...

[数据集][目标检测]鸟类检测数据集VOC+YOLO格式11758张200类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):11758 标注数量(xml文件个数):11758 标注数量(txt文件个数):11758 标…...

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…...

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现

uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现 1.背景 今天开发app的时候遇到一个需求: 业务在出发特定条件的时候向对应的客户端推送消息通知。 为什么选择在线模式,因为我们使用的是德邦类似的手持终端&#xf…...

【简说八股】面试官:你知道什么是AOP么?

回答 AOP(Aspect-Oriented Programming),即面向切面编程,是一种编程范式,它的主要思想是将应用程序中的横切关注点(如日志记录、性能统计、安全控制等)从业务逻辑中剥离出来,然后通过特殊的方式将这些横切…...

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号: FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接:https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码:0d46 原厂系统自带所有驱动、…...

Unity(第二十一部)动画的基础了解(感觉不了解其实也行)

1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式,勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去,第二个是基于渲染播放(离开镜头后不执行), …...

写时复制简介

写时复制技术(Copy on Write)是比较常用的一种技术,它的主要目的是延迟减少以及延迟内存的分配,增加执行效率,只有在真正进行写操作的过程中才会真正分配物理资源。同时,也可以保护数据在系统崩溃时出现的丢失。比如,我…...

运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)

如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的,我们可以在py文件中的第一行加入以下代码: # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式: utf-…...

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意: ①only a…...

leetcode-字符串中的单词数

434. 字符串中的单词数 题解: 这个问题可以通过遍历字符串,当遇到非空格字符时,判断其前一个字符是否为空格,如果是,则说明这是一个新的单词的开始,计数器加一。最后返回计数器的值即可。 class Solutio…...

一些C语言题目

求10个整数中最大值 #include <stdio.h>//求10个整数中最大值 int main() {int arr[10]{2,5,8,6,19,1,7,3,11,3};int i 0;int max 0;/*for(i 0;i < 10;i){scanf("%d",&arr[i]);}*/for(i 0;i < 10;i){if(arr[i] > max)max arr[i];}printf(&q…...

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…...

32单片机基础:旋转编码器计次

接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断&#xff0c;当然&#xff0c;这里只初始化一个外部中断也能完成功能的对于编码器而言&#xff0c;下图所示为正转的波形。如果把一相的下降沿用作触发中断&#xff0c;在中断时刻读取另一相的电平&#xff0c;正…...

【C++】vector的使用和模拟实现(超级详解!!!!)

文章目录 前言1.vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题。&#xff08;重点!!!!!!&#xff09;1.2.5 vector 在OJ中有关的练习题 2.ve…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...