发表于: 2017-09-03 22:18:27
3 980
今天和昨天完成的事:
这是任务二的深度思考:
1.什么是restful?rest的请求方法有哪些,有什么区别?
restful是一种设计规范,设计规范而不是标准,其核心是面向资源;
rest请求有GET,PUT,POST,DELECT;
GET操作是安全的,不论进行多少次操作,资源的状态都不会改变,
PUT,DELECT管进行多少次操作,结果都一样,
POST既不是安全的也不是幂等的,比如常见的POST重复加载问题.
2.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
轻量,直接基于http,不在需要任何别的诸如消息协议。get/post/put/delete为CRUD操作
面向资源,一目了然,具有自解释性。
数据描述简单,一般以xml,json做数据交换。
3.了解maven的module。
module就是模块而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块
4.什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
GET操作是安全的,不论进行多少次操作,资源的状态都不会改变,在地址栏显示信息,一般用来获取
POST既不是安全的也不是幂等的,不会再地址栏显示信息,一般用来上传.
Content-Type,用于定义网络文件的类型和网页的编码,百度查到都好多种,一种扩展名一种
常用的有:application/x-www-form-urlencoded;multipart/form-data;image/png;application/json;text/xml;
5.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议;
三次握手:客户端发送包,服务端接收包确认,服务端返回包(链接成功)
因为三次正好可以确认服务端和客户端的状态!
6.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术;
实现WEBService的框架:
REST(新型):表象化状态转变 (软件架构风格)RESTEasy、Wink、CXF、Axis2…….
SOAP(比较成熟):简单对象访问协议 Xfire、Axis2、CXF、Axis1
XML-RPC(淘汰):远程过程调用协议(慢慢被soap 所取代)
7.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
struts框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入
struts实际上是通过setter getter方法与request打交道的
struts中,一个Action对象对应一个request上下文
spring mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去
在springmvc中,一个方法对应一个request上下文
因为SpringMVC更轻量,配置方便,模块划分清晰
8.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
主要配置有:
1.部署描述符文件就像所有XML文件一样,必须以一个XML头开始
2.部署描述符文件内的元素次序
3.分配名称和定制的UL
如果Spring配置文件为applocationContext.xml那么加入以下代码就可以
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
否则在param中加入路径就可以了
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-testA.xml,/WEB-INF/application-testB.xml,/WEB-INF/application-testB.xml</param-value>
</context-param>
9.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
spring的annotation注入机制与XML注入机制本质上是相同的。Annotaion简洁一些
10.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
只需要在applicationContext.xml文件加入<context:component-scan/>就可以了,他会自动扫描注解并加载
11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter:过滤器,是sun公司开发的,类似拦截器
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
Interceptor拦截器:在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截,
然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
应该包括:方法、uri、请求参数、返回参数
方法:post put get delete
uri: 应该有登录后可以访问的,没登录可以访问的
请求参数和返回参数,都分为5列:字段、说明、类型、备注、是否必填
4、返回参数结构有几种情况:1、如果只返回接口调用成功还是失败(如新增、删除、修改等),
则只有一个结构体:code和message两个参数2、如果要返回某些参数,则有两个结构体:1是code/mesage/data,
2是data里写返回的参数,data是object类型;3、如果要返回列表,那么有三个结构体,1是code/mesage/data,
data是object,里面放置page/size/total/totalPage/list 5个参数,其中list是Arrary类型,list里放object,
object里是具体的参数。
14.Http的Header里面包含哪些字段,每个字段都有哪些含义?
常用的字段有:
Accept:用于高速服务器,客户机支持的数据类型
Accept-Charset:用于告诉服务器,客户机采用的编码格式
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机的语言环境
Host:客户机通过这个头高速服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
Cookie:客户机通过这个头可以向服务器带数据
Connection:处理完这次请求后是否断开连接还是继续保持连接
Date:当前时间值
15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
无论什么数据都是由
16.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
17.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一
个.war扩展名。下面我们将第2章的Web应用程序打包成WAR文件,然后发布
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。
18.maven常用的打包插件有哪些?有什么区别?如何使用 ?
maven-compile-plugin
这个插件就如同名字所显示的这样,用来编译源代码的
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
exec-maven-plugin
我们写一些java console相关的程序时,比较头疼的一点就是真正要通过命令
行将打包后的程序执行起来还是比较麻烦的。我们需要在命令行里敲如下的命
令:java -cp ***.jar:**.jar:/**/ 。因为要将classpath目录以及引用的类
库都加入进来,并指定运行的入口,这样子每次用手工的方式来处理实在是太
繁琐也比较容易出错。所以一种办法就是利用这个插件,通过一些基本的配置,
我们可以执行起代码来的时候很方便。一个典型的配置如下
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.yunzero.App</mainClass>
</configuration>
</plugin>
maven-dependency-plugin
还有一个比较常用的插件就是这个。我们在IDE的环境里编译和执行代码的时候,
那是直接引用一些类库。但是在我们实际部署的环境里,那边很可能就一个java
执行环境,不可能有源代码和IDE。这个时候,我们需要将源代码编译打包。这个
时候的一个问题就是如果我们引用的库很多的话,我们希望能够把他们统一打包
到一个目录下,比如lib文件夹。这样部署执行的时候只需要将编译生成的程序jar
包和依赖包文件夹拷到特定目录去执行。要实现这个效果也比较容易:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
jetty:开源,开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
而且jetty不依赖JDK
tomcat:开源,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用.
resin:是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,
而且它显示静态内容的能力也非常强,Resin支持负载均衡
resin基本不用了,一般用jetty和tomcat
20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
内存大小,端口号,日志位置和输出格式
tomcat在server.xml文件里配置
jetty在start.ini文件里配置
resin在conf/resin.xml文件里配置
21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
都可以,分开放只要端口不重复就行,结构清晰不易出错,放一起配置更复杂了,还容易冲突;
22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
一般都用Shell脚本...按照语法规则编写...
23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
一般都是把Servlet容器的端口号设置为80,然后绑定域名,就可以不加端口直接访问了;
以阿里云为例:
购买完域名后>管理控制台>域名与网站>域名解析>选择域名>填写信息>绑定成功
24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
作用:负载均衡;好处:分发请求
除了Nginx还有这些反向代理服务器Squid,Varnish,Apache TS,HAProxy
25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
当然是捕获咯,Try catch把运行时的异常都输出到文件里便于处理
26.对Service返回的结果是否要判空,为什么?
需要,避免报空指针错误
27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
要打日志,要附上日期,参数,进行了什么更改,返回什么参数,并且把日志一天一打包
如果是银行,数据库的每一次都至关重要
28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
没接口要假数据干啥,接口不能用写业务代码也跑不起来,
29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
接口测试工具;
创建 + 测试:创建和发送任何的HTTP请求;
Jmeter也可以
30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
发送内含请求头的json文件,在命令行输入请求例如:
get请求:curl -i “http://www.baidu.com” 或者 wget “http://www.baidu.com”
post请求:curl -d “param1=value1¶m2=value2” “http://www.baidu.com” 或者
wget –post-data ‘user=foo&password=bar’ http://www.baidu.com
curl模拟的访问请求一般直接在控制台显示,而wget则把结果保存为一个文件。如果结果内容比较少,
需要直接看到结果可以考虑使用curl进行模拟请求,如果返回结果比较多,则可考虑wget进行模拟请求。
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
外网ip:全世界只分配给一个网络设备,内网ip是从外网ip上划分下来的ip,比如很多小区都是用的同一个外网ip,
小区的每一台电脑都有一个内网ip;
用是外网ip检测,内网ip访问的是在防火墙里,测试肯定可以访问,用外网才能测试出是否被屏蔽
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
每一个ip都有65536个端口,每个TCP链接都会占用一个端口,
windows可以用netstat -ano命令查看被占用的端口
linux可以用ps -aux查看端口使用情况
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
确保80,3306,1099,8080端口不被占用,不冲突就行
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
C标签是JSTL的核心,为了更好的完成前端与后端的交互,通常
用${xx}接收后端传来的名为xx的Object(我一般用来传字符串),
判断标签:
<c:if test="测试条件" var="变量名" [scope="作用域"]>
标签体
</c:if>
迭代标签:<c:forEach> <c:forTokens>
<c:forEach>
<c:forEach var="变量名" items="集合" varStatus="遍历状态名" begin="begin" end="end" step="step" >
标签体
</c:forEach>
就是这些了,找了两天,虽然绝大部分是网上抄的,但是也是认真的研究了一番
12,16题不会,而且没本事找到答案,明天再问问师兄
遇到的困难:
有题不理解,在师兄的帮助下解决了
收获:
把之前做任务是没注意的地方重新过了一遍
明日计划:
申请进复盘
评论