Day 40 Web容器-Tomcat

Tomcat

一:Tomcat简介

1.简介

image-20230518232204478

​ Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目

​ Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器

​ Tomcat是WEB容器/WEB中间件

​ Tomcat官网:https://tomcat.apache.org/

2.端口

​ Tomcat自身服务的端口:8005

​ Tomcat和其他应用通信的端口:8009

​ Tomcat给客户端浏览器访问页面使用的端口:8080

3.运行环境

​ JDK是 Java 语言的软件开发工具包

​ JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具

​ Tomcat运行需要JDK,用于运行war包的代码(jar包只需要jdk就能跑)

4.Web容器

web容器/web中间件

Python语言开发的项目所使用的web中间件uWSGI

Php语言开发的项目所使用的web中间件php,php-fpm

Java语言开发的项目所使用的web中间件Tomcat,Jboss,weblogic

Java项目有两种包分别是jar包和war包

jar包可以直接在jdk环境下运行,使用命令java -jar jar包名

jar包环境:linux + nginx/apache + jdk + mysql (LN/AJM)

war包则需要在Tomcat+jdk环境下运行

war包环境:linux + nginx/apache + jdk + tomcat + mysql (LN/AJTM)

此外前端项目(H5)和后端项目(Java)在发布使用之前都需要进行构建

前端项目使用Vue进行构建

开发人员构建(Windows环境):idea + node.js插件(Vue)

运维人员构建(Linux环境):node.js(Vue)的npm命令

后端项目使用Maven进行构建

开发人员构建(Windows环境): idea+jdk+ tomcat+ maven

运维人员构建:(Linux环境): jdk + maven 使用mvn命令

二:Tomcat安装

1.上传

​ 官网里面扒拉,略

2.安装

Tomcat需要Java环境

此处选择 Tomcat9 版本和 jdk8 版本

Tomcat下载:https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz

jdk下载:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

[root@xingdiancloud ~]# tar xf apache-tomcat-7.0.34.tar.gz -C /usr/local/
[root@xingdiancloud ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@xingdiancloud ~]# ln -s /usr/local/jdk1.8.0_91 /usr/local/java
[root@xingdiancloud ~]# ln -s /usr/local/apache-tomcat-7.0.34 /usr/local/tomcat
3.环境变量
[root@xingdiancloud ~]# vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@xingdiancloud ~]# source /etc/profile
4.检测
[root@xingdiancloud ~]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
5.启动Tomcat

在启动tomcat之前,要去修改一下 /usr/local/tomcat/conf/server.xml 文件,打开8009端口(默认关闭)

删除亮色蓝框里的两个注释

在这里插入图片描述

启动tomcat

[root@xingdiancloud ~]# /usr/local/tomcat/bin/startup.sh
6.管理方式
启动tomcat的方法:1.直接执行/usr/local/tomcat/bin/startup.sh2.直接执行/usr/local/tomcat/bin/catalina.sh start
关闭tomcat的方法:1.直接执行/usr/local/tomcat/bin/shutdown.sh2.直接执行/usr/local/tomcat/bin/catalina.sh stop在/usr/bin/目录下创建一个脚本tomcat来对其进行便捷管理,可以在任何目录下调用这个脚本方案一:通过tomcat start 或 tomcat stop 来打开或关闭tomcatcat /usr/bin/tomcat#!/usr/bin/bash/usr/local/tomcat/bin/catalina.sh $1方案二:通过tomcat start,tomcat stop和tomcat restart 来打开,关闭或重启tomcatcat /usr/bin/tomcat#!/usr/bin/bashcase $1 instart)/usr/local/tomcat/bin/startup.sh;;stop)/usr/local/tomcat/bin/shutdown.sh ;;restart)/usr/local/tomcat/bin/shutdown.shsleep 3/usr/local/tomcat/bin/startup.sh;;esac使用脚本别忘了给脚本执行权限:chmod a+x /usr/bin/tomcat 
7.检测
[root@xingdiancloud ~]# netstat -tnlp |grep java
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                   		LISTEN      6191/java           
tcp        0      0 :::8009                     :::*                        LISTEN      6191/java           
tcp        0      0 :::8080                     :::*                        LISTEN      6191/java     
8.测试

​ IP+端口访问

9.Tomcat目录

Tomcat主目录介绍

