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

Tomct面试题(15道含答案)

1. Tomcat 默认端口是多少?如何修改?

  • 默认 HTTP 端口8080
  • 修改步骤
    1. 进入 Tomcat 安装目录下的 conf/ 文件夹;
    2. 打开 server.xml 文件;
    3. 找到如下 <Connector> 配置:
      <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
    4. 将 port="8080" 修改为所需端口(如 8081);
    5. 保存并重启 Tomcat。

✅ 注意:若修改 HTTPS 端口(默认 8443),需同步修改对应的 <Connector> 配置。


2. Tomcat 有哪几种 Connector 运行模式?(IO 模型)

Tomcat 支持四种主要的 IO 模型,用于优化高并发性能:

模式全称特点适用场景
BIOBlocking I/O同步阻塞,每个请求一个线程低并发、简单应用(Tomcat 6 及以前默认)
NIONon-blocking I/O同步非阻塞,基于 Selector 多路复用中高并发(Tomcat 7+ 默认)
NIO2 / AIOAsynchronous I/O异步非阻塞(JDK 7+)理论高性能,但实际支持有限
APRApache Portable Runtime基于 JNI 调用本地库(需安装 APR/native)极致性能,尤其静态文件处理

配置示例(启用 NIO):

<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="500"minSpareThreads="100"maxSpareThreads="200"acceptCount="200"connectionTimeout="20000"enableLookups="false"URIEncoding="UTF-8"compression="on"compressionMinSize="10240"compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />

关键参数说明:

  • maxThreads:最大工作线程数(默认 200,建议 400~800);
  • minSpareThreads:初始化空闲线程数;
  • acceptCount:当所有线程忙时,等待队列长度(默认 100);
  • enableLookups="false":关闭 DNS 反向解析,提升性能;
  • compression:启用 Gzip 压缩,减少网络流量。

