java面试题——web

什么是反射?
反射是在运行状态中,对于任何一个类,都知道它的所有属性和方法。对于任意一个对象,都能调用它的任意一个属性和方法,这种动态获取的信息就是java的反射机制。

什么是Java序列化?什么情况下需要序列化?
Java序列化是为了保存各种对象在内存中的状态。并且可以把保存的对象状态在读出来。
以下情况需要使用java序列化:
想把的内存中的对象状态保存到一个文件中或者数据库中时候;
想用套接字在网络上传送对象的时候;
想通过RMI(远程方法调用)传输对象的时候。

动态代理是什么?有哪些应用?
动态代理是运行时动态生成代理类。
动态代理的应用有Spring aop,hibernate数据查询,Java注解对象获取等。

怎么实现动态代理?
JDK 原生动态代理和 cglib 动态代理。JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。

说说你对session的理解?
session用来跟踪客户的状态。session指的是在一段时间内,客户和Web服务器一连串相关的交互过程。在一个session中,客户可能会多次请求同一个网页,或者访问不同的资源。就比如在电子邮件系统中,从一个客户登录到系统开始,收信,写信,发信等,到退出邮件系统,整个过程为一个session。

Session和cookie的区别?
存储位置不同:session存储在服务器端,cookie存储在浏览器端
安全性不同: cookie安全性一般,可以被伪造和修改。
存储的多样性:session可以存储在redis中,数据库中,应用程序中,而cookie只能存储在浏览器中。

说一下session的生命周期?
当客户端登录完成之后,服务器会创建session把session的id发送到客户端,客户端再存储在浏览器中。这样每次访问都会带着sessionid,服务器拿到id之后,在内存找到与之对应的session这样就可以正常工作了。

你常用的设计模式有哪些?都有什么作用?
单利模式:保证对象被创建一次,节省系统开销。
工厂模式:解耦代码
观察者模式:定义了对象之间的一对多的依赖,这样的话,当一个对象改变时,他的所有依赖者都会收到通知并自动更新。
什么是单例设计模式,及其应用方式?
单利模式是一种常用的设计模式,定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要一个全局对象,有利于协调系统整体的行为。
比如:在某个程序中,该服务器的配置信息存在一个文件中,这些配置数据由一个单例对象统一读取。然后其他对象再通过这个单例对象获取配置信息。这种方式简化了在复杂环境下的配置管理。

http响应码301和302有什么区别?
301:永久重定向
302:暂时重定向
区别是301对搜索引擎优化更加有利,302有被提示为网络拦截的风险。

简述tcp与udp的区别?
Tcp和upd是OSI模型中的运输层中的协议,tcp提供可靠的通讯传输。而udp则被用于让广播和细节控制交给应用的通讯传输。
两者的区别如下:
Tcp面向连接,udp面向非连接既发送数据前不需要建立连接。
Tcp提供可靠的服务,udp无法保证。
Tcp面向字节流,udp面向报文。
Tcp数据传输慢,udp数据传输快。

Tcp为什么要三次握手?两次不行吗?为什么?
如果采用两次握手,只要服务器发出确认数据包就会建立连接,客户端此时并未响应,这样的话,服务器端就会一直在等待客户端,就会造成资源浪费,若采用三次握手。服务器端没有收到来自客户端的再次确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器资源。

OSI的七层模型都有那些?
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
Post和get请求有哪些区别?
Get请求会被浏览器主动缓存。Post不会。
Get有参数限制。而post没有。
Get参数传输更安全,会明文限制在url上。Post不会。

如何实现跨域?
在单个接口使用注解@CorssOrigin运行跨域。
使用jsonp跨域。

Jsonp的实现原理?
Json withPadding 是利用script标签的src连接可以访问不同源的特性,加载远程返回的js函数来执行的。