JSP面试题
1..JSP有哪些内置对象和动作,他们的作用分别是什么?
(1)什么是内置对象?
在jsp开发中,会频繁使用到一些对象
。例如HttpSession,ServletContext,ServletContext,HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可!,这些创建好的对象就叫内置对象!!!!
举例:
servlet:
HttpSession session = request.getSession(true); (需要开发者做)
jsp:
tomcat服务器: HttpSession session = request.getSession(true);(不需要开发者做)
开发者做的: session.getId();
2.九大内置对象都有哪些?
内置对象名 类型 范围
request HttpServletRequest 请求范围
response HttpServletResponse 标准输出流
config ServletConfig。 Servlet配置信息对象
application ServletContext 应用范围
session HttpSession 会话范围
exception Throwable 异常引用(isErrorPage=“true”)
page Object(this) 很少用
out JspWriter 响应对象
pageContext PageContext 页面范围
1、HttpServletRequest 的 request 对象
作用:代表请求对象,用来接收客户端通过http 协议连接传输到服务器端的数据。
2、HttpServletResponse 的response 对象
作用:代表响应对象,用来向客户端发送数据。
3、JspWriter 的 out 对象
作用:主要用于向客户端发送数据。其中JspWriter 是out 的基类。
4、HttpSession 的session 对象
作用:主要用于来分别保存每个用户的个人信息,与请求关联的对话。会话状态的维持是每个web 应用开发者都必须面对的问题。
5、ServletContext 的application 对象
作用:主要用于保存用户信息,代码片断的运行环境。它是一个共享的内置对象。即一个容器中多个用户共享一个application 对象,故其保存的信息被所有的用户所共享。
6、PageContext 的PageContext 对象
作用:管理网页的属性,为jsp 页面包装页面的上下文,管理对属于jsp 中特殊可见部分中
已经命名对象的访问。它的创建和初始化的工作都是由容器来自动完成的。
7、ServletConfig 的Config 对象
作用:代码片断配置对象,表示对servlet 的配置。
8、Object 的page(相当于this) 对象
作用:处理jsp 网页,是object 类的一个实例。即它也是jsp 的本身,只有在jsp 的页面范
围之内它才是合法的。
9、Exception
2..JSP的执行原理?
-浏览器上访问的路径虽然是以.jsp结尾,访问的是某个jsp文件,其实底层执行的是jsp对应的java程序
-Tomcat服务器负责将.jsp文件翻译生成.java源文件,并且将java源文件编译生成.class字节码文件
-访问jsp,其实底层还是执行了.class文件中的程序
-Tomcat服务器内置了一个JSP翻译引擎,专门负责翻译JSP文件,编译java源文件
-index.jsp会被翻译生成index_jsp.java,编译生成index_jsp.class
-index_jsp这个类继承了HttpJspBase,而HTTPJsBase继承了HttpServlet
-jsp就是Servlet,只不过职责不同,JSP的强项做页面展示
3.3 Jsp中的四个域对象
四个域对象:
pageContext page域
request request域
session session域
application context域
1)域对象作用:
保存数据 和 获取数据 ,用于数据共享。
2)域对象方法:
setAttribute("name",Object) 保存数据
getAttribute("name") 获取数据
removeAttribute("name") 清除数据
3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)
顺序: page域 -> request域 -> session域- > context域(application域)
关于异常的的面试题
throwable形容词,可抛出的,继承与objcet,所有的异常都是可抛出的,
StackOverFlowError 栈内存溢出
1.java中的异常和error有什么区别?(必考)
所有的异常都有一个共同的祖先 Throwable(可抛出),Throwable 有两个重要的子类:Exception(异常)和 Error(错误),
Exception(异常)是应用程序中可能的可预测、可处理,可恢复的。Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误,如:空值对象引用、除数为零或数组越界(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。)异常又分为两类:一个是编译时异常一个是运行时异常。在我们代码级别上,所有runtimeException的子类都是运行时异常,所有Exception的直接子类都是编译时异常,在语法上规定,编译时异常要求程序员在编写阶段必须处理,如果不处理的话,编译都无法通过。如果异常时runtimeException,那么程序猿在编写阶段对它不需要处理 ,和现实世界对比,编译时异常发生几率是比较高的,运行时异常发生几率是比较低的。
Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如:StackOverFlowError 栈内存溢出。或者 当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。.java.lang.Error: Throwable的子类,用于标记严重错误。应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。
3.编译时异常和运行时异常的区别:
在我们代码级别上,所有runtimeException的子类都是运行时异常,所有Exception的直接子类都是编译时异常,在语法上规定,编译时异常要求程序员在编写阶段必须处理,如果不处理的话,编译都无法通过。如果异常时runtimeException,那么程序猿在编写阶段对它不需要处理 ,和现实世界对比,编译时异常发生几率是比较高的,运行时异常发生几率是比较低的。
2.1 处理异常的两种方式
1. 声明抛出
2 捕捉 try……catch……
3.下面程序的执行结果.(异常的必考题)
public static void main(String[] args){
int i = m1();
System.out.println(i); //10
}
public static int m1(){
int i = 10;
try{
return i;
}finally{
i++;
System.out.println("m1的i=" + i); //11
}
//以上代码的执行原理(还有一个考点就是++运算符号单独使用,不参与运算操作,运算符前置后置结果是一致的,当参与运算,前置a++,先使用变量原有值参与运算操作,运算操作完成后,变量a的值自增或者自减1)
/*
int i = 10;
try{
int temp = i;
return temp;
}finally{
i++;
System.out.println("m1的i=" + i); //11
}
4.JAVA异常处理中一个try后必须得有一个catch块吗?在什么情况下使用try cacth finally语句。请举例说明:
(1)catch 可以有多个,也可以没有,每个catch可以处理一个特定的异常
finally可以没有,也可以只有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。如关闭数据库连接等等。
在语法上你有一个try后有一个finally块也是能通过编译的也是正确的,所以try后只有catch(){}或只有finally{}或者两者都有都是可以的。但如果后面没有catch块也没有finally块而只有try那是编译不过去的是不正确的。
(2)
举例:有可能抛出异常时,比如你编写了一个程序,要读取某一个文件中的内容,但是这个文件有可能存在,也有可能不存在,那就是一种异常,在编程时是无法预料的,还有就是线程在wait或sleep时也会抛出异常
try catch是程序语言本身提供的一种异常处理机制,你大多数写的代码都是要调用底层的api,而这些api的作者在开发api时,很清楚api在使用的过程中会有哪些非正常情况发生,因此他要通知api的调用者,至于对于这种非正常情况怎么处理,就交给了api的调用者。
你是写代码的,你要调用api,因此你就是api的调用者,你也应该处理api本身存在的非正常情况,那你怎么处理这些非正常状况,这就是你提到的try catch的作用了,它就是干这事的。至于api会有哪些非正常情况发生,需要查api的帮助文档;这些非正常状况怎么处理,这又取决于问题逻辑了,跟实际需求有关系。
举例代码:
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
//程序执行到此处发生了FileNotFoundException类型的异常.
//JVM会自动创建一个FileNotFoundException类型的对象,将该对象的内存地址赋值给catch语句块中的e变量.
FileInputStream fis = new FileInputStream("abc");
//上面的代码出现了异常,try语句块的代码不再继续执行,直接进入catch语句块中执行。
System.out.println("TTTTTTT");
fis.read();
}
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行
System.out.println("读取的文件不存在!");
//FileNotFoundException将Object中的toString方法重写。
System.out.println(e); //java.io.FileNotFoundException: abc (系统找不到指定的文件。)
}
finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
网络编程面试题
简单介绍TCP和UDP的不同之处以及各自的适用范围?
UDP是User Datagram Protocol 的简称,称为用户数据报协议
UDP是无连接通信协议,即在数据传输时,数据的发送端盒接收端不建立逻辑连接。简单来说,当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在,就会发送数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频和普通数据的传输,例如视频会议都是用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
但时在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议,UDP的交换过程如下图所示
以上归纳:(1)将数据及源和目的封装成数据包,不需要建立连接。(2)每个数据报的大小限制在64K内(3)因无连接,是不可靠协议 (4)不需要建立连接,速度快
TCP是Transmission Control Protocol 的简称,称为传输控制协议。
TCP协,议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手:客户端向服务器发出连接请求,等待服务器确认,第二次握手,服务器向客户端回送一个响应,通知客户端收到了连接请求,第三次握手,客户端再次向服务器端发送确认信息,确认连接,
由于TCP协议的面向连接特性,它可以保证传输数据的安全性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被打开,因此,下载文件时必须采用TCP协议。
以上归纳:(1)建立连接,形成传输数据的通道。(2)在连接中进行大数据量传输 (3)通过三次握手完成连接,是可靠协议 (4)必须建立连接,效率会稍低
TCP和UDP的区别
TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。
而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
在JDK中提供了两个类用于实现TCP程序,一个ServerSocket类,用于表示服务器度端,一个socket类,用于表示客户端。
通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启了一个服务,并等待客户端的连接,然后创建代表客户端的socket对象向服务器端发送连接请求,服务器端响应请求,两者建立连接开始通信。(了解即可)
IP地址:用来唯一表示我们自己的电脑的,是一个网络标示
端口号:用来区别当前电脑中的应用程序的。
IP地址 :(1)网络中设备的标识。(2)不易记忆,可用主机名 (3)本地回环地址:127.0.0.1 主机名:localhost
端口号:(1)用于识别进程的逻辑地址,不同的进程的标识。(2)有效端口:0~65535,其中0~1024系统使用或者保留端口。(了解即可)