Tomcat负载均衡、动静分离

目录

引言

实验图解 

1.实验环境搭建 

2.部署Nginx服务器及配置静态页面Web服务

3.部署Tomcat服务及配置动态页面Web服务

4.实验验收

动态页面

静态页面


引言

tomcat服务既可以处理动态页面,也可以处理静态页面;但其处理静态页面的速度远远不如nginx和apache服务,但ngingx和apache服务无法直接处理动态页面,下文就讲述了nginx和tomcat组合使用,实现动静分离和负载均衡;目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力。

  • standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。

    反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代理给Tomcat

  • LNMT:Linux + Nginx + MySQL + Tomcat

    LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat

    前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更适合

    LNMT:Linux + Nginx + MySQL + Tomcat

  • 多级代理

    LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat

动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载均衡。当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由来,都是由于HTTP协议在设计之初没有想到未来的发展。

实验图解 

在部署Tomcat之前,要部署好环境(JDK),因为JDK是Tomcat运行的必要环境

1.实验环境搭建 

根据实验环境,客户端可以用真机模拟,此实验需要五台虚拟机,Centos7-1Nginx代理服务器,Centos7-2和Centos7-3作为负载均衡第一分支的后端服务器,Centos7-4和Centos7-6作为负载均衡第二分支的后端服务器;Centos7-2和Centos7-4作为处理静态资源的服务器,需要搭建Nginx服务;Centos7-3和Centos7-6作为处理动态资源的服务器,需要搭建Tomcat服务

五台虚拟机统一关闭防火墙

2.部署Nginx服务器及配置静态页面Web服务

Centos7-1、Centos7-2、Centos7-4都要部署Nginx服务

[root@7-1 opt]#yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#安装依赖关系包
[root@7-1 opt]#useradd -M -s /sbin/nologin nginx
#新建Nginx用户 方便管理
[root@7-1 opt]#yum install nginx -y
[root@7-1 opt]#systemctl start nginx
[root@7-1 opt]#systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: active (running) since 六 2024-03-02 13:40:43 CST; 3s agoProcess: 2436 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)Process: 2433 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)Process: 2429 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)Main PID: 2438 (nginx)CGroup: /system.slice/nginx.service├─2438 nginx: master process /usr/sbin/nginx├─2439 nginx: worker process└─2440 nginx: worker process3月 02 13:40:42 7-1 systemd[1]: Starting The nginx HTTP and reverse prox.....
3月 02 13:40:43 7-1 nginx[2433]: nginx: the configuration file /etc/ngin...ok
3月 02 13:40:43 7-1 nginx[2433]: nginx: configuration file /etc/nginx/ng...ul
3月 02 13:40:43 7-1 systemd[1]: Started The nginx HTTP and reverse proxy...r.
Hint: Some lines were ellipsized, use -l to show in full.

 

[root@7-2 ~]#yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#安装依赖关系包
[root@7-2 ~]#useradd -M -s /sbin/nologin nginx
#新建Nginx用户  方便管理
[root@7-2 ~]#systemctl start nginx
[root@7-2 ~]#systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; static; vendor preset: disabled)Active: active (running) since Sat 2024-03-02 00:32:49 EST; 5s agoProcess: 1986 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)Process: 1983 ExecStartPre=/usr/local/nginx/sbin/nginx -t (code=exited, status=0/SUCCESS)Main PID: 1988 (nginx)CGroup: /system.slice/nginx.service├─1988 nginx: master process /usr/local/nginx/sbin/nginx└─1989 nginx: worker processMar 02 00:32:49 node2.localdomain systemd[1]: Starting The nginx HTTP and ....
Mar 02 00:32:49 node2.localdomain nginx[1983]: nginx: the configuration fi...k
Mar 02 00:32:49 node2.localdomain nginx[1983]: nginx: configuration file /...l
Mar 02 00:32:49 node2.localdomain systemd[1]: Failed to read PID from file...t
Mar 02 00:32:49 node2.localdomain systemd[1]: Started The nginx HTTP and r....
Hint: Some lines were ellipsized, use -l to show in full.
[root@7-2 ~]#cd /usr/local/nginx/
[root@7-2 nginx]#ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp
[root@7-2 nginx]#cd html/
[root@7-2 html]#ls
50x.html  index.html
[root@7-2 html]#mkdir /usr/local/nginx/html/static
[root@7-2 html]#ls
50x.html  index.html  static
[root@7-2 html]#cd static/
[root@7-2 static]#rz -E
rz waiting to receive.
[root@7-2 static]#ls
f32b966ddaf1002dfa4b2f6c556e57f0.jpg
[root@7-2 static]#mv f32b966ddaf1002dfa4b2f6c556e57f0.jpg nginx.jpg
[root@7-2 static]#ls
nginx.jpg
[root@7-2 static]#vim /usr/local/nginx/conf/nginx.conf

