发表于: 2018-04-20 23:40:43

1 652


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

一、继续复习

1.把整个项目的流程比作一条河,那么监听器的作用就是能够听到河流里的所有声音,过滤器就是能够过滤出其中的鱼,而拦截器则是拦截其中的部分鱼,并且作标记。所以当需要监听到项目中的一些信息,并且不需要对流程做更改时,用监听器;当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;当需要对其流程进行更改,做相关的记录时用拦截器。

即监听器只起到监视作用,并没有能力做出修改,一般用作统计在线人数等不影响整个流程的功能上;过滤器只能做到过滤信息的作用,对于不符合要求的信息就不让其通过,也可以进行适当修改,一般用的比较多的就是字符集过滤器和转换Post请求;拦截器会过滤信息并且具有打回的功能比如不满足登陆规范就退回登陆页面,可以改变整个流程


二、深度思考

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

①TCP/IP是Transmission Control Protocol/Internet Protocol的简写,译名为传输控制协议/因特网协议,是Internet最基本的协议。TCP/IP是这个协议族的统称,它采用了4层的层级结构,而不是指TCP + IP两个协议的总和

②TCP

面向连接的通信协议,通过三次握手建立连接(socket通过TCP/IP连接时就是经过3次握手),通信完成后要关闭连接,它只用于端对端的通讯 
TCP协议通过3次握手建立起一个可靠的连接,通过将数据包进行排序以及检验的方式,可以提供一种可靠的数据流服务 
TCP可以限制数据的发送速度,间接地控制流量

IP

IP协议包含源主机地址、目标主机地址,还有TCP数据信息。但IP协议没有做任何事情来确认数据包是否按顺序发送或者包是否被破坏,所以IP数据包是不可靠的。

UDP

面向无连接的通讯协议,UDP数据包括原端口号信息以及目标端口号信息,它可以实现广播发送 
由于UDP通讯不需要接收方确认,所以属于不可靠的传输,可能会出现丢包现象

⑤三次握手:

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

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

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

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN 包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器 进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超 过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。 

一句话概括,TCP连接握手,握的是啥?

通信双方数据原点的序列号!

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

①WebService即Web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。

Web服务:基于HTTP和XML的技术,HTTP是互联网上应用最为广泛的一种网络协议,而XML是跨平台的基础。

 跨编程语言和跨操作平台:就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

 远程调用:就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率

②Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss  RESTEasy、sun JAX-WS(最简单、方便)、阿里巴巴  Dubbo(除外)等都可以实现WEB Service

③webservice分类

在SOAP的基础技术实现方式中WebService占据了很重要的地位,通常我们提到WebService第一想法就是SOAP消息在各种传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大网站不断开放API提供给开发者,也激起了REST风格WebService的热潮。

基于soap的webservice

其实SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担。

rest式的webservice

REST其实并不是什么协议也不是什么标准,而是将Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天,越来越多的是将其作为传输协议,而非原先设计者所考虑的应用协议。SOAP类型的WebService就是最好的例子,SOAP消息完全就是将Http协议作为消息承载,以至于对于Http协议中的各种参数(例如编码,错误码等)都置之不顾。其实,最轻量级的应用协议就是Http协议。对于各种资源的操作最后总是能抽象成为这四种基本操作,在定义了定位资源的规则以后,对于资源的操作通过标准的Http协议就可以实现,开发者也会受益于这种轻量级的协议。

REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。

总的来说,基于soap协议的webservice由于有历史包袱,在安全性和扩展性上增强了很多,而且使用xml解析。相应地效率也不如rest式的。但restful的webservice速度虽然可以,但安全性上远不如上一个。所以没必要一定分是非高下,关键还是看应用场景。比如银行国企自然走soap协议的,对安全要求不高的web项目自然去追求速度。

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

1)框架机制

①Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。
②Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

2)拦截机制

①Struts2

a、Struts2框架是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter把request数据注入到属性。
b、Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。
c、Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
 
②SpringMVC
a、SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。
b、在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。


3)性能方面
SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2


4)拦截机制
Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大


5)配置方面
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
SpringMVC可以认为已经100%零配置。



6)设计思想
Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。


7)集成方面
SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。


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

1.Web应用图标:指出IDE和GUI工具用来表示Web应用的大图标和小图标

2.Web 应用名称:提供GUI工具可能会用来标记这个特定的Web应用的一个名称

3.Web 应用描述:给出于此相关的说明性文本

4.上下文参数:声明应用范围内的初始化参数:此文件可加载spring配置,因为其配置了spring文件的加载路径

5.过滤器配置:将一个名字与一个实现javaxs.servlet.Filter接口的类相关联

6.监听器配置

7.Servlet配置

8.会话超时配置(单位为分钟)

9.MIME类型配置

10.指定欢迎文件页配置

11.配置错误页面

(1).通过错误码来配置error-page

(2).通过异常的类型配置error-page

12.TLD配置

13.资源管理对象配置

14.资源工厂配置

15.安全限制配置

16.登陆验证配置

17.安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。
18.Web环境参数:env-entry元素声明Web应用的环境项

19.EJB 声明

20.本地EJB声明

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

Annotation和xml各自作为配置项的优点与缺点。 
 一、Annotation 的优点 
  1、保存在 class 文件中,降低维护成本。 
  2、无需工具支持,无需解析。 
  3、编译期即可验证正确性,查错变得容易。 

        4、提升开发效率。 

        5、使用了线程池,支持定时及周期性任务执行,并且加入了运行时。

 Annotation 缺点: 
  1、若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。 
  2、配置项编码在 Java 文件中,可扩展性差。    
 二、XML 
  目前web应用中几乎都使用xml作为配置项,例如我们常用的框架Struts、Spring、Hibernate、IBatis等等都采用xml作为配置。 
  xml之所以这么流行,是因为它的很多优点是其它技术的配置所无法替代的。 
  1、xml作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。 
  2、利用xml配置能使软件更具扩展性。例如Spring将class间的依赖配置在xml中,最大限度地提升应用的可扩展性。 
  3、具有成熟的验证机制确保程序正确性。利用Schema或DTD可以对xml的正确性进行验证,避免了非法的配置导致应用程序出错。 
  4、修改配置而无需变动现有程序。

  虽然有如此多的好处,但毕竟没有什么万能的东西,xml也有自身的缺点。 
  1、需要解析工具或类库的支持。 
  2、解析xml势必会影响应用程序性能,占用系统资源。 
  3、配置文件过多导致管理变得困难。 
  4、编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。 
  5、IDE无法验证配置项的正确性无能为力。 
  6、查错变得困难。往往配置的一个手误导致莫名其妙的错误。 
  7、开发人员不得不同时维护代码和配置文件,开发效率变得低下。 
  8、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。 





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

1.粗略过一遍深度思考吧还是


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

1.速度有点慢了,有点超出计划


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

对一些以前模糊的东西理解更深了,但是还是缺少实际经验



返回列表 返回列表
评论

    分享到