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

nginx相关面试题30道

一、基础概念与核心特性

1. 什么是 Nginx?它的主要用途有哪些?

答案
Nginx 是一款高性能的开源 Web 服务器、反向代理服务器及负载均衡器,基于事件驱动的异步非阻塞架构,擅长处理高并发场景。
主要用途

  • 静态资源服务(HTML/CSS/JS/ 图片等)
  • 反向代理与负载均衡(分发请求到后端服务器集群)
  • API 网关(处理动态请求转发)
  • 缓存服务(通过proxy_cachefastcgi_cache加速动态内容)
  • 实时消息代理(支持 WebSocket 长连接)
2. Nginx 相比 Apache 的核心优势是什么?

答案

对比维度NginxApache
架构单主进程 + 多 worker 进程(异步非阻塞)多进程 / 线程(同步阻塞,如 prefork/worker)
高并发性能支持数万并发连接,内存占用低并发能力较低,内存占用高
静态资源处理原生高效,无需插件需要mod_static等插件
动态请求处理需配合 FastCGI/Proxy 转发给后端可通过模块(如mod_php)直接处理
配置灵活性基于模块化设计,配置简洁模块化丰富但配置较复杂

解析:Nginx 的异步非阻塞模型(基于 epoll/kqueue)避免了多线程 / 进程的上下文切换开销,适合高并发、低延迟场景;Apache 则在需要复杂模块(如 PHP 解析)时更便捷。

3. 解释 Nginx 的 Master-Worker 进程模型及其作用

答案

  • Master 进程
    • 读取并验证配置文件(nginx.conf
    • 管理 Worker 进程(启动 / 停止 / 重启 / 平滑升级)
    • 监听端口,将请求分发到 Worker 进程
  • Worker 进程
    • 实际处理客户端请求,单进程支持数千并发连接
    • 通过worker_connections控制单个进程最大连接数
    • 多 Worker 进程间通过负载均衡(如轮询)处理请求

优势:Master 负责管理,Worker 专注处理请求,实现资源隔离与高效并发。

4. 什么是反向代理?反向代理与正向代理的区别?

答案

  • 反向代理:位于服务器端,代理后端集群接收客户端请求,隐藏真实服务器地址。例如 Nginx 接收请求后转发到 Tomcat/Node.js 服务器。
  • 正向代理:位于客户端侧,代理客户端向目标服务器发送请求(如浏览器通过代理访问外网)。
    核心区别
  • 反向代理代理的是服务器,客户端不知道真实后端;正向代理代理的是客户端,服务器不知道真实客户端 IP。
5. 简述 Nginx 处理 HTTP 请求的流程

答案

  1. 客户端发送请求到 Nginx 监听端口(如 80/443)。
  2. Master 进程接收请求,分配给某个 Worker 进程。
  3. Worker 进程根据server块和location匹配规则处理请求:
    • 若为静态资源,直接读取文件返回(如root/alias指定路径)。
    • 若为动态请求,通过proxy_pass/fastcgi_pass转发到后端服务器。
  4. 后端服务器处理请求并返回结果,Nginx 将响应返回给客户端(可能经过缓存、压缩等处理)。

二、配置与优化

6. 如何配置 Nginx 监听多个端口?如何指定域名绑定?

答案

server {listen 80;          # 监听80端口listen 443 ssl;     # 监听443端口并启用HTTPSserver_name example.com www.example.com;  # 绑定域名# 配置HTTPS证书ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;
}
7. 如何实现 URL 重写(Rewrite)?举例说明场景

答案
使用rewrite指令结合正则表达式实现重写,场景如:

  • 强制 HTTPS:
    server {listen 80;server_name example.com;rewrite ^(.*)$ https://$server_name$1 permanent;  # 301重定向
    }
    
  • 路径跳转:
    location /old-path/ {rewrite ^/old-path/(.*)$ /new-path/$1 break;  # 内部重写,不返回客户端
    }
    

指令说明permanent(301)、redirect(302)、break(内部跳转)。

8. 如何配置 Nginx 禁止特定 IP 访问?

答案
使用ngx_http_access_module模块:

location / {deny 192.168.1.100;  # 禁止单个IPdeny 192.168.1.0/24; # 禁止IP段allow all;           # 允许其他IP
}
9. 如何优化 Nginx 的静态资源访问性能?

答案

  • 开启sendfile高效传输:
    http {sendfile on;  # 直接通过内核传输文件,减少用户态/内核态拷贝tcp_nopush on; # 合并TCP包,减少网络IO
    }
    
  • 配置缓存头(Cache-Control/Expires):
    location ~* \.(js|css|png|jpg)$ {expires 7d;  # 浏览器缓存7天add_header Cache-Control "public";
    }
    
  • 启用 Gzip 压缩:
    gzip on;
    gzip_types text/css application/javascript;
    
10. 如何限制客户端请求频率(限流)?

答案
使用ngx_http_limit_req_module模块(漏桶算法):

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;  # 按IP限流,每秒1请求server {location / {limit_req zone=one burst=5 nodelay;  # 突发请求允许5个排队}}
}