静态要加jpg,路径要修改为/usr/local/nginx/html/static 

[root@7-4 ~]#yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#安装依赖关系包
[root@7-4 ~]#useradd -M -s /sbin/nologin nginx
#新建Nginx用户 方便管理
[root@7-4 ~]#systemctl start nginx
[root@7-4 ~]#systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; static; vendor preset: disabled)Active: active (running) since 六 2024-03-02 13:33:00 CST; 12s agoProcess: 1962 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)Process: 1960 ExecStartPre=/usr/local/nginx/sbin/nginx -t (code=exited, status=0/SUCCESS)Main PID: 1964 (nginx)CGroup: /system.slice/nginx.service├─1964 nginx: master process /usr/local/nginx/sbin/nginx└─1965 nginx: worker process3月 02 13:32:59 G.D systemd[1]: Starting The nginx HTTP and reverse prox.....
3月 02 13:33:00 G.D nginx[1960]: nginx: the configuration file /usr/loca...ok
3月 02 13:33:00 G.D nginx[1960]: nginx: configuration file /usr/local/ng...ul
3月 02 13:33:00 G.D systemd[1]: Started The nginx HTTP and reverse proxy...r.
Hint: Some lines were ellipsized, use -l to show in full.
[root@7-4 ~]#cd /usr/local/nginx/html/
[root@7-4 html]#ls
50x.html  index.html
[root@7-4 html]#mkdir static
[root@7-4 html]#cd static/
[root@7-4 static]#ls
[root@7-4 static]#rz -E
rz waiting to receive.
[root@7-4 static]#ls
f32b966ddaf1002dfa4b2f6c556e57f0.jpg
[root@7-4 static]#mv f32b966ddaf1002dfa4b2f6c556e57f0.jpg nginx.jpg
[root@7-4 static]#ls
nginx.jpg

3.部署Tomcat服务及配置动态页面Web服务

Centos7-3和Centos7-6需要部署Tomcat服务

[root@7-3 ~]#cd /opt
[root@7-3 opt]#rz -E
rz waiting to receive.
[root@7-3 opt]#ls
jdk-8u291-linux-x64.tar.gz
[root@7-3 opt]#tar xf jdk-8u291-linux-x64.tar.gz 
[root@7-3 opt]#ls
jdk1.8.0_291  jdk-8u291-linux-x64.tar.gz
[root@7-3 opt]#java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@7-3 opt]#mv jdk1.8.0_291/ /usr/local/
[root@7-3 opt]#cd /usr/local/
[root@7-3 local]#ls
bin  games    jdk1.8.0_291  lib64    nginx  share
etc  include  lib           libexec  sbin   src
[root@7-3 local]#vim /etc/profile.d/jdk.sh 
[root@7-3 local]#cat /etc/profile.d/jdk.sh 
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@7-3 local]#source /etc/profile.d/jdk.sh 
[root@7-3 local]#echo $PATH
/usr/local/jdk1.8.0_91/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@7-3 local]#ln -s jdk1.8.0_291/ jdk
[root@7-3 ~]#java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@7-3 opt]#cd /opt
[root@7-3 opt]#ls
jdk-8u291-linux-x64.tar.gz
[root@7-3 opt]#rz -E
rz waiting to receive.
[root@7-3 opt]#ls
apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@7-3 opt]#tar xf apache-tomcat-9.0.16.tar.gz 
[root@7-3 opt]#ls
apache-tomcat-9.0.16  apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@7-3 opt]#cp -r apache-tomcat-9.0.16 /usr/local/
[root@7-3 opt]#cd /usr/local/
[root@7-3 local]#ls
apache-tomcat-9.0.16  etc    include       lib    libexec  sbin   src
bin                   games  jdk1.8.0_291  lib64  nginx    share
[root@7-3 local]#ln -s apache-tomcat-9.0.16/ tomcat
[root@7-3 local]#ls
apache-tomcat-9.0.16  etc    include       lib    libexec  sbin   src
bin                   games  jdk1.8.0_291  lib64  nginx    share  tomcat
[root@7-3 ~]#ss -natp |grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=3237,fd=57))
[root@7-3 ~]#cd /usr/local/tomcat/webapps/
[root@7-3 webapps]#ls
docs  examples  host-manager  manager  ROOT
[root@7-3 webapps]#mkdir test
[root@7-3 webapps]#ls
docs  examples  host-manager  manager  ROOT  test
[root@7-3 webapps]#cd test/
[root@7-3 test]#ls
[root@7-3 test]#vim index.jsp
[root@7-3 test]#cat index.jsp 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><tile>JSP test1 page </title></head><boby><% out.println("动态页面1,http://www.test1.com");%></boby>
</html>
[root@7-3 test]#vim /usr/local/tomcat/conf/server.xml 
[root@7-3 test]#/usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@7-4 static]#vim /usr/local/nginx/conf/nginx.conf