[root@java-tomcat1 tomcat]# tree -L 1
.
├── bin     #存放tomcat的管理脚本(二进制文件)
├── BUILDING.txt
├── conf    #tomcat的配置文件(server.xml)
├── CONTRIBUTING.md
├── lib      #web应用调用的jar包存放路径
├── LICENSE
├── logs     #tomcat日志存放目录
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp     #存放临时文件
├── webapps  #默认网站发布目录
└── work     #存放编译生产的.java与.class文件

Webapps目录介绍

[root@java-tomcat1 webapps]# tree -L 1
.
├── docs  #tomcat的帮助文档
├── examples  #web应用实例
├── host-manager  #主机管理
├── manager    #管理
└── ROOT    #默认站点根目录

Tomcat配置文件目录介

[root@java-tomcat1 conf]# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── logs
├── server.xml           # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml    # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml

三:部署JSPGOU项目

1.环境准备

​ Tomcat服务器正常运行Tomcat

​ 数据库服务器部署

2.框架

单机架构

集群架构:

image-20230518234046405
3.数据库部署

​ 安装:略

​ 创建数据库:

create database jspgou default charset=utf8;

​ 授权:略

​ 上传数据库文件:略

​ 修改配置(仅限jspgou项目):

[root@xingdiancloud ~]# vim /etc/my.cnf
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp=1

​ 参数解释:

STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制
NO_ZERO_IN_DATE:在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。ERROR_FOR_DIVISION_BY_ZERO:在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULLNO_AUTO_CREATE_USER:防止GRANT自动创建新用户,除非还指定了密码。NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

​ 数据库导入:略(数据库文件来自4.1解压的sql文件)

[root@xingdiancloud ~]# mysql -u root -p123 -D jspgou < jspgou.sql
4.项目上线(Tomcat)

​ 解压项目:略

​ 使用scp将数据库文件远程拷贝到数据库

​ 将项目放到指定目录下;网站发布目录

[root@xingdiancloud ~]# cp -r ROOT/ /usr/usr/local/tomcat/webapps/ 

​ 更改数据库连接

[root@xingdiancloud ~]# vim /usr/local/tomcat/webapps/ROOT\WEB-INF\config\jdbc.properties
jdbc.url=jdbc:mysql://数据库服务器IP:3306/创建好的数据库名?characterEncoding=UTF-8
jdbc.username=用户名
jdbc.password=密码
5.访问测试
系统管理后台登录:http://localhost:8080/jeeadmin/jspgou/index.do
用户名:admin
密  码:123456
6.Tomcat启动慢解决方案
[root@xingdiancloud ~]# yum install rng-tools
[root@xingdiancloud ~]# systemctl start rngd

四:Tomcat扩展

1.Tomcat配置文件

​ server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

​ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;

​ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;

​ catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;

​ catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;

​ logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志;

​ context.xml:所有host的默认配置信息;

1、Server组件:
<Server port=”8005” shutdown=”SHUTDOWN”>
port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
2、Service组件:
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。因此,Service要包含一个引擎、一个或多个连接器。
如上面示例中的定义:
<Service name=”Catalina”>
这定义了一个名为Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当中。
Service相关的属性:
className: 用于实现service的类名,一般都是org.apache.catalina.core.StandardService。
name:此服务的名称,默认为Catalina;
3、Connector组件:
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
Tomcat作为独立服务器:请求来自于web浏览器;
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。
定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:
1) HTTP连接器 2) SSL连接器 3) AJP 1.3连接器 4) proxy连接器
如上面示例server.xml中定义的HTTP连接器:
<Connector port=”8080″ protocol=”HTTP/1.1″
maxThreads=”150″ connectionTimeout=”20000″
redirectPort=”8443″/>
4、Engine组件:
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件。如前面示例中定义的:
<Engine name=”Catalina” defaultHost=”localhost”>
5、Host组件:
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面示例中的定义:
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
</Host>
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;
unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;
2.Tomcat管理
1.编辑一个文件tomcat
[root@tomcat ~]# vim tomcat
#!/bin/bash
bash /usr/local/tomcat/bin/catalina.sh $12.给tomcat文件加执行权限[root@tomcat ~]# chmod a+x tomcat3.把tomcat放到/usr/bin目录下[root@tomcat ~]# mv tomcat /usr/bin4.使用[root@tomcat ~]# tomcat stop  停止
[root@tomcat ~]# tomcat start  启动

