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

【Tomcat服务部署及优化】

Tomcat

  • 一、什么是Tomcat?
  • 二、Tomcat 核心组件
    • 2.1 Tomcat 组件
    • 2.3 Container组件的结构
    • 2.4 Tomcat 请求过程
  • 三、Tomcat 部署
    • 3.1 安装JDK
    • 3.2 设置JDK环境变量
    • 3.3 安装Tomcat并用supervisor启动
        • 解压
        • 添加到supervisord服务
        • 测试能否通过supervisorctl启动
  • 四、Tomcat的端口和主要目录
    • 4.1 Tomcat端口
    • 4.2 主要目录
  • 五、Tomcat虚拟主机
    • 5.1 为什么要用虚拟主机?
    • 5.2 配置虚拟主机(基于域名)
  • 六、Tomcat优化
    • 6.1 配置文件优化
    • 6.2 系统内核优化
    • 6.3 JVM优化

一、什么是Tomcat?

Tomcat服务器是Java语言开发的,免费的开放源代码的Web应用服务器
Tomcat处理静态HTML的能力远不及Apache或者Nginx,通常是作为一个Servlet和JSP容器,单独运行在后端。

二、Tomcat 核心组件

2.1 Tomcat 组件

在这里插入图片描述

Tomcat的核心功能组件有两个:

负责接收和反馈外部请求连接器Connector

负责处理请求容器Container

其中连接器和容器相辅相成,一起构成了基本的web服务Service。

Connector:暴露监听端口,接收客户端发来的请求和返回响应消息给客户端

Container : 负责处理用户请求的业务逻辑。由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系

2.3 Container组件的结构

在这里插入图片描述

Container 结构分析:
每个Service会包含一个Container容器。在Container内部包含了4个子容器,4个子容器的作用:
Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine;
Host:代表一个虚拟主机,也可以叫站点,通过配置Host就可以添加站点;
Context:代表一个Web应用,包含多个Servlet封装器;
Wrapper:封装器,容器的最底层。每一Wrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能。

Engine、Host、Context 和 Wrapper,这四个容器之间属于层层递进的父子关系

engine: 引擎,管理多个虚拟主机,一个container只有一个engine

host: 代表一个虚拟主机

context: 管理web应用的路径

servlet封装器,负责处理业务逻辑wrapper:

2.4 Tomcat 请求过程

客户端请求过程:

客户端浏览器——> connector ——>container(engine)——>host ——>context——>wrapper

container(engine) 根据域名发送给对应的虚拟主机
host 根据用户访问的URL路径
context 根据URL路径对应的Web应用
wrapper 根据应用程序处理业务逻辑

三、Tomcat 部署

3.1 安装JDK

#关闭防火墙和selinux
systemctl disable firewalld --now
setenforce 0#将源代码包置于/opt下
apache-tomcat-9.0.16.tar.gz 
jdk-8u201-linux-x64.rpm

在这里插入图片描述

#安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 

在这里插入图片描述

rpm -ql jdk1.8 | tail -n 1
#确定安装路径

在这里插入图片描述

cd /usr/java/jdk1.8.0_201-amd64/;ls - bin: 存放 Java 可执行文件的目录
- include: 存放 Java 开发头文件的目录
- jre: 存放 Java 运行时环境的目录
- LICENSE: JDK 许可证文件
- README.html: JDK 的直观说明文档(HTML 格式)
- src.zip: JDK 的源代码压缩包
- THIRDPARTYLICENSEREADME.txt: 第三方许可证文档
- COPYRIGHT: JDK 的版权信息
- javafx-src.zip: JavaFX 源代码压缩包
- lib: 存放 JDK 和 JavaFX 库文件的目录
- man: 存放 JDK 手册页(man page)文件的目录
- release: JDK 的版本信息
- THIRDPARTYLICENSEREADME-JAVAFX.txt: JavaFX 第三方许可证文档

在这里插入图片描述

java -version 
#JDK版本

在这里插入图片描述

3.2 设置JDK环境变量

#查看全局配置文件
vim /etc/profile

在这里插入图片描述

vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#最左原则:linux查找可执行文件是根据PATH变量从左往右查找,找到即停止。
#所以需要将安装版本的路径放在$PATH前面`CLASSPATH` 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。#CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME

在这里插入图片描述

source /etc/profile.d/java.shjava -version#查看JDK版本

在这里插入图片描述

测试

找一个java脚本,测试java是否安装成功

在这里插入图片描述

javac HelloWorld.java #编译

在这里插入图片描述

java -cp . HelloWorld #执行

在这里插入图片描述

#补充
---------------------------------小知识-------------------------------------------------------------------
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
dt.jar:dt.jar是关于运行环境的类库,主要是swing包。
----------------------------------------------------------------------------------------------------------

