发表于: 2017-12-23 21:30:57
1 565
今日完成
1.任务2深度思考。
11.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
答:Java中常见的AOP技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter是基于回调函数(请看《Java回调机制解析》),代理模式是基于Java反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。
12.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
答:目前只知道有Gson,还有JSONObject,还有使用jsonTAglib
13.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
(1)规范的接口文档应该包括:
1、方法:新增(post) 修改(put) 删除(delete) 获取(get)
2、uri:以/a开头,如果需要登录才能调用的接口(如新增、修改;前台的用户个人信息,资金信息等)后面需要加/u,即:/a/u;中间一般放表名或者能表达这个接口的单词;get方法,如果是后台通过搜索查询列表,那么以/search结尾,如果是前台的查询列表,以/list结尾;url参数就不说了。
3、请求参数和返回参数,都分为5列:字段、说明、类型、备注、是否必填
字段是类的属性;说明是中文释义;类型是属性类型,只有String、Number、Object、Array四种类型;备注是一些解释,或者可以写一下例子,比如负责json结构的情况,最好写上例子,好让前端能更好理解;是否必填是字段的是否必填。
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里是具体的参数。
(2)一篇好的文档,我认为,文档在客户端人员看过之后,不需要沟通就能完成接口的调用测试及使用,就是一个好文档。
14.Http的Header里面包含哪些字段,每个字段都有哪些含义?
答:http协议里面的几个头还需要好好学习一下,
15.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
application/json : JSON数据格式
application/pdf :pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
以上就是我们在日常的开发中,经常会用到的若干content-type的内容格式。
16.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
17.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
18.maven常用的打包插件有哪些?有什么区别?如何使用 ?
maven-jar-plugin,ar项目默认的打包工具,默认情况下只会将项目源码编译生成的class文件和资源文件打包进来,不会打包进项目依赖的jar包。
maven-war-plugin,war项目默认的打包工具,默认情况下会打包项目编译生成的.class文件、资源文件以及项目依赖的所有jar包。
maven-assembly-plugin,是Maven最强大的打包插件,它支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等,通过一个打包描述文件设置(src/main/assembly.xml),它能够帮助用户选择具体打包哪些资源文件集合、依赖、模块,甚至本地仓库文件,每个项的具体打包路径用户也能自由控制。
19.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
Jetty更轻量级。这是相对Tomcat而言的。 由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。用自己的理解,即增肥容易减肥难。
然而,当支持大规模企业级应用时,Jetty也许便需要扩展。
- 主要根据应用的规模和需求来确定,如果仅仅是简单应用,不需要支持负责的EJB或者JMS等特性,选择简单易用的Tomcat是一个好选择。如果需要更多J2EE的特性,则需要考虑使用Jboss这种全功能服务器了。
20.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
1.常见的配置:端口、部署根路径、内存、日志文件格式、目录等。
tomcat: /etc/tomcat7 - 全局配置
21.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
答:一个WEB配置一个容器,减轻web服务器的负载。
22.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
1.编写启动、停止服务器的脚本。一般是安装SVN,将项目直接下载到服务器上,使用mvn进行打包,然后部署到tomcat容器中。
23.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
(1)通过配置反向代理,监听80端口的服务将服务分发到对应其他端口的服务上。
(2)应该通过域名来访问:域名更加容易记忆。
24.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
(1)Nginx作用:1.反向代理,负载均衡、session共享是最常用的一些功能。
(2)因为nginx在处理静态文件的吞吐量上面比tomcat好很多,通常他们俩配合,不会把所有的请求都如本例所示的交给tomcat, 而是把静态请求交给nginx,动态请求,如jsp, servlet,ssm, struts等请求交给tomcat. 从而达到动静分离的效果。 接下来就会讲解如何进行动静分离。
(3)其他常用的反向代理服务器还有apache
25.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
处理异常统一抛出由前端控制器统一处理。这样可以降低web服务器的负载,提高执行效率。
26.对Service返回的结果是否要判空,为什么?
需要判断,因为为空不知道对视图模型是否有影响。应该交给统一异常处理来做。
27.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
应该打印日志:
日志除了方法执行前打印入参,出现异常后打印异常信息,和方法结束后打印出参.还必须在一些重要的逻辑判断打出逻辑判断结果.
28.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
29.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
能够在没有前端页面的情况下测试接口发送和接受的数据是否正常。
30.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
一 、get请求:
1、使用curl命令:
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
2、使用wget命令:
wget “http://www.baidu.com”也可以
二、post请求
1、使用curl命令(通过-d参数,把访问参数放在里面):
curl -d “param1=value1¶m2=value2” “http://www.baidu.com”
2、使用wget命令:(--post-data参数来实现)
wget --post-data ‘user=foo&password=bar’ http://www.baidu.com
以上就是Linux模拟Http的get或post请求的方法了,这样一来Linux系统也能向远程服务器发送消息了。
示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear
三、curl (可直接发送格式化请求例如json)
示例:目标url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}
命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002
31.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
32.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
答:端头可以认为是计算机与外界通讯交流的出口
33.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
答:服务器上面常用的端口:snmp 161 162 ; ssh 22 ;mail 25 110 ; http 80 443 。
34.C标签是什么,为什么要使用C标签,有哪些常见的指令?
根据JSTL标签所提供的功能,可以将其分为5个类别。
(1)核心标签:core
(2)格式化标签:fmt
(3)数据库标签:sql
(4)XML 标签:xml
(5)JSTL 函数
(1)表达式控制标签:
<c:out>标签:用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是标签可以直接通过"."操作符来访问属性。
<c:set>标签:用于设置变量值和对象属性。
<c:remove>标签:用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
<c:catch>标签:主要用来处理产生错误的异常状况,并且将错误信息储存起来。
(2)流程控制标签:
<c:if>标签:判断表达式的值,如果表达式的值为 true 则执行其主体内容。
<c:choose>标签:与Java switch语句的功能一样,用于在众多选项中做出选择。
<c:when>标签:<c:when>在<c:choose>中,就相对于case在switch语句中。
<c:otherwise>标签:<c:otherwise>在<c:choose>中,就相对于default在switch语句中。
(3)循环标签:
它们封装了Java中的for,while,do-while循环。
<c:forEach>标签:更加通用的标签,因为它迭代一个集合中的对象。
<c:forTokens>标签:通过指定分隔符将字符串分隔为一个数组然后迭代它们。
(4)URL操作标签:
<c:import>标签:提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL
<c:url>标签:将URL格式化为一个字符串,然后存储在一个变量中。
<c:redirect>
标签:通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持<c:param>标签。
<c:param>标签:用于在标签中指定参数,而且与URL编码相关。
明日计划
1.任务3深度思考
2.使用服务器端的 svn maven部署项目。
3.统一异常处理
4.学习一下title框架
遇到问题
1.服务器装软件各种麻烦
2.任务2里面的异常处理,还没做。
收获
1.再次熟服务器部署流程
2.对任务2的知识点有了更深的了解。
评论