Tomcat 高频面试题及真实口语化答案_第1页
Tomcat 高频面试题及真实口语化答案_第2页
Tomcat 高频面试题及真实口语化答案_第3页
Tomcat 高频面试题及真实口语化答案_第4页
Tomcat 高频面试题及真实口语化答案_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

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

文档简介

Tomcat高频面试题及真实口语化答案一、基础认知类(初级必问)1、说说你对Tomcat的理解?它是什么?Tomcat是一款开源的轻量级Web服务器,也是Java的Servlet容器。主要用来运行JavaWeb项目,比如JSP、Servlet程序。和Nginx不一样,Nginx主要做静态资源访问、反向代理、负载均衡,不支持Java程序运行;而Tomcat专门负责解析和执行Java动态代码,处理动态请求。日常开发中,一般都是Nginx+Tomcat搭配使用。2、Tomcat、Jboss、WebLogic的区别?Tomcat:轻量、免费、开源,只是Servlet容器,只支持Servlet、JSP规范,不支持完整的J2EE,没有EJB、JTA这些功能,中小型项目、开发测试环境用的最多。Jboss:完全的J2EE服务器,支持EJB、事务、集群等全套功能,开源免费,比Tomcat功能强,适合大型企业项目。WebLogic:商用收费的重量级服务器,稳定性、安全性、集群能力极强,大型国企、银行、金融核心项目用的多,性能和容错性优于开源容器。3、Tomcat默认端口有哪些?各自作用?最常用的三个端口:8080:HTTP访问端口,项目正常访问的端口8005:Shutdown关闭端口,通过这个端口发送指令关闭Tomcat服务8009:AJP协议端口,用于和Nginx、Apache做反向代理通信4、Tomcat部署项目有几种方式?日常工作中常用四种:直接把war包丢进webapps目录,Tomcat自动解压部署,最简单,适合测试环境修改conf/server.xml配置Context节点,指定项目路径,不用放webapps在conf/Catalina/localhost下新建xml配置文件,单独配置单个项目部署IDE部署,IDEA/Eclipse直接启动Tomcat运行项目,开发阶段用生产环境一般不用webapps自动部署,避免多余项目加载,多用xml独立配置部署。二、核心原理类(中级高频)1、Tomcat的整体架构是什么?Tomcat核心是分层组件架构,从上到下核心组件:Server:整个Tomcat服务,一个Server对应一个Tomcat实例Service:服务组件,一个Server包含多个Service,默认只有一个CatalinaServiceConnector连接器:负责接收客户端请求,解析HTTP/AJP协议,封装请求和响应,传递给EngineEngine引擎:核心处理器,负责分发请求,匹配对应的虚拟主机Host虚拟主机:对应一个域名,localhost就是默认主机,可配置多域名多项目Context上下文:对应一个具体的Web项目,每个项目就是一个Context,独立隔离2、Tomcat请求处理流程?说详细一点1、客户端发起HTTP请求,访问Tomcat端口;2、Connector连接器监听端口,接收Socket请求,解析HTTP协议,封装成Request和Response对象;3、连接器把请求交给Engine引擎,引擎根据域名匹配对应的Host虚拟主机;4、Host根据项目路径匹配对应的Context项目上下文;5、Context找到对应的Servlet,调用Servlet的service方法处理业务逻辑;6、业务处理完成后,返回结果给Response,Connector组装HTTP响应返回客户端。3、Tomcat的ClassLoader双亲委派机制?和JDK的区别?Tomcat自定义了类加载器,打破了JDK默认的双亲委派。JDK双亲委派是:子类加载器先找父类,父类找不到自己再加载。Tomcat为了实现项目隔离、热部署,顺序反过来:先自己加载项目的class和jar,加载不到再交给父加载器。这样可以保证不同web项目的同名类互不冲突,单个项目重启不影响整个Tomcat。4、Tomcat是线程安全的吗?Servlet是单例还是多例?Servlet是单例,Tomcat启动时只会初始化一个Servlet对象,所有请求共用这一个实例。所以Servlet非线程安全,如果在Servlet中定义成员变量,多线程并发请求会出现数据错乱。解决方案:尽量不要用成员变量,改用局部变量,或者加锁、用ThreadLocal。三、性能调优类(面试重点)1、Tomcat日常调优你做过哪些?我工作中主要调这几块:线程池、连接数、JVM参数、禁用冗余功能、开启压缩、优化静态资源。1、调整Connector线程池修改最大线程数、最小空闲线程、最大连接数,避免高峰期线程耗尽。默认线程数偏小,生产一般调到200-500,根据服务器配置调整。2、优化JVM参数设置堆内存大小,新生代老年代比例,开启GC日志,生产环境使用G1垃圾收集器,避免频繁GC、OOM。3、开启GZIP压缩对JS、CSS、HTML、文本文件开启压缩,减少网络传输大小,提升响应速度。4、禁用自动部署、关闭热部署生产环境关闭自动部署,避免运行中扫描文件导致卡顿、占用资源。5、优化静态资源缓存配置静态资源过期时间,减少重复请求。2、TomcatBIO、NIO、NIO2、APR区别?生产用哪个?BIO:传统阻塞IO,一个请求一个线程,并发量高了线程爆满,性能最差,Tomcat7之前默认,现在基本不用。NIO:非阻塞同步IO,基于多路复用,少量线程可以处理大量请求,并发能力强,Tomcat8默认模式,生产最常用。NIO2:异步非阻塞IO,性能比NIO稍好,但日常提升不明显。APR:基于系统底层的高性能IO模式,需要安装依赖,高并发场景性能最优,但配置麻烦。生产推荐:默认NIO模式,超高并发场景用APR。3、Tomcat最大线程数、最大连接数怎么配置?合理值多少?在server.xml的Connector标签中配置:maxThreads:最大工作线程,默认200,生产一般200~500minSpareThreads:最小空闲线程,默认10,保证低并发不频繁创建销毁线程maxConnections:最大连接数,NIO模式默认10000acceptCount:排队等待队列,默认100,线程满了之后的等待请求数注意:不是越大越好,线程太多会导致CPU上下文切换频繁,反而性能下降。四、故障排查类(实战面试题)1、Tomcat启动失败常见原因有哪些?工作中遇到最多的几种:端口被占用(8080、8005、8009被其他程序占用)项目jar包冲突、版本冲突、类重复配置文件写错(server.xml、web.xml语法错误)JDK版本不匹配,环境变量配置错误磁盘满、权限不足,无法写入日志和临时文件2、Tomcat访问卡顿、响应慢怎么排查?按顺序排查:先看服务器CPU、内存、磁盘IO、负载,确认是不是服务器资源瓶颈查看Tomcat线程状态,是不是线程阻塞、线程耗尽查看GC日志,是否频繁FullGC、内存溢出查看Tomcataccess日志,看接口响应时间,定位慢接口排查数据库、Redis、第三方接口是否卡顿导致整体响应慢检查是否有死锁、循环请求、资源未释放的代码问题3、Tomcat报OOM内存溢出怎么解决?常见三种OOM及解决方案:堆内存溢出:加大-Xms、-Xmx堆内存,排查代码内存泄漏(集合未清空、对象未释放)元空间溢出:加大Metaspace大小,排查重复加载类、热部署过多导致类溢出线程栈溢出:排查递归死循环、线程创建过多问题五、集群与高可用(进阶面试)1、Nginx+Tomcat集群原理?用Nginx做反向代理和负载均衡,后端部署多台Tomcat节点。用户所有请求先到Nginx,Nginx根据负载均衡策略(轮询、权重、ip_hash)把请求分发到不同Tomcat服务器,实现请求分流、高可用。一台Tomcat挂了,Nginx自动剔除节点,不影响整体服务。2、集群环境下Session共享怎么解决?实际项目常用两种方案,基本不用Tomcat自带的Session复制(效率低):Redis统一存储Session:所有Tomcat节点的Session存入Redis,实现全局共享,最常用、性能最好Nginxip_hash策略:同一用户请求固定访问同一台Tomcat,避免Session丢失,适合简单集群3、Tomcat集群和微服务的区别?Tomcat集群是单体项目集群,多个节点跑的是同一个完整项目,只是做请求分流,项目还是一个整体,耦合度高。微服务是项目拆分,把一个大项目拆成多个独立小服务,每个服务单独部署、独立迭代、独立扩容,灵活性和扩展性远好于Tomcat单体集群。六、实操简答题(面试口头常问)1、怎么实现Tomcat热部署?生产能用吗?可以通过配置context.xml开启reloadable=true实现热部署,修改代码不用重启服务。生产绝对不用。热部署会频繁扫描文件、重启Context,占用资源、容易内存泄漏、导致服务不稳定,只适合开发测试环境。2、Tomcat的work目录作用?可以删除吗?work目录是Tomcat的工作目录,存放JSP编译后的class文件、缓存文件。可以删除,日常清

温馨提示

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

评论

0/150

提交评论