3.3 安装Tomcat并用supervisor启动

解压

#解压tomcat安装包
cd /opt
tar zxf apache-tomcat-9.0.16.tar.gz   

在这里插入图片描述

#将源码包目录拷贝至/usr/local/下并重命名为tomcat
#简化路径,方便管理
mv apache-tomcat-9.0.16 /usr/local/tomcat

在这里插入图片描述

#启动Tomcat的方法,省略路径
startup.sh          #后台启动tomcat
catalina.sh start   #后台启动tomcat
catalina.sh run     #前台启动 tomcat#关闭Tomcat的方法:
shutdown.sh      关闭tomcat#查看tomcat是否启动:
netstat ss ps jps

添加到supervisord服务

supervisor简介

supervisor是Python开发的c/s服务,是Linux系统下的进程管理工具。

可以监听、启动、停止、重启一个或多个进程。

用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程的自动恢复的功能,不在需要自己写脚本来控制。

#supervisor常用命令
#supervisorctl是supervisord的命令行工具supervisorctl status           查看所有进程的状态supervisorctl stop <name>      停止进程supervisorctl start <name>     启动进程supervisorctl restart <name>   重启进程supervisorctl update           配置文件修改后可以使用该命令加载新的配置supervisorctl reload           重载

supervisor不能监控后台进程,command不能为后台运行命令

配置部分

#安装源和服务
yum install -y epel-release
yum install -y supervisor#建立管理用户
useradd tomcat
chown -R tomcat:tomcat /usr/local/tomcat

在这里插入图片描述

#编辑主配置文件
vim /etc/

在这里插入图片描述

vim /etc/etc/supervisord.d/tomcat.conf[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run  ;程序启动命令
autostart=true          ;在supervisord启动的时候也自动启动
startsecs=10            ;启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true        ;程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3          ;启动失败自动重试次数,默认是3
user=tomcat             ;用哪个用户启动进程,默认是root
priority=999            ;进程启动优先级,默认999,值小的优先启动
redirect_stderr=true    ;把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=200MB    ;stdout 日志文件大小,默认50MB
stdout_logfile_backups=20        ;stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程#无释义版
[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run
autostart=true
startsecs=10
autorestart=true
startretries=3
user=tomcat
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=200MB
stdout_logfile_backups=20
stdout_logfile=/var/log/supervisor/logs/catalina.out
stopasgroup=false
killasgroup=false

在这里插入图片描述

mkdir -p /var/log/supervisor/logs #创建日志路径systemctl start  supervisord  #启动服务
systemctl enable supervisord #开机自启#启动方式二
#supervisord -c /etc/supervisord.conf supervisorctl reread #重新加载 Supervisor 的配置
supervisorctl update #应用新的配置

在这里插入图片描述

测试能否通过supervisorctl启动

supervisorctl start tomcat
supervisorctl status tomcat

在这里插入图片描述

浏览器访问Tomcat的默认主页 http://192.168.2.100:8080

在这里插入图片描述

四、Tomcat的端口和主要目录

4.1 Tomcat端口

8080: 默认接收 http 请求的端口

8005: 安全端口,可以关闭tomcat

8009: apache 和 tomcat 联动 AJP 协议

8443:负责处理https请求连接

4.2 主要目录

目录名字功能
bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh
conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
logs存放 Tomcat 日志
temp存放 Tomcat 运行时产生的文件
webapps存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到
文件名说明
server.xml主配置文件
web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等
注意配置文件对于大小写敏感

五、Tomcat虚拟主机

5.1 为什么要用虚拟主机?

可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。

5.2 配置虚拟主机(基于域名)

配置思路

例如现在新增两个域名 www.byyb.com,www.byyd.com

希望通过这两个域名访问到不同的项目内容。

1)在 webapps 日录中添加各个站点的网页根目录,准备测试页面文件。

2)修改 tomcat 主配置文件 server.xml

在 Engine 配置段下面添加多 Host 配置段,设置不同的虚拟主机配置参数;

在 Host 配置段下添加一个或多个 context 配置段,设置虚拟主机的web应用程序的存放位置。

docBase="/usr/local/tomcat/webapps/ky31" path=nhttp://www.ky31.com:8080/test/abc.html -> /usr/local/tomcat/webapps/ky31/test/abc.htmldocBase="/usr/local/tomcat/webapps/ky31" path="test"http://www.ky31.com:8080/test/abc.html -> /usr/local/tomcat/webapps/ky31/abc.html

具体配置

1.创建 byyb 和 byyd 项目目录和文件