五:Tomcat多实例

1.简介

​ 多实例运行不同的应用(类似虚拟主机)

​ 多实例运行相同的应用(实现负载均衡)

2.多实例部署

在一个工作目录下创建多实例目录

instance1: mdkir -pv /usr/local/tomcat/instance1/{conf,logs,temp,work}       8081     8091
instance2: mdkir -pv /usr/local/tomcat/instance2/{conf,logs,temp,work}       8082     8092
instance3: mdkir -pv /usr/local/tomcat/instance3/{conf,logs,temp,work}       8083     8093

创建多实例目录,根据实例多少确定

分别创建目录instance1 instance2 instance3,拷贝原来的conf,log,temp,work到3个目录下

[root@www ~]# tree -d -L 2 /usr/local/tomcat/
/usr/local/tomcat/
├── bin
├── instance1
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance2
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance3
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
└── lib

拷贝原来单实例的webapps到/下(/usr/local/tomcat/webapps) 路径可以自定义,但要和配置文件

[root@www ~]#  cp -r /usr/local/tomcat/webapps  /

配置实例server.xml

[root@www ~]# vim /usr/local/tomcat/instance1/conf/server.xml
<Server port="8091" shutdown="SHUTDOWN">  //修改8005
<Connector port="8081" protocol="HTTP/1.1"   //修改8080connectionTimeout="20000"redirectPort="8443" />删除8009的配置
<Host name="localhost"  appBase="/webapps"   //修改网站基准目录unpackWARs="true" autoDeploy="true">
......

脚本内容这个脚本在每个实例中都要有 启动tomcat(实例)

[root@www ~]# vim /usr/local/tomcat/instance1/ins1.sh#!/bin/bash
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance1"
export CATALINA_HOME="/usr/local/tomcat"
case $1 in
start)$CATALINA_HOME/bin/startup.sh;;
stop)$CATALINA_HOME/bin/shutdown.sh;;
restart)$CATALINA_HOME/bin/shutdown.shsleep 5$CATALINA_HOME/bin/startup.sh;;
esac

启动测试

[root@www ~]# /usr/local/tomcat/instance1/ins1.sh start
[root@www ~]# /usr/local/tomcat/instance2/ins2.sh start
[root@www ~]# /usr/local/tomcat/instance3/ins3.sh start、[root@www ~]# ss -tnlp |grep :80
LISTEN  0  100  :::8081                :::*  users:(("java",pid=7288,fd=48))
LISTEN  0  100  :::8082                :::*  users:(("java",pid=7468,fd=48))
LISTEN  0  100  :::8083                :::*  users:(("java",pid=7496,fd=48))
LISTEN  0  1    ::ffff:127.0.0.1:8091  :::*  users:(("java",pid=7288,fd=61))
LISTEN  0  1    ::ffff:127.0.0.1:8092  :::*  users:(("java",pid=7468,fd=61))
LISTEN  0  1    ::ffff:127.0.0.1:8093  :::*  users:(("java",pid=7496,fd=61))

访问测试

image-20230519000724259

六:Tomcat负载均衡

1.Nginx配置
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
这个地方是 地址池,这里包含了后端服务器的地址和端口,这里的名字随便启。
http {upstream tomcat_pool {#ip_hash;                                                  最大失败次数  失败超时时间  server 192.168.122.105:8081 weight=1 max_fails=2 fail_timeout=2;server 192.168.122.105:8082 weight=1 max_fails=2 fail_timeout=2;server 192.168.122.105:8083 weight=1 max_fails=2 fail_timeout=2;server 192.168.122.105:8084 weight=1 max_fails=2 fail_timeout=2;}
负载均衡的算法: RR round robin session  ip_hash 是常用的负载均衡的算法server {location / {proxy_pass http://tomcat_pool;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;}} 		     		}

七:Tomcat配置ssl

​ 部署tomcat服务,项目做到用https访问,使用nginx去做,访问任意一个子网站,都是https

​ 略

八:Tomcat扩展

1.日志
[root@java-tomcat1 ~]# cd /data/application/tomcat/conf/
[root@java-tomcat1 conf]# vim server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/www/logs"prefix="jenkins-" suffix="-access_log"pattern="%{X-Real-IP}i - %v %t &quot;%r&quot; - %s %b %T &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; %a &quot;-&quot; &quot;-&quot;" />

日志格式参数文件:https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Access_Logging

2. JVM 参数优化
[root@java-tomcat1 conf]# cd ../bin/
[root@java-tomcat1 bin]# cp catalina.sh catalina.sh.bak
[root@java-tomcat1 bin]# vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m"

设置初始堆、非堆内存大小以及年轻代

-Xms50m -Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m  
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) 
-XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) 
-XX:+PrintGCDetails (打印垃圾回收详情) 
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。
-Xms:初始堆大小,默认为物理内存的1/64(<1GB)
-Xmx:最大堆大小
-Xmn:新生代的内存空间大小
3.gc日志

​ 阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略(开发使用)

# vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/logs/gc-%t.log"

image-20230519001618185

九:项目实战

1.jar包项目

shell
-Xms50m -Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义)
-XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式)
-XX:+PrintGCDetails (打印垃圾回收详情)
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。
-Xms:初始堆大小,默认为物理内存的1/64(<1GB)
-Xmx:最大堆大小
-Xmn:新生代的内存空间大小


