问:Java中的两种异常类型是什么?他们有什么区别?
答:Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。
不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。
问:Java中Exception和Error有什么区别?
答:Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。
问:throw和throws有什么区别?
答:1、throws出现在方法方法签名;而throw出现在方法体;
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由方法去处理异常,真正的处理异常由方法的上层调用处理。
问:什么情况下使用异常处理?
答:简单说就是,方法无法满足调用方的期望的时候使用异常。
放在现实场景中就是,当上级交待给你的任务无法完成的时候,使用异常。
异常的目的是将这个问题传递给调用方解决。
就像在现实环境中,搞不定的时候找老板一样。
问:异常处理完成以后,Exception对象会发生什么变化?
答:Exception对象会在下一个垃圾回收过程中被回收掉。
问:什么是JDBC?
答:JDBC是允许用户在不同数据库之间做选择的一个抽象层。JDBC允许开发者用Java写数据库应用程序,而不需要关心底层特定数据库的细节。
问:PreparedStatement比Statement有什么优势?
P
答:PreparedStatements是预编译的,因此,性能会更好。同时,不同的查询参数值,PreparedStatement可以重用。
问:数据库连接池是什么意思?
答:像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。
问:RMI中的远程接口(Remote Interface)扮演了什么样的角色?
答:远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口。远程对象必须要直接或者是间接实现远程接口。实现了远程接口的类应该声明被实现的远程接口,给每一个远程对象定义构造函数,给所有远程接口的方法提供实现。
问:什么是Servlet?
答:Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。
问:解释下Servlet的生命周期。
(流程图)
答:对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。然后,Servlet对象通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet(这里应该是Servlet而不是server)的destroy()方法把Servlet删除掉。
问:什么是Applet?
答:Java Applet是能够被包含在HTML页面中并且能被启用了Java的客户端浏览器执行的程序。Applet主要用来创建动态交互的web应用程序。
问:当Applet被载入的时候会发生什么?
答:首先,创建Applet控制类的实例,然后初始化Applet,最后开始运行。
问:Applet和普通的Java应用程序有什么区别?
答:Applet是运行在启用了Java的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序。但是,它们都需要有Java虚拟机。进一步来说,Java应用程序需要一个有特定方法签名的main函数来开始执行。Java Applet不需要这样的函数来开始执行。最后,Java Applet一般会使用很严格的安全策略,Java应用一般使用比较宽松的安全策略。
问:Applet安全管理器是什么?它会做哪些工作?
答:Applet安全管理器是给Applet施加限制条件的一种机制。浏览器可以只有一个安全管理器。安全管理器在启动的时候被创建,之后不能被替换覆盖或者是扩展。
问:如何权衡是使用无序的数组还是有序的数组?
答:有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。
问:Java垃圾回收什么时候执行
答:Java垃圾回收是jvm自动执行的,不是人为操作的,所以当不存在对某对象的任何引用时,该对象就处于被jvm回收的状态,并不是马上予以销毁。
问:System.gc()和Runtime.gc()会做什么事情?
答:这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。
问:创建线程有几种不同的方式?你喜欢哪一种?为什么?
答:有三种方式可以用来创建线程:
1、继承Thread类
2、实现Runnable接口
3、应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。