Java面试总结(2018 - 12 - 12)

1.Cooke的定义

1)当你在浏览网站的时候,Web服务器会送一个小小的资料放在你的计算机上,Cookie会帮你在浏览器上所打的一些文字或是一些选择,都记录下来。当你下次访问同一个网站的时候,Web服务器会先看看你有没有留下上一次的Cookie资料,有的话,就会根据Cookie里的内容来判断使用者,送出特定的内容给你。Cookie的使用很普遍,许多有提供个人化的网站,都是利用Cookie来辨认使用者,以方便送出使用者量身定做的内容,像是Web接口的免费Email网站,都要用到Cookie。

2)具体来说Cookie机制采用的是在客户端保持状态的方案,而Session机制采用的是在服务器端保持状态的方案。

3)同时我们也看到,由于采用服务端保持状态的方案在客户端也需要保存一个标识,所以Session机制可能需要借助于Cookie机制来达到保存标识的目的,但实际上它还有其他选择。

4)Cookie机制,正统的Cookie机制分发是通过HTTP协议来实现的,服务器在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成响应的Cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成Cookie。而他们Cookie的使用是由浏览器按照一定的原则在后台自动发给服务器的,浏览器检查所有存储的Cookie,如果某个Cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该Cookie附在请求资源的HTTP请求头上发给服务器。

5)Cookie的内容包括:名字,值,过期时间,路径和域。路径与域一起构成Cookie的作用范围。若不设置过期时间,则表示这个Cookie的生命周期为浏览器会话期间,关闭浏览器窗口,Cookie就消失了,这种生命周期为浏览器会话期的Cookie被称为会话Cookie。会话Cookie一般不存储在硬盘上,而是存储在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie仍然有效,直到超过设定的规定时间为止。存储在硬盘上的Cookie可以实现在不同的浏览器进程之间的共享,比如说两个IE窗口。但是保存在内存中的Cookie,不同的浏览器有不同的处理方式。

2.Session的定义

Session机制,Session机制是服务器的一种机制,服务器使用一种类似于散列表的结构(也可能就是散列表)来保存信息。当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已经包含了一个Session标识(称为Session Id),如果已包含则说明以前已经为此客户端创建过Session,服务器就会按照Session Id把这个Session检索出来使用,检索不到,就重新创建一个。如果客户端请求不包含Session Id,则为此客户端创建一个Session并且生成一个与此Session相关联的Session Id,Session Id应该是一个不重复,又不容易被找到规律的类似字符串,这个Session Id会在本次响应中返回给客户端保存。保存这个Session Id的方式可以采用Cookie,这样交互的过程中浏览器可以自动的按照规则把这个表示发给服务器。一般这个Cookie的名字都是类似于SESSIONID。但Cookie可以被人为的禁止,则必须有其他机制以便在Cookie禁止的时候仍然能够把Session Id传递回服务器。经常被使用的一种技术叫URL重写,就是把Session Id直接附加在URL路径后边。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session Id传递回服务器。比如:

<form name="testform" action="/xxx"> 
    <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
    <input type="text"> 
</form> 

实际上这种技术可以简单的用对action的URL重写来代替。

3.Cookie和Session的区别

1)Cookie的数据存放在浏览器上,Session的数据存放在服务器上。

2)Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全问题,应该使用Session。

3)Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能的方面,应当使用Cookie。

4)单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。

5)所以我个人建议:将登录信息等重要信息存放在Session中,其他信息如果需要保存,可以放在Cookie中。

4.Spring中用到了哪些设计模式

1)单例模式:创建bean的时候。

2)工厂模式:在各种BeanFactory以及ApplicationContext创建中都用到了。

3)代理模式:在Aop实现中用到了Jdk的动态原理。

4)模板模式:在各种BeanFactory以及ApplicatonContext实现中也用到了。

5)外观模式:Tomcat中有很多场景都使用到了外观模式,因为Tomcat中有很多不同的组件,每个组件需要相互通信,但又不能将自己内部数据过多地暴露给其他组件。用外观模式隔离数据是个很好的方法。

6)策略模式:在Java中的应用,这个太明显了,因为Comparator这个借口简直就是为策略模式而生的。

7)原型模式:使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的Clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大的对象时,性能的差别非常明显。

8)迭代器模式:Iterable接口和Iterator接口,这两个都是迭代相关的接口,可以这么人为,实现了Iterable接口,则表示某个对象是可被迭代的,Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象时如何进行迭代的。

posted @ 2018-12-13 09:52  Java-Legend  阅读(224)  评论(0编辑  收藏  举报