Tomcat 高频面试题及详细答案(实战版)_第1页
Tomcat 高频面试题及详细答案(实战版)_第2页
Tomcat 高频面试题及详细答案(实战版)_第3页
Tomcat 高频面试题及详细答案(实战版)_第4页
Tomcat 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Tomcat高频面试题及详细答案(实战版)一、基础认知类(初级必问)1、说说你对Tomcat的理解?它是什么组件?Tomcat是一款开源的轻量级Web容器(Servlet容器),也属于HTTP服务器。主要用来运行JavaWeb项目,比如JSP、Servlet程序。和Nginx、Apache不一样:Nginx主要做静态资源转发、反向代理、负载均衡,不支持运行Java程序;而Tomcat专门负责解析和执行Java动态资源,处理Servlet请求。日常开发中,一般都是Nginx+Tomcat架构,Nginx扛前端请求、静态资源、分发流量,Tomcat专门处理后端Java业务逻辑。2、Tomcat、Jboss、Jetty的区别?Tomcat:轻量、稳定、使用最广,只实现了Servlet、JSP规范,没有完整的J2EE功能,适合绝大多数Web项目,日常业务系统首选。Jetty:更轻、启动更快、占用资源少,高并发性能好,适合微服务、嵌入式部署,很多中间件默认用Jetty。Jboss:重型JavaEE服务器,完整支持EJB、JTA、JPA等全套J2EE规范,适合大型企业级分布式项目,但是启动慢、笨重、资源消耗大,现在新项目基本很少用。3、Tomcat默认端口、核心配置文件有哪些?各自作用?默认HTTP访问端口:8080,默认Shutdown端口:8005,默认AJP端口:8009。核心配置文件:server.xml:核心全局配置,配置端口、连接器、引擎、虚拟主机、线程池、集群等,最常用的配置文件。web.xml:全局应用配置,默认Servlet、过滤器、MIME类型、错误页面等,所有web项目都会继承这个配置。context.xml:数据源、连接池、全局资源配置,比如数据库连接池配置都放这里。tomcat-users.xml:权限账号配置,配置tomcat管理后台的用户名、密码、角色权限。4、Tomcat部署项目有几种方式?日常常用4种,实际开发只用其中2种:直接放war包到webapps目录:最简单,Tomcat启动会自动解压部署,适合测试环境,生产用得少。server.xml中配置Context节点:指定项目路径、访问路径,不用放webapps,生产常用。conf/Catalina/localhost下新建xml配置文件:单独配置单个项目,互不干扰,适合多项目部署。控制台热部署:通过Tomcat管理页面上传war部署,仅限测试使用。生产环境基本不用webapps自动部署,避免多项目冲突、自动解压异常、路径混乱问题。二、核心原理类(中级重点)5、Tomcat的整体架构是什么?Tomcat核心是分层容器架构,从外到内四层:Server:顶层容器,代表整个Tomcat服务,一个Server包含多个Service。Service:服务组件,包含多个Connector和一个Engine,负责绑定连接器和引擎。Connector(连接器):负责接收客户端请求,解析HTTP协议,封装Request、Response对象,不处理业务。Engine(引擎):核心处理容器,接收连接器的请求,分发到对应的虚拟主机、项目、Servlet处理。内层还有Host(虚拟主机)、Context(单个web项目)、Wrapper(单个Servlet),层层分发处理请求。6、Tomcat请求处理流程?完整说一遍1、客户端发起HTTP请求,到达Tomcat监听端口;2、Connector连接器接收请求,解析HTTP协议,创建Request和Response对象;3、将请求交给Engine引擎,Engine根据域名匹配对应的Host虚拟主机;4、Host根据访问路径匹配对应的Context(具体web项目);5、Context匹配对应的Wrapper(目标Servlet);6、Tomcat调用Servlet的init、service、doGet/doPost方法处理业务;7、业务处理完成后,把结果封装到Response,由Connector返回给客户端。7、TomcatConnector的三种运行模式?区别是什么?三种模式:BIO、NIO、NIO2,Tomcat8.5之后默认NIO。BIO(同步阻塞):传统IO,一个请求一个线程,请求阻塞时线程一直占用,并发量小,性能差,Tomcat7及以前默认,现在基本不用。NIO(同步非阻塞):基于JavaNIO,多路复用,少量线程可以处理大量请求,不阻塞,并发性能高,生产主流模式。8、Tomcat的Servlet生命周期?1、实例化:Tomcat启动或首次访问时,创建Servlet实例(默认单例);2、初始化init():只执行一次,做初始化参数、资源加载;3、服务处理service():每次请求都会执行,内部调用doGet/doPost;4、销毁destroy():Tomcat关闭或项目卸载时执行,释放资源,只执行一次。重点:Servlet是单例多线程,所以成员变量非线程安全,禁止在Servlet中定义可修改的全局变量。三、性能调优类(面试高频)9、Tomcat日常调优你做过哪些?我日常调优主要集中在线程池、IO模式、JVM参数、静态资源、禁用冗余功能这几块:1、调整Connector线程池修改server.xml,开启NIO模式,调整核心线程数、最大线程数、等待队列,避免线程耗尽。一般核心线程200,最大线程500,根据服务器配置微调。2、优化JVM参数修改catalina.sh,设置堆内存、新生代比例、垃圾回收器,避免OOM和频繁GC。生产一般设置-Xms和-Xmx相等,防止内存伸缩。3、开启静态资源缓存、压缩对js、css、图片开启gzip压缩,设置缓存过期时间,减少重复请求,提升响应速度。4、禁用自动部署、热部署生产关闭autoDeploy、reloadable,避免运行中项目自动重启、占用资源。5、关闭多余端口和服务关闭shutdown端口、AJP端口,减少安全风险,节省资源。10、Tomcat线程池参数怎么配?核心参数含义核心参数(server.xmlConnector节点):minSpareThreads:核心空闲线程数,常驻线程,默认10,保证随时有线程处理请求。maxThreads:最大工作线程数,上限决定最大并发量,生产一般设置300-500,不建议过大,避免线程上下文切换消耗。acceptCount:请求等待队列,线程满了之后,多余请求进入队列,队列满了直接拒绝连接,默认100。connectionTimeout:连接超时时间,空闲连接多久断开,避免无效连接占用线程。经验:并发高的场景,适当调大maxThreads和acceptCount,队列不要设置太大,否则请求堆积超时。11、Tomcat如何解决高并发?单Tomcat并发能力有限,高并发场景靠架构+调优结合:底层开启NIO多路复用,提升单节点并发处理能力;合理配置线程池,防止线程瓶颈;Nginx负载均衡,多台Tomcat节点集群部署,分发流量;静态资源全部交给Nginx处理,Tomcat只处理动态接口;业务层加缓存、数据库优化,减少Tomcat业务耗时。四、故障排查类(实战必考)12、Tomcat启动失败,你怎么排查?按优先级排查,非常实用:端口占用:最常见,8080、8005、8009被其他进程占用,杀掉占用进程或修改端口即可。配置文件错误:server.xml、context.xml标签写错、语法不规范,看日志报错行数。项目包冲突:war包中jar包重复、版本冲突,启动报ClassNotFound、类冲突。JVM内存不足:启动直接报错内存溢出,调整JVM参数。权限不足:Linux环境tomcat目录权限不够,无法读写文件。核心:优先看logs/catalina.out日志,90%问题都能直接定位。13、Tomcat运行卡顿、接口响应慢、超时,如何排查?1、先看线程状态:查看Tomcat线程是否阻塞、死锁、线程耗尽;2、看GC情况:是否频繁FullGC、内存溢出,排查JVM参数;3、查看业务日志:是否有数据库慢查询、接口超时、外部调用阻塞;5、排查是否有大文件、大请求体,导致处理耗时过长。14、Tomcat出现内存溢出(OOM)的原因及解决?常见原因:JVM堆内存设置过小;代码存在内存泄漏(集合未清空、流未关闭、静态变量常驻);频繁热部署、项目重复加载,导致类加载溢出;高并发下请求对象堆积,无法及时回收。解决办法:优化JVM内存参数、修复代码泄漏、关闭生产热部署、定期重启服务、增加内存快照分析定位问题。五、集群与架构类(中高级)15、Tomcat集群怎么做?解决什么问题?主流方案:Nginx+多Tomcat负载均衡集群部署方式:Nginx作为入口,通过轮询、权重、IP哈希策略,把请求分发到多台Tomcat节点。解决问题:单点故障,实现高可用;分担并发压力,提升整体吞吐量;支持服务扩容、灰度发布。16、集群场景下Session共享怎么解决?三种常用方案,生产首选Redis方案:Tomcat自带Session复制:节点之间同步Session,配置简单,但节点多了同步开销大,性能差,适合小集群。Session粘滞(IP哈希):同一用户请求固定访问同一Tomcat,简单但节点宕机用户Session丢失,不推荐生产。Redis统一缓存Session:把Session存入Redis,所有Tomcat节点统一读取,性能好、稳定、支持分布式,是目前企业主流方案。17、Nginx和Tomcat的分工区别?Nginx:前端反向代理、负载均衡、静态资源处理、请求转发、限流、拦截、HTTPS解密,不处理Java业务。特点:高并发、高吞吐、稳定。Tomcat:专门处理Java动态请求、Servlet业务、数据库交互,负责核心业务逻辑。特点:业务处理能力强,并发能力弱于Nginx。标准架构:用户→Nginx→Tomcat→业务/数据库。六、冷门但常问面试题18、Tomcat的热部署优缺点?生产开不开?热部署可以实现修改代码、配置后不用重启Tomcat,自动加载生效。缺点:频繁热部署容易导致内存泄漏、类重复加载、线程混乱、服务不稳定。生产绝对关闭,只在开发测试环境开启。19、Tomcat7、8、9、10的核心区别?Tomcat7:支持Servlet3.0,默认BIO,老旧项目常用。Tomcat8:默认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论