• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Java常考面试题总结(六)

极客题库 Geekerstar 11个月前 (06-04) 619次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]
本文内容来源于网络收集,内容繁杂,难免有误,如果发现错误的地方或者有任何想讨论的问题请在下面留言。

HTTP响应的结构是怎么样的?

HTTP响应由三个部分组成:

状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。

HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。

主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。

什么是cookie?session和cookie有什么区别?

cookie是Web服务器发送给浏览器的一块信息。

浏览器会在本地文件中给每一个Web服务器存储cookie。

以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。

下面列出了session和cookie的区别:

无论客户端浏览器做怎么样的设置,session都应该能正常工作。

客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。

在存储的数据量方面session和cookies也是不一样的。

session能够存储任意的Java对象,cookie只能存储String类型的对象。

cookie实际上是一小段的文本信息。

客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie。

客户端浏览器会把cookie保存起来。当浏览器再次请求该网站时,浏览器就会把请求地址和cookie一同给服务器。

服务器检查该cookie,从而判断用户的状态。

服务器还可以根据需要修改cookie的内容。 session是另一种记录客户状态的机制。

不同的是cookie保存在客户端浏览器中,而session保存在服务器上。

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。

客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。

如果说cookie机制是通过检查客户身上的“通信证”,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。

浏览器和Servlet通信使用的是什么协议?

浏览器和Servlet通信使用的是HTTP协议。

什么是HTTP隧道?

HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术。

因此,HTTP协议扮演了一个打通用于通信的网络协议的管道的包装器的角色。

把其他协议的请求掩盖成HTTP的请求就是HTTP隧道。

sendRedirect()和forward()方法有什么区别?

sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。

重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。

一般认为sendRedirect()比forward()要慢。

forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求。

sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生变化,同时request和response也会发生变化,重新生成新的对象。

什么是URL编码和URL解码?

URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。

什么是JSP页面?

JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。

静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML。

JSP是一种混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。


jsp是java开发的专门用于动态显示页面的技术。

jsp编译时,会首先编译成servlet文件,然后编译成class文件。

包含9大内置对象:response、request、exception、out、application、pagecontext、config、session、page。

有四个域对象:request、pagecontext、session、application

JSP请求是如何被处理的?

浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,使用JSP编译器把JSP页面转化成一个Servlet类。

需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,然后服务器调用servlet类,处理浏览器的请求。

一旦请求执行结束,servlet会把响应发送给客户端。这里看下如何在JSP中获取请求参数。

客户端通过浏览器发送jsp请求,服务器端接受到请求后,判断是否是第一次请求该页面,或者该页面是否改变,若是,服务器将jsp页面翻译为servlet,jvm将servlet编译为.class文件,字节码文件加载到服务器内存上执行,服务器将处理结果以.html页面的形式返回给客户端,若该页面不是第一次请求,则省略翻译和编译的步骤,直接执行。

JSP有什么优点?

下面列出了使用JSP的优点:

JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码。

JSP页面可以被预编译。

JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来。

开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库。

开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。

什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?

Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。

Directive用来设置页面级别的指令,从外部文件插入数据,指定自定义的标签库。

Directive是定义在 <%@ 和 %>之间的。下面列出了不同类型的Directive:

包含指令(Include directive):用来包含文件和合并文件内容到当前的页面。

页面指令(Page directive):用来定义JSP页面中特定的属性,比如错误页面和缓冲区。

Taglib指令: 用来声明页面中使用的自定义的标签库。

Jsp包含三个编译指令和七个动作指令。

三个编译指令为:page、include、taglib。

七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty。

什么是JSP动作(JSP action)?

JSP动作以XML语法的结构来控制Servlet引擎的行为。

当JSP页面被请求的时候,JSP动作会被执行。

它们可以被动态的插入到文件中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:

jsp:include-当JSP页面被请求的时候包含一个文件。

jsp:useBean-找出或者是初始化Javabean。

jsp:setProperty-设置JavaBean的属性。

jsp:getProperty-获取JavaBean的属性。

jsp:forward-把请求转发到新的页面。

jsp:plugin-产生特定浏览器的代码。

什么是Scriptlets?

JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。指jsp页面里 <% %> 中间的代码。

scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户可以添加任意有效的scriplet。

声明(Decalaration)在哪里?

声明跟Java中的变量声明很相似,它用来声明随后要被表达式或者scriptlet使用的变量。

添加的声明必须要用开始和结束标签包起来。

什么是表达式(Expression)?

【列表很长,可以分上、中、下发布】

JSP表达式是Web服务器把脚本语言表达式的值转化成一个String对象,插入到返回给客户端的数据流中。

表达式是在<%=和%>这两个标签之间定义的。

隐含对象是什么意思?有哪些隐含对象?

JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。

开发者不用明确的声明就可以直接使用他们。

JSP隐含对象也叫做预定义变量。下面列出了JSP页面中的隐含对象:

page:表示当前jsp页面的一个实例,它的类型是java.lang.Object,可以用this代替;

out:JspWriter out = pageContext.getOut() 用于标签对象中输出

request:HttpServletRequest接口的简单实用;

response:HttpServletResponse接口的简单使用;

session;HttpSession简单使用;

application:ServletContext的简单使用;

config:ServletConfig类,在jsp中很少使用;

exception:jsp页面发生错误的时候,会自动产生此对象;

pageContext;表示当前页面容器,可以访问当前页面的所有对象;

面向对象软件开发的优点有哪些?

代码开发模块化,更易维护和修改。

代码复用。

增强代码的可靠性和灵活性。

增加代码的可理解性。

面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。

封装的定义和好处有哪些?

封装给对象提供了隐藏内部特性和行为的能力。

对象提供一些能被其他对象访问的方法来改变它内部的数据。

在Java当中,有3种修饰符:public,private和protected。

每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。

下面列出了使用封装的一些好处:

通过隐藏对象的属性来保护对象内部的状态。

提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。

禁止对象之间的不良交互提高模块化。

参考这个文档获取更多关于封装的细节和示例。

或:

一是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法唯一的途径就是通过类本身,类才有资格调用它所拥有的资源(方法,数据项属性等等)。所以第一个好处就是数据的安全性提高了。

二是通过隐藏隔离,只允许外部对类做有限的访问,开发者可以自由的改变类的内部实现,而无需修改使用该类的那些程序。只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就可以自由改变,各取所需,利于分工。

三就是提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤。

多态的定义?

多态:相同类型的引用变量,调用同一个方法时呈现出多种不同的行为特征。

对象的实例变量不具备多态性。

Java引用变量有两个类型:编译时类型,运行时类型

编译时类型由声明该变量时使用的类型决定

运行时类型由实际赋给该变量的对象决定

如果编译时类型和运行时类型不一致,就可能出现多态(Polymorphism)

继承的定义?

继承给对象提供了从基类获取字段和方法的能力。

继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。

抽象的定义?抽象和封装的不同点?

抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。

Java支持创建只暴漏接口而不包含方法实现的抽象的类。

这种抽象技术的主要目的是把类的行为和实现细节分离开。

抽象和封装是互补的概念。

一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。

一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。

本文内容来源于网络收集,内容繁杂,难免有误,如果发现错误的地方或者有任何想讨论的问题请在下面留言。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Java常考面试题总结(六)
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00