Java面试题-序列化、JavaWEB

Java面试题-序列化、JavaWEB

序列化

  1. 什么是Java序列化?如何实现Java序列化?

    序列化就是一种用来处理对象流的机制,对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。序列化就是为了解决在对对象流进行读写操作时所引发的问题。

    序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流来构造一个对象流对象,接着使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(保存其状态),要恢复的话则用输入流。

  2. 如何使用Serializable 实现序列化?

    在 Java 中, 只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。

    ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化;

    通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化。

  3. 如何自定义序列化策略?

    在类中增加writeObject和readObject方法可以实现自定义序列化策略。

  4. Transient关键字

    • 在变量声明前加上Transient关键字,可以阻止该变量被序列化到文件中。在被反序列化后,transient变量的值被设为初始值,如int型的是0,对象型的是null。
    • 服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的(如密码字符串等),希望对该密码字段在序列化时进行加密,而客户端如果有解密的密钥,只有在客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的数据安全。
  5. 序列化在深clone中的实现

    在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。

JavaWEB

  1. 什么是原生JDBC操作数据库流程?

    1. Class.forName()加载数据库连接驱动;
    2. DriverManager.getConnection()获取数据库连接对象;
    3. 根据SQL获取SQL会话对象,有两种方式分别是Statement和PreparedStatement;
    4. 执行SQL处理结果集,执行SQL前如果有参数值就设置参数值setXXX();
    5. 关闭结果集,关闭会话,关闭连接。
  2. 为什么要用PreparedStatement?

    • PreparedStatement安全性比Statement更高,使SQL注入的可能性降低;
    • PreparedStatement接口继承Statement,PreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。
    • 作为Statement的子类,PreparedStatement继承了Statement的所有功能。三种方法execute,executeQuery,executeUpdate已被更改使之不需要参数。
  3. 关系数据库的连接池机制是什么?

    前提:为数据库连接建立一个缓冲池。

    1. 从连接池获取或创建可用连接;
    2. 使用完毕之后,把连接返回给连接池;
    3. 在系统关闭前,断开所有连接并释放连接占用的系统资源;
    4. 能处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。
  4. http的长连接和短连接是什么?

    HTTP1.1默认保持长连接,数据传输完成以后保持TCP连接不断开,等待在同域名下继续用这个通道传输数据。

    HTTP1.0默认保持短连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

  5. HTTP1.1和HTTP1.0的区别?(HTTP1.1的优势?)

    1. 可扩展性(增加版本号、OPTIONS方法、用于切换协议的Upgrade头域)
    2. 缓存(新增cache特性)
    3. 带宽优化(节省带宽资源)
    4. 长连接(处理完消息后继续保持TCP连接)
    5. 消息传递(传递消息用数据块分块传递)
    6. Host头域(支持了同IP下多主机,请求消息中新增传递主机名hostname)
    7. 错误提示(新增24个状态相应码)
  6. 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服务器当前不能处理客户端的请求,一段时间后可恢复正常
  7. Get和Post的区别?

    1. Get请求的数据会附在URL之后,以?分隔URL和传输数据,参数之间以&相连;Post把提交的数据则放置在HTTP包的包体中。

    2. Get方式提交的数据收到浏览器对数据长度的限制,因此比较小(通常3KB以内);Post没有限制可传递大量数据;

    3. Post的安全性要比Get的安全性高(例:Get传输数据明文密码可能导致密码泄露)。

    4. http中重定向和请求转发的区别?

      本质区别:转发是服务器行为,重定向是客户端行为

      重定向特点:两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失。

      请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。

  8. Cookie和Session的区别?

    Cookie是web服务器发送给浏览器的一块信息,浏览器会在本地的一个文件中给每个web服务器存储cookie。以后浏览器再给特定的web服务器发送请求时,同时会发送所有为该服务器存储的cookie。

    Session是存储在web服务器端的一块信息。session对象存储特定用户会话所需的属性机器配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中你的变量将不会丢失,而是在整个用户会话中一直存在着。

    Cookie和Session的不同点:

    • 无论客户端作怎样的设置,session都能正常工作;当客户端禁用cookie时将无法使用cookie。
    • 在存储的数据量方面:session可以存储任何java对象,cookie只能存储String类型的对象。
  9. 在单点登录中,如果cookie被禁用了怎么办?

    单点登录的原理是后端生成一个session ID,然后设置到cookie,后面的所有请求浏览器都会带有cookie,然后服务端从cookie获取session ID,再查询到用户信息。所以,保持登录的关键不是cookie,而是通过cookie保存和传输的session ID,其本质是能获取用户信息的数据。除了cookie,还通常使用HTTP请求头来传输。但这个请求头浏览器不会像cookie一样自动携带,需要手工处理。

  10. 什么是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程序,实现页面交互。

  11. JSP有哪些域对象和内置对象?它们的作用是什么?

    四大域对象:

    1. page:page域指当前页面,当前jsp页面有效,跳到其它页面无效;
    2. request:request域指一次请求范围内有效,从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward(请求转发)方式跳转多个jsp,在这些页面里都可以使用这个变量。
    3. session:session域指当前会话有效范围,浏览器从打开到关闭中,转发、重定向均可以使用。
    4. application:application域指只能在同一个web中使用,服务器未关闭或者重启,数据就有效。

    九大内置对象:

    1. Out对象:用于向客户端、浏览器输出数据。
    2. Request对象:封装了来自客户端、浏览器的各种信息,用于接收通过HTTP协议传送到服务器的数据。
    3. Response对象:封装了服务器的响应信息,表示服务器对客户端的响应。
    4. Exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
    5. Config对象:封装了应用程序的配置信息。
    6. Page对象:指向了当前jsp程序本身。
    7. Session对象:用来保存会话信息,默认有效时间30分钟。也就是说,可以实现在同一用户的不同请求之间共享数。
    8. Application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。所有的用户分享一个Application对象
    9. PageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
  12. 什么是xml,使用xml的优缺点是什么?xml的解析器有几种,分别有什么区别?

    xml是一种可扩展性标记语言,支持自定义标签(使用前必须预定义),使用DTD和XML Schema标准化XML结构。

    优点:用于配置文件,格式统一,符合标准;用于在互不兼容的系统间交互数据,共享数据方便;

    缺点:xml文件格式复杂,数据传输占用流量,服务器和客户端解析xml文件占用大量资源并且不易维护。

    xml的常用解析器有两种,分别是DOM和SAX。主要区别在于它们解析xml文档的方式不同:使用DOM解析,xml文档以DOM树形结构加载入内存,而SAX采用的是事件模型。

  13. 谈谈对Ajax的认识

    Ajax是一种创建交互式网页应用的网页开发技术,是“Asynchronous JavaScript and XML”的缩写。

    Ajax的优势:通过异步模式,提升了用户体验;优化了浏览器和服务器之间的数据传输,减少了不必要的数据往返,减少了带宽占用;Ajax引擎在客户端运行,承担了一部分本来由服务器来承担的工作,从而减少了大用户量下的服务器负载。

    Ajax的最大特点:可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。

  14. 谈谈对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函数里。

  15. 谈谈对RestFul风格的理解和实际应用?

    概念:

    Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    功能:

    资源:互联网所有的事物都可以被抽象为资源。

    资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

    分别对应 添加、 删除、修改、查询。

    传统方式操作资源 :通过不同的参数来实现不同的效果!(请求方式只有GET,POST)

    使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果!(请求方式可以有POST、DELETE、PUT、GET)

  16. 什么是WebService?

    WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。服务端和客户端使用的编程语言可以不同,操作系统也可以不同。

  17. 常见的远程调用技术有哪些?

    RMI 是 java 语言本身提供的远程通讯协议,稳定高效,是 EJB 的基础。但它只能用于 JAVA 程序之间的通讯。

    Hessian 和 Burlap 是 caucho 公司提供的开源协议,基于 HTTP 传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。跨平台有点小问题。

    Httpinvoker 是 SpringFramework 提供的远程通讯协议,只能用于 JAVA 程序间的通讯,且服务端和客户端必须使用SpringFramework 。

    WebService 是连接异构系统或异构语言的首选协议,它使用 SOAP 形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。

    效率相比: RMI > Httpinvoker >= Hessian >> Burlap >> WebSservice。

posted @ 2021-04-15 14:11  1LDK  阅读(131)  评论(0编辑  收藏  举报