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

【后端高频面试题--Nginx篇】

🚀 作者 :“码上有前”
🚀 文章简介 :后端高频面试题
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
在这里插入图片描述

后端高频面试题--Nginx篇

  • 往期精彩内容
  • 什么是Nginx?为什么要用Nginx?
  • 为什么Nginx性能这么高?
  • Nginx怎么处理请求的?
  • 什么是正向代理和反向代理?
  • Nginx应用场景?
  • Nginx目录结构有哪些?
  • Nginx配置文件nginx.conf有哪些属性模块?
  • 如何用Nginx解决前端跨域问题?
  • Nginx虚拟主机怎么配置?
  • location的作用是什么?
  • 限流怎么做的?
  • 漏桶流算法和令牌桶算法知道?
  • 为什么要做动静分离?
  • Nginx负载均衡的算法怎么实现的?策略有哪些?
  • Nginx配置高可用性怎么配置?
  • Nginx怎么判断别IP不可访问?
  • 怎么限制浏览器访问?
  • Rewrite全局变量是什么?

往期精彩内容

【后端高频面试题–设计模式上篇】
【后端高频面试题–设计模式下篇】
【后端高频面试题–Linux篇】
【后端高频面试题–Nginx篇】
【后端高频面试题–Mybatis篇】
【后端高频面试题–SpringBoot篇】

什么是Nginx?为什么要用Nginx?

Nginx(发音为"engine-x")是一个开源的高性能、轻量级的Web服务器和反向代理服务器。它具有出色的并发处理能力和低内存消耗,广泛应用于构建高性能的Web应用和提供反向代理服务。

以下是使用Nginx的一些原因:

  1. 高性能和并发处理能力:Nginx采用了异步非阻塞的事件驱动架构,能够高效处理大量的并发连接。它的内部设计使其能够轻松处理高负载和大规模并发请求,同时保持低的资源消耗。

  2. 反向代理和负载均衡:Nginx作为反向代理服务器,可以将请求转发给多个后端服务器,实现负载均衡和提高系统的可靠性和可扩展性。它还支持动态的负载均衡算法和健康检查,使得请求能够被智能地分发到可用的后端服务器上。

  3. 静态文件服务和缓存加速:Nginx可以高效地提供静态文件服务,如HTML、CSS、JavaScript、图像等。它支持内置的缓存功能,可以缓存静态文件并在后续请求中直接返回,减轻后端服务器的负载,并提供更快的响应速度。

  4. URL重写和反向代理缓存:Nginx具有强大的URL重写和反向代理缓存功能,可以根据规则修改URL结构、重定向请求,并缓存响应结果。这些功能可用于优化网站的SEO、提高用户体验和减少后端服务器的负载。

  5. SSL/TLS支持:Nginx可以配置和管理SSL/TLS证书,提供加密和安全的通信。它支持多种加密协议和密码套件,并可以进行强大的安全性配置,保护网站和应用程序免受恶意攻击和数据泄露。

  6. 灵活的模块化架构:Nginx具有模块化的架构,可以通过加载不同的模块来扩展其功能。它支持HTTP、TCP和UDP等多种协议,可以通过添加第三方模块来满足特定需求,如缓存加速、安全性增强、日志记录等。

总之,Nginx是一个高性能、可靠和灵活的Web服务器和反向代理服务器。它的轻量级设计和强大的功能使得它成为构建高性能Web应用和提供负载均衡、缓存加速、安全性保护等服务的理想选择。
Nginx(发音为"engine-x")是一个开源的高性能、轻量级的Web服务器和反向代理服务器。它具有出色的并发处理能力和低内存消耗,广泛应用于构建高性能的Web应用和提供反向代理服务。

以下是使用Nginx的一些原因:

  1. 高性能和并发处理能力:Nginx采用了异步非阻塞的事件驱动架构,能够高效处理大量的并发连接。它的内部设计使其能够轻松处理高负载和大规模并发请求,同时保持低的资源消耗。

  2. 反向代理和负载均衡:Nginx作为反向代理服务器,可以将请求转发给多个后端服务器,实现负载均衡和提高系统的可靠性和可扩展性。它还支持动态的负载均衡算法和健康检查,使得请求能够被智能地分发到可用的后端服务器上。

  3. 静态文件服务和缓存加速:Nginx可以高效地提供静态文件服务,如HTML、CSS、JavaScript、图像等。它支持内置的缓存功能,可以缓存静态文件并在后续请求中直接返回,减轻后端服务器的负载,并提供更快的响应速度。

  4. URL重写和反向代理缓存:Nginx具有强大的URL重写和反向代理缓存功能,可以根据规则修改URL结构、重定向请求,并缓存响应结果。这些功能可用于优化网站的SEO、提高用户体验和减少后端服务器的负载。

  5. SSL/TLS支持:Nginx可以配置和管理SSL/TLS证书,提供加密和安全的通信。它支持多种加密协议和密码套件,并可以进行强大的安全性配置,保护网站和应用程序免受恶意攻击和数据泄露。

  6. 灵活的模块化架构:Nginx具有模块化的架构,可以通过加载不同的模块来扩展其功能。它支持HTTP、TCP和UDP等多种协议,可以通过添加第三方模块来满足特定需求,如缓存加速、安全性增强、日志记录等。

总之,Nginx是一个高性能、可靠和灵活的Web服务器和反向代理服务器。它的轻量级设计和强大的功能使得它成为构建高性能Web应用和提供负载均衡、缓存加速、安全性保护等服务的理想选择。

为什么Nginx性能这么高?

Nginx之所以拥有高性能,主要归功于以下几个原因:

  1. 异步非阻塞事件驱动架构:Nginx采用了异步非阻塞的事件驱动架构,即使用少量的线程或进程来处理大量的并发连接。它使用事件驱动的方式,通过监听和响应事件来处理请求,而不是为每个连接创建一个线程或进程。这种架构避免了线程或进程切换的开销,大大降低了系统资源的消耗,并能够高效地处理大量的并发请求。

  2. 内存使用效率高:Nginx在设计上采用了较小的内存占用,非常节省内存资源。相比于传统的基于进程的Web服务器,Nginx使用的内存更少,因为它共享一些数据结构,如缓冲区和连接池,以减少重复的内存分配和释放操作。这使得Nginx能够在相同的硬件资源下处理更多的并发连接。

  3. 高效的事件处理机制:Nginx使用事件驱动的方式来处理请求和响应,它使用高效的事件模型(如epoll、kqueue等)来实现事件的监听和分发。这种机制使得Nginx能够高效地管理和处理大量的并发连接,并且能够实时响应事件,而不需要耗费额外的资源。

  4. 精简的核心功能:Nginx的设计理念是专注于处理Web请求和提供反向代理服务,它的核心功能相对精简。相比于一些功能复杂的Web服务器,Nginx的核心代码量较小,这使得它更容易理解、维护和优化。同时,精简的设计也减少了不必要的开销,提高了性能。

  5. 高效的缓存和负载均衡:Nginx具有内置的缓存和负载均衡功能,可以缓存静态文件和动态内容,并智能地将请求分发到多个后端服务器。缓存和负载均衡的机制减轻了后端服务器的负载,并提供了更快的响应速度,从而提高了整体的性能和可靠性。