Nginx 的惊群问题(Thundering Herd Problem)及解决方案

什么是惊群问题?

        当多个进程(如 Nginx 的 Worker 进程)同时监听同一个端口时,若有新的连接请求到达,所有等待该端口的进程会被同时唤醒,但最终只有一个进程能成功处理连接,其他进程会重新进入休眠状态。这种现象称为 惊群效应(Thundering Herd Problem)。
影响:频繁的进程上下文切换会消耗 CPU 资源,降低服务器性能,尤其在高并发场景下更为明显。

Nginx 惊群问题的触发场景

Nginx 使用 Master-Worker 多进程模型

  • Master 进程:负责管理 Worker 进程,监听端口并分配连接。
  • Worker 进程:多个 Worker 进程共同监听 Master 进程打开的端口,等待处理客户端请求。
    在旧版本的 Nginx(或未优化配置时),当新连接到达时,所有 Worker 进程会被唤醒并竞争处理连接,导致惊群效应。
解决方案:利用 SO_REUSEPORT 套接字选项

现代操作系统(如 Linux 3.9+、FreeBSD 10+)支持 SO_REUSEPORT 选项,允许 多个套接字绑定到同一 IP 地址和端口,内核会自动将连接请求分发到不同的 Worker 进程,避免惊群问题。

配置步骤
  1. 在 Nginx 配置中启用 use_reuseport

    worker_processes 4;  # 设置合理的 Worker 进程数(建议等于 CPU 核心数)
    worker_rlimit_nofile 65535;  # 调整文件描述符限制events {worker_connections 1024;  # 每个 Worker 进程的最大连接数use epoll;  # 使用高效的事件驱动模型(Linux 推荐 epoll)multi_accept on;  # 一次尽可能多地接受新连接(可选优化)
    }http {# 在 http 块或 server 块中添加:server {listen 80 reuseport;  # 关键配置:启用 SO_REUSEPORTserver_name example.com;# ... 其他配置}
    }
    
    • listen 80 reuseport:告诉内核使用 SO_REUSEPORT 选项绑定端口,每个 Worker 进程独立监听自己的套接字。
    • worker_processes 需大于 1,否则无需处理惊群问题。
  2. 验证配置生效
    重启 Nginx 后,通过 ss -ltnp | grep nginx 查看端口监听情况,应看到每个 Worker 进程独立监听端口:

    tcp    LISTEN     0      128       :::80                    :::*                   users:(("nginx",pid=1234,fd=6),("nginx",pid=1235,fd=6),("nginx",pid=1236,fd=6),("nginx",pid=1237,fd=6))
    

    每个 Worker 进程对应一个独立的监听套接字(fd=6 是示例文件描述符)。

其他优化:accept_mutex 锁(旧方案)

在不支持 SO_REUSEPORT 的系统中,Nginx 默认通过 accept_mutex 互斥锁 缓解惊群问题:

 
  • 多个 Worker 进程竞争一把锁,只有获得锁的进程才能处理新连接,减少同时唤醒的进程数。
  • 配置示例(默认开启,无需手动设置):
    events {accept_mutex on;  # 启用互斥锁(默认 on)accept_mutex_delay 50ms;  # 锁竞争失败后的等待时间(默认 50ms)
    }
    
    缺点:锁竞争仍会带来一定性能损耗,不如 SO_REUSEPORT 高效。

三、负载均衡与代理

11. Nginx 支持哪些负载均衡算法?如何配置?

