Nginx笔记
一、概述
Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个电子邮件代理服务器。正向代理服务的是客户端(比如VPN),反向代理服务的是服务端。Nginx是多进程的,有一个Master进程控制多个Worker进程。速度快、并发高、热部署。
1、优点
- 速度快,并发高,在5万左右。采用多进程,io多路复用技术。像Tomcat是一个重量级的服务器,并发在200左右
- 配置简单,扩展性强
- 高可靠性,有master进程和worker进程,其中master进行单独用于管理worker进程
- 热部署
- 成本低,BSD许可证(可以修改源码并且可以用来赚钱)
2、常用模块
- 静态资源部署
- Rewrite地址重写,使用正则表达式
- 反向代理
- 负载均衡
- web缓存
- 用户认证模块
3、核心组成
- nginx:二进制可执行文件
- nginx.conf:核心配置文件
- error.log:错误的日志记录
- access.log:访问日志记录
- nginx.pid:记录nginx的Master进程id
二、安装
下载并上传到服务器,解压进入目录,执行
./configure --prefix=/usr/local/nginx
配置脚本并指定安装目录,然后执行make
进行安装,执行make install
进行安装
三、常用命令
命令是已nginx安装后的sbin目录下的nginx为基础的。可以将这个命令配置到
/etc/profile
文件中来成为全局命令。当然也可以使用发送信号、系统命令systemctl的方式来操作nginx
nginx
:启动nginx -s stop
:直接停止nginx -s quit
:优雅停止,这个命令会等待所有请求结束后再关闭netstat -tulnp | grep nginx
:查看启动情况,此命令仅显示监听端口的主进程。其中netstat
已逐渐被ss
替代ps -ef | grep nginx
:查看运行情况nginx -s reload
:重启。主进程保持运行,新配置生效后,旧Worker进程处理完请求后退出重启nginx -t
:测试配置文件nginx -V
:查看版本详细参数nginx -s reopen
:让nginx关闭当前日志文件,并重新打开新的日志文件(根据配置中的路径),使得日志写入能无缝切换到新文件,无需重启服务tail -f nginx/logs/access.log
:实时查看访问日志
四、核心配置
1、标准的全局块
# nginx.config文件
# 全局配置部分
#-----------------------------# 定义工作进程数量(建议设置为CPU核心数或自动检测)
# 值:数字 或 auto
worker_processes 4; # user指令:用于配置运行Nginx服务器的worker进程的用户和用户组。使用user指令启动的时候,可以指定Linux系统的用户和用户组,然后访问Nginx的时候,只能访问到该用户拥有权限的目录,进行权限访问控制。# daemon:是否已守护进程运行,默认为on# pid:用于指定存放master进程id的文件路径# error_log:用于配置Nginx错误日志存放的路径# include:可以引入其他的配置文件,可以放在任何位置,放在全局块中可以引入全局块指令# 事件模块配置(控制连接处理模型)
#-----------------------------
events {# 每个Worker进程允许的最大并发连接数(包含活动连接和空闲连接)。默认 512。设置值不能超过操作系统支持打开的最大句柄数量# 总最大连接数 = worker_processes * worker_connectionsworker_connections 40960; # accept_mutex:用来设置Nginx网络连接序列化,默认为on。用来解决惊群问题,就是一个请求发送过来,所有的worker进程都会唤醒来抢夺这个请求,设置为on开启序列化,意为每次来请求,只会唤醒一个worker进程来处理请求。根据实际需求来配置,因为可能会同时发送过来多个请求# muli accept:用来设置是否允许woker进行同时接受多个网络连接。默认为off,可以打开提高速度# use:设置Nginx服务器使用哪种事件驱动来处理网络消息。默认值根据操作系统来确定。推荐使用epoll使用io多路复用。
}# HTTP核心模块配置
#-----------------------------
http {# 根据User-Agent判断设备类型(用于后续条件判断)# 定义变量 $device_type,默认值为desktop,匹配移动设备则设为mobilemap $http_user_agent $device_type {default desktop; # 默认值~*android|iphone|ipad|ipod mobile; # 正则匹配(不区分大小写)}# 包含MIME类型定义文件(默认路径为nginx目录下的conf/mime.types)# 我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。default_type 来指定相应给前端的类型, application/octet-stream会下载下来响应include mime.types; # access_log:用来设置用户访问日志的目录、格式等相关属性# log_format:用来指定日志的输出格式# 默认响应类型(当无法识别文件类型时使用)# 注意:application/wasm 是WebAssembly的MIME类型,需确认是否需要此设置default_type application/wasm; # 启用高效文件传输模式(零拷贝技术)。用来设置Nginx服务器是否使用Linux操作系统的sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能。默认off# 读取文件流程是客户端请求,用户区、内核区、磁盘、网卡中进行多次拷贝,效率较低,四次拷贝,sendfile是操作系统底层函数。开启可以提升效率,不需要多次拷贝,可以指定读取到哪个socket,直接响应给客户端。服务端的数据要返回给客户端。那么有两种模式,一种是实时发送,即`tcp_nodelay`,默认on,来了一个数据就直接发送给客户端,这样实时性很高,但是消耗性能。第二种就是开辟一个缓冲区,即`tcp_nopush`,默认off,依赖sendfile,数据将缓冲区填满之后再一起发送,实时性弱一点,但是性能高。两个配置看起来是互斥的,但是Linux2.5.9之后进行了优化,所有建议三者都打开,配置在http块。sendfile on; # 客户端保持连接的超时时间(单位:秒)。用来设置长连接的超时时间。如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。默75秒keepalive_timeout 65; # keepalive_requests:用来设置一个keep-alive连接使用的次数,达到次数就关闭这个连接# 从ISO8601时间格式中提取日期(用于日志文件名)map $time_iso8601 $logdate {'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; # 正则捕获年月日default 'date-not-found'; # 匹配失败时的默认值}# 访问日志配置(按日期分割日志)access_log logs/access-$logdate.log; # 客户端请求相关配置#-----------------------------client_max_body_size 50m; # 允许客户端上传的最大文件大小(重要!涉及文件上传需设置)client_body_buffer_size 60k; # 客户端请求体缓冲区大小client_body_timeout 60; # 客户端请求体读取超时时间(秒)client_header_buffer_size 64k; # 客户端请求头缓冲区大小client_header_timeout 60; # 客户端请求头读取超时时间(秒)# --------------------------# Gzip 压缩配置(优化传输效率)# --------------------------# gzip_buffers number size:设置压缩时缓冲区的数量和大小。默认即可# gzip_proxied:默认off。指的是作为反向代理服务器,对于后端返回的数据是否进行压缩。# gzip_static:默认off这个是在还没有读取时就压缩文件,然后直接读取对应文件的.gz文件,有的话就直接使用这个文件,没有的话在读取源文件,使用头信息Content-Encoding:gzip和Vary:Accept-Encoding告诉浏览器进行了文件压缩。gzip on; # 启用 Gzip 压缩gzip_min_length 1k; # 只压缩大于 1KB 的文件。默认20bgzip_comp_level 6; # 压缩级别 1-9(9 最高压缩率,CPU 消耗较大)1压缩最快,压缩程度低,建议设置为6,基本已经极限。gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; # 压缩指定 MIME 类型,设置要压缩的类型,默认只会压缩text/html类型。gzip_vary on; # 添加 `Vary: Accept-Encoding` 头gzip_disable "MSIE [1-6]\."; # 为旧版 IE 浏览器禁用压缩。值是正则表达式,会匹配浏览器的user-agnet,匹配到的就不进行压缩gzip_http_version 1.1; # 指定启用压缩的最低 HTTP 协议版本# 错误页面配置#-----------------------------error_page 400 /error/400.html; # 错误码映射到指定URIerror_page 403 /error/403.html;error_page 404 /error/404.html;error_page 500 /error/500.html;# ...(其他错误码配置,需确保/error目录下存在对应HTML文件)# 高级连接配置#-----------------------------keepalive_requests 1000; # 单个Keep-Alive连接允许的最大请求数large_client_header_buffers 4 64k; # 大型请求头的缓冲区数量和大小reset_timedout_connection on; # 关闭超时未响应的连接以释放资源send_timeout 60; # 响应发送超时时间(秒)# 文件传输优化sendfile_max_chunk 512k; # 单次sendfile调用的最大传输量(避免Worker进程阻塞)# 服务器名哈希表优化server_names_hash_bucket_size 256; # 服务器名哈希表桶大小(域名较长时需要增加)# 包含虚拟主机配置文件(通常用于分站点管理)include vhosts/*.conf;
}# 系统资源限制(需放在全局块,不能放在http块内)
#-----------------------------
worker_rlimit_nofile 100000; # Worker进程能打开的最大文件描述符数量(需配合系统ulimit设置)
2、标准的Server块
# includ.config文件
# ======================================================
# Nginx Server 块配置详解
# 此配置用于处理域名为 dbgmarkets.co 的 HTTP/HTTPS 请求
# 实现功能:SSL 加密、动静分离、API 代理、设备类型适配
# ======================================================# server块的匹配优先级是:准确匹配、通配符在前的匹配、通配符在后的匹配、正则表达式的匹配、默认的server匹配
server {# --------------------------# 监听端口与协议配置# --------------------------listen 80; # 监听 IPv4 的 HTTP 80 端口listen 443 ssl http2 default_server; # 监听 IPv4 的 HTTPS 443 端口,启用 HTTP/2,设为默认主机listen [::]:443 ssl http2 default_server; # 监听 IPv6 的 HTTPS 443 端口# 说明:# - default_server: 当请求未匹配其他 server_name 时,并且请求的为指定监听的端口,则由此块处理。没有指定默认server,第一个server就是默认的server# - http2: 启用 HTTP/2 协议提升性能# - ssl: 启用 SSL/TLS 加密# --------------------------# 域名与基础设置# --------------------------server_name dbgmarkets.co; # 匹配的域名(精确匹配,不含 www 等子域名)。用于指定访问的ip或域名。多个域名间用空格分隔。有三种模式,精确匹配,通配符*匹配(不能写在中间,只能出现在首段和尾端,否者会失效),正则表达式匹配(必须使用~作为开始标识)。其中正则表达式,可以使用括号和$N方式在return中获取对应访问的值absolute_redirect off; # 关闭绝对路径重定向(返回相对路径,适用于反向代理后方场景)# --------------------------# SSL/TLS 安全配置# --------------------------# HTTPS就是身披SSL的HTTP请求。SSL是安全套接层,TLS是传输层安全# 获取证书的话,可以阿里云购买,也可以使用openssl进行生成ssl_certificate C:/crm/nginx-1.20.2/ssl/dbgmarkets_co/dbgmarkets_co.crt; # SSL 证书路径(Windows 格式)ssl_certificate_key C:/crm/nginx-1.20.2/ssl/dbgmarkets_co/dbgmarkets_co.key; # SSL 私钥路径ssl_session_cache shared:SSL:1m; # SSL 会话缓存(1MB 内存,减少握手开销)ssl_session_timeout 10m; # SSL 会话超时时间(10 分钟)ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件配置(HIGH 安全级别,禁用 aNULL/MD5)ssl_prefer_server_ciphers on; # 优先使用服务端加密套件# 注意:建议添加 ssl_protocols TLSv1.2 TLSv1.3; 以禁用老旧协议# --------------------------# 静态资源服务配置# --------------------------# root 实际返回的资源是root路径+location路径# alias 实际返回的资源只是alias的路径root C:/crm/web/dist; # 静态文件根目录(前端构建产物存放路径)# 示例:请求 /css/style.css 将映射到 C:/crm/web/dist/css/style.css# --------------------------# 公共代理头设置# --------------------------proxy_set_header X-Forwarded-Proto $scheme; # 传递客户端协议(http/https)proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IPclient_max_body_size 15M; # 允许客户端上传最大 15MB 文件(如文件上传功能)# --------------------------# 路由处理:根路径(/)# --------------------------location / {# 设备类型判断(根据全局 map 映射的 $device_type 变量)if ($device_type = mobile) { # 如果是移动设备proxy_pass http://127.0.0.1:3001; # 代理到本地的 3001 端口(移动端服务),即跳转到另一个server块的配置break; # 终止后续处理}index index.html; # 默认访问文件try_files $uri $uri/ /index.html; # 前端 SPA 路由支持(找不到文件时返回 index.html)# 流程:尝试访问真实文件 → 查找目录 → 回退到 index.html}# --------------------------# 路由处理:API 接口(/api)# --------------------------# location /api 匹配所有以/api开头的请求# =/api 精确匹配,只匹配/api的请求# ~^/api\w$ 正则表达式匹配,~标识使用正则表达式,^开头,$结尾。其中使用~*标识正则表达式不区分大小写# ^~/api 匹配第一个以/api开头的请求。默认的匹配顺序是匹配所有的条件,返回最后一个匹配到的,这个^~标识表示匹配到这个表达式之后,就不再向后匹配,直接返回结果location /api {# 解决跨域问题# add_header Access-Control-Allow-Origin 访问的ip地址端口号# add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE# 代理到本地的 81 端口(后端 API 服务)proxy_pass http://127.0.0.1:81; #后面加/代表去要除掉/api,当然api后面的请求不会去除# 关键代理头设置# WebSocket 协议升级支持proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 传递原始域名# 补充:通常还需添加 X-Forwarded-For 头记录客户端 IP 链}# --------------------------# 错误页面配置# --------------------------# 5xx 错误统一返回 50x.html。error_page 500 =200 /error.html 使用=可以将返回的状态码500改为200error_page 500 502 503 504 /50x.html; # 注意:需确保 root 目录存在 50x.html 文件
}# rewrit 指令
# set指令。`set $key value`。设置变量键值对。$key可以直接使用。Nginx有预定的变量,如$args就是所有请求参数,$host获取到的是访问的服务器地址
# `if (){}`指令。条件如果是一个变量,不为空或0就是true。也可以使用=和!=判断,不需要引号。也可以使用正则表达式判断,变量和表达式之间用空格和~隔开,然后匹配上为true,其中~区分大小写,~*不区分大小写,!~表示取反。还可以使用内置参数和变量结合判断,如`-f $request_filename`用来判断这个文件是否存在。
# break;指令,终止当前作用域,并且会重定向到当前indx文件。
# `rewrite 正则表达式 地址 [命令]`。命令:last:匹配到后会拿这个地址去所有块中寻找,然后转发;break:匹配到后,会拿这个地址去本块中寻找;redirect:重定向到指定地址,临时重定向302;permanent:永久重定向,301
# `rewrite_log on;`开启后,会以notice级别输出到error日志中。所以需要 `error_log error.log notice;`
# `return code url`:直接返回指定的code,跳转到对应的url上。
3、Server块例子
本机的IP为
http://192.168.111.100
,服务端的IP为http://192.168.111.200
server{listen 8081;server_name localhost;location / {proxy_pass http://192.168.111.200:8081; #将所有请求代理到服务端的8081端口中proxy_redirect http://192.168.111.200 http://192.168.111.100; #当服务端返回的响应中包含 Location: http://192.168.111.200/... 这样的重定向头时,Nginx 会自动把它改写为 Location: http://192.168.111.100/... 返回给客户端。这样浏览器跳转的目标就是“本机地址”,不会跳到服务端私网地址或错误地址}
}
4、负载均衡
OSI 模型中的第四层(传输层)和第七层(应用层)。下面的是第七层负载均衡,还有四层负载均衡,四层还可以通过硬件实现,nginx四层不常用
http{# 指定负载均衡的所有后端服务器,默认采用轮询方式。upstream backendName{server 192.168.111.200:8080;server 192.168.111.201:8080;server 192.168.111.202:8080;#server 192.168.111.203:8080 down;# 设置为down,表示这台服务器永远不参与负载均衡#server 192.168.111.204:8080 backup;# 当所有的主服务器都不可用的时候,会请求这台服务器#server 192.168.111.204:8080 max_fails=3 fail_timeout=15;#请求这台服务器失败3次后,服务器停止15秒,就算恢复也要等15秒之后才能正常访问这台服务器}server{listen 80;server localhost;location / {# 将请求进行负载均衡proxy_pass http://backendName;}}# 负载均衡策略。默认轮询upstream backendDeom{# 加权轮询,数值越大,分配的概率就越大,默认为1server 192.168.111.200:8080 weight=10;server 192.168.111.201:8080 weight=6;server 192.168.111.202:8080 weight=4;#ip_hash;# IP哈希,同一个客户端ip会请求到同一个后端服务,可以解决session跨域的问题#less_conn;哪个服务器nginx连接数少就给哪个,适用于服务器处理请求时间不一致的情况# hash &request_uri;#请求路径哈希,同一个请求路径会请求到同一个后端服务,适用于有缓存的情况,如文件系统的文件缓存到本机#fair;#需要下载第三方模块。会根据响应的时间智能的分配server 192.168.111.200:8080;server 192.168.111.201:8080;server 192.168.111.202:8080;}
}
5、实现下载站点
仅仅下载文件的站点,使用目录格式。显示下载目录、文件创建时间、文件大小
server{listen 80;server localhost;location /download {# 设置下载文件的路径root /usr/download;# 开启目录下载autoindex on;# 文件大小默认显示B。关闭就显示G、M、KB单位的大小autoindex_exact_size off;# 时间默认显示的时文件的GMT时间。开启后,将时间显示为文件所在服务器的时间autoindx_localtime on;# 设置校验密码的提示。不设置访问下载就没有限制auth_basic "place input your auth";# 设置账号密码存储的文件,用于和客户端输入的进行比对。使用htpasswd工具生成auth_basic_user_file htppasswd;}
}
五、集群
每台安装nginx的主机也安装keepalive进行集群,keepalive可以设置虚拟ip,这样就可以实现客户端访问ip统一。当一个nginx发送宕机时,只要将本机的keepalive关闭掉就可以,需要写一个脚本来自动实现。
六、定制扩展
使用Lua脚本进行定制化功能的实现。如可以操作Redis,Mysql,进行缓存预热等等。
相关文章:
Nginx笔记
一、概述 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个电子邮件代理服务器。正向代理服务的是客户端(比如VPN),反向代理服务的是服务端。Nginx是多进程的,有一个Master进程控制多个Worke…...
小米便签源码部署流程
一、准备环境 1. 安装必要工具 Android Studio:最新稳定版(需支持 Kotlin 和 Jetpack Compose)。 JDK:建议 JDK 11 或更高(通过 sdkman 或 brew 安装)。 Git:用于克隆源码。 2. 配置国内镜像源&…...
DAY 30 超大力王爱学Python
知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 步骤 1:创建项目结构 …...
左右边界策略
这是一套完整的交易逻辑策略,涵盖了从函数定义、指标计算、信号生成到资金和仓位管理、加仓和减仓逻辑、以及止损和止盈逻辑的各个方面。 以下对该交易系统进行详细分析: 交易逻辑思路 1. 函数定义 - DZSell 和 DZBuy 函数:这两个函数用于计算卖出和买入的价格区间。它…...
iOS苹果和Android安卓测试APP应用程序的区别差异
在当今这个移动互联网时代,iOS和Android作为两大主流操作系统,它们在测试应用程序时存在哪些差异呢?这不仅是一个技术问题,也是一个市场策略问题。让我们从一个实际案例开始探讨。 假设我们有一个新的社交应用需要在iOS和Android…...
【Python装饰器深潜】从语法糖到元编程的艺术
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现案例1:基础计时装饰器案…...
Kubernetes中微服务JVM监控与自动发现的解决方案
以下是针对 Kubernetes 中微服务 JVM 监控与自动发现的解决方案,结合 Prometheus 的动态发现机制和 Spring Boot 的监控能力,解决 Pod IP 动态变化和当前微服务监控数据暴露匿名随意访问的安全问题。 一、微服务端配置(Spring Boot 微服务) 1. 依赖配置(pom.xml) <…...
mapbox进阶,纯前端geojson转shape,并将shape相关文件压缩成zip压缩包并下载
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️line线图层样式二、🍀纯前端geojson转…...
Oracle ASM Rebalance Power 了解
Oracle ASM Rebalance Power 了解 基本概念 ASM (Automatic Storage Management) 的 Rebalance Power 参数控制磁盘组重新平衡操作的速度和资源使用。当添加、删除或调整 ASM 磁盘时,ASM 会自动执行重新平衡操作来重新分布数据。 ASM_POWER_LIMIT 参数 作用 控…...
sqlite的拼接字段的方法(sqlite没有convert函数)
我在sqlserver 操作方式: /// <summary>///获取当前门店工资列表/// </summary>/// <param name"wheres">其他条件</param>/// <param name"ThisMendian">当前门店</param>/// <param name"IsNotU…...
深入解析 OpenManus:开源 AI 智能体框架的技术原理与实践
深入解析 OpenManus:开源 AI 智能体框架的技术原理与本地部署指南 在当今人工智能快速发展的时代,智能体(Agent)技术正逐渐成为推动自动化和智能化的关键力量。OpenManus,由 MetaGPT 团队开发的开源 AI 智能体框架&am…...
[面试精选] 0001. 两数之和
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 1. 两数之和 - 力扣(LeetCode) 2. 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个…...
CAP分布式理论
CAP分布式理论 文章目录 CAP分布式理论事务本地事务定义适用场景优点缺点 分布式事务一、分布式事务的定义二、分布式事务的标准与 CAP 理论的关系1. CAP 理论的核心内容2. CAP 理论对分布式事务的指导意义3. 分布式事务的其他关键标 三、总结:CAP 理论与分布式事务…...
如何管理和优化内核参数
Linux 系统中的内核参数(Kernel Parameters)对系统的性能、安全性和稳定性有很大影响。通过调整内核参数,可以优化系统性能、增强网络能力、调整内存管理等。管理和优化内核参数通常涉及以下几个步骤: 1. 查看当前内核参数 在 L…...
sgRNA的靶基因基因组如何获得? for 下游的 T7E1验证
愿武艺晴小朋友一定得每天都开心! 1)在基因组,靶标区域上下游,设计引物(以Zfp532基因为例): a. NCBI(Home - Gene - NCBI)Gene 页面上输入:Zfp532。 b. 在新…...
人工智能+:职业价值的重构与技能升级
当“人工智能”成为产业升级的标配时,一个令人振奋的就业图景正在展开——不是简单的岗位替代,而是职业价值的重新定义。这场变革的核心在于,AI并非抢走工作机会,而是创造了人类与技术协作的全新工作范式。理解这一范式转换的逻辑…...
【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置
技术栈 Uniapp Vue3 uView年份显示前后一年,分钟动态设置间隔 效果图 主体显示 <view class"uni-row selector" click"openPicker"><uni-icons color"#c0c4cc" type"calendar" size"22"></uni-…...
目标检测DN-DETR(2022)详细解读
文章目录 gt labels 和gt boxes加噪query的构造attention maskIS(InStability)指标 在DAB-Detr的基础上,进一步分析了Detr收敛速度慢的原因:二分图匹配的不稳定性(也就是说它的目标在频繁地切换,特别是在训…...
榕壹云上门家政系统:基于Spring Boot+MySQL+UniApp的全能解决方案
一、项目背景:家政服务行业的数字化升级需求 随着城市化进程加快,居民对上门家政服务的需求持续增长。传统家政行业存在服务效率低、信息不透明、管理成本高的问题,亟需通过数字化工具实现服务标准化、流程自动化。榕壹云上门家政系统应运而…...
目标检测DINO-DETR(2023)详细解读
文章目录 对比去噪训练混合查询选择look forward twice 论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三个新的方法: 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法…...
LLM笔记(十)vLLM(1)PagedAttention论文笔记
文章目录 PagedAttention论文笔记论文摘要概览1. 引言问题背景提出的解决方案主要贡献和成果 2. 背景2.1 基于Transformer的大语言模型2.2 LLM服务与自回归生成2.3 LLM的批处理技术 3. LLM服务中的内存挑战3.1 现有系统中的内存管理 4. 方法: PagedAttention 和 vLLMvLLM 系统概…...
5.20 note
不用if else实现递归 原代码 class Solution { public: int mechanicalAccumulator(int target) { if (target 0) return 0; // 终止条件:基准情况 return target mechanicalAccumulator(target - 1); // 递归累加 } }; 变形 class Solution { public: int…...
vuejs处理后端返回数字类型精度丢失问题
标题问题描述 后端返回数据有5.00和3.30这种数据,但是前端展示的时候返回对应分别为5和3.0,小数点后0都丢失了。 接口返回数据展示network-Response: 接口返回数据展示network-Preview: 错误数据效果展示 发现问题 浏览器接口…...
指令烧录ORIN NANO操作系统
1 概述 模组为ORIN NANO 4GB版本 Ubuntu系统为18.04虚拟机 说明:刷机过程会有重新连接USB的操作,烧写过程需要注意虚拟机提示,官方不建议使用虚拟机,建议直接使用ubuntu操作系统的机器。 2 下载烧录所需文件 进入到下载网址&am…...
每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
6. 1695.删除子数组的最大得分(中等) 1695. 删除子数组的最大得分 - 力扣(LeetCode) 思想 1.给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组**。**删除子数组的 得分 就是子数组各元素之 和 。 返回 只删除一个 子…...
List介绍
什么是List 在集合框架中,List是一个接口,继承自Collection Collection也是一个接口,该接口中规范了后序容器中常用的一些方法 Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下࿱…...
List更简洁的编码构建
List的链式构建需求 jdk1.8,编码时需要手动构建一个List 传统List构建方式 - 声明列表,依次添加元素; - 利用Arrays.asList方法声明并添加元素 //1 先声明创建 List<String> createList new ArrayList<>();//2 逐个添加元素 c…...
Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?
Java 单元测试框架比较:JUnit、TestNG 哪个更适合你? 在 Java 开发领域,单元测试是保证代码质量的重要环节。而选择一个合适的单元测试框架,对于提升测试效率和代码可靠性至关重要。本文将深入比较 JUnit 和 TestNG 这两个主流的…...
变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机
变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机 在工业自动化领域,Profibus DP和Modbus RTU是两种常见的通信协议。Profibus DP广泛应用于工厂自动化,而Modbus RTU则常用于串行通信。当需要将支持Profibus DP的设备(如变频器&a…...
ElasticSearch性能优化
ES基础概念介绍: 索引:类似于MySQL中的表,它是具有相同特征的一个数据集。文档:格式为JSON格式,类似于MySQL中的一条数据,它是数据存储的基本数据单元,每一条文档都有一个唯一的ID。查询&#x…...
pom.xml中的runtime
在 Maven 的 pom.xml 文件中,<scope> 元素可以指定依赖项的作用范围,而 runtime 是其中的一个作用范围值。以下是 runtime 作用范围的含义: 定义:runtime 作用范围表示该依赖项在编译时不需要,但在运行时需要。…...
第一章走进java世界
第一章 走进 java 世界 1.1 java 语言的特点(小面经) 使用简单、高效 去掉了 C 和 C++中的指针和多重继承技术通过垃圾自动回收机制简化了程序内存管理对于数据类型在不同字长的计算机上实现统一字节数占用完全面向对象 抽象、封装、继承、多态自动内存管理(Auto Garbage C…...
tigase源码学习笔记-事件总线EventBus
前言 最近看到了一些tigase关于异步事件解耦的地方的设计,做一个笔记记录一下。什么是事件总线,我自己对于事件总线的理解是,事件总线是一个对事件(Event)进行集中处理的基于发布订阅模式的一种处理机制。个人拙见&am…...
GO语言学习(六)
GO语言学习(六) 各位支持我的友友们我们现在不知不觉的已经进入第六期了,在上一期我们学习了一些简单的HTTP相关知识,还带大家基本的了解了web的深层原理及实现过程,相信大家应该都有自己的收获了,现在我就带领大家学习一下本期的…...
25.5.20学习总结
做题思路 数列分段 Section IIhttps://www.luogu.com.cn/problem/P1182正如题目所说,我们需要得到一个最小的最大段的值,可能有人将注意力放在分段上,事实上,我们更多的应该关注结果。这是一道二分答案的题,你可以先确…...
山东大学软件学院项目实训-基于大模型的模拟面试系统-Vditor编辑器上传图片
Vditor编辑器图片上传功能 使用Vditor进行图片上传时,会返回图片在后端的相对路径,这在前端是无法进行显示的(如下图) 于是为了将图片正常显示,我采取了和头像上传一样的解决方案,使用阿里云图床进行存储…...
在 Kotlin 中,什么是内联函数?有什么作用?
在 Kotlin 中,内联函数是一种通过 inline 关键字声明的函数,其主要目的是优化高阶函数(即以函数作为参数或返回值的函数)的性能。 内联函数的函数体会在编译时直接插入到调用处,从而避免函数调用的开销,并…...
leetcode hot100:四、解题思路大全:滑动窗口(无重复字符的最长子串、找到字符串中所有字母异位词)、子串(和为k的子数组、)
滑动窗口 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 思路 滑动窗口哈希表。 从左到右遍历字符串,以当前字符的下标为右边界,并不断试图往左扩宽左边界。滑动窗口内维护的就是当前字符下标…...
JAVA EE(进阶)_HTML
思如云烟,行若磐石。 ——陳長生. ❀主页:陳長生.-CSDN博客❀ 📕上一篇:JAVA EE(进阶)_进阶的开端-CSDN博客 1.HTML HTML(HyperText Mark…...
【[特殊字符] Vue 3 实现动态加载子组件并缓存状态完整指南】
文章目录 🧩 Vue 3 实现动态加载子组件并缓存状态完整指南💡 需求背景🎯 最终实现效果效果图 🛠️ 技术栈🧱 文件结构示例🔧 实现流程详解1. 定义组件映射关系2. 子组件定义并暴露方法3. 父组件逻辑处理✅ …...
从零开始的抽奖系统创作(2)
我们接着进行抽奖系统的完善。 前面我们完成了 1.结构初始化(统一结果返回之类的,还有包的分类) 2.加密(基于Hutool进行的对称与非对称加密) 3.用户注册 接下来我们先完善一下结构(统一异常处理&#…...
【计算机方向海外优质会议推荐】第二届图像处理、机器学习与模式识别国际学术会议(IPMLP 2025)
重要信息 大会官网:www.ipmlp.net 会议主页【点击参会/投稿/了解会议详情】:第二届图像处理、机器学习与模式识别国际学术会议(IPMLP 2025)_艾思科蓝_学术一站式服务平台 截稿时间:详见官网 接受/拒稿通知:投稿后1…...
进程之IPC通信二
4.共享内存 共享内存是进程间通信一种方式,多个进程共享一段内存,“ 共享内存 ”。由于多个进程共享了同一段内 存,这个段内存既是你的也是我的。也就是你往这个内存里面写入数据,实际上就相当于往我的内存里 面写入数据。比起其…...
打造高效数据处理利器:用Python实现Excel文件智能合并工具
有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析。今天,我想分享一个使用Python开发的小工具,它可以帮助我们轻松实现Excel文件的智能合并。C:\pythoncode\new\xlsx_merger.…...
使用注解动态映射:根据实体List列表动态生成Excel文件
我们一般通过POI来生成对应的Excel文件,绝大多数情况是需要手动编写单元格内容,然后顺序填充值,今天我们将动态根据实体来生成Excel表头,同时自动填充内容。 文章目录 1. 定义注解2. 实体类应用注解3. 动态导出工具类 1. 定义注解…...
【ISP算法精粹】什么是global tone mapping和local tone mapping?
1. 简介 全局色调映射(Global Tone Mapping)和局部色调映射(Local Tone Mapping)是高动态范围(HDR)图像处理中的两种关键技术,用于将高动态范围图像的亮度值映射到标准动态范围(LDR…...
uniapp生成的app,关于跟其他设备通信的支持和限制
以下内容通过AI生成,这里做一下记录。 蓝牙 移动应用(App)通过蓝牙与其他设备通信,是通过分层协作实现的。 一、通信架构分层 应用层(App) 调用操作系统提供的蓝牙API(如Android的BluetoothA…...
C++ Pimpl(Pointer to Implementation)设计思想
一、C Pimpl(Pointer to Implementation)设计思想 1. 核心思想 Pimpl(Pointer to Implementation)是一种通过将类的实现细节隐藏在一个私有指针背后的设计模式,旨在实现接口与实现的解耦。其核心思想是: …...
便捷的Office批量转PDF工具
软件介绍 本文介绍的软件是一款能实现Office批量转换的工具,名为五五Excel word批量转PDF。 软件小巧 这款五五Excel word批量转PDF软件大小不到2M。 操作步骤一 使用该软件时,只需把软件和需要转换的Word或Excel文件放在同一个文件夹里。 操作步骤…...
2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 华顺信安[实习]安全服务工程师 1. 自我介绍 2. 红蓝队经验 3. Shiro漏洞知识体系 4. APP渗透测试方法…...