发表于: 2019-12-27 23:09:23
1 1149
今天完成的事情:
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
NGINX是用于Web服务,反向代理,缓存,负载平衡,媒体流等的开源软件, 除拥有HTTP服务器功能,NGINX还可以用作电子邮件(IMAP,POP3和SMTP)的代理服务器以及HTTP,TCP和UDP服务器的反向代理和负载平衡器。
好处: 1.反向代理 通过代理访问服务器,隐藏服务段ip信息
2.负载均衡 根据请求分配不同的服务器
3.静态代理 tomcat处理图片数据慢,用nginx进行代理,进行动静分离,然后tomcar直接调用nginx里的图片数据即可
除了nginx 还有 HAProxy、Varnish等反向代理服务器
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter是web.xml配置文件里的过滤器 ,就是对请求起到过滤的作用,它在监听器之后,作用在servlet之前,对请求进行过滤
Interceptor 就是对请求和返回进行拦截,它作用在servlet的内部
29.使用Annotation的时候需要有哪些配置,他的加载过程是怎么样的?
java自带注解可直接使用,使用spring的注解需引入spring核心jar包
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
xml配置主要是结构清晰,容易理解,但是配置内容过多,所以工程量大的时候不利于解读和维护。
注解相对比较灵活,但对于初学者不利于理解,配置内容比较少,便于维护。
为什么为什么更喜欢使用Annotaion来配置Spring MVC
1.相对于xml配置配置文件比较少,省事。
2.注解代码比较简单,便于维护。
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
环境参数(context-param): 初始化spring的配置)
监听器(listener): (加载初始化配置context-param)
过滤器(filter): (过滤条件)
控制器servlet: (整个springmvc流程)
拦截器(interceptor): (作用在servlet内部)
web.xml运行时的执行顺序: context-param- listener- fifter- servlet- interceptor
如何加载spring配置:context-param初始化spring配置 传递给listener加载
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
从为实现resuful风格来对比:
Struts2是类级别的拦截, 一个类对应一个request上下文
SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
常用框架:cfx jws Xfire Axis2
jws也就是jax-ws,是java6提供的对webservice的一种实现。
cxf框架则简化了服务发布过程。
webservice 使用固定XML格式封装成soap消息 传输效率、处理效率慢,现在都是用JSON
银行和大型国企使用的原因:
1.数据交换方便 可跨平台
2.使用成本低(人员培训和产品购买)
3.使用xml对数据进行封装,保证数据安全
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
TCP/IP 并不指代某个具体协议,而是利用ip进行通信所必须用到的协议群的统称,也可称之为网络协议群
分为4层: 1.应用层(http.ftp等)
2.传输层(tcp udp等)
3.网络层(ip协议)
4.数据链路(网络接口)层:(加入以太网协议)
传输过程:

三次握手:
所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。
三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
握手流程:
第一次握手:客户端发送一个TCP标志位SYN=1,ACK=0的数据包给服务端,并随机会产生一个Seq=J.当服务端接收到这个数据后,服务端由SYN=1可知客户端是想要建立连接;
第二次握手:服务端要对客户端的联机请求进行确认,向客户端发送应答号ACK=1、SYN=1 确认号Ack=J+1,此值是客户端的序列号加1,还会产生一个随机的序列号Seq=K,这样就告诉客户端可以进行连接;
第三次握手:客户端收到数据后检查Ack是否为J+1,以及标志位ACK的值是否为1,若为1,则会发送ACK=1、确认号码Ack=K+1,告诉服务端,你的请求连接被确认,连接可以建立,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
图解:

关于图中的缩写字母含义:
SYN=发起一个请求
seq=序号,用来标识数据包,发起方发送数据时对此进行标记。
ACK= 确认序号有效(表示对请求的响应)
ack=1时有效,ack=seq+1
只要确认方ack=发起方seq+1,两端即可配对。
为什么不是2次或4次:
三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率
也有需要更高安全性的地方,是可以有N次握手协议的,但那是特殊情况。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
http是超文本传输协议
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中.因此get不安全,post安全
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.需要提交大量数据的时候使用Post
内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件.意思就是传输的是什么类型的数据.
Content-Type使用的是 “主类型/子类型; 额外参数” ( [type]/[subtype]; parameter )的数值格式。
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。这种方式用的比较多。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。一般上传文件才会使用这种方式。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。一般向服务端发送json数据会使用这种方式。
http状态码有哪些?
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
例如:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
36.了解maven的module。
module是模块/组件,里面是封装好的一个工程项目
当我们创建一个maven项目,项目是父工程,module是它的子工程。
创建module必须要有父工程的存在,maven就是通过父-子关系对工程项目进行管理的。
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
Rest风格可以通过一套统一的接口为Web.Ios.Android提供服务, 结构清晰、符合标准、易于理解。
不用restful风格 接口就只能是这样,一个行为占用一个接口
/user/delete?id= 删除
/user/get?id= 获取
如果这个行为要变 比如我要把delete变成get 我只能去修改代码
而restuful就不同 使用HTTP协议动词来做增删改查操作,如果我把delete变成get
get /user/student/id 直接改协议动词就行
delete /user/student/id
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
1.使用json tag-lib标签在jsp页面设置
好处:可以灵活修改,只修改jsp页面代码就行 不修改controller层的代码了
坏处:但增添了返回jsp页面的步骤,效率也会低一些
2.使用@reponsebody 直接生成josn格式数据 跳过视图解析器
好处:简单 效率快
坏处:增加controler层代码的复杂度
推荐用json tag-lib原因: 当项目复杂时,controller层会减少代码,明显能让代码的更加简洁度更高。
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
修真院接口文档包含的内容:
1.接口功能
2.接口路径
3.接口入参
4.接口出参
5.各字段说明、约定值、是否必填、默认参数
6.复杂数据结构给出出范例
接口好坏准则:
1. 提供给前端 方便理解,易使用,难误用
2. 简介明了,开发人员自己方便理解及更改
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
大体分为request header, response header
request里有 http请求方式(get post) 、 host(域名地址)、accepy(内容类型等)
41.如何写shell脚本?尝试自己编写一个简单脚本。
1.开头一定要写 #!/bin/bash 或者 #!/bin/sh 表明这是一个shell脚本
2.不要用windows自带文本编辑器写,应该用nodePad++编写,把格式变成linux能识别的LF格式
3.严格按照shell脚本的格式来写,shell脚本对空格要求非常严格。
自己在之前写过一个,复制war包到3个web容器webapps目录下的shell脚本
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
1.快速启动web容器的脚本
2.部署war包到web容器的脚本
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
A: 多个WEB服务配置在一个容器
一旦某个WEB服务访问量增大,占用服务器内存多,肯定会影响其他WEB服务
如果服务器出问题时,所有WEB服务都出错。
B:一个WEB服务配置一个容器
与上面相反
某一个WEB服务突然占用内存大不影响其他WEB服务,某一个WEB容器出错,不影响所有WEB服务
我觉得B比较好,能对不用的WEB服务分配不同的W
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
如何估算1个WEB容器占用内存大小
个人理解: 1.服务器的整体硬件配置,这个是最重要的,内存肯定越高越好
2.在不开启WEB容器的情况下,去掉其他应用+其他容器占用的内存,再给WEB容器分配
3.根据WEB服务的大概业务量来决定WEB容器的内存配置
我的服务器是2G内存 假如我只使用一个WEB容器,那么分配1G是合适的
然后运行一段时间后,根据业务量大小再调整合适的内存。
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置。
tomcat: 内存 catalina.sh 文件 端口 server.xml 日志文件 server.xml
resin: 内存 resin.xml 端口 resin.properties 日志文件 cluster-default.xml
jetty:内存 satt.ini添加jvm的module 端口 srart.ini 日志文件 start.ini添加accesslog的module
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
jetty:架构简单,扩展简单,消耗性能少,连接周期长,适合多分布式,更适合Web聊天等应用
tomcat:配置复杂,不易扩展,但对Java EE,Servlet支持全面,能处理少数且繁忙的业务,性能较优,适合大规模企业级应用。
resin:速度比tomcat稍快,但开发热环境部署支持差,每次更新class或jsp,都得重启,但这一特性在生产热环境部署反而成了优势。适合一些部署集群的项目
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
非maven的有两个,在maven中配置的有三个
1.package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包
2.IDEA自带的打包工具,不过打的包很容易出现冲突
3.jar-dependency插件,繁琐,性能差,不建议使用
4.assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5.shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决
性能对比: shade>assembly>IDEA自带>package>jar插件
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
war包是一种打包格式,java web程序打的包是为了给web容器识别的,web容器只能识别war包。
还可以将自己的项目打包为jar包 ,jar文件的目的是把类和相关的资源封装到压缩的归档文件中。
而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。
49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
没找到...
50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
常用: 1. application/x-www-form-urlencoded 请求以key-value形式 SpringMvc中使用@requestparam接收 也可不加 默认接收
2.multipart/form-data 需要在表单中进行上传文件时,需要用到该格式 SpringMvc不需要添加注解也可接收
3.application/json 请求要用数据请求体(body),不管body里是不是json格式, SpringMvc都只能使用@RequestBody接受参数
4.text/html HTML格式 SpringMvc直接接收
51.什么是restful?rest的请求方法有哪些,有什么区别?
restFul是符合rest架构风格的网络API接口,完全承认Http是用于标识资源。 restFul URL是面向资源的,可以唯一标识和定位资源。
特点 1. URL不能出现动词(如find add)
2.URL能够唯一地标识单个或一类资源
3.使用http动词去操作URL标识的资源
比如: get http://api/highschool/student/name?name=小王
get获取动词 定位到了资源,某高中,学生,名字
请求方式:
get (获取资源) post (增加资源) put (更改资源) delete(删除资源)
明天计划的事情:
推进任务3
评论