锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官!接下来的是今日的面试题:

====tomcat优化教训?
优化连贯配置.这里以tomcat7的参数配置为例,须要批改conf/server.xml文件,批改连接数,敞开客 户端dns查问。
参数解释: URIEncoding=”UTF-8″ :使得tomcat能够解析含有中文名的文件的url,真不便,不像apache里还有搞 个mod_encoding,还要手工编译 maxSpareThreads : 如果闲暇状态的线程数多于设置的数目,则将这些线程停止,缩小这个池中的线程总 数。minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。 enableLookups : 这个效用和Apache中的HostnameLookups一样,设为敞开。 connectionTimeout : connectionTimeout为网络连接超时工夫毫秒数。 maxThreads : maxThreads Tomcat应用线程来解决接管的每个申请。这个值示意Tomcat可创立的最大 的线程数,即最大并发数。 acceptCount : acceptCount是当线程数达到maxThreads后,后续申请会被放入一个期待队列,这个 acceptCount是这个队列的大小,如果这个队列也满了,就间接refuse connection maxProcessors与minProcessors : 在 Java中线程是程序运行时的门路,是在一个程序中与其它管制 线程无关的、可能独立运行的代码段。它们共享雷同的地址空间。多线程帮忙程序员写出CPU最 大利用率的高 效程序,使闲暇工夫放弃最低,从而承受更多的申请。 通常Windows是1000个左右,Linux是2000个左右。 useURIValidationHack: 咱们来看一下tomcat中的一段源码:
【security】
if (connector.getUseURIValidationHack()) {
String uri = validate(request.getRequestURI());
if (uri == null) {
res.setStatus(400);
res.setMessage(“Invalid URI”);
throw new IOException(“Invalid URI”);
} else {
req.requestURI().setString(uri);
// Redoing the URI decoding
req.decodedURI().duplicate(req.requestURI());
req.getURLDecoder().convert(req.decodedURI(), true);
能够看到如果把useURIValidationHack设成”false”,能够缩小它对一些url的不必要的查看从而减省开
销。
enableLookups=”false” : 为了打消DNS查问对性能的影响咱们能够敞开DNS查问,形式是批改
server.xml文件中的enableLookups参数值。
disableUploadTimeout :相似于Apache中的keeyalive一样
给Tomcat配置gzip压缩(HTTP压缩)性能
compression=”on” compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/JavaScript,text/css,text/plain”
HTTP 压缩能够大大提高浏览网站的速度,它的原理是,在客户端申请网页后,从服务器端将网页文件压缩,
再下载到客户端,由客户端的浏览器负责解压缩并浏览。绝对于一般的浏览过程HTML,CSS,javascript ,
Text ,它能够节俭40%左右的流量。更为重要的是,它能够对动静生成的,包含CGI、PHP , JSP , ASP
, Servlet,SHTML等输入的网页也能进行压缩,压缩效率惊人。
1)compression=”on” 关上压缩性能
2)compressionMinSize=”2048″ 启用压缩的输入内容大小,这外面默认为2KB
3)noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩
4)compressableMimeType=”text/html,text/xml” 压缩类型
最初不要忘了把8443端口的中央也加上同样的配置,因为如果咱们走https协定的话,咱们将会用到8443端 口这个段的配置:
<!–enable tomcat ssl–>
<Connector port=”8443″ protocol=”HTTP/1.1″
URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″
acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″
useURIValidationHack=”false”
compression=”on” compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
SSLEnabled=”true”
scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS”
keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”/>