mkdir /usr/local/tomcat/webapps/byyb
mkdir /usr/local/tomcat/webapps/byydecho "This is byyb\!" > /usr/local/tomcat/webapps/byyb/index.jspecho "This is byyd\!" > /usr/local/tomcat/webapps/byyd/index.jsp

在这里插入图片描述

2.修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml#165行前插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/byyb" path="" reloadable="true" />
</Host><Host name="www.byyd.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/byyd" path="" reloadable="true" />\
</Host> ##注释##
Host 
name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验Context
docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
##

在这里插入图片描述

#重新启动
supervisorctl restart tomcat

在这里插入图片描述

echo "192.168.2.100 www.byyb.com www.byyd.com" >> /etc/hosts

28.png&pos_id=img-Xmeb7w3n-1694224381586)

3.浏览器访问验证

#使用虚拟机的浏览器访问,windows需要修改本地hosts文件
浏览器访问 http://www.byyb.com:8080/ 
浏览器访问 http://www.byyd.com:8080/ 

在这里插入图片描述

六、Tomcat优化

怎么查看线程数?

ss -natp | grep java 看pid

ps -T -p pid

6.1 配置文件优化

maxThreads (最大线程数/并发)

processorCache (进程缓冲)

acceptCount (等待队列数)

enableLookups (关闭DNS反向解析)

URIEncoding (网页字符集编码UTF-8)

maxKeepAliveRequests (长连接最大请求数)

connectionTimeout (连接超时时间)

compression (开启页面压缩)

6.2 系统内核优化

/etc/security/limits.conf 
nofile 
nproc  
memlock
/etc/sysct1.conf   
net .ipv4.tcp_tw_reuse=1   
net.ipv4.tcp_tw_recycle=1  
net.ipv4.tcp_fin_timeout=30  
net.ipv4.tcp_max_tw_buckets=5000              net.ipv4.ip_local_port_range=1024 65535

6.3 JVM优化

参数说明举例
-Xms设置应用程序初始使用的堆内存大小(年轻代+老年代)-Xms2g
-Xmx设置应用程序能获得的最大堆内存早期JVM不建议超过32G,内存管理效率下降-Xms4g
-XX:NewSize设置初始新生代大小-XX:NewSize=128m
-XX:MaxNewSize设置最大新生代内存空间-XX:MaxNewSize=256m
-Xmnsize同时设置-XX:NewSize 和 -XX:MaxNewSize,代-Xmn1g
-XX:NewRatio以比例方式设置新生代和老年代-XX:NewRatio=2new/old=1/2
-XX:SurvivorRatio以比例方式设置eden和survivor(S0或S1)-XX:SurvivorRatio=6eden/survivor=6/1new/survivor=8/1
-Xss设置每个线程私有的栈空间大小,依据具体线程-Xss256k

catalina.sh 中设置 JAVA_OPTS 参数。

JAVA OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2046m -Xx:PermSize-1024m -XX:MaxPermSize=1024m -Xmn768m"
-server 表示启用JDK的server模式,实现在多核服务器性能更佳 -Xms2048m 
-Xmx2048m 设置JVM堆内存初始值和最大值一样大,一般设置为物理内存的 1/2-XX:Permsize=1024m 
-XX:MaxPermsize=1024m
设置永久代《非堆内存) 初始值和最大最一样大,一般设置为物理内存的 1/4初始值和最大最设置一样大的原因?
可以减少GC次数和内存伸缩带来的频繁内存中请,从而减少一定的系统开销。-Xmn 设置JVM堆内存新生代的大小,一般设置为堆内存的 3/8-xx:ParallelGCThreads=-2 设置并行GC(垃圾回收) 线程数,提高垃圾回收效率 
-XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof  设置进程发生OOM异常退出会进行DUMP备份
-XX:+DisableExplicitGc 禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低

相关文章:

【Tomcat服务部署及优化】

Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要…...

C++之红黑树

红黑树 红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树与AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上…...

Go语言网络编程(socket编程)TCP

1、TCP编程 1.1.1 Go语言实现TCP通信 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议&#xff0c;是一种面向连接&#xff08;连接导向&#xff09;的、可靠的、基于字节流的传输层&#xff08;Transport layer&#xff09;通信协…...

C语言——局部和全局变量

局部变量 定义在函数内部的变量称为局部变量&#xff08;Local Variable&#xff09; 局部变量的作用域(作用范围)仅限于函数内部&#xff0c; 离开该函数后是无效的 离开该函数后&#xff0c;局部变量自动释放 示例代码&#xff1a; #include <stdio.h>// 函数定义 …...

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言 当一个事物的内部&…...

合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)

页面 (Page) 当控件内容过多&#xff0c;无法在屏幕内完整显示时&#xff0c;可让其在 页面 内显示。 示例代码 page lvgl.page_create(lvgl.scr_act(), nil) lvgl.obj_set_size(page, 150, 200) lvgl.obj_align(page, nil, lvgl.ALIGN_CENTER, 0, 0)label lvgl.label_crea…...

