第一部分 Java基础
第二部分 Java进阶

Java经典面试题及答案(140~146企业真题)

141、继承(inheritance)的优缺点是什么?

● 优点:

新的实现很容易,因为大部分是继承而来的。很容易修改和扩展已有的实现。

● 缺点:

打破了封装,因为基类向子类暴露了实现细节,白盒重用,因为基类的内部细节通常对子类是可见的,当父类的实现改变时可能要相应的对子类做出改变,不能在运行时改变由父类继承来的实现。由此可见,组合比继承具有更大的灵活性和更稳定的结构,一般情况下应该优先考虑组合。只有当下列条件满足时才考虑使用继承:子类是一种特殊的类型,而不只是父类的一个角色,子类的实例不需要变成另一个类的对象子类扩展,而不是覆盖或者使父类的功能失效。

142、为什么要使用接口和抽象类?

Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程。

● Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。 如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行。

● 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

● 结合以上描述中抽象类和Java接口的各自优势,精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java接口在最上面,然后紧跟着抽象类。这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract+接口名。

Java接口和Java抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。

使用Java接口和抽象Java类进行变量的类型声明、参数的类型声明、方法的返回类型说明,以及数据类型的转换等。而不要用具体Java类进行变量的类型声明、参数类型声明、方法的返回类型说明,以及数据类型的转换等。如果你写的代码里面连一个接口和抽象类都没有的话,也许我可以说你根本没有用到任何设计模式,任何一个设计模式都是和抽象分不开的,而抽象与Java接口和抽象Java类又是分不开的。

接口的作用,就是标识类的类别。把不同类型的类归于不同的接口,可以更好的管理他们。把一组看如不相关的类归为一个接口去调用。可以用一个接口型的变量来引用一个对象。

143、什么叫对象持久化(object persistence),为什么要进行对象持久化?

持久化的对象,是已经存储到数据库或保存到本地硬盘中的对象,我们称之为持久化对象。为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。我们可以使用Java提供的序列化机制。

简单说对象序列化是将对象状态转换为可保持或传输的格式的过程。什么情况下需要序列化:

● 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

● 当你想用套接字在网络上传送对象的时候;

● 当你想通过RMI传输对象的时候;

对象要实现序列化,是非常简单的,只需要实现Serializable接口就可以了。

144、JavaScript有哪些优缺点?

● javascript的优点:

javascript 减少网络传输:在javascript这样的用户端脚本语言出现之前,传统的数据提交和验证工作均由用户端浏览器通过网络传输到服务器开发上进行。如果数据量很大,这对于网络和服务器开发的资源来说实在是一种无形的浪费。而使用javascript就可以在客户端进行数据验证。

javascript方便操纵html对象:javascript可以方便地操纵各种页面中的对象,用户可以使用javascript来控制页面中各个元素的外观、状态甚至运行方式,javascript可以根据用户的需要“定制”浏览器,从而使网页更加友好。

javascript支持分布式应用运算:javascript可以使多种任务仅在用户端就可以完成,而不需要网络和服务器开发的参与,从而支持分布式应用的运算和处理。

● javascript的局限性:

各浏览器厂商对javascript支持程度不同:目前在互联网上有很多浏览器,如firefox、internet explorer、opera等,但每种浏览器支持javascript的程度是不一样的,不同的浏览器在浏览一个带有javascript脚本的主页时,由于对javascript的支持稍有不同,其效果会有一定的差距,有时甚至会显示不出来。

“web 安全性”对javascript一些功能牺牲:当把javascript的一个设计目标设定为“web安全性”时,就需要牺牲javascript的一些功能。因此,纯粹的javascript将不能打开、读写和保存用户计算机上的文件。其有权访问的唯一信息就是该javascript所嵌入开发的那个web主页中的信息,简言之,javascript将只存在于它自己的小小世界—web主页里。

145、JSP有什么特点?

JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准

JSP 技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。

在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送email等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无 Java Applet,甚至无Frame。

● JSP 的优点:

对于用户界面的更新,其实就是由Web Server进行的,所以给人的感觉更新很快。

所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。

客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。

146、什么叫脏数据,什么叫脏读(Dirty Read)?

脏数据在临时更新(脏读)中产生。事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A 更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”的值,就是脏数据。

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。