发表于: 2017-10-13 14:25:26

1 748


今天完成的事情:

深度思考(postman的相关知识可以看问题29,操作以后会用到,不是很难):

task2(深度思考)

1.什么是restfulrest的请求方法有哪些,有什么区别?

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful

客户端的HTTP的请求方式一般分为四种:GETPOSTPUTDELETE

区别简单的说,GET就是获取资源,POST就是创建资源,PUT就是更新资源,DELETE就是删除资源。

       PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,资源不会增加。

       DELETEDELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

       GET操作是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变,GET只是访问和查看资源。

       POST:操作不是安全的,每次请求都会创建资源,当我们多次发出POST请求后,其结果是创建出了多个资源。还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST

2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?

REST的核心在于,当你设计一个系统的时候,资源是第一位的考虑,你首先从资源的角度进行系统的拆分、设计,而不是像以往一样以操作为角度来进行设计。

3.了解mavenmodule

从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块;如果maven用的比较简单,或者说项目的模块在pom.xml没进行划分,那么此元素是用不到的;不过一般大一点的项目是要用到的。

4.什么是http协议?Getpost请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?

HTTP 协议:定义服务器端和客户端之间文件传输的沟通方式。

Get它用于获取信息,注意,他只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,而稍后会提到的Post它是可以修改数据的,所以这也是两者差别之一了。

Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。

http请求content-Type的类型:

(1)常见的媒体格式类型如下:

text/html HTML格式

text/plain :纯文本格式      

text/xml   XML格式

image/gif gif图片格式    

(2)application开头的媒体格式类型:

application/xhtml+xml XHTML格式application/xmlXML数据格式application/atom+xmlAtom XML聚合格式    

application/ pdf: pdf格式  

application/octet-stream 二进制流数据

Http应用于任何场所(来自知乎)

http状态码大概可写为200300400500。然后可以在具体些,比如404500

5.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

TCP/IP也称"国际协议簇" 即不仅指 TCP/IP协议本身,而且包括与其有关的协议。 TCP传输控制协议IP为网际协议,是网络层最重要的协议。

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 

三次握手:

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 

           SYN 同步序列编号

第二次握手:服务器收到syn包,必须确认客户的SYNack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 

第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 

TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。

传完东西后,断开。结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。

6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?

WebService是一个SOA(面向服务的编程)的架构,它是不依赖语言,不依赖平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。

实现WEBService有哪些框架:JWS,Axis2,XFire,CXF

7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?

(1) 机制。spring mvc 的入口是servlet,而struts是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,

这里就牵涉到servlet和filter的区别了,我其他博客会专门写一写 servlet和filter之间的区别。

(2)性能。 spring会稍微比struts快。spring mvc 是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个 action ,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。

(3)参数传递。 struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

(4)设计思想上。struts 更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展,

(5)intercepter的实现机制。struts有以自己的interceptor机制,spring mvc 用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁。

http://blog.csdn.net/chenleixing/article/details/44570681(相对来说总结的比较完整,可以作为参考)

8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?

主要配置:有监听器,过滤器,欢迎页,servlet等

小课堂有讲过,以下是链接

http://www.jianshu.com/p/22dbfb678fde

9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?

Annotation:

优点:(1)保存在 class 文件中,降低维护成本。 

      (2)需工具支持,无需解析。 

      (3)编译期即可验证正确性,查错变得容易。 

      (4)提升开发效率。

缺点:(1)若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。 

      (2)配置项编码在 Java 文件中,可扩展性差。

XML:

优点:(1)xml作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。 

      (2)利用xml配置能使软件更具扩展性。例如Springclass间的依赖配置在xml中,最大限度地提升应用的可扩展性。 

      (3)具有成熟的验证机制确保程序正确性。利用SchemaDTD可以对xml的正确性进行验证,避免了非法的配置导致应用程序出错。 

      (4)修改配置而无需变动现有程序。

缺点:(1)需要解析工具或类库的支持。 

      (2)解析xml势必会影响应用程序性能,占用系统资源。 

      (3)配置文件过多导致管理变得困难。 

      (4)编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。 

      (5)IDE无法验证配置项的正确性无能为力。 

      (6)查错变得困难。往往配置的一个手误导致莫名其妙的错误。 

      (7)开发人员不得不同时维护代码和配置文件,开发效率变得低下。 

      (8)配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。

