前后端分离技术逐步深入,让你更加深入理解Nginx+Tomcat

你提到了熟悉Tomcat和Nginx服务器的配置,以及应用前后端分离技术,请解释一下Tomcat和Nginx的主要作用是什么,以及在前后端分离中它们的角色是什么?

标准回答: Tomcat是一个Java应用服务器,主要用于运行Java Web应用程序。它负责处理HTTP请求、执行Servlet和JSP等Java代码,并将动态生成的内容返回给客户端。

Nginx是一个高性能的Web服务器和反向代理服务器,它负责接收客户端的HTTP请求,并将请求转发给后端服务器。在前后端分离中,Nginx通常用作反向代理,将静态文件(如HTML、CSS、JavaScript)直接返回给客户端,而将动态请求(如API请求)转发给后端应用服务器(如Tomcat)处理。

详解:

Tomcat:

Tomcat是一个Java应用服务器,其主要作用是执行和管理Java Web应用程序。以下是Tomcat的主要功能和角色:

  1. Servlet 容器:Tomcat是一个Servlet容器,它能够处理HTTP请求,执行Java Servlet和JSP(JavaServer Pages)等Java代码,并生成动态的Web内容。这使得开发人员可以构建动态Web应用程序,处理用户的请求并生成相应的响应。

  2. Java应用服务器:Tomcat还充当Java应用服务器的角色,可以托管Java应用程序,包括Spring应用、Java EE应用和其他基于Java的Web应用程序。

  3. 监听和端口管理:Tomcat监听HTTP请求,并通过端口进行通信,以便与客户端浏览器建立连接并传输数据。

在前后端分离中,Tomcat通常用于托管和执行服务器端的Java应用程序,处理动态请求,例如处理API请求和数据库访问等。

Nginx:

Nginx是一个高性能的Web服务器和反向代理服务器,其主要作用包括:

  1. 反向代理:Nginx充当反向代理服务器,接收来自客户端的HTTP请求,并将这些请求转发给后端服务器处理。这使得Nginx能够分发流量、负载均衡、缓存和优化请求。

  2. 静态文件服务:Nginx能够高效地提供静态文件(如HTML、CSS、JavaScript、图像等)的服务,减轻后端服务器的负载,提高网站性能。

  3. SSL终端:Nginx可以用作SSL终端,负责处理HTTPS连接和SSL证书的管理。

在前后端分离中,Nginx通常用于以下角色:

  • 将静态资源直接提供给客户端,减轻后端服务器的负载,提高性能。
  • 进行反向代理,将动态请求转发给后端应用服务器(如Tomcat、Node.js等)进行处理,实现负载均衡和流量控制。
  • 提供安全性和SSL终端,加密通信以保护数据传输。

综上所述,Tomcat和Nginx在前后端分离架构中各自扮演着不同但互补的角色,共同协作以提供高性能、可伸缩和安全的Web应用程序服务。

Tomcat 示例(使用Spring Boot作为Java应用程序的示例):

  1. 创建一个Spring Boot应用程序,然后将其打包成WAR文件,以便部署到Tomcat服务器。

  2. src/main/resources/application.properties(或application.yml)中配置数据库和其他应用程序相关的属性。

  3. 部署WAR文件到Tomcat服务器的webapps目录中。

  4. 启动Tomcat服务器,应用程序将在Tomcat中运行。

Nginx 示例(作为反向代理的示例):

假设你有多个Tomcat实例运行在不同的端口上,Nginx可以用来负载均衡请求。

  1. 安装Nginx并编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf):