答案

  • 轮询(默认):依次分配请求到后端服务器。
    upstream backend {server 192.168.1.1;server 192.168.1.2;
    }
    
  • 权重轮询(weight:按权重分配,适用于性能不均的服务器。
    server 192.168.1.1 weight=3;  # 权重3(默认1)
    
  • IP 哈希(ip_hash:相同 IP 固定访问同一服务器(解决 Session 问题)。
    upstream backend {ip_hash;server 192.168.1.1;
    }
    
  • 最少连接(least_conn:分配给当前连接最少的服务器。
    upstream backend {least_conn;server 192.168.1.1;
    }
    
  • URL 哈希(需自定义模块,如ngx_http_upstream_hash_module:按 URL 哈希值分配。
12. 如何实现后端服务器的健康检查?

答案
使用ngx_http_proxy_moduleproxy_next_upstream指令,配置失败重试:

upstream backend {server 192.168.1.1 max_fails=3 fail_timeout=30s;  # 3次失败则标记为不可用,30s后重试server 192.168.1.2;
}
location / {proxy_pass http://backend;proxy_next_upstream error timeout http_502 http_504;  # 失败时转发到下一台服务器
}

 

13. 反向代理时如何传递客户端真实 IP?

答案
默认 Nginx 传递的X-Forwarded-For可能被多级代理修改,需配置:

location / {proxy_pass http://backend;proxy_set_header X-Real-IP $remote_addr;       # 传递真实客户端IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 保留代理链IP
}
14. 如何配置 Nginx 作为 WebSocket 代理?

答案
需在proxy_pass中设置 WebSocket 协议头:

location /ws/ {proxy_pass http://websocket-server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}
15. 什么是动静分离?如何实现?

答案
动静分离:将静态资源(如图片、JS)与动态请求(如 API)分离处理,静态资源由 Nginx 直接响应,动态请求转发给后端服务器。
实现方式

server {location /static/ {root /var/www/app;  # 直接返回静态文件autoindex on;       # 开启目录浏览(可选)}location /api/ {proxy_pass http://backend-api;  # 转发动态请求}
}

四、高级特性与故障处理

16. 如何配置 Nginx 的 HTTP 缓存(Proxy Cache)?

答案
使用ngx_http_proxy_cache_module模块:

http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;proxy_cache_key $scheme$host$request_uri;  # 缓存键规则server {location / {proxy_pass http://backend;proxy_cache my_cache;          # 启用缓存proxy_cache_valid 200 302 1h;  # 200/302响应缓存1小时proxy_cache_valid 404 1m;      # 404响应缓存1分钟}}
}
17. 常见的 502 Bad Gateway 错误原因及解决方法?

答案
原因

  • 后端服务器宕机或未启动
  • 后端服务请求超时(Nginx 等待后端响应超时)
  • 负载均衡配置错误(如upstream服务器地址错误)
  • 后端服务连接数耗尽

解决方法

  1. 检查后端服务状态(systemctl status tomcat等)。
  2. 调整 Nginx 超时参数:
    proxy_connect_timeout 10s;    # 连接后端超时
    proxy_read_timeout 30s;       # 读取后端响应超时
    
  3. 增加后端服务器节点或优化服务性能。
18. 如何查看 Nginx 的实时并发连接数?

答案

  • 使用nginx -s status(需配置stub_status模块):
    location /status {stub_status on;access_log off;
    }
    
    访问http://your-nginx/status查看:
    Active connections: 123  
    server accepts handled requests  10000 10000 20000  
    Reading: 2 Writing: 50 Waiting: 71  # Waiting为空闲keep-alive连接
    
  • 命令行工具:netstat -ant | grep :80 | wc -l(统计 80 端口连接数)。
19. 如何实现 Nginx 配置的平滑重启?

答案

  • 验证配置正确性:nginx -t
  • 平滑重启(不中断现有连接):
    nginx -s reload  # 重新加载配置
    nginx -s reopen  # 重新打开日志文件
    
  • 原理:Master 进程生成新 Worker 进程,旧 Worker 处理完剩余请求后退出。
20. 如何禁止 Nginx 记录特定 URL 的访问日志?

答案
location中关闭日志记录:

location /static/ {root /var/www/static;access_log off;  # 关闭该路径的访问日志
}

五、扩展与实战

21. 如何为 Nginx 添加自定义模块?

答案

  1. 下载 Nginx 源码并解压:
    wget http://nginx.org/download/nginx-1.24.0.tar.gz
    tar -zxvf nginx-1.24.0.tar.gz
    
  2. 编译时添加模块(以ngx_http_sub_module为例):
    cd nginx-1.24.0
    ./configure --add-module=/path/to/module
    make && make install
    
  3. 重启 Nginx 使模块生效。
22. 如何配置 Nginx 支持 HTTP/2?

答案

  1. 确保编译时启用ngx_http_v2_module(默认开启)。
  2. 配置 HTTPS 并启用 HTTP/2:
    server {listen 443 ssl http2;  # 声明HTTP/2server_name example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;# 其他HTTPS优化配置(如TLS版本、加密算法)
    }
    
23. 如何实现 Nginx 的请求体大小限制?

答案
通过client_max_body_size指令限制(默认 1MB):

http {client_max_body_size 10m;  # 允许最大请求体10MBserver {location /upload/ {client_max_body_size 50m;  # 针对特定路径单独配置}}
}
24. 解释 Nginx 中rootalias的区别

答案

  • root:将请求路径拼接到配置路径后查找文件。
    例:root /var/www; location /static/ → 访问/static/test.js对应文件/var/www/static/test.js
  • alias:直接替换请求路径为配置路径。
    例:alias /var/www/static/; location /static/ → 访问/static/test.js对应文件/var/www/static/test.js
    关键区别alias会覆盖location路径,root则拼接路径;alias后需加 /root无需。
25. 如何配置 Nginx 的跨域资源共享(CORS)?

答案
使用add_header添加 CORS 响应头:

location /api/ {proxy_pass http://backend;add_header Access-Control-Allow-Origin *;         # 允许所有来源add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";add_header Access-Control-Allow-Headers "DNT,User-Agent,Content-Type";if ($request_method = 'OPTIONS') {return 204;  # 处理预检请求}
}

六、性能与安全

26. 如何优化 Nginx 的 SSL/TLS 性能?

答案

  • 启用 TLS 1.3(比 1.2 更快):
    ssl_protocols TLSv1.3 TLSv1.2;
    
  • 选择高效加密算法:
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
    
  • 开启会话缓存(减少握手次数):
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
27. 如何防范 Nginx 的 CC 攻击(分布式请求伪造)?

答案

  • 限制同一 IP 的并发连接数(ngx_http_limit_conn_module):
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    server {location / {limit_conn conn_limit 10;  # 单个IP最多10个连接limit_conn_status 429;     # 超出限制返回429}
    }
    
  • 结合 WAF(如 ModSecurity)或云防护服务。
28. 解释 Nginx 中worker_rlimit_nofile的作用

答案
该指令用于设置 Worker 进程的最大打开文件数,解决 “Too many open files” 错误。

worker_rlimit_nofile 65535;  # 单个Worker进程最多打开65535个文件描述符

场景:高并发场景下,需确保该值大于worker_connections(默认 1024)。

29. 如何实现 Nginx 的请求日志切割?

答案

  • 手动切割
    mv /var/log/nginx/access.log /var/log/nginx/access.log.`date +%Y%m%d`
    kill -USR1 `cat /var/run/nginx.pid`  # 通知Nginx重新生成日志文件
    
  • 自动切割(通过 cron 任务)
    0 0 * * * mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +\%Y\%m\%d) && /usr/sbin/nginx -s reopen
    
30. 简述 Nginx 在微服务架构中的应用场景

答案

  • API 网关:统一入口,处理请求路由、限流、认证。
  • 静态资源服务器:独立部署,减轻后端压力。
  • 服务网格边缘代理:配合 Istio/Linkerd 处理南北向流量。
  • 灰度发布:通过权重轮询或流量镜像实现分批次发布。

0voice · GitHub 

相关文章:

nginx相关面试题30道

一、基础概念与核心特性 1. 什么是 Nginx?它的主要用途有哪些? 答案: Nginx 是一款高性能的开源 Web 服务器、反向代理服务器及负载均衡器,基于事件驱动的异步非阻塞架构,擅长处理高并发场景。 主要用途:…...

java中的Servlet1.x详解

Servlet 1.x 是 Java Web 开发的早期规范,为后续版本奠定了基础。以下是其核心特性、使用方式及与现代版本的对比分析: 一、Servlet 1.x 的核心特性 基础接口与实现 Servlet 1.x 的核心是 javax.servlet.Servlet 接口,开发者必须直接实现其五…...

给大模型“贴膏药”:LoRA微调原理说明书

一、前言:当AI模型开始“叛逆” 某天,我决定教deepseek说方言。 第一次尝试(传统微调): 我:给deepseek灌了100G东北小品数据集,训练三天三夜。结果:AI确实会喊“老铁666”了…但英…...

【数字电路】第七章 脉冲波形的产生与整形电路

一、脉冲波形的产生与整形电路概述 1.矩形脉冲的获得方法 2.矩形脉冲的主要参数 3.本章所涉及的电路 4.稳态与暂稳态 电路的暂稳态实际上是通过RC电路的充放电来实现的。 5.TTL电路输入等效电路 6.TTL电路的输出等效电路 7.CMOS电路的输入等效电路 8.CMOS电路的输出等效电路 …...

React Flow 边的基础知识与示例:从基本属性到代码实例详解

本文为《React Agent:从零开始构建 AI 智能体》专栏系列文章。 专栏地址:https://blog.csdn.net/suiyingy/category_12933485.html。项目地址:https://gitee.com/fgai/react-agent(含完整代码示​例与实战源)。完整介绍…...

DB-MongoDB-00002--Workload Generator for MongoDB

## DB-MongoDB-00002–Workload Generator for MongoDB 1、介绍 Workload Generator for MongoDB was designed to help MongoDB users effortlessly generate data and simulate workloads for both sharded and non-sharded clusters. The generated workloads include s…...

buck变换器的simulink/matlab仿真和python参数设计

什么是Buck电路? BUCK电路是一种降压斩波器,降压变换器输出电压平均值Uo总是小于输出电压UD。通常电感中的电流是否连续,取决于开关频率、滤波电感L和电容C的数值。BUCK也是DC-DC基本拓扑,或者称为电路结构,是最基本的DC-DC电路…...

谷歌地球引擎GEE将多个遥感影像作为多个波段合并成一张图像并下载的方法

本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,下载多年的逐日的ERA5土壤湿度数据,并在下载时,将每年同月份内的每一天的图像作为一个波段加以合并的方法。 在之前的文章GEE谷歌地球引擎批量下载逐日…...

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…...

选择之困:如何挑选合适的 Python 环境与工具——以 Google Colaboratory 为例

引言:选择之困与 Python 的多样性 在过去的十年中,Python 编程语言以其简洁的语法、强大的功能和广泛的适用性迅速崛起,成为全球最受欢迎的编程语言之一。从数据科学到 Web 开发,从自动化脚本到人工智能,Python 无处不在。然而,这种多样性和快速发展也带来了一个显著的问…...

基于Java+MySQL+Servlet的留言系统开发全解析

本系统基于Java Web技术栈开发,采用前后端分离架构,后端通过Servlet实现业务逻辑,前端使用HTML/CSS/JavaScript构建交互界面。本文将详细解析系统设计思路、技术实现与核心代码,助您快速掌握留言系统开发精髓。 一、项目简介 本留…...

实操分享java应用容器化,使用docker作为容器工具

### 一. 目的 将现有的java应用容器化,使用docker作为容器工具。 ### 二. 配置 #### 1. Java应用中的配置 ##### a. Java子项目中的pom文件配置 ```xml <build> <plugins> <plugin> <groupId>org.spring…...

李臻20242817_安全文件传输系统项目报告_第12周

安全文件传输系统项目报告&#xff08;第 9 周&#xff09; 1. 代码链接 Gitee 仓库地址&#xff1a;https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明&#xff1a; project-root/├── src/ # 源代码目录│ ├── main.c # 主程序入口│ ├…...

19-I2C库函数

一、IIC配置流程 IIC配置流程需要添加的库函数&#xff1a;stm32f4xx_i2c.c 1、理解电路原理图 SCL --- PB8 SDA -- PB9 使用I2C1 2、配置I2C库函数的步骤 &#xff08;1&#xff09;使能GPIOB组时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);&#xff08;2…...

minicom串口调试助手

sudo apt-get install minicom 配置 sudo minicom -s 然后用方向键向下移动到“Serial port setup”&#xff0c;回车 按键盘“A”把串口的映射文件名输入。 按键盘“E”可以修改波特率 按键盘“F”把硬件流关闭&#xff0c;否则minicom可能无法接收键盘输入。 配置好后&…...

扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松

各位办公小能手们&#xff01;我跟你们说啊&#xff0c;今天要给你们介绍个超厉害的工具&#xff0c;叫PDFCrossMerge。这玩意儿就像一个神奇的文档小魔法师&#xff0c;专门搞PDF扫描件交叉合并的事儿&#xff0c;能解决单面扫描文件正反面页码顺序的大难题。 先说说它的核心…...

atcoder C - ~

https://atcoder.jp/contests/abc406/tasks/abc406_c 题目简述&#xff1a; 给定一个序列p&#xff0c;让你求出p的所有子序列中波浪形序列的个数 波浪形序列的定义&#xff1a;1&#xff1a;长度>4&#xff1b;2&#xff1a;仅存在一个波峰和波谷&#xff1b;3&#xff1…...

PCB设计实践(十八)PCB设计铜厚选择及分层设计深度解析

PCB铜箔厚度作为电路板设计的核心参数之一&#xff0c;直接影响电路性能、可靠性及成本。本文将从铜厚选择的六大核心要素、多层板分层设计的策略、制造工艺的耦合关系三大维度&#xff0c;系统性解析PCB铜厚设计的工程方法论&#xff0c;并结合典型应用场景提供决策框架。 一、…...

React 19中如何向Vue那样自定义状态和方法暴露给父组件。

文章目录 前言一、什么是 useImperativeHandle&#xff1f;1.1 为什么需要 useImperativeHandle&#xff1f;1.2 基本语法 二、useImperativeHandle 的常见用法3.1 暴露自定义方法3.2子组件封装的弹窗关闭方法暴露给外部 注意点&#xff1a;总结 前言 在 React 的函数组件中&a…...

【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现

【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现 高性能网络学习目录 基础内容&#xff08;两周完成&#xff09;&#xff1a; 2.1网络编程 2.1.1多路复用select/poll/epoll2.1.2事件驱动reactor2.1.3http服务器的实现 2.2网络原理 百万并发PosixAPIQUIC 2.3协程库…...

1.5 MouseDown,MouseUp,LostMouseCapture的先后顺序

本文目标是实现如下功能: 按下一个按钮后置位某变量;鼠标松开后复位某个变量? 看似简单,但是一般来说会存在如下两种现象: 鼠标移出按钮:默认会丢失鼠标事件跟踪,即MouseLeftButtonUp事件并不会被触发。 焦点切换:Tab 键切换焦点会干扰按钮的事件捕获 本文通过几个…...

备战!全国青少年信息素养大赛图形化编程-省赛——求最小公倍数

备战&#xff01;全国青少年信息素养大赛图形化编程-省赛——求最小公倍数 题目可点下方去处&#xff0c;支持在线编程~ 求最小公倍数_scratch_少儿编程题库学习中心-嗨信奥 程序演示可点击下方去处&#xff0c;支持源码和素材获取~ 求最小公倍数-scratch作品-少儿编程题库学习…...

Vue3进行工程化项目,保姆级教学(编译软件:vscode)大部分编译平台适用

目录 1. 创建vue工程 1.1 第一步 1.2 选择名称和工件 1.3 选择语言 1.4 自动下载js 1.5 运行vue工程 1.6 成功页面 2. 更改vue工程安装的位置 3. 更改运行工程方式 第一步 第二步 ​编辑 第三步 调试 ​编辑 运行项目 前面所学都是vue3的基础&#xff0c;为了简…...

通过觅思文档项目实现Obsidian文章浏览器在线访问

觅思文档项目开源地址 觅思文档项目开源地址&#xff1a;https://gitee.com/zmister/MrDoc 觅思文档部署步骤概览 服务器拉取代码&#xff1a; git clone https://gitee.com/zmister/mrdoc-install.git && cd mrdoc-install && chmod x docker-install.sh &a…...

⭐️白嫖的阿里云认证⭐️ 第二弹【课时1:提示词(Prompt)技巧】for 「大模型Clouder认证:利用大模型提升内容生产能力」

「大模型Clouder认证:利用大模型提升内容生产能力」这个认证目前在阿里云认证中心还是免费的,简单几步就可以申请考试,有两次的免费考试机会。而且,这个课程中的内容对于所有普通用户来说都非常实用,课程整体长度也就3节课,非常快速就能学完。心动不如行动,赶紧开始吧!…...

零基础搭建!基于PP-ShiTuV2的轻量级图像识别系统(Docker+API部署指南)

以下是对该图像分类识别系统的的简单介绍&#xff1a; PP-ShiTuV2 是一个由百度飞桨团队发布的实用轻量级通用图像识别系统&#xff0c;由主体检测、特征提取、向量检索三个模块构成&#xff0c;适用于快速构建轻量级、高精度、可落地的图像识别应用image_classification是一个…...

阿克曼-幻宇机器人系列教程4- 建图

在之前的文章中&#xff0c;我们介绍了如何登录机器人&#xff0c;如何实现上位机与下位机之间的互通&#xff0c;还介绍了机器人的topic和message&#xff0c;以及如何通过命令行对topic、message进行对应的操作。 接下来&#xff0c;我们就要运用前面所学的所有知识进行综合…...

【方法论】如何构建金字塔框架

文章目录 一、自上而下法1、5步法2、案例说明&#xff1a;基于自上而下法构建金字塔结构来优化写作逻辑 二、自下而上法1、 自下而上法的“三步走”策略步骤1&#xff1a;列出所有思想要点步骤2&#xff1a;找出逻辑关系&#xff08;因果或共性&#xff09;步骤3&#xff1a;得…...

Ubuntu 18.04设置静态IP的方法(图形化操作)

0 前言 当路由器启用了DHCP功能&#xff0c;每次启动虚拟机下的Ubuntu&#xff08;网络连接模式为桥接模式&#xff09;分配到的IP可能是不一样的&#xff0c;不方便使用和调试&#xff08;例如开发板加载镜像的主机IP地址也要跟着更改&#xff09;。针对这些问题&#xff0c;…...

第12章 Java多线程机制

12.1 进程与线程 4种状态&#xff1a;新建、运行、中断和死亡。 &#xff08;新建、运行、中断和死亡&#xff09; 建立线程的两种方法&#xff1a;用Thread类或其子类。 线程新建后&#xff0c;必须调用 start () 方法使其进入就绪队列&#xff0c;才有机会获得 CPU 资源&a…...

AM32电调学习解读八:无感驱动相位波形解析

这是第八篇&#xff0c;本篇主要是解读换相波形&#xff0c;方便理解代码。 1、无感驱动波形图 1&#xff09;ESC简图 2&#xff09;比较器接线图 灵动微 BLDC 电机方波控制中的反电动势过零检测介绍 - 大大通(简体站) 3&#xff09;未满duty波形 未满duty方便看出是高边驱…...

封装、继承、多态的理解

目录 1、封装 2、继承 3、多态 4、举例&#xff1a;计算机和外设 1、封装 封装是从使用者的角度&#xff0c;将某种复杂的事务&#xff0c;打包成一个整体&#xff0c;只对使用者提供方便使用的方式。 举例&#xff1a; 1> 胶囊&#xff1a;对于各种混合药物的封装 …...

使用vscode做python项目fastapi的开发

准备工作 安装必要软件 Python&#xff1a;确保安装 Python 3.8 或更高版本&#xff08;FastAPI 推荐&#xff09;。下载地址&#xff1a;https://www.python.org/downloads/ 验证安装&#xff1a; bash python --versionVS Code&#xff1a;下载并安装 VS Code&#xff1a;ht…...

多指标组合策略思路

一种基于多种技术指标和日历因素的综合交易策略&#xff0c;旨在通过复杂的条件判断来预测市场的短期走势&#xff0c;并据此进行买卖操作。 策略概述 该策略的核心思想是通过结合多个技术指标和日历因素来判断市场的短期趋势&#xff0c;并在合适的时机进行买入或卖出操作。 具…...

day29 python深入探索类装饰器

目录 一、类装饰器的初步理解 二、类装饰器与函数装饰器的对比 三、类装饰器的实现与应用 &#xff08;一&#xff09;为类添加日志功能 &#xff08;二&#xff09;动态方法绑定的两种方式 四、手动调用装饰器&#xff1a;类的“后天改造” 五、总结与展望 一、类装饰器…...

Rstudio换皮:自定义彩虹括号与缩进线

更换主题 Rstudio还是R语言最好用的IDE&#xff0c;默认的Rstudio已经自带了很多主题&#xff0c;可以自由选择。 更换内置主题 • 操作路径&#xff1a;Tools → Global Options → Appearance 在Editor Theme选项中切换主题&#xff0c;默认使用Textmate主题。RStudio提供…...

基于springboot+vue的车票管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户管理 班次时…...

计算机组成与体系结构:Snooping-Based Protocols(监听式协议)

目录 什么是监听式协议&#xff1f; Snooping 的总线模型 两种写策略&#xff1a;Write Update vs. Write Invalidate 1️⃣ Write-Invalidate&#xff08;写失效&#xff09; 2️⃣ Write-Update&#xff08;写更新&#xff09; &#x1f50d; 操作流程分析 &#x1f5…...

CSS 浮动(Float)及其应用

1. 什么是浮动&#xff08;Float&#xff09;&#xff1f; 浮动元素会脱离正常的文档流&#xff08;Document Flow&#xff09;&#xff0c;并向左或向右移动&#xff0c;直到碰到父元素的边缘或另一个浮动元素。 基本语法 .float-left {float: left; }.float-right {float:…...

离散文本表示

目录 一、离散文本表示的底层逻辑 二、One-hot 编码 &#xff08;一&#xff09;One-hot 编码的精妙机制 &#xff08;二&#xff09;One-hot 编码的优势与局限 三、词袋法&#xff08;Bag of Words&#xff09; &#xff08;一&#xff09;词袋法的核心思想 &#xff08…...

Python异常处理与OOP深度解析及实战案例

**导读&#xff1a;**在现代软件开发中&#xff0c;异常处理与面向对象编程&#xff08;OOP&#xff09;是构建健壮、可维护程序的两大基石。本文深入解析了 Python 中的异常处理机制和 OOP 编程的核心概念&#xff0c;并通过实战案例帮助你掌握这些技术的实际应用。 文章从异常…...

KnowCard:我的知识卡片生成器是怎么炼成的?

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念&#xff1a;我想做个“笔记神器” 有时候&#xff0c;看着笔记本里密密麻麻的学习要点&#xff0c;我…...

JAVA EE(进阶)_进阶的开端

别放弃浸透泪水的昨天&#xff0c;晨光已为明天掀开新篇 ——陳長生. ❀主页&#xff1a;陳長生.-CSDN博客❀ &#x1f4d5;上一篇&#xff1a;JAVA EE_HTTP-CSDN博客 1.什么是Java EE Java EE&#xff08;Java Pla…...

装甲PPT习题

装甲PPT习题 第一章 将 42.195 42.195 42.195&#xff0c; 0.0375551 0.0375551 0.0375551&#xff0c; 8.00033 8.00033 8.00033&#xff0c; 2.71828 2.71828 2.71828 按四舍五入写出上述各数具有四位有效数字的近似数。 考察三位有效数字重力加速度 g g g&#xff0c;若…...

EasyExcel动态表头

专家官方解答 &#xff1a; 在使用EasyExcel处理Excel动态表头的问题时&#xff0c;官方并不推荐使用includecolumnfieldnames方法。根据提供的知识内容&#xff0c;以下是如何实现动态表头的详细步骤和解释&#xff1a; 原因分析 动态表头的需求通常来源于希望根据用户的选…...

LoadBarWorks:一款赛博风加载动画生成器的构建旅程

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 项目缘起&#xff1a;赛博与实用的结合 在日常开发中&#xff0c;我经常需要为不同的项目添加加载动画&#x…...

跨平台多用户环境下PDF表单“序列号生成的服务器端方案“

在PDF表单处理中&#xff0c;经常需要为每个表单生成唯一的序列号或表单编号。当所有表单都在同一台计算机上由同一用户处理时&#xff0c;可以通过JavaScript将编号存储在另一个表单或全局JavaScript数据中来实现。然而&#xff0c;当需要在多台计算机或多个用户环境中使用时&…...

二:操作系统之进程控制块(PCB)

进程的身份证与状态记录&#xff1a;深入理解进程控制块 (PCB) 在我们之前的博客中&#xff0c;我们探讨了进程是什么——程序的一次执行实例&#xff0c;以及进程在其生命周期中会经历的各种状态&#xff08;新建、就绪、运行、等待、终止&#xff09;。我们知道&#xff0c;…...

创建型:原型模式

目录 1、核心思想 2、实现方式 2.1 基本结构 2.2 代码示例&#xff08;Java&#xff09; 3、适用场景 4、new与clone实际场景建议 1、核心思想 目的&#xff1a;通过复制&#xff08;克隆&#xff09;现有对象来创建新对象&#xff0c;而不是通过new关键字实例化。对于那…...

从c++到python

从c到python 前言printprint格式化print按原始格式输出 input变量、常量和数据类型整型和type()浮点型复数字符串类型数据类型转换变量地址 注释关键字容器列表list下标索引常用功能 元组tuple字符串str字符串的成员函数&#xff1a;字符串初始化为几个固定字符字符和int型数据…...