[root@7-6 ~]#cd /opt
[root@7-6 opt]#rz -E
rz waiting to receive.
[root@7-6 opt]#ls
jdk-8u291-linux-x64.tar.gz
[root@7-6 opt]#tar xf jdk-8u291-linux-x64.tar.gz 
[root@7-6 opt]#ls
jdk1.8.0_291  jdk-8u291-linux-x64.tar.gz
[root@7-6 opt]#java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@7-6 opt]#mv jdk1.8.0_291/ /usr/local/
[root@7-6 opt]#cd /usr/local/
[root@7-6 local]#ls
bin  games    jdk1.8.0_291  lib64    nginx  share
etc  include  lib           libexec  sbin   src
[root@7-6 local]#ln -s jdk1.8.0_291/ jdk
[root@7-6 local]#vim /etc/profile.d/jdk.sh 
[root@7-6 local]#cat /etc/profile.d/jdk.sh 
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@7-6 local]#source /etc/profile.d/jdk.sh 
[root@7-6 ~]#java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@7-6 local]#cd /opt/
[root@7-6 opt]#ls
jdk-8u291-linux-x64.tar.gz
[root@7-6 opt]#rz -E
rz waiting to receive.
[root@7-6 opt]#ls
apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@7-6 opt]#tar xf apache-tomcat-9.0.16.tar.gz 
[root@7-6 opt]#cp -r apache-tomcat-9.0.16 /usr/local/
[root@7-6 opt]#cd /usr/local/
[root@7-6 local]#ls
apache-tomcat-9.0.16  etc    include       lib    libexec  sbin   src
bin                   games  jdk1.8.0_291  lib64  nginx    share
[root@7-6 local]#ln -s apache-tomcat-9.0.16/ tomcat
[root@7-6 local]#ls
apache-tomcat-9.0.16  etc    include       lib    libexec  sbin   src
bin                   games  jdk1.8.0_291  lib64  nginx    share  tomcat
[root@7-6 ~]#/usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@7-6 ~]#ss -natp|grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=2811,fd=57))
[root@7-6 ~]#cd /usr/local/tomcat/webapps/
[root@7-6 webapps]#ls
docs  examples  host-manager  manager  ROOT
[root@7-6 webapps]#mkdir test
[root@7-6 webapps]#ls
docs  examples  host-manager  manager  ROOT  test
[root@7-6 webapps]#cd test/
[root@7-6 test]#ls
[root@7-6 test]#vim index.jsp
[root@7-6 test]#cat index.jsp 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><tile>JSP test2 page </title></head><boby><% out.println("动态页面2,http://www.test2.com");%></boby>
</html>
[root@7-6 test]#vim /usr/local/tomcat/conf/server.xml 
[root@7-6 test]#/usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

4.实验验收

动态页面

[root@7-1 opt]#tail -f /var/log/nginx/access.log 

静态页面

[root@7-1 opt]#tail -f /var/log/nginx/access.log 

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

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

相关文章

js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白写法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…

链表基础知识详解(非常详细简单易懂)

概述&#xff1a; 链表作为 C 语言中一种基础的数据结构&#xff0c;在平时写程序的时候用的并不多&#xff0c;但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛&#xff0c;所以必须要搞懂链表&#xff0c;链表分为单向链表和双向链表&#xff0c;单向链表很…

【Vue3】解锁Vue3黑科技:探索接口、泛型和自定义类型的前端奇迹

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Android Compose - PlainTooltipBox(已废弃)的替代方案