综上所述,Nginx通过采用异步非阻塞事件驱动架构、高效的内存管理、优化的事件处理机制、精简的核心功能以及内置的缓存和负载均衡等特性,实现了出色的性能。它能够高效地处理大量的并发请求,同时保持低的资源消耗,适用于构建高性能的Web应用和提供反向代理服务。

Nginx怎么处理请求的?

Nginx使用事件驱动的方式来处理请求。下面是Nginx处理请求的基本流程:

  1. 监听端口:Nginx会在配置文件中指定监听的端口,例如80端口用于HTTP请求。当Nginx启动时,它会创建一个主进程,该进程负责监听指定的端口,等待客户端的连接请求。

  2. 接收连接:当客户端发起连接请求时,操作系统会将请求传递给Nginx所在的主进程。Nginx的主进程通过系统调用(如accept)接受客户端的连接,并将连接分配给一个工作进程(或线程)。

  3. 处理请求:工作进程接收到连接后,会处理客户端发送的请求。Nginx使用事件驱动的方式来处理请求,它通过监听和分发事件来实现高效的请求处理。工作进程会从事件模型中获取到需要处理的事件,例如接收到新的请求、读取请求内容、向后端服务器转发请求等。

  4. 执行模块处理:Nginx的请求处理过程由一系列模块组成,每个模块负责不同的功能。例如,HTTP模块处理HTTP请求,SSL模块负责处理SSL/TLS加密等。工作进程会根据请求的类型和配置,将请求交给相应的模块进行处理。这些模块可以是Nginx内置的模块,也可以是自定义的第三方模块。

  5. 处理后端服务器通信:在一些场景下,Nginx需要与后端服务器进行通信,例如反向代理和负载均衡。工作进程会将请求转发给后端服务器,接收后端服务器的响应,并将响应返回给客户端。

  6. 返回响应:在请求处理完成后,Nginx会构建响应并将其返回给客户端。响应可以包括HTTP状态码、响应头、响应体等信息。Nginx会将响应发送给客户端,完成请求的处理过程。

  7. 保持持久连接(可选):Nginx支持持久连接,即在一个连接上可以处理多个请求。在保持持久连接的情况下,Nginx会继续监听客户端发送的请求,并重复执行上述的处理流程,直到连接被关闭或超时。

需要注意的是,Nginx的事件驱动处理方式使得它能够高效地处理大量的并发连接,而不需要为每个连接创建一个线程或进程。这使得Nginx在性能和资源消耗方面具有优势,并能够处理高负载的请求场景。

什么是正向代理和反向代理?

正向代理和反向代理是两种常见的代理服务器配置方式,用于在客户端和服务器之间进行请求和响应的转发。它们的区别在于代理服务器的位置和作用。

  1. 正向代理(Forward Proxy):
    正向代理是位于客户端和目标服务器之间的代理服务器。当客户端发起请求时,请求首先发送给正向代理服务器,然后由代理服务器转发请求给目标服务器。目标服务器将响应发送给代理服务器,再由代理服务器将响应返回给客户端。

正向代理的作用是代表客户端发起请求,隐藏客户端的真实身份和位置。客户端可以通过正向代理来访问那些对于客户端而言无法直接访问的资源,如跨越防火墙或访问被限制的网站。此外,正向代理还可以缓存响应、加密通信、提供访问控制等功能。

举个例子:当你在公司使用代理服务器来访问互联网时,代理服务器充当正向代理,将你的请求转发给互联网上的目标服务器,并将响应返回给你。

  1. 反向代理(Reverse Proxy):
    反向代理是位于服务器端和目标服务器之间的代理服务器。当客户端发起请求时,请求首先发送给反向代理服务器,然后由代理服务器根据一定的规则将请求转发给后端的目标服务器。目标服务器处理请求并将响应发送回代理服务器,再由代理服务器将响应返回给客户端。

反向代理的作用是代表服务器处理请求,隐藏服务器的真实身份和位置。它可以提供负载均衡和高可用性的功能,根据请求的负载情况将请求分发到多个后端服务器上,从而提高系统的性能和可靠性。此外,反向代理还可以进行缓存、SSL/TLS终结、安全过滤等操作。

举个例子:当你访问一个网站时,你实际上是向反向代理服务器发送请求,代理服务器根据负载均衡策略将请求转发给多个后端服务器中的一个,然后将后端服务器返回的响应返回给你。

总结来说,正向代理位于客户端和目标服务器之间,代表客户端发起请求;而反向代理位于服务器端和目标服务器之间,代表服务器处理请求。它们的作用和位置不同,用于不同的代理场景。

Nginx应用场景?

Nginx在许多不同的应用场景中都得到了广泛的应用,以下是一些常见的应用场景:

  1. Web服务器:Nginx作为高性能的Web服务器,可以用于提供静态内容的快速响应。它可以处理并发连接和高流量负载,适用于大规模的Web应用程序。

  2. 反向代理和负载均衡:Nginx作为反向代理服务器,可以将客户端请求分发给多个后端服务器,实现负载均衡和高可用性。它可以平衡服务器负载,提高系统的性能和可靠性。

  3. 缓存服务器:Nginx可以作为缓存服务器,缓存静态资源或动态内容的响应结果。通过缓存,可以减轻后端服务器的负载,提高响应速度和网络带宽利用率。

  4. SSL/TLS终结:Nginx可以扮演SSL/TLS连接的终结点,与客户端建立安全的加密连接,并将请求转发给后端服务器。这样可以减轻后端服务器的计算压力,提高系统的安全性和性能。

  5. API网关:Nginx可以用作API网关,将客户端请求转发给不同的后端服务或微服务。它可以进行请求转发、负载均衡、认证授权、限流等操作,提供统一的API访问入口。

  6. 静态文件服务器:Nginx可以快速、高效地提供静态文件的访问,如图片、CSS和JavaScript文件等。通过Nginx,可以高效地传输和分发静态文件。

  7. WebSocket代理:Nginx可以作为WebSocket代理,支持WebSocket协议的双向通信。它可以转发WebSocket请求和响应,实现实时通信应用程序。

  8. CDN加速:结合Nginx的反向代理和缓存功能,可以构建内容分发网络(CDN),加速静态资源的传输和分发,提升用户体验。

