笔试20190305
1、同源策略和JSONP
1)同源策略(Same Origin Policy)
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则它们同源。否则,只要有任何一个不同,就被当作跨域。
同源策略是浏览器最重要也最基础的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。所以a.com下的js脚本采用ajax读取b.com下的文件数据是会报错的。
不受同源策略限制:
Ⅰ、页面中的链接,重定向以及表单提交
Ⅱ、跨域资源的引入是可以的。但是js不能读写加载其中的内容。如嵌入页面的<script src>,<img>,<link>,<iframe>等包含src属性的标签。
2)JSONP(JSON with Padding)
跨域数据访问的一种方式。
例如:a.com/jsonp.html想得到b.com/main.js中的数据,就可以在jsonp.html中创建一个回调函数xxx,动态加载<script>元素。向服务器发送请求,请求地址后加上参数,通过callback参数指定回调函数名字:http://b.com/main.js?callback=xxx。在main.js中调用xxx并且以JSON格式作为参数传递,完成回调。
这样,就可以跨域访问到数据。
2、SpringMVC 使用HandlerExceptionResolver 和使用@ExceptionHandler 区别
@ExceptionHandler:进行异常处理的方法必须与出错的方法在同一个Controller中
HandlerExceptionResolver:可以进行全局异常控制。
3、Filter与Interceptor区别联系
联系:都是AOP思想的体现,都能实现权限检查、日志记录等
区别:
Filter:依赖于servlet容器,是JavaEE标准,是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作。过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
Interceptor:拦截器不依赖与servlet容器,依赖于web框架。在SpringMVC中就是依赖于SpringMVC框架,在SSH框架中,就是依赖于Struts框架。在实现上基于Java的反射机制。由于拦截器是基于web框架的调用,因此可以使用spring的依赖注入(DI)获取IOC容器中的各个bean,进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,即请求还没有到controller层时进行拦截,请求走出controller层次,还没有到渲染时图层时进行拦截,结束视图渲染,但是还没有到servlet的结束时进行拦截。对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理,拦截器功在对请求权限鉴定方面确实很有用处。它可以简单理解为“拒你所想拒”。
4、三个线程,名字分别ABC,按顺序打印ABC各20次,要求打印出的字符串为ABCABCABC......