发表于: 2018-03-26 19:59:37

2 412


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

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

在spring中,每使用一个注解就要声明一个bean

比如 :使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean:

使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean:

类似地,使用@Resource、@PostConstruct、@PreDestroy等注解就必须声明 CommonAnnotationBeanPostProcessor;使用@PersistenceContext注解,就必须声明 PersistenceAnnotationBeanPostProcessor的Bean。

样的声明未免太不优雅,所以Spring为我们提供了一种极为方便注册这些BeanPostProcessor的方式,即使用context:annotation- config标签,隐式地向 Spring容器注册各种bean

另外,在我们使用注解时一般都会配置扫描包路径选项:context:component-scan base-package=”pack.pack”/

该配置项其实也包含了自动注入上述processor的功能,因此当使用context:component-scan后,即可将context:annotation-config标签省去。

@autowired注解是如何加载的?自动注入是怎样实现的??

@autowired是通过动态代理和反射,在类加载过程中动态生成代理类,当初始化全局变量时,代理类跳到invoke方法,然后通过反射获取field字段对象,在method.invoke()的调用前即可实现注入。aop和拦截器以及常用注解等功能的实现都是基于动态代理实现的。


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

Java中常见的AOP技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter是基于回调函数,代理模式是基于Java反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。 
WEB 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源:例如 JSP、Servlet,、静态图片文件或静态 HTML 文件等进行拦截,从而实现一些特殊的功能。例如实现 URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 
无论程序从左向右或者从右向左执行都必须经过Filter,Filter在Request到达JSP(Servlet)前截获Request并进行预处理,也可以在Response离开JSP(Servlet)时处理Response,然后对Request进行统一的设置后继续向后传递,比如可以在Filter完成字符集的设置,用户身份的识别,敏感词汇的过滤等等,配置Filter个数不限。 
这里写图片描述

Java 里的拦截器是动态拦截 action 调用的对象。它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种可以提取 action 中可重用部分的方式。在AOP(Aspect-Oriented Programming,面向切面编程)中拦截器用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截器 Interceptor 的拦截功能是基于 Java 的动态代理来实现的。

这里写图片描述

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

json的生成方式: 
1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。

2、第二种使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。

3、第三种利用spring mvc3的注解@ResponseBody。

4、利用JsonTaglib从JSP中提取json 
1.使用json-taglib,在控制器中的代码更加简洁,易读

2.使用json-taglib更加灵活,如果以后需要更改json数据格式,只需要更改jsp页面即可,不需要改动控制器代码


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

需要包括请求方法、uri、请求参数、返回参数、添加接口示例、接口文档版本号、版本修改内容、版本修改时间、修改人,错误代码等。 
接口分为四部分:方法、uri、请求参数、返回参数:

1)方法:常用的方法就是下面的四种:GET PUT POST DELETE

2)uri:以/a开头,如果需要登录才能调用的接口(如新增、修改;前台的用户个人信息,资金信息等)后面需要加/u,即:/a/u;中间一般放表名或者能表达这个接口的单词。get方法,若果是后台通过搜索查询列表,那么以/search结尾,如果是前台的查询列表,以/list结尾。uri地址里不逊于出现大写字母,如果是两个单词拼接,用/分开

3)请求参数和返回参数:请求参数和返回参数都分为:字段、说明、类型、备注、是否必填这5列。


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

请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息 
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等。


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

1,get请求时是否定义Content-Type并无很大的影响,因为get没有请求体,所有的数据都是通过url带过去,所以必须是key=value的格式,所以在springmvc端使用@RequestParam String id这种格式即可,或者不写@RequestParam也可以,不写的话默认是@RequestParam。

2,除get外的这几种(POST、DELETE、PUT、PATCH)都是有请求体(body)的,且他们之间的差异不大,所以归在一起: 
当请求时定义Content-Type为application/json; charset=utf-8时,请求体中的数据(不管是不是json格式)都只能用@RequestBody获取,且一个方法参数列表最多写一个@RequestBody,当然你也可以在请求url上带其他的queryString参数,然后再springmvc使用String id或@RequestParam String id获取。再次重申是这种情况下@RequestParam是无法获取请求体(body)中的参数的,springmvc会报错:Required String parameter ‘name’ is not present。所以这种情况只能使用@RequestBody获取请求体中的参数。至于你使用Bean接收还是String接收取决你的需求,Bean接收更方便,不需要再次反序列化,而String接收可以更灵活,可以对接收到的字段进行检查。 
当请求时未定义Content-Type(默认为application/x-www-form-urlencoded; charset=UTF-8),请求体中的数据都必须是key=values的类型,可以是使用@RequestBody获取整个请求体中的多个参数,也可以使用@RequestParam获取单个参数


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

没遇到过。。。


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

WAR是Sun提出的一种Web应用程序格式,是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类。 
war包就是一个web应用的打包格式,一个web应用,需要一个用户交互的界面,负责给用户提供信息输入的地方,即jsp页面。数据需要保存下来,jsp把网页上的数据穿送给后台的java类,java类在得到这些数据之后再进行数据相关的工作,如存入数据库,给出相关统计数据等等。 
这里写图片描述
Java web工程,都是打成war包,进行发布,打成war包的好处是不会缺少目录,并且只管理好一个发布文件就好,并且tomcat服务器能够自动识别,将war包放在tomcat容器的webapps下,启动服务,即可运行该项目,该war包会自动解压出一个同名的文件夹。


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

常用的打包插件

Apache Maven JAR Plugin

Apache Maven Source Plugin

Apache Maven Dependency Plugin

