Java面试题-序列化、JavaWEB
Java面试题-序列化、JavaWEB
序列化
-
什么是Java序列化?如何实现Java序列化?
序列化就是一种用来处理对象流的机制,对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。序列化就是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流来构造一个对象流对象,接着使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(保存其状态),要恢复的话则用输入流。
-
如何使用Serializable 实现序列化?
在 Java 中, 只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。
ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化;
通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化。
-
如何自定义序列化策略?
在类中增加writeObject和readObject方法可以实现自定义序列化策略。
-
Transient关键字
- 在变量声明前加上Transient关键字,可以阻止该变量被序列化到文件中。在被反序列化后,transient变量的值被设为初始值,如int型的是0,对象型的是null。
- 服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的(如密码字符串等),希望对该密码字段在序列化时进行加密,而客户端如果有解密的密钥,只有在客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的数据安全。
-
序列化在深clone中的实现
在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。
JavaWEB
-
什么是原生JDBC操作数据库流程?
- Class.forName()加载数据库连接驱动;
- DriverManager.getConnection()获取数据库连接对象;
- 根据SQL获取SQL会话对象,有两种方式分别是Statement和PreparedStatement;
- 执行SQL处理结果集,执行SQL前如果有参数值就设置参数值setXXX();
- 关闭结果集,关闭会话,关闭连接。
-
为什么要用PreparedStatement?
- PreparedStatement安全性比Statement更高,使SQL注入的可能性降低;
- PreparedStatement接口继承Statement,PreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。
- 作为Statement的子类,PreparedStatement继承了Statement的所有功能。三种方法execute,executeQuery,executeUpdate已被更改使之不需要参数。
-
关系数据库的连接池机制是什么?
前提:为数据库连接建立一个缓冲池。
- 从连接池获取或创建可用连接;
- 使用完毕之后,把连接返回给连接池;
- 在系统关闭前,断开所有连接并释放连接占用的系统资源;
- 能处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。
-
http的长连接和短连接是什么?
HTTP1.1默认保持长连接,数据传输完成以后保持TCP连接不断开,等待在同域名下继续用这个通道传输数据。
HTTP1.0默认保持短连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
-
HTTP1.1和HTTP1.0的区别?(HTTP1.1的优势?)
- 可扩展性(增加版本号、OPTIONS方法、用于切换协议的Upgrade头域)
- 缓存(新增cache特性)
- 带宽优化(节省带宽资源)
- 长连接(处理完消息后继续保持TCP连接)
- 消息传递(传递消息用数据块分块传递)
- Host头域(支持了同IP下多主机,请求消息中新增传递主机名hostname)
- 错误提示(新增24个状态相应码)
-
http常见的状态码?
- 200 OK客户端请求成功
- 301 Moved Permanently(已永久移除)请求的URL已移走
- 302 found重定向
- 400 Bad Request客户端请求有语法错误
- 401 Unauthorized请求未经授权
- 403 Forbidden服务器收到请求,并拒绝提供服务
- 404 Not Found请求资源不存在(访问错误的URL)
- 500 Internal Server Error服务器发生不可预期的错误
- 503 Server Unavailable服务器当前不能处理客户端的请求,一段时间后可恢复正常
-
Get和Post的区别?
-
Get请求的数据会附在URL之后,以?分隔URL和传输数据,参数之间以&相连;Post把提交的数据则放置在HTTP包的包体中。
-
Get方式提交的数据收到浏览器对数据长度的限制,因此比较小(通常3KB以内);Post没有限制可传递大量数据;
-
Post的安全性要比Get的安全性高(例:Get传输数据明文密码可能导致密码泄露)。
-
http中重定向和请求转发的区别?
本质区别:转发是服务器行为,重定向是客户端行为
重定向特点:两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失。
请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。
-
-
Cookie和Session的区别?
Cookie是web服务器发送给浏览器的一块信息,浏览器会在本地的一个文件中给每个web服务器存储cookie。以后浏览器再给特定的web服务器发送请求时,同时会发送所有为该服务器存储的cookie。
Session是存储在web服务器端的一块信息。session对象存储特定用户会话所需的属性机器配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中你的变量将不会丢失,而是在整个用户会话中一直存在着。
Cookie和Session的不同点:
- 无论客户端作怎样的设置,session都能正常工作;当客户端禁用cookie时将无法使用cookie。
- 在存储的数据量方面:session可以存储任何java对象,cookie只能存储String类型的对象。
-
在单点登录中,如果cookie被禁用了怎么办?
单点登录的原理是后端生成一个session ID,然后设置到cookie,后面的所有请求浏览器都会带有cookie,然后服务端从cookie获取session ID,再查询到用户信息。所以,保持登录的关键不是cookie,而是通过cookie保存和传输的session ID,其本质是能获取用户信息的数据。除了cookie,还通常使用HTTP请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需要手工处理。
-
什么是JSP,什么是Servlet?JSP和Servlet有什么区别?
JSP本质上就是一个Servlet,它是Servlet的一种特殊形式,每个JSP都是一个Servlet实例。
Servlet是由Java提供用与开发web服务器应用程序的一个组件,运行在服务端,由Servlet容器负责管理,用来生成动态内容。一个Servlet实例就是实现了特殊接口Servlet的Java类,所有自定义的Servlet均必须实现Servlet接口。
区别:
JSP是HTML页面中内嵌的Java代码,侧重页面显示;
Servlet是HTML代码与Java代码分离,侧重逻辑控制。在MVC设计思想中,JSP位于视图层,Servlet位于控制层。
注意:JVM只能识别Java类,并不能识别JSP代码!web容器收到以.jsp为扩展名的url请求时,会将访问请求交给Tomcat中的JSP引擎处理,接着编译Servlet源程序生成的.class文件,再有web容器Servlet引擎去装载执行Servlet程序,实现页面交互。
-
JSP有哪些域对象和内置对象?它们的作用是什么?
四大域对象:
- page:page域指当前页面,当前jsp页面有效,跳到其它页面无效;
- request:request域指一次请求范围内有效,从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward(请求转发)方式跳转多个jsp,在这些页面里都可以使用这个变量。
- session:session域指当前会话有效范围,浏览器从打开到关闭中,转发、重定向均可以使用。
- application:application域指只能在同一个web中使用,服务器未关闭或者重启,数据就有效。
九大内置对象:
- Out对象:用于向客户端、浏览器输出数据。
- Request对象:封装了来自客户端、浏览器的各种信息,用于接收通过HTTP协议传送到服务器的数据。
- Response对象:封装了服务器的响应信息,表示服务器对客户端的响应。
- Exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
- Config对象:封装了应用程序的配置信息。
- Page对象:指向了当前jsp程序本身。
- Session对象:用来保存会话信息,默认有效时间30分钟。也就是说,可以实现在同一用户的不同请求之间共享数。
- Application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。所有的用户分享一个Application对象
- PageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
-
什么是xml,使用xml的优缺点是什么?xml的解析器有几种,分别有什么区别?
xml是一种可扩展性标记语言,支持自定义标签(使用前必须预定义),使用DTD和XML Schema标准化XML结构。
优点:用于配置文件,格式统一,符合标准;用于在互不兼容的系统间交互数据,共享数据方便;
缺点:xml文件格式复杂,数据传输占用流量,服务器和客户端解析xml文件占用大量资源并且不易维护。
xml的常用解析器有两种,分别是DOM和SAX。主要区别在于它们解析xml文档的方式不同:使用DOM解析,xml文档以DOM树形结构加载入内存,而SAX采用的是事件模型。
-
谈谈对Ajax的认识
Ajax是一种创建交互式网页应用的网页开发技术,是“Asynchronous JavaScript and XML”的缩写。
Ajax的优势:通过异步模式,提升了用户体验;优化了浏览器和服务器之间的数据传输,减少了不必要的数据往返,减少了带宽占用;Ajax引擎在客户端运行,承担了一部分本来由服务器来承担的工作,从而减少了大用户量下的服务器负载。
Ajax的最大特点:可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。
-
谈谈对JSONP原理的认识
由于在JavaScript中有一个很重要的安全策略“Same-Origin Policy”(同源策略),这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。
当进行一些深入的前端编程的时候,不可避免地要进行跨域的操作,这时候“同源策略”就显得过于苛刻。JSONP跨域GET请求是一个常用的解决方案。
JSONP最基本的原理是:动态添加一个标签,使用script标签的src属性没有跨域的限制的特点实现跨域。首先在客户端注册一个callback,然后把callback的名字传给服务器。此时,服务器先生成json数据,然后以JavaScript语法的方式,生成一个function,function名字就是传递上来的参数jsonp。最后将json数据直接以入参的方式,放置到function中,这样就生成了一段JS语法的文档,返回给客户端。客户端浏览器解析script标签,并执行返回的JavaScript文档,此时数据作为参数,传入到了客户端预先定义好的callback函数里。
-
谈谈对RestFul风格的理解和实际应用?
概念:
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
功能:
资源:互联网所有的事物都可以被抽象为资源。
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
分别对应 添加、 删除、修改、查询。
传统方式操作资源 :通过不同的参数来实现不同的效果!(请求方式只有GET,POST)
使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果!(请求方式可以有POST、DELETE、PUT、GET)
-
什么是WebService?
WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。服务端和客户端使用的编程语言可以不同,操作系统也可以不同。
-
常见的远程调用技术有哪些?
RMI 是 java 语言本身提供的远程通讯协议,稳定高效,是 EJB 的基础。但它只能用于 JAVA 程序之间的通讯。
Hessian 和 Burlap 是 caucho 公司提供的开源协议,基于 HTTP 传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。跨平台有点小问题。
Httpinvoker 是 SpringFramework 提供的远程通讯协议,只能用于 JAVA 程序间的通讯,且服务端和客户端必须使用SpringFramework 。
WebService 是连接异构系统或异构语言的首选协议,它使用 SOAP 形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。
效率相比: RMI > Httpinvoker >= Hessian >> Burlap >> WebSservice。