首页 > 编程知识 正文

mysql面试题,tomcat面试问题

时间:2023-05-06 15:15:11 阅读:15281 作者:2265

马上就要进入金三银四的黄金时间了,很多人已经开始准备自己的面试,一筹莫展。 今天我整理了六个关于tomcat的核心面试问题,并参考答案,阅读大多数人对面试的反应都很好。

1、Tomcat的默认端口是多少? 怎么修改?

默认端口为8080,您可以使用tomcat安装包的conf目录中service.xml中Connector元素的port属性更改端口。

2、tomcat有什么样的连接器运行模式(优化)?

这三种模式的区别如下。

bio :一个线程处理一个请求。 缺点:并发量大时,线程数多,浪费资源。 在Tomcat7之前的版本中,Linux系统默认使用此方法。

nIO:Java异步io处理允许用较少的线程处理大量请求。 tomcat8.0.x默认情况下使用NIO。 要启动Tomcat7,必须更改连接器的配置。

connector port=' 8080 ' protocol=' org.Apache.coyote.http 11.http 11 nio protocol ' connection time out=' 20000 ' rediriote

3、Tomcat有几种部署方法吗?

利用Tomcat的自动部署:将webapps应用程序复制到webapps目录。 在生产环境中不建议将其放置在此目录中。 Tomcat在启动时加载目录下的APP应用程序,并将编译的结果放在work目录下。

使用Manager App控制台部署- -在tomcat主页上,单击" Manager App "进入APP应用程序管理控制台,您可以在其中指定web APP应用程序的路径或war文件。

修改conf/server.xml文件的部署:在server.xml文件中,添加可以部署APP应用程序的上下文节点。

添加自定义Web部署文件:在conf/Catalina/localhost/路径下添加xyz.xml文件。 内容是Context节点,可以展开APP应用程序。

4、tomcat容器如何创建servlet类实例? 你用了什么原理?

容器启动时,将从webapps目录中的所有webapps应用程序读取web.xml文件,解析xml文件,并读取servlet注册信息。 然后,加载在每个APP应用程序中注册的servlet类,并通过反射将其实例化。 (有时在第一个请求时实例化。)

在servlet登录时加1,如果是正数,则从最初开始实例化,如果是不写的情况或负数,则首次要求实例化。

5、tomcat如何优化?

tomcat作为Web服务器的处理性能直接关系到用户体验,下面是一些常见的优化措施。

消除对web.xml的监视,并将jsp编辑到servlet中。 有充裕的物理内存时,增大tomcat使用的jvm的内存

服务器提供的CPU、内存和硬盘的性能对处理能力有决定性的影响。

高并发性时,会产生大量的运算,因此CPU的速度直接影响处理速度。

内存在大量数据处理时,需要很大的内存容量。 可以使用-Xmx -Xms -XX:MaxPermSize等参数分割内存的不同功能块。 以前,内存分配不足可能会导致虚拟机保持完全GC,从而导致处理能力大幅下降。

硬盘的主要问题是读写性能,读写大量文件时,磁盘容易成为性能瓶颈。 最好的方法是利用以下缓存。

利用缓存和压缩

对于静态页,希望可以缓存,以便不需要每次从磁盘中读取。 我们采用Nginx作为缓存服务器,缓存了所有图像、css和js文件,有效减少了后端tomcat的访问。

另外,为了加快网络传输速度,开启gzip压缩也是必不可少的。 但是,考虑到tomcat已经需要处理很多东西,所以将这个压缩工作交给前端的Nginx。

文本不仅可以用gzip压缩,实际上很多图像也可以用图像处理工具预压缩。 平衡可以减少画质损失,使文件变得相当小。 我看过从300kb以上压缩到几十kb的图像,但自己几乎看不出区别。

采用集群

如果单个服务器的性能总是有限的,并且实现向外扩展是最好的方法,则构建tomcat集群是有效提高性能的手段。 我们仍然采用Nginx作为分流服务器,多个后端tomcat共享会话并协作。 请参考之前写的《利用nginx+tomcat+memcached组建web服务器负载均衡》。

线程数优化

找到connector port=' 8080 ' protocol=' http/1.1 ',然后按如下方式增加maxThreads和acceptCount属性:

连接到

r port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

• maxThreads:tomcat可用于请求处理的最大线程数,默认是200• minSpareThreads:tomcat初始线程数,即最小空闲线程数• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭• acceptCount:当所有可以使用的处理请求的线程数都被使用时

使用线程池优化

在server.xml中增加executor节点,然后配置connector的executor属性,如下:

<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/><Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

其中:

• namePrefix:线程池中线程的命名前缀• maxThreads:线程池的最大线程数• minSpareThreads:线程池的最小空闲线程数• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭• threadPriority:线程优先级

注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:

• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001• lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数• 使用命令:ulimit -a 查看每个用户允许打开的最大文件数

启动速度优化

删除没用的web应用:因为tomcat启动每次都会部署这些应用。

关闭WebSocket:websocket-api.jar和tomcat-websocket.jar。

随机数优化:设置JVM参数:-Djava.security.egd=file:/dev/./urandom。

内存优化

因为tomcat启动起来后就是一个java进程,所以这块可以参照JVM部分的优化思路。堆内存相关参数,比如说:

• -Xms:虚拟机初始化时的最小堆内存。

• -Xmx:虚拟机可使用的最大堆内存。-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落

• -XX:MaxNewSize:新生代占整个堆内存的最大值。

另外还有方法区参数调整(注意:JDK版本)、垃圾收集器等优化。JVM相关参数请看:手把手教你设置JVM调优参数


6、熟悉tomcat的哪些配置?


Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)标签。

docBase:该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使绝对路径,也可以使用相对于context所属的Host的appBase路径。

path:表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****。

reloadable:这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重启tomcat的情况下改变应用程序。

useNaming:如果希望Catalina为该web应用使能一个JNDI InitialContext对象,设为true。该InitialialContext符合J2EE平台的约定,缺省值为true。

workDir:Context提供的临时目录的路径,用于servlet的临时读/写。利用javax.servlet.context.tempdir属性,servlet可以访问该目录。如果没有指定,使用$CATALINA_HOME/work下一个合适的目录。

swallowOutput:如果该值为true,System.out和System.err的输出被重定向到web应用的logger。如果没有指定,缺省值为false

debug:与这个Engine关联的Logger记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。

host(表示一个虚拟主机)标签。

name:指定主机名。

appBase:应用程序基本目录,即存放应用程序的目录。

unpackWARs:如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序。

Logger(表示日志,调试和错误信息)标签。

className:指定logger使用的类名,此类必须实现org.apache.catalina.Logger接口。

prefix:指定log文件的前缀。

suffix:指定log文件的后缀。

timestamp:如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt。

总结

本文一共六道关于tomcat的题目:

Tomcat的缺省端口是多少,怎么修改?

tomcat 有哪几种Connector 运行模式(优化)?

Tomcat有几种部署方式?

tomcat容器是如何创建servlet类实例?用到了什么原理?

tomcat 如何优化?熟悉tomcat的哪些配置?

再次回头想想你会几道呢?

「做人可以没天赋,但不能没斗志。」


回复干货】获取精选干货视频教程

回复加群】加入疑难问题攻坚交流群

回复mat】获取内存溢出问题分析详细文档教程

回复赚钱】获取用java写一个能赚钱的微信机器人

回复副业】获取程序员副业攻略一份

都收藏了,就点个「在看」支持一下吧!

点下在看,你最好看

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。