#### 3.gc日志​		阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略(开发使用)```shell
# vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/logs/gc-%t.log"

[外链图片转存中…(img-rS1hHDPU-1716815257196)]

九:项目实战

1.jar包项目
2.war包项目

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

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

相关文章

idea中git拉取失败

之前clone好好的&#xff0c;今天突然就拉取不下来了。很多时候是用户凭证的信息没更新的问题。由于window对同一个地址都存储了会话。如果是新的会话&#xff0c;必须要更新window下的凭证。 然后根据你的仓库找到你对应的账户&#xff0c;更新信息即可。

aws lakeformation跨账号共享数据的两种方式和相关配置

lakeformation授权方式分为 基于tag的授权基于命名资源的授权 先决条件 跨账号共享数据的先决条件&#xff08;命名资源和tag授权都需要&#xff09; 分两种情况 如果账户中没有glue data catalog资源策略&#xff0c;则LakeFormation跨账户授予将照常进行 如果存在glue d…

Docker学习(4):部署web项目

一、部署vue项目 在home目录下创建项目目录 将打包好的vue项目放入该目录下&#xff0c;dist是打包好的vue项目 在项目目录下&#xff0c;编辑default.conf 内容如下&#xff1a; server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {r…

面试手撕——使用两个线程交替打印1-100

