发表于: 2018-03-29 23:29:43
1 679
今天完成的事情:
1. 什么是restful?rest的请求方法有哪些,有什么区别?
答:表征性状态传输(英文:Representational State Transfer,简称REST)是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件,如果一个架构符合REST原则,我们就称它为RESTful架构。
RESTful架构:(1)每一个URI代表一种资源;(2)客户端和服务器之间,传递这种资源的某种表现层;(3)客户端通过HTTP四个动词,对服务器资源进行操作,实现“表现层状态转化“。
请求方法有:GET,POST,DELETE,PUT。GET用来获取资源,POST用来新建资源也可以更新资源,PUT用来更新资源,DELETE用来删除资源。
2. 为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
答:网络应用程序,分为前端和后端两个部分,通过互联网通信,具有高延时(high Iatency)、高并发等特点。当前的发展趋势,前端设备层出不穷(手机、平板、电脑、其他专用设备等)。因此需要有一种统一的机制,方便不同的前端设备与后端进行通信,这就导致API架构的流行。
REST是省略了主语resource的,resource就是网络上的一个实体或者是网络上的一个具体信息,比如是文本、图片、歌曲、服务等。在网络上可以用URI(统一资源定位符)指向它,每个资源对应一个特定的URI,要获取这个资源只需要访问它的URI,此时URI就成了每一个资源的地址或独一无二的识别符。
Representation就是资源resource的表现形式,称为“表现层”。
而资源的表现形式就是它的各种状态的体现,不同表现形式的转换就是状态转化(state transfer)。状态转化发生在客户端和服务器交互的过程中。而HTTP协议是无状态协议,所以所有状态都保存在服务器端,因此,客户端想要操作服务器,必须通过某种手段,让服务器端发生state transfer,而这种转化是建立在表现层之上的,所以就是“Representation State Transfer”。
客户端用到的手段,只能是HTTP协议中表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源也可以更新资源,PUT用来更新资源,DELETE用来删除资源。
(http://www.ruanyifeng.com/blog/2011/09/restful.html)
3. 了解maven的module。
Module是模块的意思。Maven多模块化开发,适用于一些比较大的项目,通过不同功能的模块拆分,实现代码复用,方便解耦,便于维护和管理。每个模块都对应一个POM.xml文件,它们之间通过继承和聚合相互关联。
(https://blog.csdn.net/a1049107922/article/details/54347777)
4. 什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
答:(https://www.cnblogs.com/ranyonsue/p/5984001.html)
a.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW: World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP是基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。HTTP是一个属于应用层的面向对象协议,由于其简洁快速的方式,适用于分布式超媒体信息系统。
b.GET和POST请求方法的区别:
GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
区别:1.GET提交,请求的数据会在请求行中的URL之后,而POST提交的数据是在放置在HTTP包的包体中。2.传输数据的大小,本身HTTP协议对传输的数据大小没有限制,对URL长度也没有限制。但是特定浏览器和服务器对URL长度有限制,即使不设限的浏览器也应操作系统的是否支持而受限,所以用GET提交时,传输数据就会受到URL长度的限制,而POST不使用URL传值,所以理论上没有限制,但是必须将Content-type设置为:application/x-www-form-urlencoded。Post设计用来支持web窗体上的用户字段,其参数作为键值对传输,但是不支持复杂数据类型,因为POST没有定义传输数据结构的语义和规则。这时就可以使用http post专用的一个版本soap,它遵循一种特殊的xml消息格式。Content-type设置为:text/xml任何数据都可以xml化。3.POST安全性比GET高,因为GET利用URL传值,所以用户名和密码会明文出现,而登录页面可能被浏览器缓存,其他人使用历史记录,就会获得。除此之外,GET还会收到Cross-site request forgery攻击。4.GET方式需要使用Request.QueryString来取得变量值,而POST方式通过Request.Form来获取。
c. Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件。Content-Type有很多种值吗,每一种值对应一种文件类型或者数据类型。ContentType属性指定响应的 HTTP内容类型。一般会在HTML文件的<mata>中进行定义。如果未指定 ContentType,默认为TEXT/HTML。
d.HTTP协议工作于客户端-服务器端架构上支持B/S及C/S模式,浏览器作为HTTP客户端通过URL向HTTP服务器端发送请求,web服务器根据接收到的请求,向客户端发送响应信息。
e.HTTP状态码,有三位数字组成,第一个数字定义了响应的类型,共分为五种类型:
1xx:指示信息—表示请求已接收,继续处理;
2xx:成功—表示请求已被成功接收、理解、接受;
3xx:重定向—要完成请求必须进行更进一步的操作;
4xx:客户端错误—请求语法错误或请求无法实现;
5xx:服务器端错误—服务器未能实现合法的请求。
常见状态码:
200 ok //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态吗必须和WWW-Authenticate一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复
5. 什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
为了把全世界不同类型的计算机连接在起来,产生了一套全球通用的互联网协议簇(Internet protocol suite),里面包含上百种协议标准,最重要的就是TCP协议和IP协议,简称为TCP/IP协议,后期是不同的通讯协议的大集合。提供已连接互联网是计算机的通信协议,传输控制协议/网际协议,以及电子设备如何连入因特网和数据如何在设备间传输。IP协议(网际协议,计算机间通信)规定互联网中每台计算机的IP地址,通信双方利用各自IP唯一标识对方。负责把数据从一台计算机发送到另一台,数据被分割为很多小块,然后通过IP包发送出去,由于互联网链路复杂,有多条路线可选,所以路由器复杂选择路线,IP包的特点是,按块发送,途径多个录音,但不保证能到达,不保证能顺序到达。TCP协议(传输控制协议,应用程序间通信)建立在IP协议之上,负责计算机间建立可靠连接,保证数据包顺序到达。TCP协议会通过握手建立连接然后对每一个IP包编号,保证对方按顺序收到,如果包对了,就自动重发。
TCP/IP协议是4层模型:应用层,传输层,网络层和链路层。
TCP三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务器端总共发送3个包以确认连接的建立。三次握手可以检验双方是否为目标,第一次客户端发出数据包等待server确认,第二次server收到包后进行更新,在发给客户端,表示确认连接请求,第三次客户端收到确认,再更新包发给server以检验是否可以建立连接,server确认后连接建立。
6. 什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
答:WebService,W3C组织对其定义为:它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。WEB Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
实现WEBService的框架有,Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss、RESTEasy、sun JAX-WS、阿里巴巴的Dubbo等。
Web Service是个很重型的规范,它的应用协议时SOAP(简单对象访问协议),所依赖的不仅仅是HTTP。而银行大型国企的业务逻辑复杂,稳定性和正确性要求高,其他的互联网领域并不需要,他们追求高开发速度和低门槛,同时业务逻辑比较简单。
7. Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
答:a.Struts2是类级别的拦截,一个类对应一个request上下文,springMVC是方法级别的拦截,更易于实现RESTful。同时由于拦截级别的不同,springMVC的方法之间级别上是独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交会给框架,方法间不共享变量,而Struts2就比较乱,所有Action变量是共享的,虽然不影响程序运行,但是给编码读程序带来麻烦,每次来新请求就创建一个Action,一个Action对应一个request上下文。
b.Struts2需要对每个request进行封装,把request,session等servlet生命周期的变量封装成一个个Map,供每个Action使用,并保证线程安全,所有原则上,比较耗费资源。
c.拦截器实现机制上Struts2有自己的interceptor机制,相比于springMVC独立的AOP方式,配置文件量较之大。
d.springMVC的入口是servlet,而Struts2是filter。
e.springMVC继承Ajax使用更方便,只需要一个主键@RequestBody就可以实现,然后之间返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用不方便。
f.springMVC支持JSP303,处理相对更灵活方便,而Struts2验证比较繁琐。
g.与spring对接无缝,Struts2需要配置。设计思路上Struts2更符合OOP,springMVC在servlet上比较严谨。
h.springMVC开发效率和性能高于Struts2。Springmvc可以零配置。
8. web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
答:a.XML头,声明文件可以使用的XML版本并给出文件的字符编码。
b.顶层(根)元素web-app。大小写敏感,其他的XML元素都包含在根元素中。
c.主要配置包括:欢迎页,为servlet和jsp文件命名并定制URL,定制servlet、JSP、Context中的初始化参数,设置过滤器Filter过滤字符编码并做一些逻辑判断等,设置监听器随web应用启动,只初始化一次,做一些初始化添加工作,设置一些基本内容。
加载顺序:listener,filter,servlet,spring。
9. Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
差别:注解适用于简单的配置可以简化配置,提高开发效率。复杂时用XML更好。
springMVC框架有专用注解,便于分层。同时本身层次也很简单,url映射也很简单,哪个网址出错可以立即找到其映射类。
10. 使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
答:context:annotation-config标签隐式向spring容器注册各种bean,配置包扫描路径,开启注解驱动annotation-driver。
11. 什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
答:filter是比servlet更高级的servlet,主要用于对用户请求进行预处理,接着将请求交给servlet进行预处理并生成响应,最后filter再对服务器响应进行后处理。
Interceptor拦截器,在AOP中用于在某个方法或字段被访问请,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
Filter和Interceptor的区别:
a.Filter是基于函数回调的,而Interceptor则是基于Java反射的。
b.Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
c.Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
d.Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
e.在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。(https://blog.csdn.net/xiaodanjava/article/details/32125687)
12. 生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
答:三种方式:适用于google的gson,使用@ResponseBody注解,使用JSON-taglib方式。
13. 一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
答:封皮、修订历史、接口信息、功能参数、接口参数说明、返回值说明、接口调用限制和接口调用安全方面。文档全局要统一规范,文档维护要及时。
接口检验标准:简洁,表意清晰,功能齐全。
14. Http的Header里面包含哪些字段,每个字段都有哪些含义?
答:之前写过了。
15. Content-type中的数据类型,在Spring MVC中都怎么接收数据?
答:配置servlet-mapping。
16. Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
答:PUT 请求获取不到参数,是因为 PUT 请求的参数不是存放在 HTTP Header 中的,而是在 HTTP Body 中,所以无法通过 request.getParameter() 方法来获取参数。拿到了 queryString,它是一个“a=1&b=2”格式的字符串,然后可以轻松的转换成一个 Map,最后通过 map.get() 方法获取指定的参数。(https://www.oschina.net/question/201495_102178
17. War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
答:web achive file,WAR是Sun提出的一种web应用程序格式,是许多文件的一个压缩包。这个包中的文件是按一定目录结构来组织:通常其根目录下包含有HTML和JSP文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录。通常在WEB-INF目录下有一个web.xml文件和classer目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp或servlet所依赖的其他类。
其他打包方式还有:JAR、EAR。
(http://blog.csdn.net/kingmax54212008/article/details/52316250)
18. maven常用的打包插件有哪些?有什么区别?如何使用 ?
答:(https://blog.csdn.net/maozhaoyuan/article/details/52699404)
19. jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
答:jetty是在pom.xml文件中添加的插件,热部署比tomcat好很多。
Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的web服务器。虽然它可以显示动态内容,但是它显示静态内容的能力也非常强,速度它是能和APACHESERVER相比较。
tomcat是一个web服务器,它也是提供jsp的服务,并且是可以与apache合用。
如果是单个应用服务器,则会是选择tomcat,因为它使用起来是比较方便,也是比较易用,文档多,操作起来也是算熟悉
如果做成群集就用nginx+proxy+resin,这个组合使用起来性能不错,也够稳定。
(http://www.kokojia.com/article/22769.html)
20. jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
答:<configuration>
<stopPort>9988</stopPort>
<stopKey>foo</stopKey>
<scanIntervalSeconds>5</scanIntervalSeconds>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
</configuration>
21. 如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
答:配置在一个容器中。设置一个根服务器,其他的服务器都设置为独特的专业服务器。
22. 在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
答:编写的脚本有:停止服务脚本,删除项目脚本,复制war包脚本,启动服务脚本。
23. 域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
答:域名通过DNS域名解析系统解析成IP地址。现代,端口号已经有一部分是固定的,所以可以通过服务器固定的80端口获取HTTP服务,然后通过代理服务器将请求转发,到特定端口。
24. Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
答:Nginx是一个web服务器也可以用来做负载均衡及反向代理使用。Nginx是一款轻量级的WEB服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。Niginx相较于Apache/lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,niginx使用epoll事件模型,得益于此,niginx在Linux操作系统下效率相当高。
反向代理服务器有Squid、Varnish、Apache TS、HAProxy。
https://blog.csdn.net/liutengteng130/article/details/46700939
25. 在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
26. 对Service返回的结果是否要判空,为什么?
答:需要,对于数据肯定有要求。
27. 对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
答:需要,时间点、具体参数需要打印,有据可查。
28. 该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
答:
29. PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
答:PostMan是用于开发接口(API)的完整工具链 用它可以把传送接收的数据看的清清楚楚。
30. 在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
答:外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户。
用外网IP。
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
答:端口是设备与外界通讯交流的出入口。使用telnet、ssh、wget、端口扫描工具。
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
答:21,22,80,3306。
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
答:它是JSTL中的核心库,为日常任务提供通用支持,如显示和设置变量、重复使用一组项目、测试条件和其他操作(如导入和重定向Web内容)。Core标签按功能可分为4种类型:变量维护(<c: set> <c: remove>),流程控制:分为条件标签(<c: if>,<c: choose>,<c: when>,<c: otherwise>)和迭代标签(<c: forEach>,<c: forTokens>),URL管理(<c: url>,<a href>,<c: import>,<c: redirect>,<c: param>),<c: out>和<c: catch>等其他标签。
明天的计划:
开始任务三
遇到的问题:
没有
收获:
写深度思考。
评论