10.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?

Spring Bean的标注(Annotation)配置

在Spring框架的默认XML配置文件中,通过<context:annotation-config/>可以实现对标注配置的注册。这样Spring框架启动的时候就会首先检查Spring Bean的标注(Annotation)配置。

常见的Spring Bean的标注(Annotation):@Required,作用于属性的setter方法@Autowired,作用于构造函数、属性和各种方法(可以被JSR-330的@Inject替代)@Primary,在有多个Bean适合被自动绑定时,给出优先选择的@Qualifier("..."),在有多个Bean适合被自动绑定时,选择特定名称的@Component("beanName"),Spring管理的通用组件

@Controller("beanName"),@Component的特例,用于控制器功能的Java类

@Service("beanName"),@Component的特例,用于通用功能的Java类

@Repository("beanName"),@Component的特例,用于库的Bean(如DAO)

JSR-250的@Resource(name="..."),通过特定名称选择Bean,优先使用该标注,作用于属性的setter方法JSR-250的@PostConstruct,作用于方法JSR-250的@PreDestroy,作用于方法

11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?

Filter过滤器:可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。Filter也可以对用户请求生成响应,这一点与Servlet相同,但实际上很少会使用Filter向用户请求生成响应。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行预处理并生成响应,最后Filter再对服务器响应进行后处理。

Interceptor拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。

Filter和Interceptor的区别

  • (1)Filter是基于函数回调的,而Interceptor则是基于Java反射的。
  • (2)Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
  • (3)Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
  • (4)Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
  • (5)在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。

http://blog.csdn.net/xiaodanjava/article/details/32125687

12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?

两种生成方式:

(1)在json viewer中图解如何生成Json数据

(2)可以通过JSONStringer来构建json文本

JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库。

13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?

包含:接口地址、返回格式、请求方式、请求示例、请求参数、返回参数等等

API一定要便于使用者理解,这样才是广泛传播的基础。如果有些API需要用户掌握特定的概念、定义,那么就要保持这个API的一致性,不能轻易的改变API,否则会给使用者带来很大的麻烦。

14.Http的Header里面包含哪些字段,每个字段都有哪些含义?

Accept:浏览器可接受的MIME类型。 

Accept-Charset:浏览器可接受的字符集。 

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 

Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时,显著地减少下载所需要的时间。要实现这一点,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类型。

15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?

和问题4差不多,可参考上面回答。

16.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?

这个还没遇到,应该在任务三中才可能接触到,以后再回答。

17.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?

war包:是做好一个web应用后,通常是网站,打成包部署到容器中。

jar包:通常是开发时要引用通用类,打成包便于存放管理。

ear包:企业级应用,通常是EJB打成ear包。

18.maven常用的打包插件有哪些?有什么区别?如何使用 ?

常用打包插件:

(1)maven-compile-plugin

(2)exec-maven-plugin

(3)maven-dependency-plugin

区别和使用看着代码可能会更好点,链接在下面。

http://shmilyaw-hotmail-com.iteye.com/blog/2170300

19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?

Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器。它有一个基本数据模型,这个数据模型就是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler。Jetty 中另外一个比不可少的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。

Resin也仅仅是一个Servlet容器,然而由于它优秀的运行速度,使得它在轻量级Java Web领域备受喜爱,特别是在互联网Web服务领域,众多知名公司都采用其作为他们的Java Web应用服务器,譬如163、ku6等。-

Tomcat是Apache鼎力支持的Java Web应用服务器,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。-

线上我感觉应该选jetty,企业的话会选择用tomcat

20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?

这个不是很会。

21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?

自己理解,应该配一个容器。

22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?

这个任务三就会遇到。

23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?

客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中

应该通过域名访问

流程如下:

24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?

Nginx主要功能:1、反向代理 2、负载均衡  3、HTTP服务器(包含动静分离) 4、正向代理

好处就表现在:反向代理与负载均衡

25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?

