发表于: 2020-03-13 23:16:39
1 1275
研究配置nginx 下午
深度思考 没完
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
MVC是Spring中实现控制层框架的一种思想。
MVC,m指的是model(模型),v指的是view(视图,即展示给用户的页面),c指的是controller(控制器)
步骤:
(1):用户发起请求到前端控制器(DispatcherServlet)
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
参数校验即对方法参数进行验证,无论是前端还是后台,包括真实项目,都需对用户输入进行验证,以此来保证系统数据的正确性。
3.SpringMVC分页查询和显示
使用pageHelper实现分页查询和显示,就是将查询出来的数据,按照特定的长度(数量)进行分开显示 分页的核心简单地讲,就是计算每页多少记录和总页数以及第几页。
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户,外网IP就是标示了在整个互联网上的地址,而内网IP呢,就是标识着您在局域网里面的地址。在服务器上测试的话应该是用外网IP。
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
postman、RESTClient、jmeter、loadrunner、SoapUI等;
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
一个接口调试工具,上手快,支持用例管理,支持抓包,保存历史记录,多终端同步用例,支持批量运行、定时运行等等。除了postman以外还有dhc、Jmeter、insomnia、paw等。
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
定义了接口就知道该做什么,然后假数据就很好出了,业务逻辑也容易了,这样可以避免因接口不一致而导致的前后端交互问题,提高开发效率。
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
要打日志,看看我们调用的方法得到的结果是不是正确的。
打印的话就打印一个完整的sql的日志。
10.对Service返回的结果是否要判空,为什么?
我们的service返回的结果都是sql语句的结果,我们的日志都能看到返回的结果,不需要判断是否为空。
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
通过nginx的log日志查看访问请求时间;60秒吧;并发1000(高并发)对应的是访问请求,单线程访问对应的是CPU;
Nginx可以支持102400并发,Tomcat默认支持150,能承载多少并发,还需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担;要实现负载均衡就需要配置Nginx.
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
流程:
- (1)域名解析(获得IP地址)
- (2)向WEB服务器发送HTTP请求
- (3)服务器处理请求
- (4)服务器返回HTTP响应
- (5)浏览器显示页面信息
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口,(英语:port),主要分为物理端口和逻辑端口。我们一般说的都是逻辑端口,用于区分不同的服务。因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,标识是从0~65535.
用top命令,或者netstat -anp |grep 端口命令
查看端口是否可访问:telnet ip 端口号
开放的端口位于/etc/sysconfig/iptables中
查看时通过 more /etc/sysconfig/iptables 命令查看
在cmd中使用Telnet IP 端口号 命令查看
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
netstat:查看端口号,一般都不使用这个命令,一般情况下都使用ps命令来查看
CPU占用率就是程序运行时对核心算力的占用比例,内存使用时程序运行时需要用到的储存空间。
CPU占用率过高,内存溢出的时候会产生警报。
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
请求耗时一般是几个地方:1.网络波动;2.服务器db连接过多;3.服务器负载过高;4.前端页面处理;5项目如果有问题部署的时间会比较长
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
Resin可以通过日志的配置来记录访问时间。
Tomcat的内部日志记录使用JULI。可以在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 配置
通过Aop的方法可以在Controller方法执行前后来切入记录日志。使用了环绕方法切入Controller和ServiceImpl来获取访问时间
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
通过查看日志判断;Access.log是apache或者nginx等web service生成的日志,对应于网页的每一次请求,包含有大量的信息;包含用户IP、访问时间、请求方式、接口参数、服务状态、传送字节数、操作系统、浏览器版本、内核信息等;在webd容器的logs文件夹里。
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
(1)部署文件集中在一起比较容易管理
(2)习惯data一般都是部署网站的根目录
21.常用的主流数据库有哪些,Mysql有几种安装方式?
主流数据库:
微软:sql server 和 access;
瑞典MySQL:AB公司 mysql;
IBM公司:db2;
美国Sybase公司:Sybase;
IBM公司:informix;
美国oracle公司:oracle;
小型数据库:access、foxbase;
中型数据库:sql server 、mysql、informix;
大型数据库:db2、Oracle、Sybase。
安装方式:
Windows系统:下载安装包;ZIP Archive 版 ;安装phpstudy
Linux系统:使用yum;官方下载rpm包;免编译包安装
22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?
阿里云、腾讯云、华为云;
1.Linux系统
Linxu Server系统是专门为多用户服务器环境构建的操作系统,不同用户可以共同登录系统,资源占用上也比较的公平。Linxu Server系统具有庞大的用户群体和社区支持,当系统漏洞出现的时候,可以迅速的发布安全补丁,但是,由于Linxu Server系统对技术要求较高,针对一些小企业用户来说,在管理层面有一定的难度。
2.Windows Server系统
Windows Server系统是专有的操作系统,包括Microsoft开发的服务器应用程序。Windows Server系统易于理解、学习和使用。Windows是一个单用户、多任务的操作环境,允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。如今,较为流行的版本是win2008,在网络优化和系统兼容方面都比较好。
介绍了以上操作系统,用户应该如何选择操作系统呢?一般而言,可以根据网站开发的玉檀、数据库类型以及用户的使用习惯来进行挑选。
如果开发语言为ASP、.NET、HTML,数据库为ACCESS、SQL Server,请选择Windows系统;如果开发语言为PHP、HTML,数据库为MySQL,请选择Linux系统。
Ubuntu,Linux Mint和PCLinuxOS是其中最易用使用的。想快速部署使用,就可以选择这几个。尤其对于新手,已经做到了和Windows类似的易用程度了。另一方面,Slackware Linux,Arch Linux和FreeBSD是更激进的发行版,更新比较频繁,所以需要有一定的基础。不然,哪天搞崩了都不知道问题所在。 openSUSE,Fedora,Debian GNU/Linux和Mageia则是比较保守的发行版。稳定性是他们的特点。但是软件包都比较旧。很多桌面版本的新功能没法用。CentOS是一个企业级的发行版,适合那些喜欢稳定性,可靠性和软件长期支持的用户。
23.什么是ssh?如何在linux服务器上从网站下载文件?
使用:wget -c +下载地址
wget是linux下一个从网络上自动下载文件的常用自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。一般的使用方法是: wget + 空格 + 参数 + 要下载文件的url路径,
24.C标签是什么,为什么要使用C标签,有哪些常见的指令?
25.什么叫反向代理?为什么要使用反向代理?
反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网。
(2)负载均衡,通过反向代理服务器来优化网站的负载
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
(1)作为 Web 服务器
好处:
- Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
- Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
- 可以实现方向代理及负载均衡
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
方便快捷,节省时间提高效率。
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Java中常见的AOP技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter是基于回调函数,代理模式是基于Java反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。
WEB 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源:例如 JSP、Servlet,、静态图片文件或静态 HTML 文件等进行拦截,从而实现一些特殊的功能。例如实现 URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
无论程序从左向右或者从右向左执行都必须经过Filter,Filter在Request到达JSP(Servlet)前截获Request并进行预处理,也可以在Response离开JSP(Servlet)时处理Response,然后对Request进行统一的设置后继续向后传递,比如可以在Filter完成字符集的设置,用户身份的识别,敏感词汇的过滤等等,配置Filter个数不限。
Java 里的拦截器是动态拦截 action 调用的对象。它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种可以提取 action 中可重用部分的方式。在AOP(Aspect-Oriented Programming,面向切面编程)中拦截器用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截器 Interceptor 的拦截功能是基于 Java 的动态代理来实现的。
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
在spring中,每使用一个注解就要声明一个bean
比如 :使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean:
使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean:
这样的声明未免太不优雅,所以Spring为我们提供了一种极为方便注册这些BeanPostProcessor的方式,即使用context:annotation- config标签,隐式地向 Spring容器注册各种bean
另外,在我们使用注解时一般都会配置扫描包路径选项:context:component-scan base-package=”pack.pack”/
该配置项其实也包含了自动注入上述processor的功能,因此当使用context:component-scan后,即可将context:annotation-config标签省去。
@autowired注解是如何加载的?自动注入是怎样实现的?
@autowired是通过动态代理和反射,在类加载过程中动态生成代理类,当初始化全局变量时,代理类跳到invoke方法,然后通过反射获取field字段对象,在method.invoke()的调用前即可实现注入。aop和拦截器以及常用注解等功能的实现都是基于动态代理实现的。
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
注解与XML配置的区别
注解:是一种分散式的元数据,与源代码紧绑定。
xml:是一种集中式的元数据,与源代码无绑定。
因此注解和XML的选择上可以从两个角度来看:分散还是集中,源代码绑定/无绑定。
注解的缺点:
(1)在使用spring注解时,会发现注解分散到很多类中,不好管理和维护;
(2)注解的开启/关闭必须修改源代码,因为注解是源代码绑定的,如果要修改,需要改源码,这个有这个问题,所以如果是这种情况,还是使用XML配置方式;比如数据源;
(3)注解还一个缺点就是灵活性,比如在之前翻译的Spring Framework 4.0 M1: WebSocket 支持;在实现复杂的逻辑上,没有XML来的更加强大;注解就是要么用,要么不用;
(4)还一种就是约定大于配置,但是在处理一些复杂的情况下,注解还是需要的(如Spring的数据验证/数据绑定注解很强大);
(5)通用配置还是XML吧,比如事务配置,比如数据库连接池等等,即通用的配置集中化,而不是分散化;
(6)XML方式比注解的可扩展性和复杂性维护上好的多,比如需要哪些组件,不需要哪些;在面对这种情况,注解扫描机制比较逊色,因为规则很难去写或根本不可能写出来;
注解的好处:
(1)XML配置起来有时候冗长,此时注解可能是更好的选择,如jpa的实体映射;注解在处理一些不变的元数据时有时候比XML方便的多,比如springmvc的数据绑定,如果用xml写的代码会多的多;
(2)注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,所以在一些中小项目中使用注解反而提供了开发效率,所以没必要一头走到黑;
(3)注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。
注解也好,XML也好,我们还是需要一些开关/替换机制来控制特殊需求,以改变那种要么全部 要么没有的方案。。
还一种就是约定大于配置,这种方案可能在某些场景下是最优的,但是遇到一些复杂的情况可能并不能解决问题,所以此时注解也是一个不错的方案。尤其在使用springmvc时,好处是能体会的出的。
不管使用注解还是XML,做的事情还是那些事情,但注解和XML都不是万能的,满足自己的需求且已一种更简单的方式解决掉问题即可。
就像探讨一下技术问题,很多人都带有很强的个人喜好来评判一个东西的好坏,这种探讨没有任何意义,最终的目的是解决方案,所以应该探讨的是能不能解决问题,能不能以更容易理解的方式解决问题,能不能更简单的解决问题。
不管是约定大于配置、注解还是XML配置也好,没有哪个是最优的,在合适的场景选择合适的解决方案这才是重要的。就像设计模式一样:是对特定环境中重复出现的特定问题的一个经过前人验证了的解决方案。
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
实现框架:如cfx、jwx、XFire与Axis2,jwx也就是jax-ws,是java6提供的对webservice的一种实现。cxf框架则简化了服务发布过程。Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新
因为只有银行、大型国企这种对安全性要求高的应用场景才会用到。
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP协议,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果)的。HTTP是一个属于应用层的面向对象的协议,由于其简单、快捷的方式,适用于分布式超媒体信息系统。HTTP协议工作于客户端-服务端架构之上,浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送请求,web服务器根据接收到的请求,向客户端发送响应信息。
GET和POST的区别?
1)GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
2)GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
3)GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4)GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
1xx | 指示信息–表示请求已接收,继续处理 |
2xx | 成功–表示请求已被成功接收、理解、接受 |
3xx | 重定向–要完成请求必须进行更进一步的操作。 |
4xx | 客户端错误–请求有语法错误或请求无法实现。 |
5xx | 服务器端错误–服务器未能实现合法的请求。 |
36.了解maven的module。
modules
从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块;如果maven用的比较简单,或者说项目的模块在pom.xml没进行划分,那么此元素是用不到的;不过一般大一点的项目是要用到的。
如果我们的项目分成了好几个模块,那么我们构建的时候是不是有几个模块就需要构建几次了(到每个模块的目录下执行mvn命令)?当然,你逐个构建没问题,但是非要这么麻烦的一个一个的构建吗,那么简单的做法就是使用聚合,一次构建全部模块。
多模块的好处是你只需在根模块中执行Maven命令,Maven会分别在各个子模块中执行该命令,执行顺序通过Maven的Reactor机制决定。先来看创建Maven多模块工程的常规方法。在我们的示例工程中,存在一个父工程,它包含了两个子工程(模块),一个core模块,一个webapp模块,webapp模块依赖于core模块。这是一种很常见的工程划分方式,即core模块中包含了某个领域的核心业务逻辑,webapp模块通过调用core模块中服务类来创建前端网站。这样将核心业务逻辑和前端展现分离开来,如果之后决定开发另一套桌面应用程序,那么core模块是可以重用在桌面程序中。
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。
不用Rest的话,URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法
在REST之前,用的是RPC(Remote Procedure Call,远程过程调用)和SOAP(Simple Object Access Protocol,简单对象访问协议)。RPC需要设计一些程序嵌入到某种结构中。这种结构需要存储参数、错误的代码、返回值等。SOAP产品的性能开销很大,它是一个巨大的性能杀手。
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
http header 消息通常被分为4个部分:general header, request header, response header, entity header。
请求头字段的具体含义:
Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。
Cookie:设置cookie,这是最重要的请求头信息之一
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
41.如何写shell脚本?尝试自己编写一个简单脚本。
Unix命令:
- echo "some text": 将文字内容打印在屏幕上
- ls: 文件列表
- wc –l filewc -w filewc -c file:
- 计算文件行数计算文件中的单词数计算文件中的字符数
- cp sourcefile destfile: 文件拷贝
- mv oldname newname : 重命名文件或移动文件
- rm file: 删除文件
- grep ''pattern'' file: 在文件内搜索字符串比如:grep
- ''searchstring'' file.txt
- cut -b colnum file:指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
- cat file.txt: 输出文件内容到标准输出设备(屏幕)上
- file somefile: 得到文件类型
- read var: 提示用户输入,并将输入赋值给变量
- sort file.txt: 对file.txt文件中的行进行排序
- uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
- expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
- find: 搜索文件比如:根据文件名搜索find . -name filename -print
- tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
- basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
- dirname file: 返回文件所在路径比如:dirname /bin/tux将返回/bin
- head file: 打印文本文件开头几行
- tail file : 打印文本文件末尾几行
#!/bin/bash
echo"Hello Internet !"
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
需要部署脚本,启动脚本,关闭脚本,重启脚本。
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
服务属性相同的前提下把web服务都配置在一个容器中,差别在于服务响应的状态好坏。
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
默认为1024,一般设置大小为war包的4倍就能运行,小于war包可能会拒绝访问
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
内存配置、端口配置、日志文件配置;分别在xml、conf。logs中配置。
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
1.jetty、tomcat、resin的区别
(1)jetty和tomcat的区别
【相同点】
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
【不同点】
①架构方面
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
②性能方面
Jetty和Tomcat性能方面差异不大
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
Jetty默认采用NIO在处理I/O请求上更占优势,在处理静态资源时,性能较高
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
③其它方面
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
【总结】
Jetty更轻量级。由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。
然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。
(2)tomcat和resin的区别
【相同点】
都是web服务器,并且支持集群部署。
【不同点】
①速度方面
resin的速度要比tomcat快
②机制方面
resin的启动与关闭机制以及报错机制都比tomcat好,tomcat则相对臃肿一些。
③开发环境热部署支持方面
tomcat较好,可根据需要配置。修改Jsp或java文件时,可配置是否重启服务。
resin较差,更新class及jsp文件,系统都会自动重新部署,并重启,配置了Session会话时开发比较麻烦。
④生产环境下热部署支持
tomcat一般。更新配置文件时,必须手动重启。更新其他文件时,大部分不用重启。但一次性更新太多文件时,经常会造成Tomcat重启失败。
resin较好。更新配置文件时,Resin会自动重启。
今日问题 深度思考有的没遇到没想过 回去补充了许多
评论