发表于: 2018-04-06 21:48:55
1 1318
今天完成的事情:
完成深度思考
19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
tomcat与jetty
1.相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
2.不同点:
(1)架构方面
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
(2)性能方面
Jetty和Tomcat性能方面差异不大
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
Jetty默认采用NIO在处理I/O请求上更占优势,在处理静态资源时,性能较高
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
tomcat和resion
1.相同点
都是web服务器,并且支持集群部署。
2.不同点
(1)速度方面
resin的速度要比tomcat快
(2)机制方面
resin的启动与关闭机制以及报错机制都比tomcat好,tomcat则相对臃肿一些。
(3)开发环境热部署支持方面
tomcat较好,可根据需要配置。修改Jsp或java文件时,可配置是否重启服务。
resin较差,更新class及jsp文件,系统都会自动重新部署,并重启,配置了Session会话时开发比较麻烦。
(4)生产环境下热部署支持
tomcat一般。更新配置文件时,必须手动重启。更新其他文件时,大部分不用重启。但一次性更新太多文件时,经常会造成Tomcat重启失败。
resin较好。更新配置文件时,Resin会自动重启。
20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
tomcat:
端口:\apache-tomcat-8.0.3\conf\server.xml 修改connector标签的port属性
内存:配置内存大小
修改bin/catalina.bat中的set CATALINA_OPTS=-Xms64m -Xmx128m。
Xms指最小内存,Xmx指最大内存。
日志:server.xml Logger标签
className:指定logger使用的类名,此类必须实现org.apache.catalina.Logger接口。
prefix:指定log文件的前缀。
suffix:指定log文件的后缀。
timestamp:如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt。
配置Log4j日志记录
项目中抛出的异常,抛到tomcat中的异常会被tomcat记录下来,存放至logs/localhost.yyyy-MM-dd.log文件中。
平时我们在项目中使用的log4j记录日志跟tomcat是没有任何关系的,是独立的一个程序,记录的文件是自定义的。
我们可以在tomcat中定义一个log4j的公共日志处理方式,这样在项目中就不需要在定义log4j的配置了。
1)将log4j-1.2.15.jar加入到commonlib目录。
2)将log4j.properties加入到commonclasses目录。
21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
我的理解是一个web配置一个容器,如果将多个web服务都配置在一个容器中,可能会造成管理混乱。
22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
脚本我理解的就是演员在演戏的时候的剧本,演员在演戏时需要照着剧本上规定的演。而在程序中脚本就是可以再现某些重复性的操作。
使用vim、nano、vi等任意文本编辑工具,都可以编写shell脚本。
23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
1,IP地址是用于标识出网络上的每一台主机的编号。
2,域名(domain name),是由一串用“点”分隔的字符组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。
域名通常会和IP进行绑定,通过访问域名来访问网络上的主机的服务。IP地址通常指的是网络中的主机,而域名则通常表示一个网站,一个域名可以绑定到多个ip上,多个域名也可以绑定到一个ip上。
3,端口,主要分为物理端口和逻辑端口。我们一般说的都是逻辑端口,用于区分不同的服务。因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。
端口号分为公认端口(0~1023)、注册端口(1024~49151)和动态端口(49152~65535)。我们自己的服务一般都绑定在注册端口上。
应该通过域名访问,原因首先是域名好记,其次则是如果服务器中的资源发生迁移时,那么原先的IP地址就无效了,必须重新使用新的IP地址,如果使用域名访问则不用更换;最后,通过IP访问会造成安全隐患。
客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中。
24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
作用:
1.Http代理,方向代理:作为web服务器最常用的功能之一,尤其是反向代理。
2.负载均衡:Nginx提供的负载均衡策略有两种:(内置策略和扩展策略)。
3.web缓存:Nginx可以对不同文件做不同的缓存处理,配置灵活。
优点:
1,响应请求快,并发高
2,高扩展性,跨平台
3,高可靠性:用于反向代理,宕机的概率微乎其微
4,低内存消耗
其他的反向代理服务器:Squid,Varnish,Apache TS,HAProxy
25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
大段的try catch是有风险的,因为一大段程序中可能会出现各种各样的异常,如果捕获了这些异常却不去正确的处理,就会造成很大的隐患,使得程序在没有处理异常的情况下继续进行。
26.对Service返回的结果是否要判空,为什么?
需要判空,判空可以确认对数据的操作是否成功。
27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要打日志,打的日志应该是执行操作的结果,这样可以在出现问题的时候快速定位地点。
28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
在真实的项目中一般都有开发时间限制,需要前后端同时开发,后端的开发不依赖前端,时间取决于技术水平;而前端开发的动态页面,则需要后端给出的数据支持。但是项目开发时不可能等到后端开发完,前端再开始开发,因此,前后端需要共同定义接口文档,确定接口返回的数据结构、数据类型、对象名称等等内容。
模拟假数据,不能模拟没有意义的垃圾数据,模拟数据时要保证数据的多样性。需要多从不同的角度来模拟正常运行和异常情况的数据。
29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
Postman是一种网页调试与发送网页http请求的chrome插件。我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口。
SoapUI、Jmeter、Poster
30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
有restclient,httpie,ab,curl等。
一、get请求:
1、使用curl命令:
curl "http://www.baidu.com" 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i "http://www.baidu.com" 显示全部信息
curl -l "http://www.baidu.com" 只显示头部信息
curl -v "http://www.baidu.com" 显示get请求全过程解析
2、使用wget命令:
wget "http://www.baidu.com"也可以
二、post请求
1、使用curl命令(通过-d参数,把访问参数放在里面):
curl -d "param1=value1¶m2=value2" "http://www.baidu.com"
2、使用wget命令:(--post-data参数来实现)
wget --post-data 'user=foo&password=bar' http://server.com/auth.php
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
通常所说的外网就是Internet,在这个国际互联网上IP地址是不允许重复的。而内网则是一定范围内的局域网,企业网、校园网、家庭网等。局域网可以只是内部使用,那么就不需要与外网连接;也可以有一个互联网出口,这样局域网就可以访问公网。
该用外网IP测试,内网不支持使用云平台。
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口:因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。
netstat这个命令常用在网络监控方面。利用这个命令,可以查看当前系统监听的服务和已经建立的服务,以及相应的端口、协议等信息。
1,netstat -[atunlp]
-a :all,表示列出所有的连接,服务监听,Socket资料
-t :tcp,列出tcp协议的服务
-u :udp,列出udp协议的服务
-n :port number, 用端口号来显示
-l :listening,列出当前监听服务
-p :program,列出服务程序的PID
2,lsof -i:端口号 查看某个端口是否被占用
查看端口是否可访问:telnet ip 端口号
查看防火墙状态
service iptables status
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
通常http服务开通80端口,mysql开通3306端口
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
C标签是:核心标签,最常用的JSTL标签。
(1)表达式控制标签:
<c:out>标签:用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是标签可以直接通过"."操作符来访问属性。
<c:set>标签:用于设置变量值和对象属性。
<c:remove>标签:用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
<c:catch>标签:主要用来处理产生错误的异常状况,并且将错误信息储存起来。
(2)流程控制标签:
<c:if>标签:判断表达式的值,如果表达式的值为 true 则执行其主体内容。
<c:choose>标签:与Java switch语句的功能一样,用于在众多选项中做出选择。
<c:when>标签:<c:when>在<c:choose>中,就相对于case在switch语句中。
<c:otherwise>标签:<c:otherwise>在<c:choose>中,就相对于default在switch语句中。
(3)循环标签:
它们封装了Java中的for,while,do-while循环。
<c:forEach>标签:更加通用的标签,因为它迭代一个集合中的对象。
<c:forTokens>标签:通过指定分隔符将字符串分隔为一个数组然后迭代它们。
(4)URL操作标签:
<c:import>标签:提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL
<c:url>标签:将URL格式化为一个字符串,然后存储在一个变量中。
<c:redirect>
标签:通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持<c:param>标签。
<c:param>标签:用于在标签中指定参数,而且与URL编码相关。
明天计划的事情:
交任务,开始任务三
遇到的问题:
无
收获:
深度思考
进度:完成任务二
任务开始时间:3.23
预计demo时间:4.6
是否延期:否
禅道地址:http://task.ptteng.com/zentao/project-task-562.html
评论