关于异常的处理,一般情况应该把异常网上抛,一直抛到最终处理的那一层,所以对于dao层和service其实是没有必要进行try-catch的,直接往上抛异常就可以。 

大量用的话会降低程序性能,降低程序可读性

26.对Service返回的结果是否要判空,为什么?

不是很会,感觉应该是要判定是否为空的。

27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?

要打日志,打log4j,其余不知道。

28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?

这个有点难了,无法解答。

29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?

Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试。它能够发送任何类型的HTTP requests (GET, HEAD, POST, PUT..),附带任何数量的参数+ headers;支持不同的认证机制(basic, digest, OAuth),接收到的响应语法高亮(HTML,JSON或XML);Postman 能够保留了历史的请求,这样我们就可以很容易地重新发送请求,有一个“集合”功能,用于存储所有请求相同的API/域。

还有个火狐浏览器的插件,和postman功能差不多的,不过熟悉postman后就可以了。别的了解了解就行了。

30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?

后面任务再了解。

31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?

外网IP一般称为公网IP,也就是宽带IP地址,这是宽带商的宽带服务器随机分配给各上网用户的,每次重新连接上宽带所分配到的IP地址都不一样。

内网IP就是局域网IP地址,这个IP地址可以由路由器DHCP自动分配,也可以局域网内的每台连接设备手动分配一个固定的IP地址。

内网IP,因为外网IP是不可以直接访问内网服务器的。

32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?

端口:设备与外界通讯交流的出口。

目前所用到的是在命令窗口通过一些命令进行查看指定端口是否被访问。

防火墙知识储备还是不足,并不能解决这几个问题。

33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?

http服务:80端口(默认端口号);

mysql服务:3306端口;

PHP服务:9000端口;

其他端口可以按照需求进行配置。

分配端口的具体问题没法回答。

34.C标签是什么,为什么要使用C标签,有哪些常见的指令?

C标签:

JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。

JSTL标签、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:import>、<c:otherwise>、<c:out>、<c:param>、<c:redirect>、<c:remove>、<c:url>、<c:when>、<c:set>、<c:catch>

作用:

JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。

常用指令可以看以下链接。

http://xugou4-yahoo-com-cn.iteye.com/blog/1318496

明天计划的事情:

进入任务三,了解代码远程部署服务器

遇到的问题:

在深度思考里,还是有很多不明白的知识点,尽量在以后任务中了解清楚。

收获:

task2(小结)

整个任务二差不多历时多半个月,一半时间差不多是浪费在梳理做任务二的头绪上。

刚看到任务二是就感觉没多少操作,就做一个表而已,这也是真实任务二的目的。但前期有个rest的东西,不接触代码,空想的话没有任何提升作用,懂了也不会用,更何况还不懂。另外就是代码方面,由于任务二相对于任务一,所涉及的东西更多了,所以需要注意的地方,比如配置文件呀,路径啊,所用插件包的版本啊,容器啊等等一系列问题都有可能出错,而且是那种你处理不了的问题。因此说,其实对于后端工程师,重点不是对代码的了解,而是对这个代码的流程和架构的精通。

任务二呢,可以大概了解完rest和服务器以后,直接上手SpringMVC的代码实战,从初步开始,实现最简单的jsp页面,再到对web.xml配置文件的熟悉,学习其里面的主要配置,结合任务一的项目,实现对Service接口的实现,最终通过控制器,返回拦截值,然后最终输出我们需要的页面。熟悉各个部分所起的作用和代码是怎么实现的以后,学习SSM框架,在初步项目代码SpringMVC里面加入Spring和Mybatis,在整个框架里写出相应的方法,数据和接口,然后最终结合对应的jsp文件,达到报名表的输出和curd操作。

最后,其实把任务二扩展的话,就是一个基本的实现java web工程项目,所以涉及到的知识点还是很多的,所以我们在遇到像mvc这样的时候,应该全面的了解她的整个实现过程和相关知识,可以避免以后碰到代码报错,不知道应该怎么查询然后去处理。

知识点呢就深度思考都有提到,不过是扩展以后的,没用到的可以先做了解,用到的就要熟悉整个过程。


返回列表 返回列表
评论

    分享到