http {upstream tomcat_servers {server localhost:8080;server localhost:8081;# 添加更多的Tomcat实例...}server {listen 80;server_name yourdomain.com;location / {proxy_pass http://tomcat_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 可以配置其他 Nginx 选项,如 SSL、缓存等...}
}
  1. 上述配置将请求分发到多个Tomcat实例,你可以根据需要添加更多的实例。

  2. 重新加载Nginx配置以使更改生效:sudo service nginx reloadsudo systemctl reload nginx,具体命令可能因操作系统而异。

  3. 现在,Nginx将作为反向代理服务器将请求负载均衡到多个Tomcat实例,实现了水平扩展和负载均衡。

你提到了具备集群搭建和部署经验,请简要解释一下什么是集群,以及为什么在某些场景下需要搭建集群?

标准回答: 集群是将多个计算机或服务器组合在一起,以共同处理负载、提高性能、增加可用性或实现容错的技术。在某些场景下,需要搭建集群来满足以下需求:

  • 提高性能:通过分布负载到多台服务器上,可以提高系统的整体性能。
  • 增加可用性:在集群中,如果一台服务器出现故障,其他服务器可以继续提供服务,确保系统的可用性。
  • 扩展性:集群可以在需要时轻松扩展,以适应不断增长的用户或数据负载。
  • 容错性:集群可以通过备份和冗余机制来增加系统的容错性,降低故障对系统的影响。

详细:

集群是将多台计算机或服务器组合在一起,以共同协作来提供某种服务或执行特定任务的技术。在集群中,这些服务器被视为一个整体,共同工作以实现共同的目标。以下是为什么在某些场景下需要搭建集群的主要原因:

  1. 提高性能:通过将工作负载分布到多个服务器上,集群可以显著提高系统的整体性能。每台服务器只需处理一部分请求或任务,从而降低了每台服务器的负担,提高了响应速度。

  2. 增加可用性:在集群中,如果一台服务器发生故障或停机,其他服务器仍然可以继续提供服务。这提高了系统的可用性,确保用户能够持续访问应用程序或服务,减少了停机时间。

  3. 扩展性:集群可以轻松扩展,以应对不断增长的用户或数据负载。通过添加新的服务器节点,集群可以适应增加的需求,而无需重新设计整个系统。

  4. 容错性:集群可以通过备份和冗余机制来增加系统的容错性。如果一台服务器出现故障,备用服务器可以接管工作,确保系统的连续性。这有助于降低故障对系统的影响。

  5. 负载均衡:集群可以使用负载均衡算法来平衡请求和任务的分布,确保每个服务器都能够均匀地处理工作负载。这有助于避免单个服务器过载,提高了系统的稳定性和性能。

  6. 数据备份和恢复:在某些情况下,集群可以用于数据备份和恢复。数据可以在多个服务器之间复制,以防止数据丢失,并在需要时进行恢复。

Java RMI 集群示例

假设你有一个简单的Java应用程序,其中包含一个计算器服务,你想将该服务部署到多台服务器上以创建一个集群。首先,你需要创建一个接口来定义远程方法:

import java.rmi.Remote;
import java.rmi.RemoteException;public interface Calculator extends Remote {int add(int a, int b) throws RemoteException;
}

然后,你需要实现该接口并创建一个RMI服务器,将服务绑定到RMI注册表中:

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;public class CalculatorImpl extends UnicastRemoteObject implements Calculator {protected CalculatorImpl() throws RemoteException {super();}public int add(int a, int b) throws RemoteException {return a + b;}public static void main(String[] args) {try {Calculator calculator = new CalculatorImpl();Registry registry = LocateRegistry.createRegistry(1099); // 默认的RMI端口registry.rebind("CalculatorService", calculator);System.out.println("Calculator service is running...");} catch (Exception e) {System.err.println("Calculator service exception: " + e.toString());e.printStackTrace();}}
}

接下来,你可以创建一个客户端来调用集群中的计算器服务:

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;public class CalculatorClient {public static void main(String[] args) {try {Registry registry = LocateRegistry.getRegistry("server_hostname", 1099); // 服务器的主机名和RMI端口Calculator calculator = (Calculator) registry.lookup("CalculatorService");int result = calculator.add(5, 3);System.out.println("Result: " + result);} catch (Exception e) {System.err.println("Calculator client exception: " + e.toString());e.printStackTrace();}}
}

这是一个简单的Java RMI示例,演示了如何创建一个简单的集群,其中包括一个RMI服务器和一个RMI客户端。在实际生产环境中,集群搭建通常涉及更多的配置和复杂性,包括负载均衡、故障转移、集群管理等。不同的技术栈和应用程序将有不同的实现方式和工具。

对于Tomcat和Nginx服务器的配置,请详细解释一下如何配置Nginx作为反向代理服务器,以及在应用前后端分离的情况下,Nginx如何处理静态文件和动态请求。

安装Nginx: 首先,确保你已经安装了Nginx。你可以使用包管理器,如apt(对于Ubuntu)或yum(对于CentOS),来安装Nginx。例如,在Ubuntu上可以运行以下命令:

sudo apt-get update
sudo apt-get install nginx

创建Nginx配置文件: 创建一个新的Nginx配置文件,以便配置反向代理和静态文件服务。通常,Nginx的配置文件位于/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf。使用文本编辑器,如nanovim,创建一个新的配置文件,例如myapp.conf

sudo nano /etc/nginx/conf.d/myapp.conf

配置Nginx反向代理: 在配置文件中添加以下配置,将动态请求转发到后端服务器。假设后端服务器运行在本地的8080端口上:

server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8080;  # 后端服务器地址和端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
  1. 这将把所有来自your_domain.com的请求代理到后端服务器的8080端口。

  2. 配置静态文件服务: 添加另一个location块,用于处理静态文件请求,例如HTML、CSS和JavaScript文件。假设静态文件存储在/path/to/static/files目录中:

location /static/ {alias /path/to/static/files/;
}
  1. 这将映射以/static/开头的请求到静态文件目录。

  2. 测试Nginx配置: 在完成配置后,运行以下命令来测试Nginx配置是否有效:

sudo nginx -t
  1. 如果没有错误,你将看到"configuration file syntax is ok"的消息。

  2. 重新加载Nginx: 最后,重新加载Nginx以应用新的配置:

sudo systemctl reload nginx

或者:

sudo service nginx reload

现在,Nginx将作为反向代理服务器,将动态请求代理到后端服务器,并直接提供静态文件。这有助于提高性能和安全性,实现了应用的前后端分离。请确保替换示例中的域名和路径以适应你的具体情况。

在应用前后端分离的情况下,Nginx负责处理静态文件(如HTML、CSS、JavaScript),直接返回给客户端。动态请求则由Nginx转发到后端服务器(Tomcat)处理,通过这种方式,可以提高性能和安全性。

你提到了具备集群搭建和部署经验,请解释一下什么是负载均衡,以及在集群中如何实现负载均衡,提高系统的可用性和性能?

标准回答: 负载均衡是一种分发网络流量以平衡服务器负载的技术。它通过将请求分发给多台服务器来防止单一服务器过载,并确保系统的可用性和性能。

在集群中实现负载均衡可以通过以下方式:

  • 硬件负载均衡器:使用专用硬件设备,如F5等,它们能够智能地分发流量到多个服务器。
  • 软件负载均衡器:使用软件工具,如Nginx、Apache HTTP Server等,它们可以作为反向代理服务器,将请求转发给多个后端服务器。
  • DNS负载均衡:通过DNS配置,将域名映射到多个服务器的不同IP地址,DNS服务器会根据策略选择一个IP地址提供服务。

负载均衡可以提高系统的可用性,因为即使其中一台服务器出现故障,其他服务器仍然可以提供服务。它还可以提高系统的性能,因为请求被分发到多个服务器,减轻了单一服务器的负载压力。

配置Nginx作为负载均衡器: 在 *****.conf 文件中添加以下配置,以将流量分发到两台后端服务器(假设它们运行在不同的端口上,例如 8000 和 8001):

upstream backend_servers {server 127.0.0.1:8000;server 127.0.0.1:8001;# 添加更多后端服务器...
}server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_servers;}
}

对于Tomcat和Nginx服务器的配置,让我们更深入地了解Nginx。请解释一下Nginx的反向代理功能,并提供一个示例配置,说明如何使用Nginx作为反向代理服务器来将请求转发到后端应用服务器。

标准回答: Nginx的反向代理功能允许它接收客户端的HTTP请求,并将这些请求转发给后端应用服务器,然后将后端服务器的响应返回给客户端。这有助于分担应用服务器的负载,提高性能和安全性。

以下是一个示例Nginx配置,将请求转发到后端Tomcat服务器:

server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_server;}
}

在这个配置中,Nginx监听80端口,接收来自客户端的请求。proxy_pass指令将请求转发给名为backend_server的后端服务器,这个服务器地址可以是Tomcat服务器的地址和端口。

当客户端请求http://your_domain.com/时,Nginx将请求转发给后端Tomcat服务器,然后将Tomcat的响应返回给客户端。这样,Nginx充当了反向代理服务器,分担了Tomcat的负载。

你提到了具备集群搭建和部署经验,请解释一下什么是负载均衡算法,以及常见的负载均衡算法有哪些,并举例说明它们的应用场景。

标准回答: 负载均衡算法是用于将客户端请求分发到多个服务器的策略,以确保各个服务器负载均衡。常见的负载均衡算法包括:

  • 轮询(Round Robin):按照顺序将请求分发给每个服务器,每个服务器依次处理请求。适用于服务器性能相近的场景。
  • 最小连接数(Least Connections):将请求分发给当前连接数最少的服务器,以确保请求被发送到负载较轻的服务器。
  • IP哈希(IP Hash):根据客户端IP地址的哈希值来确定将请求发送到哪个服务器,确保同一客户端的请求始终发送到同一台服务器。
  • 加权轮询(Weighted Round Robin):根据服务器的权重分配请求,权重较高的服务器会接收到更多的请求。适用于服务器性能不均匀的场景。

例如,如果一个系统中有多个Web服务器,但其中一台服务器的性能较差,可以使用加权轮询算法,将更多的请求发送到性能较好的服务器,以确保整体性能。

最后一个问题,关于Tomcat服务器的配置。请解释一下Tomcat中的连接池是什么,以及它的作用和优势。

标准回答: 在Tomcat服务器中,连接池是一种用于管理数据库连接、JMS连接或其他资源连接的机制。连接池的作用和优势包括:

  • 资源管理:连接池负责创建、分配和回收连接,确保连接被有效地利用,避免了频繁地创建和销毁连接的开销。
  • 资源复用:连接池允许多个客户端共享连接,减少了资源的浪费,提高了性能。
  • 连接池配置:管理员可以配置连接池的参数,如最大连接数、最小空闲连接数、连接超时等,以根据应用程序的需求进行优化。
  • 避免资源泄漏:连接池可以监控连接的使用情况,确保连接在不再使用时被正确关闭,防止资源泄漏。
  • 性能提升:连接池可以缓存连接,减少了与数据库或其他资源的通信延迟,提高了响应性能。

Tomcat使用连接池来管理与数据库的连接,例如Apache Tomcat DBCP(数据库连接池)或其他连接池实现。这有助于提高应用程序的性能和资源利用率。

关于Tomcat服务器的连接池。请解释一下Tomcat中的连接池是如何工作的,包括连接的创建、复用和销毁过程,以及为什么使用连接池是重要的。

标准回答: Tomcat中的连接池是一种用于管理与数据库或其他资源的连接的机制。它工作的过程包括:

  • 连接创建:当需要与数据库建立连接时,连接池会创建一个新的连接。连接的创建可以是懒加载的,即只有在需要时才创建连接,以减少开销。
  • 连接复用:一旦连接被创建,它可以被多个线程共享。连接池会维护一个连接池,允许多个线程按需获取连接并在使用后将其放回池中。
  • 连接销毁:当连接不再需要或达到一定的空闲时间时,连接池可以选择销毁连接以释放资源。

为什么使用连接池是重要的:

  • 资源管理:连接池负责管理连接的创建和销毁,确保连接得到有效地利用,避免了频繁地创建和销毁连接的开销。
  • 资源复用:连接池允许多个客户端共享连接,减少了资源的浪费,提高了性能。
  • 连接池配置:管理员可以配置连接池的参数,如最大连接数、最小空闲连接数、连接超时等,以根据应用程序的需求进行优化。
  • 避免资源泄漏:连接池可以监控连接的使用情况,确保连接在不再使用时被正确关闭,防止资源泄漏。
  • 性能提升:连接池可以缓存连接,减少了与数据库或其他资源的通信延迟,提高了响应性能。

Tomcat中的连接池是为了提高应用程序的性能和资源利用率,是Java Web应用程序开发的重要组成部分。

关于Nginx服务器的负载均衡。请解释一下Nginx中的负载均衡是如何工作的,包括负载均衡策略和常见的负载均衡算法。

标准回答: 在Nginx中,负载均衡是一种将客户端请求分发到多个后端服务器的机制,以实现高可用性和性能扩展。Nginx的负载均衡工作方式如下:

  1. 客户端发送请求到Nginx服务器。
  2. Nginx服务器接收到请求后,根据预定义的负载均衡策略选择一个后端服务器。
  3. Nginx将请求转发给选定的后端服务器。
  4. 后端服务器处理请求并返回响应。
  5. Nginx将响应返回给客户端。

负载均衡策略可以根据需求进行配置,常见的负载均衡算法包括:

  • 轮询(Round Robin):按顺序轮流分发请求给后端服务器,平均分配负载。
  • 权重轮询(Weighted Round Robin):为每个后端服务器分配权重,根据权重比例分发请求,适用于不同性能的服务器。
  • IP哈希(IP Hash):根据客户端IP地址的哈希值将请求分发到特定后端服务器,确保相同IP的请求始终路由到相同的服务器。
  • 最少连接(Least Connections):将请求分发给当前连接数最少的后端服务器,用于动态负载均衡。
  • 最少响应时间(Least Response Time):将请求分发给响应时间最短的后端服务器,通常用于考虑服务器性能的负载均衡。

Nginx的负载均衡功能提供了灵活的配置选项,可以根据应用程序的需求选择适当的负载均衡算法,确保高可用性和性能优化。

Nginx是一种高性能的Web服务器和反向代理服务器。请解释一下Nginx中的反向代理是什么,以及反向代理的优点和常见用途。

标准回答: Nginx中的反向代理是一种服务器配置,其中Nginx接收客户端的请求并将其转发到后端服务器,然后将后端服务器的响应返回给客户端,客户端认为它在与Nginx通信,而不是与后端服务器直接通信。反向代理的主要优点和常见用途包括:

  • 负载均衡:反向代理可以将客户端请求分发到多个后端服务器,以实现负载均衡,提高性能和可用性。
  • 安全性:反向代理可以隐藏后端服务器的实际IP地址,提供额外的安全性,防止直接暴露后端服务器。
  • SSL终止:反向代理可以用于SSL终止,将加密和解密操作集中在代理服务器上,减轻了后端服务器的负担。
  • 缓存:反向代理可以缓存静态资源,加速内容传输,并减少后端服务器的负载。
  • Web应用防火墙:反向代理可以充当Web应用防火墙,检查和过滤恶意请求。
  • URL重写:反向代理可以重写URL,将请求重定向到不同的路径或后端服务器。

反向代理是Nginx的重要功能之一,用于构建高性能、安全和可伸缩的Web应用程序架构。

Nginx是一种高性能的Web服务器和反向代理服务器。请解释一下Nginx中的负载均衡是什么,以及负载均衡的算法和常见用途。

标准回答: 在Nginx中,负载均衡是一种将客户端请求分发到多个后端服务器的机制,以实现更高的性能、可用性和可伸缩性。负载均衡的主要概念和工作原理如下:

  • 负载均衡器(Load Balancer):负载均衡器是位于客户端和后端服务器之间的中间层,它接收客户端的请求并将请求分发到多个后端服务器。
  • 后端服务器(Backend Servers):后端服务器是处理客户端请求的实际服务器,它们可以是应用服务器、数据库服务器等。
  • 负载均衡算法(Load Balancing Algorithm):负载均衡器使用算法来确定将请求分发给哪个后端服务器。常见的负载均衡算法包括轮询、权重轮询、随机选择、最少连接等。

工作原理如下:

  1. 客户端发送请求到负载均衡器。
  2. 负载均衡器使用负载均衡算法选择一个后端服务器。
  3. 负载均衡器将请求转发给选定的后端服务器。
  4. 后端服务器处理请求并将响应返回给负载均衡器。
  5. 负载均衡器将响应返回给客户端。

负载均衡的常见用途包括:

  • 提高性能:通过将请求分发到多个后端服务器,负载均衡可以提高系统的吞吐量和响应速度。
  • 高可用性:负载均衡器可以将流量分发到多个可用的后端服务器,以防止单点故障。
  • 扩展性:负载均衡可以用于水平扩展应用程序,添加更多的服务器以满足不断增长的流量需求。

Nginx是一种常用的负载均衡器,可用于构建高性能和可伸缩的Web应用程序架构。

Nginx是一种高性能的Web服务器和反向代理服务器。请解释一下Nginx中的反向代理是什么,以及反向代理的作用、优点和使用场景。

标准回答: 在Nginx中,反向代理是一种服务器架构,其中Nginx充当客户端和后端服务器之间的中间层。反向代理服务器接收客户端请求,并将请求转发到一个或多个后端服务器,然后将后端服务器的响应返回给客户端。反向代理隐藏了后端服务器的细节,客户端只与反向代理服务器通信。

反向代理的主要作用包括:

  • 负载均衡:反向代理可以将客户端请求分发到多个后端服务器,以实现负载均衡,提高性能和可伸缩性。
  • 安全性:反向代理可以充当安全屏障,隐藏后端服务器的IP地址,提高安全性。
  • 缓存:反向代理可以缓存静态资源,减轻后端服务器的负载,并提高响应速度。
  • SSL终结:反向代理可以终止SSL连接,解密HTTPS请求,将请求以普通HTTP传递给后端服务器。

反向代理的优点包括:

  • 负载均衡:通过负载均衡,可以分散流量,提高性能和可用性。
  • 安全性:反向代理可以保护后端服务器的真实IP地址,提高安全性。
  • 缓存:可以缓存静态内容,减少服务器负载。
  • SSL终结:可以减轻后端服务器的SSL处理负担。

反向代理适用于各种场景,包括Web应用程序、API服务、静态文件服务等,它可以提高性能、安全性和可伸缩性。

Tomcat是一个流行的Java应用服务器,用于部署Java Web应用程序。请解释一下Tomcat中的连接池(Connection Pool)是什么,以及连接池的作用、优点和配置方式。

标准回答: 在Tomcat中,连接池(Connection Pool)是一种管理数据库连接的机制,它允许应用程序在需要时从预先创建的一组数据库连接中获取连接,而不是每次都创建新的连接。连接池的主要作用是提高数据库访问的性能和效率。

连接池的优点和作用包括:

  • 性能提升:连接池减少了连接的创建和销毁开销,因为连接可以被重复使用,从而提高了数据库访问性能。
  • 资源管理:连接池可以限制同时打开的连接数量,防止应用程序耗尽数据库连接资源。
  • 连接复用:连接池允许多个线程共享连接,减少了连接的竞争和等待时间。
  • 连接验证:连接池可以验证连接的有效性,确保从池中获取的连接是可用的。
  • 超时控制:连接池可以设置连接的最大空闲时间,超过该时间将自动关闭连接。

在Tomcat中配置连接池通常使用数据源(DataSource)来实现。常见的数据源实现包括Apache Commons DBCP、HikariCP等。通过配置数据源,可以指定连接池的大小、连接URL、用户名、密码等参数。

配置示例(使用Apache Commons DBCP):

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydb"username="username" password="password"maxTotal="100" maxIdle="30" maxWaitMillis="10000"/>

连接池是Web应用程序中重要的组成部分,可以提高数据库访问性能和资源利用率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux面试题

当准备 Linux 面试时&#xff0c;以下是一些可能会遇到的常见 Linux 面试题&#xff1a; 1. 什么是Linux&#xff1f;解释一下Linux操作系统的特点。 2. 什么是Linux内核&#xff1f;Linux内核的作用是什么&#xff1f; 3. 如何在Linux系统上查看当前的IP地址和子网掩码&#…

rk平台快捷键进入uboot模式和烧录模式

(1)进入U-boot命令行模式 上电时,多次按下ctrlc按键(2)进入maskrom烧录模式 方法一:上电时(或者reboot时),多次按下ctrlb 方法二:在uboot命令 手敲rbrom

Java 通过页码范围提取新的文档(docx、pdf)

客户有一个新的需求。控制用户下载文档的页数。比如。我设置只开放10页。那就要我们去做截取文档。pdf自带有实现的方式。docx暂时没找到开源的。我这边处理的docx。是通过转换成pdf。通过截取pdf后再转成docx去实现的 工具类如下&#xff1a; import java.io.FileOutputStream…

git及dbc的学习

&#xff11;&#xff09;git的使用方法 Command line instructions You can also upload existing files from your computer using the instructions below. Git global setup git config --global user.name "username" git config --global user.email "xx…

SpringMvc高级(拦截器和文件上传下载)

拦截器&#xff08;Interceptor&#xff09;是一种常用的设计模式&#xff0c;在软件工程领域被广泛应用。拦截器通常被用来处理各种请求和响应&#xff0c;可以在请求发送前或响应返回后进行一系列的操作和处理。拦截器可以用于请求身份认证、日志记录、性能优化、权限控制、数…

vue3 - 使用reactive定义响应式数据进行赋值时,视图没有改变,值已经改变的解决方案

问题&#xff1a; 在Vue 3.0 中我们使用 reactive() 定义的响应式数据的时候&#xff0c;当是一个数组或对象时&#xff0c;我们直接进行赋值&#xff0c;发现数据已经修改成功&#xff0c;但是页⾯并没有自动渲染成最新的数据&#xff1b;这是为什么呢&#xff1f; 就如同官网…

线性代数的本质(二)——线性变换与矩阵

文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy &#xff0c;基向量为 i , j \mathbf i,…

数据结构-时间复杂度/空间复杂度

Hello&#xff0c;好久没有更新了哦&#xff0c;已经开始学习数据结构了&#xff0c;这篇文章呢就是对刚学数据结构所接触到的时间复杂度进行一个分享哦&#xff0c;如果有错误之处&#xff0c;大家记得拍拍我哦~ 既然要讨论时间/空间复杂度&#xff0c;那我们就得知道时间/空…

SpringBoot国际化配置组件支持本地配置和数据库配置

文章目录 0. 前言i18n-spring-boot-starter1. 使用方式0.引入依赖1.配置项2.初始化国际化配置表3.如何使用 2. 核心源码实现一个拦截器I18nInterceptorI18nMessageResource 加载国际化配置 3.源码地址 0. 前言 写个了原生的SpringBoot国际化配置组件支持本地配置和数据库配置 背…

tdesign的文件上传(微信小程序+idea的springboot)

目录 1. springboot后端 1.1 FileController.java 1.2 listener文件的ErpApplicationListener.java 1.3 【重点&#xff01;】FileServiceImpl层 1.4 IFileService 1.5 StringUtil通用类 1.6 主程序加一个监听器 1.7 application.yml文件 2. 微信小程序端 2.1 TDesign的…

latex如何保证图片和文字的相对位置不变

文章目录 latex如何保证图片与文字的相对位置不变&#xff1f;解决方法&#xff1a; latex如何保证图片与文字的相对位置不变&#xff1f; 解决方法&#xff1a; 加入宏包\usepackage{float} 在figure环境后面加入参数H \begin{figure}[H]\centering\includegraphics[width…

随机产生两个数在屏幕上打印,例如6*7=? 让学生输入答案,若正确打印答对了,否则提示学生重做,直到答对为止(小游戏)

#include<stdio.h> #include<stdlib.h> #include<time.h>//时间的库函数 int main() {int i 0;srand(time(0));//随机种子初始化int num1 rand() %10;//随机数int num2 rand() %10;printf("%d * %d ?\n", num1, num2);printf("请输入答案…

阿里云无影电脑:免费体验无影云电脑3个月

阿里云无影云电脑免费领取流程&#xff0c;免费无影云电脑配置为4核8G&#xff0c;可以免费使用3个月&#xff0c;阿里云百科分享阿里云无影云电脑&#xff08;云桌面&#xff09;免费申请入口、申请流程及免费使用限制条件说明&#xff1a; 目录 阿里云无影云电脑免费申请入…

【C++初阶】动态内存管理

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; C/C内存分布、C语言动态内存管理、C动态内存管理、operator new与operator delete函数、new和delete的实现原理、定位new表达式、常见面试问题等。 &#x1f43c;本文作者&#xff1a; 阿四啊 …

SQL2 查询多列

描述 题目&#xff1a;现在运营同学想要用户的设备id对应的性别、年龄和学校的数据&#xff0c;请你取出相应数据 示例&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20北京大学Beijing42…

CSRF和SSRF有什么不同?

文章目录 CSRF复现SSRF复现启动环境漏洞复现探测存活IP和端口服务计划任务反弹shell 区别 CSRF复现 打开dvwa&#xff0c;将难度调为low&#xff0c;点击CSRF&#xff0c;打开后发现有一个修改密码的输入框&#xff1a; 在这里修改密码&#xff0c;并用bp抓包&#xff0c;在…

C++实现观察者模式(包含源码)

文章目录 观察者模式一、基本概念二、实现方式三、角色四、过程五、结构图六、构建思路七、完整代码 观察者模式 一、基本概念 观察者模式&#xff08;又被称为模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;模式&#xff09;是软件设计模式的一种。在…

开启编程之门

自我介绍 目前已经大二了&#xff0c;计算机专业在读&#xff0c;是一个热爱编程&#xff0c;做事踏实专注的人。转眼间一年已经过去了&#xff0c;也接触编程一年了&#xff0c;但开始并没有对所学所想进行很好的总结和输出&#xff0c;这一年也有了新的很多感悟与心得&#x…

浅谈双十一背后的支付宝LDC架构和其CAP分析

本人汤波&#xff0c;superthem.com 圆领超级个体创始人&#xff0c;Github page地址&#xff1a;https://tbwork.github.io/ 看到很多人在盗用我的文章&#xff0c;还标记成原创&#xff0c;进行收费&#xff0c;非常令人作呕。 我的所有技术文章全部免费阅读&#xff0c;大家…

PCB走线规则

1、线间距。 这里应该遵循3W规则&#xff0c;所谓3W就是为了减少线间串扰&#xff0c;应保证线间距足够大&#xff0c;当线中心不少于3倍线宽&#xff0c;则可 保持70%的电场不互相干扰。如要达到98%的电场不互相干扰&#xff0c;可使用10W的间距。——这是查阅华为PCB布线规则…