Apache Maven Compiler Plugin

Apache Maven Assembly Plugin

Apache Maven Shade Plugin

Apache Maven JAR Plugin

将指定的一些文件打包成jar包 这个比较简单。

就将指定的文件打成jar包,使用mainfest,可以配置主执行类。

有主执行类,使用mvn package打包后可以用java-jar直接执行。

Apache Maven Source Plugin

SOURCE插件可用于从命令行创建项目源代码的jar文件,或将目标绑定到项目的生成周期。使用命令mvn source:jar生成jar

Apache Maven Dependency Plugin

Dependency插件提供了处理工件的功能。它可以将本地或远程存储库中的工件复制和/或解包到指定的位置

Apache Maven Compiler Plugin

编译器插件在Maven生命周期中已经被绑定到适当的阶段,因此在各自的阶段自动执行。

Apache Maven Assembly Plugin

Maven的Assembly Plugin主要是为了允许用户将项目输出及其依赖项,

模块,站点文档和其他文件聚合到一个可分发的归档文件中。

您的项目可以使用方便的预制装配描述符轻松地构建分布“组件” 。

这些描述符处理许多常见操作,例如将项目的工件与生成的文档一起打包到一个zip压缩文件中。

或者,您的项目可以提供自己的描述符,并假定对程序集中的依赖关系,

模块,文件集和单个文件的打包方式进行更高级别的控制

目前它可以创建以下格式的发行版:压缩,柏油,tar.gz(或tgz),tar.bz2(或tbz2),tar.snappy,tar.xz(或txz),罐,DIR,战争,以及ArchiveManager已配置的任何其他格式

Apache Maven Shade Plugin

这个插件提供了将工件打包到超级jar文件中的能力,包括它的依赖关系,以及对一些依赖关系的包进行阴影处理(即重命名)。


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

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。 
Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin可以为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。 如果您选用jsp平台作为internet商业站点的支持,那么速度、价格和稳定性都是要考虑到的,resin十分出色,表现更成熟,很具备商业软件的要求。

- tomcat和jetty的区别 
1.相同点: 
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。 
2.不同点: 
(1)架构方面 
Jetty的架构比Tomcat的更为简单 
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。 
Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。 
(2)性能方面 
Jetty和Tomcat性能方面差异不大 
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。 
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。 
Jetty默认采用NIO在处理I/O请求上更占优势,在处理静态资源时,性能较高 
Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。 
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。 
(3)其它方面 
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。 
Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。 
所以,相对于tomcat来说, 
Jetty更轻量级。由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。 
Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。 
然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。

- tomcat和resin的区别 
1.相同点 
都是web服务器,并且支持集群部署。 
2.不同点 
(1)速度方面 
resin的速度要比tomcat快 
(2)机制方面 
resin的启动与关闭机制以及报错机制都比tomcat好,tomcat则相对臃肿一些。 
(3)开发环境热部署支持方面 
tomcat较好,可根据需要配置。修改Jsp或java文件时,可配置是否重启服务。 
resin较差,更新class及jsp文件,系统都会自动重新部署,并重启,配置了Session会话时开发比较麻烦。 
(4)生产环境下热部署支持 
tomcat一般。更新配置文件时,必须手动重启。更新其他文件时,大部分不用重启。但一次性更新太多文件时,经常会造成Tomcat重启失败。 
resin较好。更新配置文件时,Resin会自动重启。

Jetty更满足公有云的分布式环境,即云环境的需求,而Tomcat更符合企业级环境。


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

jetty的主要配置文件为etc/jetty.xml,当然你可以自己指定别的文件。在start.jar中有个start.config文件是默认的环境配置,以及指定默认的配置文件。可以手工替换。

启动jetty很简单,在命令行下面java -jar start.jar 
如果需要指定start.config,使用java -DSTART=start.config -jar start.jart 
配置web 应用也非常的简单: 
更改jetty.xml就行了,增加web应用的方式包括,直接放置应用在webapps下面。 
默认的web.xml配置文件为webdefault.xml。 
如果想配置相应的web参数,可以更改其应用。

resin没用过。。。

tomcat在idea中配置的默认端口8080,其他暂时没涉及。


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

应该是一个web配置一个容器,避免拥塞,但是资源可能吃紧。。。


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

脚本还没开始了解。。。


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

通过注册域名之后,dns服务器更新对应域名到IP地址的对应关系。 
域名服务商提供域名解析以到达对应IP地址。


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

nginx还未用到。

Charles是一款反向代理服务器,可以监听到来自服务器的请求。


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

编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是dao层、service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。 
系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。 


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

需要,否则页面会显示空集。 
判空后可以交给异常处理器。


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

需要,对于入参的检查,service方法的成功与否,返回值都需要打日志。


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

尽量考虑边缘情况,定义接口便于前后端根据接口文档同步开发。


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

Postman是用于开发接口(API)的完整工具链 ,可以把展示比较完整的传送接收的数据。 
类似的产品有很多。


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

暂时没有做到linux上部署服务。


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

暂无涉及。。。


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

通过端口匹配可以进行数据的交换。


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

http/https的80端口 ,443端口,ssh的22端口,(默认的8080),ftp的21端口。


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

需要在头文件中加上core的链接。 
我在任务中用到的是foreach,其他的功能打算慢慢了解。 
这里写图片描述

明天计划的事情:(一定要写非常细致的内容)

任务二收尾 

遇到的问题:(遇到什么困难,怎么解决的)

过滤器和拦截器 

收获:(通过今天的学习,学到了什么知识)

深度思考的问题


返回列表 返回列表
评论

    分享到