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

【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建

在企业级 Java Web 应用的部署场景中,Tomcat 作为主流的 Servlet 容器和 Web 服务器,其核心配置的优化以及集群搭建对于保障应用的高性能、高可用性至关重要。

一、Tomcat 核心配置优化​

1.1 server.xml 配置文件解析​

Tomcat 的核心配置文件server.xml位于/usr/local/tomcat/conf/目录下,它定义了 Tomcat 服务器的整体架构和运行参数。以下是对server.xml中关键部分的详细解析:

<Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><!-- 省略其他Listener --><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 可以在此添加Context配置 --></Host></Engine></Service>
</Server>

注释详解:

  • <Server>元素:作为整个配置文件的根元素,代表 Tomcat 服务器实例。port属性指定了 Tomcat 用于接收关闭命令的端口(默认为 8005),shutdown属性定义了关闭服务器的命令字符串(默认为SHUTDOWN)。例如,通过telnet localhost 8005连接该端口并发送SHUTDOWN命令,可正常关闭 Tomcat 服务器。在生产环境中,为了安全考虑,可修改port为不常用端口,并设置复杂的shutdown命令 ,防止恶意关闭服务器。​
  • <Service>元素:包含一个或多个Connector和一个Container(即Engine)。name属性用于标识服务名称,如Catalina是 Tomcat 默认的服务名。一个 Tomcat 实例可以包含多个Service,每个Service可以独立配置Connector和Engine,以满足不同的应用需求,比如同时提供 HTTP 和 AJP 协议的服务。​
  • <Connector>元素:负责处理网络通信,接收客户端请求。常见的配置参数如下:​
  • port:指定监听的端口号,默认 8080,可根据需求修改,如将其改为 80,使 Tomcat 通过默认 HTTP 端口提供服务。如果服务器上已经存在占用 80 端口的其他服务,需要先停止该服务或者修改 Tomcat 的端口。​
  • protocol:指定使用的协议,默认HTTP/1.1,也可选择org.apache.coyote.http11.Http11NioProtocol等更高效的协议。Http11NioProtocol基于 Java NIO 实现,在高并发场景下相比传统的HTTP/1.1协议,能更有效地利用系统资源,减少线程阻塞。​
  • connectionTimeout:连接超时时间(单位:毫秒),超过该时间未完成的连接将被关闭,默认为 20000 毫秒。对于一些长时间运行的请求,如文件上传,如果设置的connectionTimeout过短,可能导致上传失败,此时需要根据实际情况适当延长该时间。​
  • redirectPort:当需要将 HTTP 请求重定向到 HTTPS 时,指定重定向的端口号,默认为 8443。​
  • <Engine>元素:代表 Servlet 引擎,处理来自Connector的请求并分配给相应的Host。name属性标识引擎名称,defaultHost属性指定默认的虚拟主机。当有多个Host时,defaultHost用于处理没有明确指定Host的请求。​
  • <Host>元素:表示一个虚拟主机,用于部署多个 Web 应用。name属性是虚拟主机的域名或 IP 地址,appBase属性指定 Web 应用的部署目录(默认为webapps),unpackWARs属性表示是否自动解压 WAR 文件,autoDeploy属性表示是否自动部署 Web 应用。若将unpackWARs设置为false,则需要手动解压 WAR 文件,适合对 Web 应用部署有特殊要求的场景。

1.2 线程池优化策略​

Tomcat 通过线程池处理客户端请求,合理配置线程池参数能显著提升服务器性能。线程池相关参数主要在Connector元素中配置,以下是关键参数说明:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="200"minSpareThreads="25"maxSpareThreads="75"acceptCount="100" />

 注释详解:

  • maxThreads:最大工作线程数,即 Tomcat 能够同时处理的最大请求数量。在高并发场景下,可适当增大该值,但过大的值可能导致服务器资源耗尽。一般建议根据服务器硬件资源设置在 200 - 500 之间。例如,对于配备 4 核 8 线程 CPU、16GB 内存的服务器,在测试环境中可先将maxThreads设置为 300,然后通过压力测试工具如 JMeter 进行测试,观察服务器的 CPU、内存使用率和请求响应时间,根据测试结果进一步调整该参数。​
  • minSpareThreads:最小空闲线程数,Tomcat 会始终保持至少这么多空闲线程,以快速响应新的请求。建议设置在 25 - 50 之间。如果设置过小,在突发流量时,可能会因为创建新线程的开销导致请求响应延迟;设置过大,则会占用过多系统资源。​
  • maxSpareThreads:最大空闲线程数,当空闲线程数超过该值时,Tomcat 会回收多余的线程。​
  • acceptCount:当线程池已满时,等待处理的请求队列长度。超过该数量的请求将被拒绝,默认值为 100。可根据实际情况适当调整,例如在流量突发时增大该值。但如果acceptCount设置过大,可能会导致大量请求堆积,消耗过多内存,甚至引起服务器崩溃。