Android Compose - PlainTooltipBox 的替代方案 TooltipBox(positionProvider TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip {PlainTooltip {Text(/* tooltip content */)}},state rememberTooltipState(), ) {// tooltip anchorIconButton(onClick {…

跨站脚本攻击xss-labs(1-20)靶机练手

目录 一、跨站脚本攻击&#xff08;XSS&#xff09; 1.1 漏洞简介 1.2:类型 1.3 XSS危害 1.4XSS防御规则 二、环境搭建 三、xsst通关记录 Level 1&#xff1a;文本解析为 HTML Level 2&#xff1a;htmlspecialchars;input 标签 value 注入 定义和用法 字符过滤绕过 …

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”&#xff0c;它允许你将一个或多个程序及其运行环境打包在一起&#xff0c;形成一个标准化的单元&#xff0c;这个单元可以在任何支持Docker的系统上运行&#xff…

实用!IntelliJ IDEA离线开发使用要点(一)

如果IntelliJ IDEA在本地网络之外没有HTTP访问&#xff0c;它将无法检查更新和应用补丁。在这种情况下&#xff0c;您必须下载新版本的IDE并按照离线安装中的描述手动安装它们。 IDEA v2023.3正式版下载 注意&#xff1a;没有互联网接入&#xff0c;您不能安装IntelliJ IDEA使…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

学习:吴恩达:什么是神经元?神经网络如何工作?

学习-吴恩达《AI for everyone》2019 深度学习非技术解释 第2部分 可选.zh_哔哩哔哩_bilibili 深度学习Deep learning 人工神经网络Artificial Neural network 什么是神经网络&#xff1f; 只有一个神经元 4个神经元的神经网络 神经网路的绝妙之处 神经网路的绝妙之处就在…

Java快读

java的快读 (1)BufferedReader BufferedReader br new BufferedReader(new InputStreamReader(System.in));//定义对象String[] strings br.readLine().split(" ");//读取一行字符串&#xff0c;以空格为分隔转化为字符串数组int n Integer.parseInt(strings[0])…

k8s分布式图床(k8s,metricsapi,vue3+ts)

image-manage 图像管理应用 图像管理应用提供了一个方便管理图片的平台&#xff0c;支持单机和Kubernetes集群部署。请确保您至少拥有一个MySQL数据库和一个Redis数据库&#xff0c;以及一个至少为Kubernetes 1.29版本的集群&#xff08;如果选择集群部署&#xff09;。 文档…

PCL1.14.0安装、使用教程

写在前面 本文内容 本文是PCL1.14.0在Windows下的安装、使用教程&#xff1b; PCL、Open3D其他版本的编译和使用相关教程见 各个版本的Open3D、PCL的编译、使用教程平台/环境 windows11(windows10): visual studio 2022&#xff1b;cmake 3.22; VsCode转载请注明出处&#xff…

http和https的区别是什么?

–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议&#xff1a;是超文本传输协议&#xff0c;信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息。 2、h…

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路&#xff08;升序&#xff09; 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的…

BUUCTF---数据包中的线索1

1.题目描述 2.下载附件&#xff0c;是一个.pcap文件 3.放在wireshark中&#xff0c;仔细观察数据流&#xff0c;会发现有个叫fenxi.php的数据流 4.这条数据流是http,且使用GET方式&#xff0c;接下来我们使用http.request,methodGET 命令来过滤数据流 5.在分析栏中我们追踪htt…

查看端口占用命令

fuser 8080/tcp netstat -tuln | grep 8080 lsof -i:8080 ss -tuln | grep 8080

数据挖掘:航空公司的客户价值分析

需求分析 理解并掌握聚类分析方法&#xff0c;掌握数据的标准化&#xff0c;掌握寻找最佳聚类数&#xff0c;掌握聚类的绘图&#xff0c;掌握聚类分析的应用场景。 系统实现 实验流程分析 借助航空公司数据&#xff0c;对客户进行分类对不同类别的客户进行特征分析&#xf…

IEEE754标准的c语言阐述,以及几个浮点数常量

很多年前&#xff0c;调研过浮点数与整数之间的双射问题&#xff1a; win7 intel x64 cpu vs2013 c语言浮点数精度失真问题 最近重新学习了一下IEEE754标准&#xff0c;也许实际还有很多深刻问题没有被揭示。 计算机程序设计艺术&#xff0c;据说这本书中也有讨论。 参考&…

抖音视频批量采集软件|视频评论下载工具

在日常工作中&#xff0c;需要频繁下载抖音视频&#xff0c;但逐个复制分享链接下载效率太低&#xff1f;别担心&#xff01;我们推出了一款专业的抖音视频批量采集软件&#xff0c;基于C#开发&#xff0c;满足您的需求&#xff0c;让您通过关键词搜索视频并自动批量抓取&#…

力扣每日一题 受限条件下可到达节点的数目 DFS

Problem: 2368. 受限条件下可到达节点的数目 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {int ans 0;boolean[] set;List<Integer>[] es;publ…