这些只是Nginx的一些常见应用场景,实际上,由于其灵活的配置和模块化的设计,Nginx可以适用于许多其他的定制化场景和需求。

Nginx目录结构有哪些?

Nginx的目录结构可以根据不同的操作系统和安装方式有所变化,但通常情况下,Nginx的典型目录结构包括以下几个重要的目录和文件:

  1. /etc/nginx/:该目录是Nginx的主要配置目录,包含了Nginx的主配置文件以及其他的配置文件。常见的文件包括:

    • nginx.conf:Nginx的主配置文件,包含全局配置和主要的服务器配置。
    • conf.d/:该目录用于存放其他的配置文件,可以在主配置文件中通过include指令引入。
    • sites-available/sites-enabled/:这两个目录用于存放虚拟主机配置文件。在一些Linux发行版中,Nginx使用这种方式管理虚拟主机配置。
  2. /usr/share/nginx/:该目录通常用于存放Nginx的静态资源文件,如HTML、CSS、JavaScript文件等。

  3. /var/log/nginx/:该目录包含Nginx的日志文件,记录了Nginx的运行日志和访问日志。常见的日志文件包括:

    • error.log:记录Nginx的错误日志。
    • access.log:记录Nginx的访问日志,包括客户端请求的详细信息。
  4. /var/www/或其他自定义的Web根目录:该目录通常用于存放Web应用程序的文件,如网站的HTML文件、图片、脚本文件等。Nginx将其作为默认的Web根目录。

注意:上述目录结构是一种常见的设置,具体的目录结构可能因为操作系统和安装方式的不同而有所变化。在安装和配置Nginx时,建议参考相关的文档和指南,以确保正确的目录结构和配置文件位置。

Nginx配置文件nginx.conf有哪些属性模块?

Nginx的主配置文件nginx.conf包含了一些重要的属性模块,用于配置Nginx的全局设置、HTTP模块、事件模块等。以下是一些常见的属性模块:

  1. user:指定Nginx工作进程的操作系统用户和用户组。

  2. worker_processes:指定Nginx工作进程的数量。

  3. pid:指定Nginx主进程的PID文件路径。

  4. error_log:指定Nginx的错误日志文件路径。

  5. events:配置Nginx的事件模块相关参数,如工作进程的连接数、连接超时等。

  6. http:配置Nginx的HTTP模块相关参数,如服务器监听的端口、默认的服务器设置等。

  7. include:用于引入其他的配置文件,可以将一些配置项分散到不同的文件中进行管理。

  8. server:配置HTTP服务器的虚拟主机,可以指定监听的域名、端口、SSL证书等。

  9. location:配置请求的匹配规则和处理方式,如转发代理、缓存控制、静态文件处理等。

除了上述常见的属性模块外,Nginx还支持许多其他的模块和指令,用于扩展和定制Nginx的功能,如SSL/TLS模块、反向代理模块、负载均衡模块、缓存模块等。这些模块可以根据需求进行配置和加载,以满足特定的应用场景和需求。

请注意,nginx.conf文件中的配置项和模块可能会因不同的Nginx版本和编译选项而有所差异。建议查阅Nginx的官方文档或相关的文档资源,以获取最新的配置指南和模块说明。

如何用Nginx解决前端跨域问题?

Nginx可以通过配置来解决前端的跨域问题。下面是一种使用Nginx解决跨域问题的常见方法:

  1. 打开Nginx的配置文件(通常是nginx.conf)。

  2. http模块下添加以下配置,用于设置响应头信息,允许跨域访问:

http {...server {...location / {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain charset=UTF-8';add_header 'Content-Length' 0;return 204;}...}...}...
}

上述配置中,Access-Control-Allow-Origin设置为*表示允许来自任意域的跨域请求。如果你希望只允许特定的域名进行跨域访问,可以将*更改为相应的域名。

Access-Control-Allow-Methods指定允许的HTTP方法。

Access-Control-Allow-Headers指定允许的请求头。

Access-Control-Expose-Headers指定允许客户端访问的响应头。

上述配置还包含了对OPTIONS请求的处理,OPTIONS请求通常是浏览器在发起跨域请求之前发送的预检请求。Nginx在这里返回了相应的头信息,允许该请求通过。

  1. 保存配置文件并重新启动或重载Nginx服务,使配置生效。

通过以上配置,Nginx会在响应中添加相应的跨域头信息,以允许前端跨域访问。请注意,这种方式会将所有请求的响应头中添加跨域相关的信息,因此在生产环境中,你可能需要根据实际需求进行更加细粒度的配置。

此外,如果你的应用程序有特殊的跨域需求,你也可以通过Nginx的其他模块和指令进行更复杂的跨域配置,例如使用proxy_pass实现反向代理等。具体的配置取决于你的应用程序和需求。

Nginx虚拟主机怎么配置?

在Nginx中,可以通过配置虚拟主机(Virtual Hosts)来为多个域名或IP地址提供不同的网站服务。以下是配置Nginx虚拟主机的一般步骤:

  1. 打开Nginx的配置文件(通常是nginx.conf)。

  2. http模块中,找到或创建一个server块,用于配置虚拟主机。

http {...server {listen 80;  # 监听端口号,可以根据需要修改server_name example.com;  # 域名或IP地址,可以根据需要修改location / {# 虚拟主机的具体配置}}...
}
  1. server块中配置listen指令来指定虚拟主机监听的端口号。可以根据需要修改端口号。

  2. 使用server_name指令来指定虚拟主机的域名或IP地址。可以使用具体的域名,如example.com,或者通配符,如*.example.com,以匹配多个子域名。

  3. location块中配置虚拟主机的具体内容和行为。根据需求,可以配置代理转发、静态文件处理、缓存控制等。

  4. 可以在同一个配置文件中配置多个虚拟主机,每个虚拟主机使用不同的server块进行定义。

  5. 保存配置文件并重新启动或重载Nginx服务,使配置生效。

通过上述配置,Nginx可以根据请求的域名或IP地址将请求分发到对应的虚拟主机上进行处理。你可以根据具体的需求和场景,配置不同的虚拟主机,为多个域名或IP地址提供定制化的网站服务。

请注意,虚拟主机的配置可能会因具体的需求而有所不同。例如,如果需要启用SSL/TLS加密,需要配置SSL证书和相关的指令。如果使用代理转发,还需要配置proxy_pass等相关指令。建议查阅Nginx的官方文档或相关的文档资源,以获取更详细的配置指南和示例。

location的作用是什么?

在Nginx配置中,location指令用于匹配请求的URL路径,并定义对该路径的具体处理方式。location指令可以在server块内部或者http块内部使用,用于配置不同URL路径的处理规则。

location指令的作用如下:

  1. 请求匹配:location指令根据请求的URL路径进行匹配。可以使用精确匹配、前缀匹配、正则表达式匹配等方式进行匹配。

  2. 请求处理:一旦请求的URL路径与某个location指令的匹配条件相符,Nginx将按照该location指令中定义的规则对请求进行处理。

  3. 处理方式:location块内部可以配置各种指令和模块,以定义请求的处理方式。例如,可以配置代理转发、静态文件处理、缓存控制、重定向等。

下面是一些常见的location指令的匹配规则:

  • 精确匹配:location = /path,完全匹配请求路径为/path
  • 前缀匹配:location /path/,匹配以/path/开头的所有请求路径。
  • 正则匹配:location ~* \.(jpg|png|gif)$,使用正则表达式匹配所有以.jpg.png.gif结尾的请求路径。

以下是一个示例,演示如何使用location指令进行静态文件处理:

location /static/ {root /path/to/static/files;index index.html;
}location /images/ {alias /path/to/image/files/;autoindex on;
}

在上述示例中:

  • 当请求的URL路径以/static/开头时,Nginx会从/path/to/static/files目录中查找对应的文件,并返回给客户端。同时,如果请求的URL路径是一个目录,Nginx会尝试返回index.html文件。
  • 当请求的URL路径以/images/开头时,Nginx会将/path/to/image/files/目录下的文件作为静态文件直接返回给客户端。同时,如果启用了autoindex指令,Nginx还会生成目录索引。

通过合理配置location指令,可以实现对不同URL路径的灵活处理和定制化行为,如代理转发、缓存控制、URL重写等。请注意,location指令的匹配顺序是按照配置文件中定义的顺序进行匹配的,因此需要特别注意匹配规则的顺序和优先级。

限流怎么做的?

在Nginx中,可以使用限流(Rate Limiting)来限制对服务器的请求流量,以防止过多的请求对服务器造成过载。以下是一种常见的限流方法,使用Nginx的limit_req模块进行配置:

  1. 打开Nginx的配置文件(通常是nginx.conf)。

  2. 在需要进行限流的location块内部,添加limit_req指令来配置限流规则。

http {...server {...location /api/ {limit_req zone=api_limit burst=10 nodelay;# 其他的请求处理配置}}
}

在上述示例中,我们在location /api/location块中配置了限流规则。

  1. 使用limit_req指令来指定限流规则的参数。
  • zone参数:指定一个共享内存区域,用于存储请求计数器和限流状态。可以在http块中使用limit_req_zone指令来定义共享内存区域。
http {...limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;server {...location /api/ {limit_req zone=api_limit burst=10 nodelay;# 其他的请求处理配置}}
}

在上述示例中,我们使用limit_req_zone指令定义了一个名为api_limit的共享内存区域,大小为10MB,每秒允许10个请求。

  • burst参数:指定允许的请求突发数量。当超过该数量时,请求会被暂时延迟处理。

  • nodelay参数:指定是否立即处理达到限流条件的请求。如果设置为nodelay,请求会立即返回429 Too Many Requests响应;如果不设置或设置为其他值,请求会被暂时延迟处理。

通过以上配置,Nginx会根据limit_req指令中定义的限流规则,对匹配到的请求进行限流。当请求超过限制时,Nginx会根据配置的行为,暂时延迟请求处理或直接返回429 Too Many Requests响应。

请注意,限流规则的具体配置可以根据需求进行调整。可以通过调整zone参数、burst参数和nodelay参数,来满足特定的限流需求。

此外,Nginx还提供其他的限流模块和方法,如limit_conn模块用于限制连接数,ngx_http_limit_req_module模块用于更复杂的限流需求。具体的配置和使用方法可以参考Nginx的官方文档或相关的文档资源。

漏桶流算法和令牌桶算法知道?

是的,我了解漏桶算法(Leaky Bucket Algorithm)和令牌桶算法(Token Bucket Algorithm),它们是常用的流量控制算法。

漏桶算法是一种固定速率的流量控制算法。它的工作原理类似于一个物理上的漏桶,请求以固定的速率进入漏桶,如果漏桶已满,则溢出的请求会被丢弃或延迟处理。漏桶算法通过平滑处理请求的到达速率,使得处理请求的服务端可以以固定的速率进行处理,从而实现对请求流量的控制和平滑。

令牌桶算法也是一种固定速率的流量控制算法。它的工作原理是维护一个令牌桶,每个令牌代表一个可以被处理的请求。在固定的时间间隔内,令牌桶会以固定的速率往里面添加令牌。当请求到达时,如果令牌桶中有足够的令牌,则请求被允许通过并扣除相应数量的令牌;如果令牌桶中没有足够的令牌,则请求被暂时阻塞或丢弃。令牌桶算法通过控制令牌的发放速率和令牌桶的容量,以及请求消耗令牌的速率,实现对请求流量的控制和平滑。

漏桶算法和令牌桶算法都可以用于限制请求的到达速率,并保护服务端免受突发流量的影响。它们在网络流量控制、请求队列管理和防止服务雪崩等场景中广泛应用。

需要注意的是,漏桶算法和令牌桶算法在实现细节和使用上可能存在一些差异,具体的算法实现和配置方式可能会因不同的系统和应用而有所不同。在实际应用中,选择合适的算法取决于具体的需求和情况。

为什么要做动静分离?

动静分离(Dynamic-Static Content Separation)是一种将动态内容和静态内容分开处理的技术策略。在Web应用程序中,动态内容通常是由应用服务器动态生成的,而静态内容则是指那些不需要动态生成的静态文件,如HTML、CSS、JavaScript、图片等。

以下是动静分离的几个主要原因和优势:

  1. 提高性能:静态内容通常具有较高的访问频率,而且相对较小,因此将静态内容与动态内容分开存储和处理可以提高系统的性能。通过将静态内容存储在专门的静态资源服务器上,可以减轻应用服务器的负载,提高请求的响应速度和吞吐量。

  2. 减轻服务器压力:动态内容的生成通常需要较多的计算和数据库访问等操作,而静态内容则可以直接从静态资源服务器上获取,无需经过应用服务器的处理。通过将静态内容与动态内容分离,可以减轻应用服务器的压力,提高系统的稳定性和可靠性。

  3. 简化部署和维护:动静分离可以使系统的架构更加灵活,提供更好的扩展性和可维护性。静态资源可以被缓存和分发到CDN(内容分发网络)等边缘节点,从而降低了网络延迟,并提供了更好的可用性和可扩展性。同时,由于静态资源的变化较少,可以更简单地进行版本管理、更新和部署。

  4. 优化用户体验:静态资源的分离和缓存可以提供更好的用户体验。静态资源可以通过浏览器缓存,减少重复请求和带宽消耗,加快页面加载速度。此外,通过将静态资源存储在不同地理位置的CDN节点上,可以提供更近距离的访问,减少网络延迟,提高用户的访问速度和体验。

总结来说,动静分离可以提高系统的性能、可靠性和可维护性,同时优化用户的访问体验。通过将静态内容与动态内容分开处理,并采用适当的缓存和分发策略,可以更好地利用系统资源,提供更高效和可扩展的Web服务。

Nginx负载均衡的算法怎么实现的?策略有哪些?

Nginx作为一种常见的反向代理服务器,提供了多种负载均衡算法,用于分发客户端请求到后端的多个服务器。以下是Nginx负载均衡算法的实现方式和一些常见的策略:

  1. 轮询(Round Robin):这是最常用的负载均衡算法,默认情况下使用。Nginx按照请求的顺序依次将请求分发给后端服务器,实现了请求的平均分配。

  2. IP哈希(IP Hash):基于客户端的IP地址进行哈希计算,将同一IP的请求始终分发到同一台后端服务器,可以实现会话保持和缓存利用。

  3. 最少连接(Least Connections):Nginx根据后端服务器当前的连接数,将请求发送到连接数最少的服务器上,以实现负载均衡和动态调度。

  4. 加权轮询(Weighted Round Robin):在轮询算法的基础上,为每个后端服务器分配一个权重值,根据权重值的比例分发请求,以实现不同服务器的负载均衡。

  5. 加权最少连接(Weighted Least Connections):类似于最少连接算法,但考虑了服务器的权重值,将请求发送到连接数最少且权重值高的服务器上,实现更精细的负载均衡。

  6. 随机(Random):随机选择一个后端服务器来处理请求,实现简单的负载均衡。

以上是一些常见的Nginx负载均衡策略。在Nginx配置文件中,可以使用upstream指令来定义后端服务器组,并使用server指令来指定每个服务器的地址和负载均衡算法。例如,以下是一个使用轮询算法的负载均衡配置示例:

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;}}
}

在上述示例中,定义了名为backend的后端服务器组,包含了3个后端服务器。然后通过proxy_pass指令将请求代理到backend组,Nginx会根据默认的轮询算法将请求分发给后端服务器。

根据实际需求和系统架构,可以选择合适的负载均衡算法来实现负载均衡。Nginx的负载均衡算法具有灵活性和可配置性,可以根据实际情况进行调整和定制。

Nginx配置高可用性怎么配置?

要配置Nginx以实现高可用性,可以采用以下几个关键步骤:

  1. 使用Nginx作为反向代理:将Nginx配置为反向代理服务器,将客户端请求转发到后端的多个应用服务器。这样可以实现负载均衡和故障转移。

  2. 配置健康检查:使用Nginx的健康检查功能来监测后端服务器的可用性。通过定期发送请求并检查响应状态码来确定服务器是否正常工作。如果某个服务器不可用,Nginx会将其从负载均衡池中暂时移除,确保请求不会被发送到故障的服务器上。

  3. 使用负载均衡策略:选择适当的负载均衡策略来分发请求。如前面所提到的轮询、IP哈希、最少连接等策略。这些策略可以根据实际需求和系统配置进行选择和配置。

  4. 配置健康检查和负载均衡的超时设置:合理设置Nginx的健康检查超时时间和负载均衡的超时时间。这可以确保在合理时间内检测到故障或超时的服务器,并进行相应的处理,以保持服务的高可用性。

  5. 使用多个Nginx实例:可以在不同的服务器上运行多个Nginx实例,以实现高可用性。通过使用主-从模式或者集群模式,确保即使其中一个Nginx实例出现故障,其他实例可以接管请求并继续提供服务。

  6. 配置故障转移和故障恢复:可以使用其他工具或技术,如主-从复制、心跳检测、Keepalived等,来实现Nginx的故障转移和故障恢复。这些工具可以自动检测故障,并将请求传递给备份服务器,以确保服务的连续性。

  7. 日志和监控:定期监控Nginx服务器的性能和状态,以及后端应用服务器的健康状况。同时,记录和分析日志,以便及时发现和解决潜在的问题,确保高可用性的持续性。

总结来说,为了实现Nginx的高可用性,需要使用负载均衡、健康检查、故障转移和监控等技术手段。通过合理配置和使用相关工具,可以确保Nginx服务的可用性和稳定性,提供高质量的服务。

Nginx怎么判断别IP不可访问?

在Nginx中,可以使用以下几种方式来判断某个IP是否不可访问:

  1. 使用allowdeny指令:Nginx提供了allowdeny指令,可以在配置文件中设置访问控制规则。通过在httpserverlocation块中配置allowdeny指令,可以限制或允许特定的IP地址或IP地址范围进行访问。

    例如,以下配置将拒绝IP地址为192.168.0.1的客户端访问:

    http {server {location / {deny 192.168.0.1;...}}
    }
    
  2. 使用geo模块:Nginx的geo模块可以用于根据IP地址设置变量,并根据这些变量进行访问控制。可以在配置文件中定义IP地址列表,然后使用geo模块将请求的IP地址与列表进行匹配,从而判断是否允许访问。

    例如,以下配置将定义一个名为blocked_ips的IP地址列表,并拒绝列表中的IP地址进行访问:

    http {geo $blocked_ip {default 0;192.168.0.1/32 1;  # 设置拒绝访问的IP地址...}server {location / {if ($blocked_ip) {return 403;}...}}
    }
    
  3. 使用第三方模块:Nginx还有一些第三方模块,如ngx_http_limit_req_modulengx_http_limit_conn_module,可以根据IP地址限制请求的速率或连接数量。这些模块可以用于限制来自特定IP地址的请求,以保护服务器免受恶意请求的影响。

需要注意的是,配置Nginx的访问控制规则时,应谨慎操作,确保设置正确的规则,并避免出现配置错误导致误拦截合法请求或漏掉恶意请求的情况。在进行访问控制时,最好进行测试和验证,确保规则按预期工作。

怎么限制浏览器访问?

要限制浏览器访问,可以使用以下方法:

  1. User-Agent 字符串匹配:浏览器在发送请求时会在 HTTP 头部中包含 User-Agent 字段,该字段包含了浏览器的标识信息。您可以使用 Nginx 的 map 指令和 if 指令来根据 User-Agent 字符串进行匹配和限制。

    例如,以下配置将阻止来自 Internet Explorer 6 的浏览器访问:

    http {map $http_user_agent $block_ie6 {default       0;~MSIE 6       1;}server {location / {if ($block_ie6) {return 403;}...}}
    }
    
  2. JavaScript 或 Cookie 检测:您可以在 Nginx 中使用 JavaScript 或 Cookie 检测来判断浏览器是否符合特定条件。这可以通过使用 Nginx 的 ngx_http_js_module 模块或 ngx_http_cookie_module 模块来实现。

    例如,以下示例使用 JavaScript 检测来限制仅允许具有特定条件的浏览器访问:

    http {server {location / {js_set $allowed_browser '0';js_content allowed_browser.js;if ($allowed_browser = '0') {return 403;}...}}
    }
    

    allowed_browser.js 文件中,您可以编写 JavaScript 代码来检测浏览器的特定特征,并将结果赋给 $allowed_browser 变量。

  3. 第三方模块:Nginx 提供了许多第三方模块,如 ngx_http_browser_modulengx_http_user_agent_module,可以根据浏览器的特征进行匹配和限制。这些模块可以用于根据浏览器的类型、版本或其他属性来限制访问。

    例如,以下示例使用 ngx_http_browser_module 模块来限制 Internet Explorer 浏览器的访问:

    http {browser default modern;server {location / {browser MSIE;if ($ancient_browser) {return 403;}...}}
    }
    

    在上述配置中,browser 指令将 Internet Explorer 浏览器定义为 $ancient_browser 变量,然后可以使用 if 指令根据该变量进行访问限制。

以上是一些方法可用于限制浏览器访问。根据实际需求和系统配置,您可以选择适合的方法,并根据需要进行定制和优化。请注意,在实施任何限制措施时,应仔细测试和验证,以确保规则按预期工作,并避免误拦截合法请求的情况发生。

Rewrite全局变量是什么?

要限制浏览器访问,可以使用以下方法:

  1. User-Agent 字符串匹配:浏览器在发送请求时会在 HTTP 头部中包含 User-Agent 字段,该字段包含了浏览器的标识信息。您可以使用 Nginx 的 map 指令和 if 指令来根据 User-Agent 字符串进行匹配和限制。

    例如,以下配置将阻止来自 Internet Explorer 6 的浏览器访问:

    http {map $http_user_agent $block_ie6 {default       0;~MSIE 6       1;}server {location / {if ($block_ie6) {return 403;}...}}
    }
    
  2. JavaScript 或 Cookie 检测:您可以在 Nginx 中使用 JavaScript 或 Cookie 检测来判断浏览器是否符合特定条件。这可以通过使用 Nginx 的 ngx_http_js_module 模块或 ngx_http_cookie_module 模块来实现。

    例如,以下示例使用 JavaScript 检测来限制仅允许具有特定条件的浏览器访问:

    http {server {location / {js_set $allowed_browser '0';js_content allowed_browser.js;if ($allowed_browser = '0') {return 403;}...}}
    }
    

    allowed_browser.js 文件中,您可以编写 JavaScript 代码来检测浏览器的特定特征,并将结果赋给 $allowed_browser 变量。

  3. 第三方模块:Nginx 提供了许多第三方模块,如 ngx_http_browser_modulengx_http_user_agent_module,可以根据浏览器的特征进行匹配和限制。这些模块可以用于根据浏览器的类型、版本或其他属性来限制访问。

    例如,以下示例使用 ngx_http_browser_module 模块来限制 Internet Explorer 浏览器的访问:

    http {browser default modern;server {location / {browser MSIE;if ($ancient_browser) {return 403;}...}}
    }
    

    在上述配置中,browser 指令将 Internet Explorer 浏览器定义为 $ancient_browser 变量,然后可以使用 if 指令根据该变量进行访问限制。

以上是一些方法可用于限制浏览器访问。根据实际需求和系统配置,您可以选择适合的方法,并根据需要进行定制和优化。请注意,在实施任何限制措施时,应仔细测试和验证,以确保规则按预期工作,并避免误拦截合法请求的情况发生。
都看到这啦,点个赞吧🚀

相关文章:

【后端高频面试题--Nginx篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx?为什么要用Nginx?为…...

TiDB 在医疗保障信息平台的应用实践

文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合,成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中,TiDB 分布式数据库有效实现了在线交易和实时分析服务,日…...

支付交易——跨境交易

摘要 老王兢兢业业经营生意多年,一步步从小杂货店做到现在,成立大型贸易公司。在做大做强的过程中,老王觉得国内市场已经饱和,竞争处处是红海。老王留意海外很多年了,决定走出去,转向海外:将国外的商品引进…...

上位机图像处理和嵌入式模块部署(上位机主要功能)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前关于机器视觉方面,相关的软件很多。比如说商业化的halcon、vision pro、vision master,当然也可以用opencv、pytorch自…...

【前端工程化面试题】webpack的module、bundle、chunk分别指的是什么?

首先从语法方面 在配置文件中有 module 这个配置项,里面有 rules 选项用来配置各种 loader,还有其他各种选项,参考官网。bundle 和 chunk 在配置文件中是没有这个选项的,但是会出现在配置的值中。 module 模块 指单个文件&#xf…...

软件实例分享,家具生产出库管理系统软件教程

软件实例分享,家具生产出库管理系统软件教程 一、前言 以下软件程序教程以 佳易王家具行业生产出库管理系统软件V16.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 销售管理——产品状态查询变更,可以根据生产进度变更…...

[uniapp的页面传参]详细讲解uniapp中页面传参的传递方式和接受方式 使用案例 代码注释

目录 一、传递方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 二、接受方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 三、使用案例四.提醒 在uniapp中,页面传参是非常常见的需求。本文将详细讲解uniapp中页面传参的传递方式和接受…...

Python实现时间序列分析霍尔特季节性平滑模型(Holt算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 霍尔特季节性平滑模型是指数平滑技术的一种扩展形式,由E. S. Holt和P. R. Winters分别独立…...

Rokid Station 进fastboot

前一阵子手里的station开不开机了,反复重启,摸索出进fastboot的方法: 关机状态下同时按电源键下面的确认键(○键),指示灯会进入白色常亮状态,插入电脑会在设备管理器内显示DNL设备(…...

Java支持的默认访问修饰符是什么?

Java支持的默认访问修饰符是没有指定任何访问修饰符,通常被称为“包访问级别”或“默认访问级别”。当一个类成员(包括类、接口、变量以及方法)没有显式地指定任何访问修饰符时,它就会拥有默认访问级别。 在默认访问级别下&#…...

Java使用Documents4j实现Word转PDF(知识点+案例)

文章目录 前言源码获取一、认识Documents4j二、快速集成2.1、pom.xml依赖2.2、word转PDF实现项目目录WordUtils.javaDemo6.java测试效果 参考文章资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里…...

CSimplemathproblem ---- 牛客网

题目描述 这一节课&#xff0c;Priest给大家做了一个小测试。 老师给了你两个正整数X, Y。并按照一下规则做运算&#xff0c;求出答案Z。 如果X是Y的因数&#xff0c;则Z等于X Y。否则Z Y - X。 输入描述: 输入两个正整数X, Y。 (1 < X < Y < 100000000000000)。 输…...

[嵌入式系统-27]:RT-Thread -14- 操作系统配置:rtconfig.h文件与menuconfig命令

目录 一、rtconfig.h 1.1 概述 1.2 软硬件资源配置 1.3 功能模块选择 1.4 内核配置详解 1.5 调度器配置 1.6 硬件设备驱动配置 1.7 网络配置 1.8 调试配置 二、menuconfig 2.1 概述 2.2 主要功能 三、RT Thread配置 VS Linux配置 一、rtconfig.h 1.1 概述 rtco…...

C++面向对象程序设计-北京大学-郭炜【课程笔记(一)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;一&#xff09;】 1、引用的概念1.1、引用应用的简单示例1.2、常引用 2、"const"关键字的用法&#xff08;常量指针/指针常量&#xff09;3、动态内存分配4、内联函数5、函数重载5.1、什么是函数重载5.2、函数…...

C语言:国家名称按字母表排序

题目描述 输入一个整数n(n<20)&#xff0c;表示待输入国家的数量。随后输入n个国家或地区的名称 (名称长度为1~30)&#xff0c;要求按字母顺序升序输出。 注意&#xff1a;名称中可能包含空格符。 提示 字符串比较请使用函数&#xff1a; int strcmp(const char* str1&a…...

2/18作业

1. #!/bin/bash function fun() { uidgrep ^ubuntu /etc/passwd | cut -d : -f 3 gidgrep ^ubuntu /etc/passwd | cut -d : -f 4 echo "uid为$uid,gid为$gid" } resultfun echo $result...

书生浦语笔记与作业汇总

第一节笔记 第二节笔记与作业 第三节笔记 第三节作业 第四节笔记 第四节作业 第五节笔记 第五节作业 第六节笔记 第六节作业...

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之自动创建节点 (物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码&#xff1a;1688 驱动程序编写好后&#xff0c;还需要创建设备节点&#xff0c;有两种方式&#xff0c;一是通过mknod命令去手动创建&#xff0c;例如&#xff1a;mknod /dev/hello c 250 0&…...

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统&#xff1b; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …...

【学网攻】 第(27)节 -- HSRP(热备份路由器协议)

系列文章目录 目录 系列文章目录 文章目录 前言 一、HSRP(热备份路由器协议)是什么&#xff1f; 二、实验 1.引入 实验目标 实验背景 技术原理 实验步骤 实验设备 实验拓扑图 实验配置 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交…...

【实战】二、Jest难点进阶(三) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(七)

文章目录 一、Jest 前端自动化测试框架基础入门二、Jest难点进阶3.mock timers 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&#xff1a; 项版本babel/core…...

Python编程中的异常处理

什么是异常&#xff1f; 程序错误&#xff08;errors&#xff09;有时也被称为程序异常&#xff08;exceptions&#xff09;&#xff0c;这是每个编程人员都会经常遇到的问题。在过去&#xff0c;当遇到这类情况时&#xff0c;程序会终止执行并显示错误信息&#xff0c;通常是…...

mysql3.7之触发器

1.触发器的定义 触发器是由事件来触发某个操作&#xff0c;这些事件包括INSERT、UPDATE、DELETE事件。所谓事件就是指用户的动作或者触发某项行为。如果定义了触发程序&#xff0c;当数据库执行这些语句时候&#xff0c;就相当于事件发生了&#xff0c;就会自动激发触发器执行…...

12.QT文件对话框 文件的弹窗选择-QFileDialog

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 3.其他函数 参考&#xff1a; 前言&#xff1a; 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样 技能&#xff1a; QString filename QFileDialog::ge…...

ArcGIS学习(八)基于GIS平台的控规编制办法

ArcGIS学习(八)基于GIS平台的控规编制办法 上一任务我们学习了”如何进行图片数据的矢量化?" 这一关我们来学习一个比较简单的案例一一”如何在ArcGIS中录入控规指标,绘制控规图纸?" 首先,先来看看这个案例的分析思路以及导入CAD格式的控规图纸。 接着,来看…...

软件测试-自动化测试-面试题研究,知识要点,高频、重点知识点,自动化测试知识要点、知识梳理-PYTHON+自动化,评估试题

自动化项目实战能力评估 介绍一下你的自动化测试框架&#xff1f; 我的框架主要根据分层思想设计了几个独立模块&#xff1a; 模块一&#xff1a;主要存放通用业务代码&#xff0c;比如接口访问&#xff0c;数据库操作&#xff0c;excel 操作&#xff0c;等等 模块二&#xf…...

一.重新回炉Spring Framework: 理解Spring IoC

1. 写在前面的话 说实话&#xff0c;从事java开发工作时间也不短了&#xff0c;对于Spring Framework&#xff0c;也是天天用&#xff0c;这期间也碰到了很多问题&#xff0c;也解决了很多问题。可是&#xff0c;总感觉对Spring Framework还是一知半解&#xff0c;不能有个更加…...

目标检测算法之YOLOv5的应用实例(零售业库存管理、无人机航拍分析、工业自动化领域应用的详解)

1.YOLOv5在"零售业库存管理"领域的应用 在零售业库存管理中,YOLOv5可以帮助自动化商品识别和库存盘点过程。通过使用深度学习模型来实时识别货架上的商品,零售商可以更高效地管理库存,减少人工盘点的时间和成本。以下是一个使用YOLOv5进行商品识别的Python脚本示…...

[蓝桥 2017]九宫幻方

九宫幻方 题目描述 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三阶幻方指的是将 1~9 不重复的填入一个 3*3 的矩阵当中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格&#xf…...

Qt - 编译报错:“invalid use of incomplete type ‘class Ui::xxx‘ui(new Ui::xxx)”的解决方法

问题起因 今天在创建Qt设计器界面类时&#xff0c;类名的英文拼写错误&#xff0c;然后就重命名了文件&#xff0c;而Qt Creator也帮我自动修改了一部分内容&#xff0c;之后我手动将cpp文件中的#include " *** "里的内容给修改了&#xff0c;构造函数和析构函数处也…...

基于Doris构建亿级数据实时数据分析系统

背景 随着公司业务快速发展&#xff0c;对业务数据进行增长分析的需求越来越迫切&#xff0c;与此同时我们的业务数据量也在快速激增、每天的数据新增量大概在30w 左右&#xff0c;一年就会产生1 个亿的数据&#xff0c;显然基于传统MySQL数据库已经无法支撑满足以上需求 基于上…...

javascript中的prototype;javascript中的原型链

文章目录 深入理解JavaScript原型链1. 什么是原型链&#xff1f;2. 原型链的结构3. 如何访问原型链&#xff1f;4. 示例演示原型链5. 原型链与继承6. 实际应用场景 深入理解JavaScript原型链 1. 什么是原型链&#xff1f; 在JavaScript中&#xff0c;每个对象都有一个原型&am…...

CI/CD部署

什么是CI&#xff0c;什么是CD CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;是一种实践&#xff0c;旨在通过自动化构建、测试和代码静态分析等过程&#xff0c;频繁地将代码变更合并到共享存储…...

定点数,定点数二维向量,定点数三维向量,定点数数学类

定点数&#xff0c;定点数二维向量&#xff0c;定点数三维向量&#xff0c;定点数数学类 介绍浮点数定点数封装的定点数FixedNumber定点数二维向量定点数三维向量定点数数学类总结 介绍 众所周知定点数是用于做帧同步时保持不同cpu不同设备保持一致稳定的代替浮点数的变量&…...

安装ts-node有感

起因&#xff1a;想要在vsCode上运行ts脚本 解决方案&#xff1a; 1.安装vsCode插件 code runner 2.全局安装ts-node 这一步遇到三个问题&#xff1a; ①.node版本问题&#xff1a;需安装版本18以上node&#xff0c;可使用nvm去控制不同的node版本 ②.certificate has exp…...

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建&#xff1a;在创建阶段&#xff0c;你需要选择一个镜像来运行你的应用。这个镜像可以是公开的&#xff0c;如 Docker Hub 上的镜像&#xff0c;也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…...

顺子日期 蓝桥杯

调用API 思路: 设置Calendar的属性&#xff0c;获取Calendar的毫秒数&#xff0c;转换成指定格式的字符串(yyyyMMdd)&#xff0c;判断字符串中是否包含符合条件的&#xff0c;若有就1&#xff0c; 迭代: 每次循环给Calendar加上一天即可 import java.text.SimpleDateFormat; im…...

基于 Python 的景区票务人脸识别系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

OpenAI全新发布的Sora,到底意味着什么?

16日凌晨&#xff0c;OpenAI发布了文本视频的工具&#xff08;text-do-video&#xff09;Sora&#xff0c;整个世界再次被震撼。 Sora的出现&#xff0c;到底意味着什么&#xff1f; 目录 Sora的背景与概述Sora是什么&#xff1f;能为我们做些什么&#xff1f;存在的一些问题 文…...

预防.locked.locked1勒索病毒攻击:保护数据安全

导言&#xff1a; 随着科技的发展&#xff0c;网络安全问题日益严重&#xff0c;其中勒索病毒是一种令人头痛的威胁。.locked和.locked1是两种常见的勒索病毒&#xff0c;它们会将用户的数据文件加密&#xff0c;并要求支付赎金以获取解密密钥。本文将介绍这两种勒索病毒的特点…...

【力扣hot100】刷题笔记Day5

前言 回学校了&#xff0c;荒废了半天之后打算奋发图强猛猛刷题&#xff0c;找实习&#xff01;赚钱&#xff01;&#xff01; 560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 前缀法 哈希表 这个题解解释比官方清晰&#xff0c;截个图方便看&#xff0c;另一…...

解锁Spring Boot中的设计模式—04.桥接模式:探索【桥接模式】的奥秘与应用实践!

桥接模式 桥接模式也称为桥梁模式、接口模式或者柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;是将抽象部分与他的具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。 桥接模式是一种…...

[talib][python]ta-lib所有whl文件下载地址汇总

TA-Lib-0.4.28-cp312-cp312-win-amd64.whl下载地址&#xff1a;https://download.csdn.net/download/FL1623863129/88589956 ta-lib-0.4.25-cp311-cp311-win-amd64.whl下载地址&#xff1a;https://download.csdn.net/download/FL1623863129/88265329 TA-Lib-0.4.24-cp310-cp31…...

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…...

锁相放大器,数字锁相放大器.C和python版的源代码

数字锁相放大器. 锁相放大器, 它是一种可以从高噪声环境中提取出特定频率信号的放大器&#xff0c;工作原理主要是利用正弦函数的正交性进行信号的相位检测和幅值测量。如果你对锁相放大器感兴趣&#xff0c;我可以给你更详细的解释。 数字锁相放大器是利用软件算法来实现提取…...

(02)Hive SQL编译成MapReduce任务的过程

目录 一、架构及组件介绍 1.1 Hive底层架构 1.2 Hive组件 1.3 Hive与Hadoop交互过程 二、Hive SQL 编译成MR任务的流程 2.1 HQL转换为MR源码整体流程介绍 2.2 程序入口—CliDriver 2.3 HQL编译成MR任务的详细过程—Driver 2.3.1 将HQL语句转换成AST抽象语法树 词法、语…...

【C++初阶】值得一刷的字符串string相关oj题

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;订单处理系统订单服务测试服务 10.1.3 拓展案例 1&#xff1a;用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…...

代码随想录算法训练营第34天| Leetcode 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

文章目录 Leetcode 860.柠檬水找零Leetcode 406.根据身高重建队列Leetcode 452. 用最少数量的箭引爆气球 Leetcode 860.柠檬水找零 题目链接&#xff1a;Leetcode 860.柠檬水找零 题目描述&#xff1a; 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的…...

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习&#xff0c;这篇我将初步学习二叉树&#xff01;&#xff01;&#xff08;新年快乐&#xff01;&#xff09; 目录 二叉树 1、定义&#xff1a; 2、特点&#xff1a; 3、基本形态&#xff1a; 4、二叉树的种类&#xff1a; &…...