1.3 JVM 参数优化​

Tomcat 作为 Java 应用,其性能与 JVM 参数配置密切相关。通过调整 JVM 参数,可以优化内存分配、垃圾回收等。在 CentOS 7 上,可通过修改 Tomcat 启动脚本/usr/local/tomcat/bin/catalina.sh来设置 JVM 参数。在文件中找到JAVA_OPTS变量(如果没有则添加),以下是一些常用的 JVM 参数配置示例:

JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=32m"

 注释详解:

  • -Xms:设置 JVM 堆内存的初始大小,这里设置为 512MB。如果应用启动时需要加载大量数据或执行复杂的初始化操作,可适当增大该值,以避免频繁的内存扩展操作带来的性能开销。​
  • -Xmx:设置 JVM 堆内存的最大大小,这里设置为 1024MB。应根据服务器可用内存和应用实际需求合理设置,避免内存不足或浪费。例如,对于一个中小型 Web 应用,1GB 的堆内存通常能满足需求;但对于大型数据处理应用,可能需要将-Xmx设置为服务器物理内存的 70% - 80%。​
  • -XX:+UseG1GC:启用 G1 垃圾回收器,G1 在处理大内存时具有较好的性能表现,适用于大多数场景。G1 采用分区算法,将堆内存划分为多个大小相等的区域,能够更灵活地管理内存和进行垃圾回收。​
  • -XX:MaxGCPauseMillis:设置目标最大垃圾回收停顿时间(单位:毫秒),G1 会尽量满足该目标。但该值不能设置过小,否则 G1 可能会频繁进行垃圾回收,影响应用的响应性能。​
  • -XX:G1HeapRegionSize:设置 G1 堆内存区域大小,将堆内存划分为多个固定大小的区域,提高垃圾回收效率。区域大小可根据应用的内存使用情况进行调整,一般建议设置为 2 的幂次方,如 1MB、2MB、4MB 等。

二、Tomcat 集群搭建​

2.1 多实例集群配置​

2.1.1 环境准备​

在 CentOS 7 系统上搭建 Tomcat 集群,需要准备多台服务器(本文以两台服务器为例,IP 分别为 192.168.1.101 和 192.168.1.102),并在每台服务器上安装 Tomcat。安装步骤与单机安装相同,可参考前文内容。在安装前,需要确保每台服务器的硬件配置基本一致,以保证集群的负载均衡效果。同时,关闭服务器的防火墙或者开放相关端口(如 Tomcat 的 8080 端口、Nginx 的 80 端口等),确保服务器之间能够正常通信。​

2.1.2 配置负载均衡器(以 Nginx 为例)​

        1、安装 Nginx:使用以下命令在 CentOS 7 上安装 Nginx:

sudo yum install epel-release
sudo yum install nginx

         2、配置 Nginx 负载均衡:修改 Nginx 的配置文件/etc/nginx/nginx.conf,在http块中添加以下配置:

http {upstream tomcat_cluster {server 192.168.1.101:8080;server 192.168.1.102:8080;# 可根据需求设置负载均衡策略,如轮询(默认)、权重等# weight参数可设置服务器权重,如 server 192.168.1.101:8080 weight=2;}server {listen 80;server_name localhost;location / {proxy_pass http://tomcat_cluster;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

上述配置中,upstream块定义了 Tomcat 集群的服务器列表,server块配置了 Nginx 作为反向代理,将请求转发到 Tomcat 集群。proxy_set_header指令用于设置转发请求时的 HTTP 头部信息,其中X-Real-IP和X-Forwarded-For用于记录客户端的真实 IP 地址,方便应用获取客户端信息进行日志记录和安全防护。

        3、启动 Nginx

sudo systemctl start nginx

可以通过访问http://服务器IP来验证 Nginx 是否正常启动。如果 Nginx 启动失败,可以查看/var/log/nginx/error.log日志文件,根据错误信息进行排查。​

2.1.3 配置 Tomcat 实例​

在每台 Tomcat 服务器上,修改server.xml文件,确保以下配置:​

        1、修改Connector的port属性,避免端口冲突。例如,在第二台服务器上,将8080改为8081。

<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

        2、修改Server的port属性,如将8005改为8006,防止关闭命令端口冲突。

<Server port="8006" shutdown="SHUTDOWN">

修改完配置后,需要重启 Tomcat 服务,使配置生效。可以使用/usr/local/tomcat/bin/shutdown.sh停止 Tomcat,再使用/usr/local/tomcat/bin/startup.sh启动 Tomcat。

2.2 会话管理方案​

2.2.1 粘性会话​

粘性会话是指负载均衡器将同一个客户端的后续请求始终转发到同一台 Tomcat 服务器,以保持会话一致性。在 Nginx 中,可通过ip_hash指令实现粘性会话:

http {upstream tomcat_cluster {ip_hash;server 192.168.1.101:8080;server 192.168.1.102:8080;}# 省略其他配置
}

ip_hash指令根据客户端 IP 地址计算哈希值,将同一 IP 地址的请求固定转发到某一台服务器。但这种方式存在局限性,当某台服务器故障时,客户端会话可能丢失。为了提高可靠性,可以结合 Nginx 的健康检查机制,当检测到某台 Tomcat 服务器故障时,将该服务器从负载均衡列表中移除,避免将请求转发到故障服务器。​

2.2.2 Redis 共享会话​

Redis 是一种高性能的键值对存储数据库,可用于实现 Tomcat 集群的共享会话。​

        1、安装 Redis

sudo yum install redis

        2、配置 Redis:修改 Redis 配置文件/etc/redis.conf,主要配置如下:

bind 127.0.0.1 192.168.1.100  # 绑定服务器IP,确保Tomcat服务器可访问
protected-mode no  # 关闭保护模式(测试环境使用,生产环境需谨慎)

在生产环境中,不建议直接关闭protected-mode,可以通过设置密码(requirepass yourpassword)来提高 Redis 的安全性,同时只允许授权的 Tomcat 服务器访问 Redis。

        3、启动 Redis

sudo systemctl start redis

        4、在 Tomcat 中集成 Redis 共享会话:

  • 下载tomcat-redis-session-manager插件,将相关 jar 包放置在 Tomcat 的lib目录下。​
  • 修改 Tomcat 的context.xml文件(位于/usr/local/tomcat/conf/目录下),添加以下配置:
<Context><Manager className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /><Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /><Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="192.168.1.100"port="6379"database="0"maxInactiveInterval="60" />
</Context>

上述配置中,host和port指定 Redis 服务器的地址和端口,database指定使用的 Redis 数据库,maxInactiveInterval指定会话的最大非活动时间(单位:秒)。配置完成后,Tomcat 集群中的会话数据将存储在 Redis 中,实现会话共享,即使某台 Tomcat 服务器故障,客户端会话也不会丢失。 

相关文章:

【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建

在企业级 Java Web 应用的部署场景中&#xff0c;Tomcat 作为主流的 Servlet 容器和 Web 服务器&#xff0c;其核心配置的优化以及集群搭建对于保障应用的高性能、高可用性至关重要。 一、Tomcat 核心配置优化​ 1.1 server.xml 配置文件解析​ Tomcat 的核心配置文件server…...

模板引擎语法-算术运算

模板引擎语法-算术运算 文章目录 模板引擎语法-算术运算[toc]1.加法运算2.减法运算3.乘法与除法运算4.四则运算5.整除运算 在Django框架模板中&#xff0c;没有专门定义关于算术运算的语法。不过&#xff0c;通过一些标签和过滤器的配合使用&#xff0c;可以模拟实现类似“加减…...

MySQL 联合查询教程

MySQL 联合查询教程 在 MySQL 中&#xff0c;联合查询用于从多个表中检索数据&#xff0c;常用于关联表中的信息。联合查询&#xff08;JOIN&#xff09;通过将两个或更多表根据一定条件连接起来&#xff0c;从而形成一个虚拟的结果集。MySQL 支持多种类型的联合查询&#xff…...

罗技Flow跨电脑控制

Windows 下载适用于 Windows 10 或更高版本的应用程序 macOS 下载适用于 macOS 12 或更高版本的应用程序 Flow 让您可以在两台电脑之间甚至 Windows 和 macOS 之间畅快办公。 只需将支持 Flow 的鼠标的光标移动到屏幕边缘即可在电脑和操作系统之间切换。支持 Flow 的键盘会…...

Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

LeetCode100题

LeetCode100 两数之和 遍历数组&#xff0c;以哈希表存数与下标&#xff0c;边存边查&#xff0c;速找和为目标值的两数下标 class Solution {public int[] twoSum(int[] nums, int target) {int[] ansnew int[2];HashMap<Integer,Integer> mapnew HashMap<>();…...

鸿蒙代码@Builder

#代码如下&#xff1a; Entry Component struct CardExample {State title: string "欢迎使用鸿蒙";State content: string "这是一段自定义内容";build() {Column() {this.MyCard({ title: this.title, content: this.content })}.padding(20)}BuilderM…...

Gewechat启动启动报错

Centos7&#xff0c;测试连接时发现这个错误。 [rootxin ~]# curl -i -X POST http://127.0.0.1:2531/v2/api/tools/getTokenId curl: (56) Recv failure: Connection reset by peer 1、删除原容器&#xff0c;重新构建。 docker run -itd \--name gewe \--privileged \-v /ro…...

硅谷甄选41集-71集

第四十三集&#xff1a;完全按照视频敲代码的话会发现左侧顶部tabbar的display:flex失效了&#xff0c;是因为拆分开的子组件里面多了一个div,去掉就好了&#xff0c;vue3不需要再额外包裹元素。因为路径变化了&#xff0c;所以找不到图片的话在前面再加一个…。 第四十五集&am…...

PyQt6实例_消息工具_使用与完整代码分享

目录 使用 每日消息 全局查询 更新数据库 代码 数据库表创建 代码-数据库相关操作 代码-界面与操作逻辑 视频 使用 工具有三个面板&#xff1a;每日消息、全局查询、更新数据库 “每日消息”和“全局查询”&#xff0c;数据源&#xff1a;同花顺7x24小时快讯 “更新…...

docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql

目录 1.网络超时 方式1. 网络连接问题 方式2. Docker镜像源问题 方式3.使用国内镜像源 2.启动mysql镜像失败 3.navicat无法远程连接mysql 1.网络超时 安装MySQL时出现超时问题&#xff0c;可能由多种原因导致&#xff1a; 方式1. 网络连接问题 原因&#xff1a;网络不稳定…...

【虚幻C++笔记】碰撞检测

目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…...

SpringBoot集成WebSocket,单元测试执行报错

问题描述 SpringBoot集成了WebSocket&#xff0c;单元测试启动后会报如下错误&#xff1a;javax.websocket.server.ServerContainer not available 这是因为SpringBootTest启动时不会启动服务器&#xff0c;所以WebSocket会报错。 解决方案 在注解中添加 webEnvironmen…...

Git基本操作

1. 安装与配置 安装&#xff1a;你可以从 Git 官方网站 下载 Windows 版本的安装程序。运行安装程序&#xff0c;在安装过程中&#xff0c;你可以按照默认设置进行安装&#xff0c;也可以根据自己的需求进行调整。配置&#xff1a;安装完成后&#xff0c;打开 Git Bash&#x…...

C++异步并发支持库future

future&#xff1a; 1.利用共享状态来异步的获取提供者的值 2.future处于共享状态就绪时才是有效的 3.future不能拷贝构造&#xff0c;只能移动构造&#xff0c;并且移动构造后共享状态失效 std::future::get 1.当共享状态就绪时&#xff0c;返回存储在共享状态中的值。 2…...

c++学习小结

内存分配 空间 栈区&#xff08;stack&#xff09;。编译器⾃动分配与释放&#xff0c;主要存放函数的参数值&#xff0c;局部变量值等&#xff0c;连续的内存空 间&#xff0c;由⾼地址向低地址扩展。 堆区&#xff08;heap&#xff09; 。由程序员分配与释放&#xff1b;不…...

Pygame物理模拟:实现重力、弹跳与简单物理引擎

Pygame物理模拟:实现重力、弹跳与简单物理引擎 大家好,欢迎来到本期的技术分享!今天我们将一起探讨如何使用Python和Pygame库来实现一个简单的物理模拟系统,其中包括重力、弹跳以及一个基础的物理引擎。如果你对游戏开发或者物理仿真感兴趣,那么这篇文章一定会让你受益匪…...

Python dotenv 使用指南:轻松管理项目环境变量

一、为什么要使用环境变量管理&#xff1f; 很多开发者容易把自己开发的项目上传到Github上&#xff0c;但偶尔会忘记把数据库密码、支付接口密钥等敏感信息和谐掉&#xff0c;当代码提交上去时&#xff0c;这些信息就像裸奔一样暴露在所有人面前。更糟糕的是&#xff0c;不同…...

网络攻防第一~四集

来源于一下 【小迪安全】红蓝对抗 | 网络攻防 | V2023全栈培训_哔哩哔哩_bilibili 目录 第一集 第二集 第一集 web架构包括系统、中间件、程序源码、数据库 系统 windows、linux、windows server 中间件 是前端语言和数据库是当做一个桥梁&#xff0c;当做解析作用&…...

TI---sysconfig生成宏

核心内容概览 1. 宏定义的总体作用 SysConfig生成的宏定义是硬件配置的符号化映射&#xff0c;将图形化界面的配置参数转化为可直接引用的编译时常量&#xff0c;核心价值包括&#xff1a; 免硬编码&#xff1a;避免手动写入硬件参数&#xff08;如引脚号、波特率&#xff0…...

【C】初阶数据结构13 -- 快速排序

本篇文章主要讲解经典的排序算法 -- 快速排序算法 目录 1 递归版本的快速排序 1&#xff09; 算法思想 &#xff08;1&#xff09; hoare 版本 &#xff08;2&#xff09; 双指针版本 &#xff08;3&#xff09; 挖坑法 2&#xff09; 代码 3&#xff09; 时间复杂度…...

Spring Boot 3.4 实战指南:从性能优化到云原生增强

一、核心新特性概览 Spring Boot 3.4 于 2024 年 11 月正式发布&#xff0c;带来 6 大维度的 28 项改进。以下是实战开发中最具价值的特性&#xff1a; 1. 性能革命&#xff1a;虚拟线程与 HTTP 客户端优化 虚拟线程支持&#xff1a;Java 21 引入的虚拟线程在 Spring Boot 3…...

Git分支重命名与推送参数解析

这两个参数的解释如下&#xff1a; git branch -M master 中的 -M 参数 -M 是 --move --force 的组合简写&#xff0c;表示强制重命名当前分支为 master。如果当前分支已经存在名为 master 的分支&#xff0c;-M 会强制覆盖它&#xff08;慎用&#xff0c;可能导致数据丢失&…...

深度学习中的预训练与微调:从基础概念到实战应用全解析

摘要 本文系统解析深度学习中预训练与微调技术&#xff0c;涵盖核心概念、技术优势、模型复用策略、与迁移学习的结合方式&#xff0c;以及微调过程中网络参数更新机制、模型状态分类等内容。同时深入分析深层神经网络训练难点如梯度消失/爆炸问题&#xff0c;为模型优化提供理…...

EMC-148.5MHz或85.5辐射超标-HDMI

EMC 148.5MHz或85.5辐射超标-HDMI 遇到了一台设备过不了EMC &#xff0c;经排查主要是显示器的HDMI问题 解决办法看看能否更换好一点的HDMI线缆...

DeepSeek系列(9):团队协作最佳实践

团队知识库构建 在知识经济时代,团队知识的有效管理和传递是组织核心竞争力的关键。DeepSeek可以成为打造高效团队知识库的得力助手,让知识管理从繁重工作变为自动化流程。 知识库架构设计 多层次知识结构 一个高效的团队知识库应具备清晰的层级结构,DeepSeek可以协助:…...

信息系统项目管理工程师备考计算类真题讲解十

一、立项管理 1&#xff09;折现率和折现系数&#xff1a;折现也叫贴现&#xff0c;就是把将来某个时间点的金额换算成现在时间点的等值金额。折现时所使用的利率叫折现率&#xff0c;也叫贴现率。 若n年后能收F元&#xff0c;那么这些钱在现在的价值&#xff0c;就是现值&am…...

第1章 基础知识

1.1 机器语言 1.2 汇编语言的产生 用汇编语言编写程序的工作过程如下: 1.编写程序:汇编程序包括汇编指令、伪指令、其他符号,如下图。其中,“伪指令”并不是由计算机直接执行的指令,而是帮助编译器完成“编译”的符号。 2.编译:将汇编程序转换成机器码。 3.计算机执行。 …...

16.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Github Action

GitHub Actions 是 GitHub 提供的持续集成和持续部署(CI/CD)平台&#xff0c;它允许我们自动化软件开发工作流程。通过 GitHub Actions&#xff0c;我们可以构建、测试和部署代码&#xff0c;而无需手动干预。 一、基本概念 1.1 Workflow&#xff08;工作流&#xff09; 工作…...

‌MySQL 事务隔离级别详解

‌ 以下是 MySQL 支持的四种事务隔离级别及其特性&#xff0c;按并发安全性从低到高排列&#xff1a; ‌1. 读未提交 (Read Uncommitted)‌ ‌问题‌&#xff1a; ‌脏读 (Dirty Read)‌&#xff1a;事务可读取其他事务未提交的数据。‌不可重复读 (Non-repeatable Read)‌&am…...

A. Ambitious Kid

time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…...

C19-while循环及for循环等价引入

一 while的表达式 //while的表达式有三个 #include <stdio.h> int main() { int sum; int data1; //第一个表达式,条件的初始值while(data<100){ //第二个表达式,条件的临界值sumsumdata;data; //第三个表达式,条件变化}printf("0至100的和是:%d\n",sum);…...

华为盘古OS深度评测:构建AI自进化系统的实践密码

华为盘古OS通过分布式AI内核与自适应学习框架的深度耦合&#xff0c;重新定义操作系统级智能能力。实测显示其AI任务调度效率较传统系统提升17倍&#xff0c;本文从智能体编排、持续学习机制、端云协同架构三个维度&#xff0c;解析如何基于DevKit 3.0打造具备认知进化能力的下…...

SpringBoot UserAgentUtils获取用户浏览器 操作系统设备统计 信息统计 日志入库

介绍 UserAgentUtils 是于处理用户代理&#xff08;User-Agent&#xff09;字符串的工具类&#xff0c;一般用于解析和处理浏览器、操作系统以及设备等相关信息&#xff0c;这些信息通常包含在接口请求的 User-Agent 字符串中。 这个库可以用于解析用户代理头&#xff0c;以提…...

PCL绘制点云+法线

读取的点云ASCII码文件&#xff0c;每行6个数据&#xff0c;3维坐标3维法向 #include <iostream> #include <fstream> #include <vector> #include <string> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pc…...

DataStreamAPI实践原理——计算模型

引入 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在 无边界 和 有边界 数据流上进行有状态的计 算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。Flink可以处理批数据也可以处理流数据&#xff0c;本质上&#xff0c;流处理…...

【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)

由于各种网络政策&#xff0c;在国内访问DockerHub速度会非常缓慢&#xff0c;大家一般都会采取更换镜像源的方式来进行加速。但是&#xff0c;2024.6之后&#xff0c;由于政策的加强&#xff0c;大部分常见的镜像源已经无法使用&#xff0c;可能在更换镜像源后出现如下报错信息…...

【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

本文介绍了MCP大模型上下文协议的的概念&#xff0c;并对比了MCP协议和function call的区别&#xff0c;同时用python sdk为例介绍了mcp的使用方式。 1. 什么是MCP&#xff1f; 官网&#xff1a;https://modelcontextprotocol.io/introduction 2025年&#xff0c;Anthropic提出…...

交换机之配置系统基本信息(Basic Information of the Configuration System for Switches)

交换机之配置系统基本信息 本文章中的信息都是基于一些特定实验环境写的。文章中使用的所有设备最初均采用缺省配置启动。如果不按初始配置&#xff0c;有可能会导致本文中的部分或全部步骤失败。如果您使用的是真实网络设备&#xff0c;请确保您已经了解所有使用过的命令影响。…...

贝叶斯算法学习

贝叶斯算法学习 贝叶斯算法基础与原理应用场景主要分类优缺点​简单示例代码实现 贝叶斯算法是基于贝叶斯定理的一种统计学习方法&#xff0c;在机器学习、数据挖掘、自然语言处理等领域有广泛应用。以下是其原理、应用和示例的详细介绍&#xff1a; 贝叶斯算法基础与原理 贝…...

Java 日志:掌握本地与网络日志技术

日志记录是软件开发中不可或缺的一部分&#xff0c;它为开发者提供了洞察应用程序行为、诊断问题和监控性能的手段。在 Java 生态系统中&#xff0c;日志框架如 Java Util Logging (JUL)、Log4j 和 Simple Logging Facade for Java (SLF4J) 提供了丰富的功能。然而&#xff0c;…...

线程池单例模式

线程池的概念 线程池是一种线程使用模式。 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。…...

物联网安全解决方案介绍:有效利用现有的下一代防火墙

管理物联网设备安全的挑战 如今,随着IoT(物联网)的普及,可以集中管理相机、打印机、传感器、电器、机床等各种设备,并分析和有效利用从这些设备收集的数据。这些设备已成为商业环境中不可或缺的一部分,但设备的多样化使其难以管理。与PC、服务器和网络设备不同,识别物联…...

Java社区门诊系统源码 SaaS医院门诊系统源码 可上线运营

Java社区门诊系统源码 SaaS医院门诊系统源码 医院门诊系统适用于&#xff1a;社区卫生服务站、门诊部、诊所、村卫生室等&#xff0c;有上百家医疗机构正常使用&#xff1b;包括医保结算。 系统功能 &#xff08;一&#xff09;后端管理系统功能 用户管理&#xff1a;提供用…...

如何在 Windows 10 中使用 WSL 和 Debian 安装 Postgresql 和 Postgis

安装 Postgresql 和 Postgis 的常规方法需要设置多个二进制文件&#xff0c;并且工作流程通常在图形用户界面 (GUI) 上进行。我们希望找到一种在 Windows 10 中安装 Postgresql 和 Postgis 的方法&#xff0c;同时保留 Linux 的 shell 体验。本教程展示了在 Windows 10 中的 De…...

[论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting

Mip-Splatting: Alias-free 3D Gaussian Splatting 论文地址&#xff1a;https://arxiv.org/abs/2403.17888 源码地址&#xff1a;https://github.com/autonomousvision/mip-splatting 项目地址&#xff1a;https://niujinshuchong.github.io/mip-splatting/ 论文解读 两个主…...

MongoDB 入门使用教程

MongoDB 入门使用教程 MongoDB 是一个开源的 NoSQL 数据库&#xff0c;使用文档&#xff08;JSON-like&#xff09;存储数据&#xff0c;与传统的关系型数据库不同&#xff0c;它不依赖表结构和行列的约束。MongoDB 提供了强大的查询能力&#xff0c;支持高效的数据存储和检索…...

PowerBI动态路径获取数据技巧

PowerBI动态路径获取数据技巧 场景一&#xff1a;同事接力赛——不同电脑共用模板 &#xff08;想象一下&#xff1a;小王做完报表要传给小李&#xff0c;结果路径总对不上怎么办&#xff1f;&#xff09; 这种情况就像接力赛交接棒&#xff0c;每台电脑的账户名不同&#xff0…...

【数据结构】优先级队列

目录 1. 优先级队列概念 2. 优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 向下调整的时间复杂度 2.3.2 建堆时间复杂度 2.3.3 向上调整的时间复杂度 2.4 堆的插入与删除 3. 堆的应用 4. 常用接口介绍 4.1 PriorityQueue的特性 4.2 Pri…...

Myweb项目——面试题总结

一.项目描述 项⽬概述&#xff1a;本项⽬在云服务上开发了⼀个后端服务器与前端⻚⾯为⼀体的⾳乐专辑 鉴赏⽹站&#xff0c;旨在为⽤⼾提供丰富的⾳乐专辑信息展⽰和优 质的浏览体验。 主要内容及技术&#xff1a; 后端开发&#xff1a;利⽤ C 语⾔构建后端服务器&#xff0c;…...