发表于: 2018-03-18 20:34:11
1 591
今天完成的事:
任务二深度思考暨总结
1.什么是restful?rest的请求方法有哪些,有什么区别?
REST-Representational State Transfer 直接翻译:表现层状态转移。
简单一句话就是:URL定位资源,用HTTP动词(GET,POST,DELETE,PUT,UPDATE)描述操作。
REST描述的是在网络中client和server的一种交互形式,将资源的状态以最适合客户端或者服务端的形式从服务器转移到客户端(或者反过来)。
REST本身并不实用,实用的是如何设计 RESTful API(REST风格的网络接口);
1.Server提供的RESTful API中,URL中只使用名词(推荐使用复数)来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。
2.用用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:
GET 用来获取资源,
POST 用来新建资源,
PUT 用来更新资源,
DELETE 用来删除资源。
3.Server和Client之间传递某资源的一个表现形式,比如用JSON,XML传输文本,或者用JPG,WebP传输图片等。
推荐使用JSON,JSON数据格式简单,易于读写。JSON可以被JS直接读取,不需要解析。
4.用 HTTP Status Code传递Server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。
2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
REST本身不是架构,只是一种架构风格,理解它的时候要参考这个架构风格出现的环境所施加的约束条件。
REST的目的是“建立十年内不会过时的软件系统架构",所以它具备三个特点:
1. 状态无关 —— 确保系统的横向拓展能力
2. 超文本驱动,Fielding的原话是”hypertext-driven" —— 确保系统的演化能力
3. 对 resource 相关的模型建立统一的原语,例如:uri、http的method定义等 —— 确保系统能够接纳多样而又标准的客户端
从另外一个角度看,第一条保证服务端演化,第三条保证客户端演化,第二条保证应用本身的演化,这实在是一个极具抽象能力的方案(现在暂时理解不了这句话)。
没用rest以前,比如getStudent?id=1,updateStudent?id=1。直接在地址栏里面使用动词,暴露出具体的操纵资源方式和资源位置。
3.了解maven的module。
真正项目开发中,必然是小组分工,各自负责一个模块。只需要定义一个父模块,统一整个项目,其余各小组只需要集成父模块,约定好配置接口,就可以不用管其他模块,只关注本身模块,大大提升开发效率。
这里引入两个概念:聚合和集成(继承)。Maven的聚合特性能够把项目的各个模块聚合在一起构件,而Maven的继承特性能够帮助抽取各个模块相同的依赖和插件等配置,简化POM的同时,还能促进各个模块配置的一致性。
4.什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。目前是1.1版本。
GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-Control Header的约束),GET方法的报文主体没有任何语义。
POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。
MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
类型格式:type/subtype(;parameter)? type
主类型,任意的字符串,如text,如果是*号代表所有;
subtype 子类型,任意的字符串,如html,如果是*号代表所有;
parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数。
例如: Content-Type: text/html;charset:utf-8;
常见的媒体格式有:text/html :HTML格式 application/xml :XML数据格式 application/js :JSON数据格式等等
常见的http状态码有:
200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
400 Bad Request
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。
500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
5.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,
由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
Struts2处理请求是为每个请求都创建一个单独的Action类(多例),Action类当中的Field属性参数作为输入和输出参数用IOC来依赖注入的方式,是基于类的。
SpringMVC则采用输入Request和Reponse作为参数,返回ModelAndView的方式,是单例的模式(默认单例,可修改为多例),且是基于方法的模式。
底层技术都是Servlet, 一个典型的Servlet请求都是先处理filter层, 再处理controller层.
Struts2框架基于Servlet的filter开发, 而Spring MVC是基于Servlet的controller开发, 切入点不同。
Spring MVC结合Spring的Ioc/AOP特性, Spring Boot热更新等解决方案, 开发效率比Struts2高。
8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
web.xml里面有许多标签,我这里说几个比较重要的。
<context-param>上下文参数:声明应用范围内的初始化参数
<listener>监听器,对事件进行监听。
这两个都是在web.xml加载时就加载。web容器创建ServletContext,这个web项目所有部分都共享这个Context。
容器将<context-param>转换为键值对,并交给servletContext。 容器创建<listener>中的类实例,创建监听器。
<filter>过滤器,将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。
<servlet>应用程序的控制程序。 <load-on-startup>指定当Web应用启动时,装载Servlet的次序。
当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。
当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。
缺省的servlet处理其他servlet都不处理的请求。
web.xml 的加载顺序是:context-param ->listener -> filter -> servlet
9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
10.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
使用注解是需要配置spring的启动注解并扫描的标签。
11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
filter过滤器(在前面已经讲过了),Interceptor拦截器。
拦截器,在aop中用于在某个方法或字段被访问之前,进行拦截然后在之前或者之后加入某些操作,拦截是aop的一种实现策略。
拦截器是基于java的反射机制的,而过滤器基于函数回调。
过滤器和aop没有关系。
12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
Jackson,fastjson,json Taglib等用来生成json。JsonTaglib用来从jsp中提取json数据,简单好用,功能强大。
13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
看到一篇好的解释,就直接拿来用了。
14.Http的Header里面包含哪些字段,每个字段都有哪些含义?
http://blog.csdn.net/u014175572/article/details/54861813
15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
http://blog.csdn.net/blueheart20/article/details/45174399
16.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
17.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
目前只接触到了war包和jar包。jar包是包含了普通java类,配置文件等的小型封装。war包是包含了web项目运行所需的java类,动态页面,支持类库等的较大的封装。
18.maven常用的打包插件有哪些?有什么区别?如何使用 ?
idea自带的maven打包插件
19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
jetty通常用作本地测试,远程部署的话推荐tomcat。
20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
tomcat可以再server.xml里面配置访问端口,日志文件位置等。jetty一般通过插件的configuration子节点进行配置。
21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
关于这道题,我没有找到解释很好的答案。我的理解是这样的:
把许多web服务配置在一个容器中的话,容器启动时就会加载其余不需要的web服务,造成服务器资源浪费。
但是一个小项目的话又不需要那么多的服务器资源。所以,两种方法都应该都合适的使用时机吧。
22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
服务器启动脚本、关闭脚本等。对有些信息需要统计时,编写数据统计脚本。通过百度编写!
23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
一个域名是对应到一个IP的一个端口。通常情况下,默认为网站端口为:80端口,所以直接输入ip也能访问。
24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
Nginx的作用类似于springmvc的请求分发。Nginx可以做负载均衡,将用户的请求转发给具体的服务器处理,降低服务器压力。
此外,Nginx不适合做动态资源处理,但在处理静态资源方面性能较好。
除了Nginx之外还有,我听过的还有Apache。
25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
controller控制层已经是最上层,直接与用户打交道,因此无法再向上抛出异常,只能try/catch解决!
大段的try/catch很浪费资源,因为java虚拟机会对try里面的代码进行检查,降低性能。
26.对Service返回的结果是否要判空,为什么?
需要判断返回结果,因为一旦出现null,程序就会出错,用户并不知道怎么解决这个错误,导致用户体验很差。程序员应当判断是否为空,如果为空,就跳转到专门的显示错误信息页面,给予用户友好提示。
27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
要打日志,打怎样的日志看具体需求,优雅的日志能够准确反馈信息,一旦程序出现问题,可以帮助程序员迅速找出问题所在,解决问题。
28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
先写好接口,然后写测试类,测试通过,再写业务逻辑。这样就可以避免某个接口写错了,而程序员又没有测试,导致后期程序出错,难以找出错误。
29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,PostMan就是这样的工具。
火狐浏览器插件restClient,Jmrter,soapUI等工具都可以测试接口。
30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
可以解除postman去测试linux服务器,发送rest四种请求。
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
外网IP也是公网IP也是全球唯一地址IP,所有可以上网的地方都可以连接的IP。内网IP也是局域网IP,局部的IP地址,内网所在环境下才能访问连接。
应该是用外网ip检测,如果没有防火墙,再由路由器转到内网ip上。
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口,可以认为是设备与外界通讯交流的出口。计算机虚拟端口指计算机内部或者交换机路由器的端口。windows下可以打开任务管理器,查看已经被使用的端口,linux下可以使用losf命令查看端口状态。
linux下查看端口是否可以被访问使用telnet命令,telnet ip 端口号。开放的端口位于/etc/sysconfig/iptables中,如果要添加开放端口,则需要向iptables中添加-A INPUT -p tcp -m tcp --dport 端口号 -j ACCEPT 即可。
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
需要开通web站点:80端口,远程登录:3389,邮件服务;25 等等。但是所有的端口都可以修改,只要不发生冲突即可。
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
c标签是JSTL标签库的核心库。JSTL标签封装了jsp应用的核心功能,使用它可以简化jsp操作。
c标签常用的有<c:out>,<c:if>,<c:foreach>,<c:redirce>等等。
明天要做的事:
提交任务二,开始任务三。
遇到的问题:
深度思考里面很多知识都不知道,只能靠百度了解一个大概概念。
收获:
任务二完成。
评论