记录一下使用两个线程交替打印1-100的操作: /*** description: 使用两个线程交替打印1-100* author: Jay* create: 2024-05-27 21:29**/ public class print_1_to_100 {static volatile int flag 1; //此处需要加关键字volatile保证变量之间的可见性&#xff0c;否则程序将会…

Android:使用Kotlin搭建MVI架构模式

一、简介MVI架构模式 M&#xff1a;Model 数据层&#xff0c;包含应用数据和业务逻辑V&#xff1a;View 界面层&#xff0c;在屏幕上显示应用数据&#xff0c;包含与界面相关的状态和界面逻辑&#xff0c;根据界面状态对象更新UI&#xff0c;界面状态定义是不可变的。这样的主要…

【Spring Cloud】服务熔断

目录 服务雪崩效应服务雪崩效应形成的原因及应对策略小结 Hystrix介绍Hystrix可以做什么1.资源隔离2.请求熔断3.服务降级 小结 Hystrix实现服务降级方式一&#xff1a;HystrixCommand注解方式1.服务提供者1.1业务接口和业务实现中添加方法hystrixTimeout1.2控制器中处理/provid…

【pm2 - sdk 集成到程序中,典型用法】

pm2作为一款进程管理神器&#xff0c;除了命令行的启动方式外&#xff0c;其还对应有sdk&#xff0c;集成到程序中&#xff0c;我们可以连接到已有或创建pm2的守护进程&#xff0c;与其进行交互&#xff0c;动态&#xff0c;编程式地控制程序的启停等。以下为示例&#xff1a; …

c++ - vector容器常用接口模拟实现

文章目录 一、成员变量二、常用迭代器接口模拟实现三、一些常用接口模拟四、默认成员函数五、功能测试 一、成员变量 我们通过在堆上申请一个数组空间来进行储存数据&#xff0c;我们的成员变量是三个指针变量&#xff0c;分别指向第一个位置、最后储存有效位置的下一个位置以…

特殊矩阵的压缩矩阵

目录 前提条件&#xff1a; 类型&#xff1a;对称矩阵&#xff0c;三角矩阵、三对角矩阵、稀疏矩阵 1&#xff1a;对称矩阵&#xff1a; 定义&#xff1a;n阶矩阵A 中任意一元素都有ai,jaj,i(1<i,j<n) 图像&#xff1a; 表达式&#xff1a; 计算过程&#xff1a; …

stream-并行流

定义 常规的流都是串行的流并行流就是并发的处理数据&#xff0c;一般要求被处理的数据互相不影响优点&#xff1a;数据多的时候速度更快&#xff0c;缺点&#xff1a;浪费系统资源&#xff0c;数据少的时候开启线程更耗费时间 模版 Stream<Integer> stream1 Stream.of…

【YOLO 系列】基于YOLO V8的学生上课行为检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言 在现代教育环境中&#xff0c;学生上课行为的监测对于提升教学质量和学生学习效率具有重要意义。然而&#xff0c;传统的人工观察方法不仅效率低下&#xff0c;而且难以保证客观性和准确性。为了解决这一问题&#xff0c;我们启动了这个项目&#xff0c;目的是利用YOLOV8…

AI数学知识

AI数学知识 1、线性代数相关&#xff08;矩阵&#xff09;1、什么是秩2、奇异值分解3、特征值分解和奇异值分解4、低秩分解 回归分类知识点2、概率论相关1、先验概率和后验概率2、条件概率、全概率公式、贝叶斯公式、联合概率3、最大似然估计4、贝叶斯公式和最大似然估计5、伯努…

深入理解Kubernetes的调度核心思想

一、引言 Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。在Kubernetes集群中&#xff0c;调度器是一个核心组件&#xff0c;它负责将Pod&#xff08;Kubernetes中的最小部署单元&#xff09;分配…

Java学习16

目录 一.StringBuffer类&#xff1a; 1.基本介绍&#xff1a; 2.StringBuffer的构造器&#xff1a; 3.String与StringBuffer的相互转换&#xff1a; &#xff08;1&#xff09;String->StringBuffer &#xff08;2&#xff09;StringBuffer->String 4.StringBuffer…

Redis篇 数据的编码方式和单线程模型

编码方式和单线程模型 一.redis中的数据类型二. Redis中查询编码方式命令三. 单线程模型四. 经典面试题,redis为何这么快?什么是IO多路复用? 一.redis中的数据类型 在redis中,数据类型大致分为5种 1.字符串类型 2.哈希 3.列表 4.集合 5.有序集合 redis底层在实现这些数据结构…

防火墙技术基础篇:NAT转发之——NAPT(同时转换地址和端口)

NAT转发之——NAPT&#xff08;同时转换地址和端口&#xff09; 网络地址端口转换NAPT 网络地址端口转换NAPT&#xff08;Network Address Port Translation&#xff09;是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中&#xff0c;它可以将中小型的网络隐藏在一个合…

Vue2和Vue3生命周期的对比

Vue2和Vue3生命周期的对比 Vue2 和 Vue3 生命周期对照表Vue2 和 Vue3 生命周期图示 Vue2 和 Vue3 生命周期对照表 触发时机Vue2.xVue3.x组件创建时运行beforeCreate setup createdsetup 挂载在DOM时运行beforeMountonBeforeMountmountedonMounted响应数据修改时运行beforeUpdat…

x264 码率控制原理:x264_ratecontrol_end 函数

x264_ratecontrol_end 函数 原理 函数功能:编码完一帧数据后,保存状态并更新 ratecontrol 状态。函数参数:x264_t *h:编码器上下文结构体int bits:编码该帧所用的比特数int *filler:用于返回一个填充比特数函数调用关系: 函数内部执行流程:初始化x264_ratecontrol_t结…

关于DDos防御...别在听别人瞎扯了.....

前言 无意间刷文章的时候看到一篇文章&#xff0c;写的是遇到ddos&#xff0c;怎么用iptables封IP....... 然后我就百度搜了一下&#xff0c;好多都是这么说的&#xff0c;但是我发现&#xff0c;大多数人只要遭受过长期Ddos的&#xff0c;就不会再信网上的文章 文笔不太好&…

在64位程序中调用SetWindowLong指定窗口处理过程失效问题排查(附C++编译器数据模型)

C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶&#xff08;专栏文章&#xff0c;持续更新中...&#xff09;https://blog.csdn…