- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Tomcat面试题及答案(实战版)
一、基础概念题
面试官:你平时用Tomcat做什么?它的核心作用是什么?
答:主要用它部署JavaWeb项目(如SpringBoot、SSM项目),本质是JavaServlet容器,还支持JSP解析和JavaEE规范(如Servlet、JSP、EL)。简单说就是把写好的war/jar包放进去,能通过浏览器访问项目接口或页面,常用版本是8.x和9.x。
面试官:Tomcat的核心组件有哪些?它们之间怎么配合工作的?
答:核心是4层容器结构:
Server(顶层):整个Tomcat实例,一个Server可包含多个Service;
Service(服务):绑定Engine和Connector,比如一个Service对应“HTTP连接+引擎”的组合;
Connector(连接器):监听指定端口(如8080),接收浏览器请求,把请求转成Engine能处理的格式;
Engine(引擎):管理多个Host(虚拟主机),接收Connector的请求后,转发到对应Host的Web应用。
举个例子:浏览器访问http://localhost:8080/test,先被8080端口的Connector接收,传给Engine,Engine找到localhost对应的Host,再定位到test项目处理。
面试官:Tomcat默认有哪些端口?改端口要改哪个文件?
答:常用3个默认端口:
8080:HTTP访问端口(项目访问用);
8005:Shutdown端口(关闭Tomcat的端口,默认只允许本地访问);
8009:AJP端口(和Apache服务器联动时用,一般用不到可关闭)。
改端口要编辑conf/server.xml文件,找到对应Connector或Server标签的port属性,改完后重启Tomcat生效。
二、进阶理解题
面试官:Tomcat的Connector有哪几种运行模式?实际项目选哪种?
答:主要3种模式,区别在IO处理方式:
BIO(阻塞IO):每个请求开一个线程,并发高时线程多,内存占用大,Tomcat7及以前默认,现在基本不用;
NIO(非阻塞IO):用少量线程处理多请求,通过IO多路复用实现,并发能力比BIO强,Tomcat8及以后默认,中小项目够用;
APR(ApachePortableRuntime):调用操作系统底层IO接口,性能最好,但需要装APR库(如Linux装apr-devel包),高并发项目(如峰值1000+QPS)会用这个。
面试官:Engine和Host的区别是什么?怎么配置多个虚拟主机?
答:Engine是Host的管理者,一个Engine下可配置多个Host(虚拟主机),每个Host对应一个域名。比如配置和两个域名,都指向同一台Tomcat:
改conf/server.xml,在Engine标签里加两个Host标签:
Hostname=appBase=webapps/test1
Contextpath=docBase=ROOT/!--项目根路径--
/Host
Hostname=appBase=webapps/test2
Contextpath=docBase=ROOT/
/Host
本地测试改hosts文件(Windows:C:\Windows\System32\drivers\etc\hosts),加和,就能通过不同域名访问不同项目。
面试官:Tomcat里的Session怎么管理?分布式项目里Session共享怎么解决?
答:单Tomcat里Session存在内存中,默认超时时间30分钟(改conf/web.xml的session-config标签)。分布式项目(多Tomcat集群)会有Session不一致问题,常用解决办法:
用Redis/Memcached存Session:把Session序列化后存在缓存里,所有Tomcat都从缓存读Session,需要在项目里配置(如SpringSession);
Tomcat集群Session复制:在conf/server.xml里配置Cluster标签,多Tomcat间自动同步Session,但并发高时同步耗资源,适合小规模集群;
用JWT令牌:不用Session,把用户信息加密在Token里,客户端每次请求带Token,服务端解密验证,缺点是无法主动销毁Token。
三
文档评论(0)