====tomcat内存调优?
内存形式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为前面的启动参数会把
JAVA_OPTS作为JVM的启动参数来解决。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -
XX:SurvivorRatio=4"
其各项参数如下:
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM初始内存为3550m。此值能够设置与-Xmx雷同,以防止每次垃圾回收实现后JVM从新分配内存。
-Xmn2g:设置年老代大小为2G。整个堆大小=年老代大小 + 年轻代大小 + 长久代大小。长久代个别固定大
小为64m,所以增大年老代后,将会减小年轻代大小。此值对系统性能影响较大,Sun官网举荐配置为整个堆
的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0当前每个线程堆栈大小为1M,以前每个线程堆栈大小为 256K。更具利用的线程所需内存大小进行调整。在雷同物理内存下,减小这个值能生成更多的线程。然而操作系统对一个过程内的线程数还是有限度的,不能有限生成,经验值在3000~5000左右。
-XX:NewRatio=4:设置年老代(包含Eden和两个Survivor区)与年轻代的比值(除去长久代)。设置为
4,则年老代与年轻代所占比值为1:4,年老代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年老代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区 与一个Eden区的比值为2:4,一个Survivor区占整个年老代的1/6
-XX:MaxPermSize=16m:设置长久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年老代对象不通过Survivor
区,间接进入年轻代。对于年轻代比拟多的利用,能够提高效率。如果将此值设置为一个较大值,则年老代对
象会在Survivor区进行屡次复制,这样能够减少对象再年老代的存活工夫,减少在年老代即被回收的概率。

====Tomcat中垃圾回收策略调优?
垃圾回收的设置在catalina.sh中,调整JAVA_OPTS变量。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC -
XX:MaxGCPauseMillis=100"
具体的垃圾回收策略及相应策略的各项参数如下:
串行收集器(JDK1.5以前次要的回收形式)
-XX:+UseSerialGC:设置串行收集器
并行收集器(吞吐量优先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -
XX:MaxGCPauseMillis=100
-XX:+UseParallelGC:抉择垃圾收集器为并行收集器。此配置仅对年老代无效。即上述配置下,年老代使
用并发收集,而年轻代仍旧应用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最
好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年轻代垃圾收集形式为并行收集。JDK6.0反对对年轻代并行收集
-XX:MaxGCPauseMillis=100:设置每次年老代垃圾回收的最长工夫,如果无奈满足此工夫,JVM会主动调
整年老代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会主动抉择年老代区大小和相应的 Survivor区比例,以达到目标零碎规定的最低相应工夫或者收集频率等,此值倡议应用并行收集器时,始终 关上。
并发收集器(响应工夫优先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:设置年轻代为并发收集。测试中配置这个当前,-XX:NewRatio=4的配置失
效了,起因不明。所以,此时年老代大小最好用-Xmn设置。
-XX:+UseParNewGC: 设置年老代为并行收集。可与CMS收集同时应用。JDK5.0以上,JVM会依据系统配置
自行设置,所以无需再设置此值。
-XX:CMSFullGCsBeforeCompaction:因为并发收集器不对内存空间进行压缩、整顿,所以运行一段时间
当前会产生“碎片”,使得运行效率升高。此值设置运行多少次GC当前对内存空间进行压缩、整顿。
-XX:+UseCMSCompactAtFullCollection:关上对年轻代的压缩。可能会影响性能,然而能够打消碎片

====Tomcat一个申请的残缺过程
配置如下:
Ng:(nginx)
upstream yy_001{
server 10.99.99.99:8080;
server 10.99.99.100:8080;
hash $**;
healthcheck_enabled;
healthcheck_delay 3000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send 'GET /healthcheck.html HTTP/1.0' 'Host: wo.com'
'Connection: close';
}
server {
include base.conf;
server_name wo.de.tian;
...
location /yy/ {
proxy_pass http://yy_001;
}
首先 dns 解析 wo.de.tian机器,个别是ng服务器ip地址
而后 ng依据server的配置,寻找门路为 yy/的机器列表,ip和端口
最初 抉择其中一台机器进行拜访—->上面为具体过程
1) 申请被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector取得
2) Connector把该申请交给它所在的Service的Engine来解决,并期待来自Engine的回应
3) Engine取得申请localhost/yy/index.jsp,匹配它所领有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即便匹配不到也把申请交给该Host解决,因为该Host被定义为该Engine的默认主机)
5) localhost Host取得申请/yy/index.jsp,匹配它所领有的所有Context
6) Host匹配到门路为/yy的Context(如果匹配不到就把该申请交给路径名为”“的Context去解决)
7) path=”/yy”的Context取得申请/index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 结构HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet
或doPost办法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

更多面试题或学习资源可查看我主页或评论获取