JAVA面试题总结

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域)

关于异常的的面试题

JAVA面试题总结_第1张图片
java异常结构继承图

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系统使用或者保留端口。(了解即可)


你可能感兴趣的:(JAVA面试题总结)