3. Tomcat 有哪几种部署方式?

  1. 自动部署(推荐开发环境)
    将 WAR 包或项目目录直接放入 webapps/ 目录,Tomcat 启动时自动解压部署。

  2. server.xml 中配置 <Context>

    <Host name="localhost" appBase="webapps"><Context path="/myapp" docBase="/path/to/myapp" reloadable="true"/>
    </Host>

    ⚠️ 不推荐生产使用,修改需重启。

  3. 独立 Context 配置文件(推荐生产)
    conf/Catalina/localhost/ 下创建 myapp.xml

    <Context docBase="/opt/apps/myapp" />
    • 文件名即为访问路径(如 myapp.xml → http://host:port/myapp);
    • 无需重启 Tomcat,热加载支持更好。

4. Tomcat 如何创建 Servlet 实例?原理是什么?

  • 加载时机
    • 若 <load-on-startup> 值 ≥ 0:容器启动时通过反射实例化;
    • 若未设置或为负数:首次请求时懒加载。
  • 原理
    1. 解析 web.xml 或注解(如 @WebServlet);
    2. 使用 ClassLoader 加载 Servlet 类;
    3. 通过 Java 反射机制 调用构造器创建实例;
    4. 调用 init() 方法完成初始化。

✅ 每个 Servlet 在整个应用生命周期中 仅有一个实例(单例模式)。


5. Tomcat 性能优化策略

(1)连接器优化(server.xml

  • 启用 NIO/APR;
  • 调整线程池参数(maxThreadsacceptCount);
  • 关闭 enableLookups
  • 开启 Gzip 压缩;
  • 设置 URIEncoding="UTF-8" 避免中文乱码。

(2)JVM 内存调优(catalina.sh / catalina.bat

JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g -Xss256k"

(3)其他优化

  • 禁用 TLD 扫描(加快启动):
    <Context tldValidation="false" />
  • 使用外部 Web 服务器(如 Nginx)处理静态资源;
  • 启用 Access Log 缓冲(减少磁盘 I/O)。

6. JVM 内存调优参数(JAVA_OPTS

参数说明
-Xms2g初始堆内存
-Xmx2g最大堆内存(建议与 Xms 相同,避免动态扩容)
-Xmn1g年轻代大小
-Xss256k线程栈大小(减小可支持更多线程)
-XX:NewRatio=3老年代 : 年轻代 = 3:1
-XX:SurvivorRatio=8Eden : Survivor = 8:1(两个 Survivor)
-XX:+UseG1GC使用 G1 垃圾回收器(JDK8+ 推荐)

7. 垃圾回收(GC)策略调优

场景推荐 GC参数
吞吐量优先Parallel GC-XX:+UseParallelGC -XX:+UseParallelOldGC
响应时间优先CMS / G1-XX:+UseConcMarkSweepGC 或 -XX:+UseG1GC
低延迟(JDK11+)ZGC / Shenandoah-XX:+UseZGC

✅ 生产环境建议使用 G1GC(平衡吞吐与延迟)。


8. Session 共享方案(集群环境)

方案原理优点缺点
Session 复制Tomcat 自动广播 Session配置简单网络开销大,节点多时性能差
Memcached + MSMSession 存入 Memcached高性能、可扩展依赖外部服务,需引入 jar
Sticky Session(粘性会话)Nginx/Apache 将同一用户请求固定到某台 Tomcat无需共享 Session,效率高单点故障风险,不适用于强一致性场景

🔗 参考:

  • Session 复制:ajita.iteye.com/blog/1715312
  • MSM 方案:ajita.iteye.com/blog/1716320
  • Sticky Session:ajita.iteye.com/blog/1848665

9. 启用 JMX 远程监控

catalina.sh 中添加 JVM 参数:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.71.38

✅ 可通过 jconsoleVisualVM 远程监控 Tomcat。


10. 常用监控与分析工具

  • jconsole:JDK 自带,查看内存、线程、MBean;
  • jvisualvm:功能更强,支持插件(如 VisualGC);
  • Lambda Probe:Tomcat 专用 Web 监控界面;
  • JProfiler / YourKit:商业级性能分析;
  • IBM ISA:IBM 提供的深度诊断工具。

11–13. 监控与日志

  • 查看 Session 数:通过 Tomcat Manager 或 Lambda Probe;
  • 内存监控jconsolejvisualvm
  • GC 日志开启
    -XX:+PrintGC
    -XX:+PrintGCDetails
    -XX:+PrintGCTimeStamps
    -Xloggc:/path/to/gc.log
  • 类加载监控
    -verbose:class
    -verbose:gc

14. 一个请求的完整处理流程

以 Nginx + Tomcat 为例:

  1. 用户访问 http://wo.de.tian/yy/index.jsp
  2. DNS 解析到 Nginx IP;
  3. Nginx 根据 location /yy/ 转发到后端 Tomcat 集群(如 10.99.99.99:8080);
  4. Tomcat 的 Coyote Connector 接收请求;
  5. 请求交给 Engine → Host(localhost)→ Context(/yy)
  6. Context 根据 URL 映射找到 JspServlet
  7. 创建 HttpServletRequest / HttpServletResponse
  8. 调用 JspServlet.service()
  9. 响应逐层返回至 Connector,最终返回浏览器。

🔄 整个过程体现了 Tomcat 的 组件化架构:Server → Service → Engine → Host → Context → Wrapper(Servlet)。


15. Tomcat 工作模式

Tomcat 作为 Servlet 容器,有三种集成模式:

模式说明
独立模式Tomcat 直接对外提供 HTTP 服务(开发/测试常用)
进程内模式作为 Apache 的 mod_jk 模块嵌入运行(已淘汰)
进程外模式(反向代理)前端 Nginx/Apache 接收请求,转发给后端 Tomcat(生产主流)

✅ 当前最佳实践:Nginx(静态资源 + 负载均衡) + Tomcat(动态处理)

http://www.dtcms.com/a/610189.html

相关文章:

  • Java:Arrays类使用
  • fineftp-server: 轻量级C++跨平台FTP服务器解决方案
  • Java EE --JUC
  • 如何检测网站开发商留有后门wordpress编辑无效
  • 网站平台建设的实训报告双鸭山网站开发
  • Dart语言之面向对象
  • Ubuntu 22.04双网口同时使用 MID360 雷达与上网的完整指南
  • 广东兰州企业网站排名优化
  • oh my zsh配置
  • 光电对抗——有源干扰:从原理到外场实验(续)
  • nn实践-使用nn搭建一个定时发送天气预报邮件的工作流
  • 网站优化公司方案门户导航网页模板
  • 加强网站建设 提升做网站前台需要什么技能
  • GMI Cloud@AI周报 | Kimi K2-Thinking突袭赶超;OpenAI发布GPT-5.1;豆包编程模型发布
  • 电流检测放大器IC 汽车前装无线充电模块应用 FP130A
  • 扣子——插件问题完整排查报告
  • 网站建设用户登录想招代理去什么网站
  • 广东省备案网站建设方案书外贸做的亚马逊网站是哪个
  • Linux互联网基础
  • 房建设计图网站网站建设目的主要包括哪些
  • 深入理解 Spring Boot 单元测试:从基础到最佳实践
  • react 封装弹框组件 传递数据
  • 宿州做网站安卓系统app
  • 用Maven的quickstart archetype创建项目并结合JUnit5单元测试
  • ELK Stack核心原理与运用要点解析
  • Spring前置准备(九)——Spring中的Bean类加载器
  • TDengine 字符串函数 LTRIM 用户手册
  • 【十一、Linux管理网络安全】
  • 免费的行情软件网站下载不用下载二字顺口名字公司
  • YOLOv5/8/9/10/11/12/13+oc-sort算法实现多目标跟踪