mongodb数据库操作

1、启动mongodb /usr/local/mongodb/bin/mongod --dbpath /var/mongodb/data/--logpath /var/mongodb/logs/log.log &在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二…...

第 2 章 线性表 ( 双链循环线性表(链式存储结构)实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_NULL_PTR…...

redis在日常开发工作中的常见用法

redis是一款内存型数据库&#xff0c;在开发工作中经常用到&#xff0c;功能强大&#xff1b; 特别开一篇文章用来记录一下它的常见用法&#xff0c;算是一种总结&#xff1b; 它最主要的特点就是高可用的&#xff0c;速度快&#xff0c;分布式&#xff1b;有人说速度快&…...

小程序实现下拉刷新

小程序实现下拉刷新可以通过使用组件scroll-view和事件onPullDownRefresh来实现。 scroll-view组件的使用 在需要下拉刷新的页面的wxml文件中&#xff0c;通过scroll-view组件包裹需要滚动的内容&#xff0c;设置scroll-y属性为true&#xff0c;表示允许竖向滚动。示例代码如…...

Day 36 贪心算法 part05 : 435. 无重叠区间 763.划分字母区间 56. 合并区间

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;inte…...

使用Python将网页数据保存到NoSQL数据库的方法和示例

随着大数据和人工智能技术的快速发展&#xff0c;对于大规模数据的处理需求日益增多。NoSQL数据库作为一种新兴的数据存储解决方案&#xff0c;具有高可扩展性、高性能和灵活性数据模型等优势&#xff0c;已经在许多行业得到广泛应用。传统的关系型数据库在处理海量数据时可能会…...

两个路由器如何连接设置的方法攻略

一、前言 随着智能家居时代来临&#xff0c;家里的网络部署需求开始复杂起来。往往一个路由器已经不能满足需求或者不利于拓展。两个路由器连接最常见的情况是家中已有一个路由器&#xff0c;并且已经通过这个路由器来正常上网。现在是因某些原因想在不改变已经在用的路由器的设…...

分类任务评价指标

分类任务评价指标 分类任务中&#xff0c;有以下几个常用指标&#xff1a; 混淆矩阵准确率&#xff08;Accuracy&#xff09;精确率&#xff08;查准率&#xff0c;Precision&#xff09;召回率&#xff08;查全率&#xff0c;Recall&#xff09;F-scorePR曲线ROC曲线 1. 混…...

c++静态成员

目录 静态成员 静态成员变量 静态成员函数 const 静态成员属性 静态成员实现单例模式 静态成员 在类定义中&#xff0c;它的成员&#xff08;包括成员变量和成员函数&#xff09;&#xff0c;这些成员可以用关键字 static 声明为静态的&#xff0c;称为静态成员。 不管这…...

go-zero直连与etcd服务注册中心

go-zero中直连方式 在使用grpc是最重要的就是pb文件了&#xff0c;生成的pb文件&#xff0c;通过pb文件可以生成grpc的客户端和服务端&#xff0c;那么客户端和服务端就可以直连了&#xff0c;再次基础上可以引入etcd实现服务注册。 所有的代码都需要开发者编写&#xff0c;包…...

Kotlin File writeText appendText appendBytes readBytes readText

Kotlin File writeText appendText appendBytes readBytes readText import java.io.Filefun main(args: Array<String>) {val filePath "./myfile.txt"val file File(filePath)file.writeText("hello,") //如果原有文件有内容&#xff0c;将完全覆…...

常见缺少msvcp140.dll问题及解决方法,分享多种方法帮你解决

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;比如电脑提示msvcp140.dll文件丢失。这个问题通常是由于某些程序或游戏需要这个dll文件来正常运行&#xff0c;但是由于某种原因&#xff0c;这个文件被误删或者损坏了。那么&#xff0c;如何解决这个问题…...

【K210+ESP8266图传上位机开发】TCP server + JPEG图像解析上位机开发

本文章主要记录基于 【K210-ESP8266】 图传和显示的过程&#xff0c;上位机开发过程&#xff0c;系统架构和下位机开发请参考文章&#xff1a; 【K210-ESP8266】开发板上传图像数据到服务器并实时显示 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知…...

Linux查看当前文件夹的大小

在Linux中&#xff0c;可以使用du&#xff08;disk usage&#xff09;命令来查看当前文件夹的大小。以下是一些使用du的方法&#xff1a; 查看当前文件夹的大小&#xff1a; 为了查看当前文件夹的总大小&#xff0c;可以在文件夹中运行&#xff1a; du -sh .这里&#xff1a; -…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...