java常见技术面谈题及答案

上传人:飞*** 文档编号:41434977 上传时间:2018-05-29 格式:DOC 页数:26 大小:213.50KB
返回 下载 相关 举报
java常见技术面谈题及答案_第1页
第1页 / 共26页
java常见技术面谈题及答案_第2页
第2页 / 共26页
java常见技术面谈题及答案_第3页
第3页 / 共26页
java常见技术面谈题及答案_第4页
第4页 / 共26页
java常见技术面谈题及答案_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《java常见技术面谈题及答案》由会员分享,可在线阅读,更多相关《java常见技术面谈题及答案(26页珍藏版)》请在金锄头文库上搜索。

1、1.请解释一下你对面向对象的理解,重点解释封装、继承、多态的理解;面对对象的优点面对对象的优点a)与人类习惯的思维方法一致面向对象的软件技术以对象(对象(Object)为核心)为核心,用这种技术开发出的软件系统由对象组成。对象是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数据施加的操作(表示对象的动态行为) ,封装在一起所构成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。 面向对象的开发方法与传统的面向过程的方法有本质不同,这种方法的基本原理是,使用现实世界的概念抽象地思考概念抽象地思考问题从而自然地解决问题。它强调模拟现实世

2、界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的概念应用领域的概念去思考。在面向对象的开发方法中,计算机的观点是不重要的,现实世界的模型才是最重要的。面向对象的软件开发过程从始至终都围绕着建立问题领域的对象模型来进行:对问题领域进行自然的分解,确定需要使用的对象和类,建立适当的类等级,在对象之间传递消息实现必要的联系,从而按照人们习惯的思维方式建立起问题领域的模型,模拟客观世界。b)软件复用性用已有的零部件装配新的产品,是典型的重用技术,重用是提高生产效率的一个重要方法。面向对象的软件技术在利用可重用的软件成分构造新的软件系统时,体现出较大的灵活性。它可利用两种方法

3、重复使用一个类:一种方法是创建该类的实例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。c)可维护性好面向对象的软件技术符合人们习惯的思维方式,因此用这种方法所建立的软件系统容易被维护人员理解,他们可以主要围绕派生类来进行修改、调试工作。类是独立性很强的模块,向类的实例发消息即可运行它,观察它是否能正确地完成要求它作的工作,对类的测试通常比较容易实现,如果发现错误也往往集中在类的内部,比较容易调试。 总之,面向对象技术的优点并不是减少了开发时间,相反,初次使用这种技术开发软件,可能比用传统方法所需时间还稍微长一点。开发人员必须花很大精力去分析对象是什么,每个对象应该承担什么责任

4、,所有这些对象怎样很好地合作以完成预定的目标。这样做换来的好处是,提高了目标系统的可重用性减少了生命周期后续阶段的工作量和可能犯的错误,提高了软件的可维护性。此外,一个设计良好的面向对象系统是易于扩充和修改的,因此能够适应不断增加的新需求。以上这些都是从长远考虑的软件质量指标。面向对象特点理论理解面向对象特点理论理解面向对象技术具有 3 个基本特征。封装、继承、多态。1) 封装这是指将一个数据和与这个数据有关的操作集合在一起形成一个能动的实体即对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部接口进行访问对象即可。它有 2 个基本前提:一是对象必须是完整的能描述整个问题的各个方面,二

5、是私有性,即只具有一些 set 和 get 方法进行对象的行为处理,封装使程序语言更加清晰健壮有力。2) 继承继承表现的是类与类之间的关系,它是指 2 个类型具有共同的特性和行为,但是一个类型可能包括比另外一个类型更多的特性,继承则表示基类与派生类之间的相似性,派生类主要继承基类中非私有的特性。继承主要是提供一些表示共性的方法。3)多态多态是指相同的行为在不同的类中有不同的实现,更彻底的说,就是以相同的指令 换取不同的函数,在 java 程序中,多态的实现有 2 种方式,一是对象的多态,主要是指对象的转型,包括向上转型和向下转型。二是指方法的多态。包括方法的重载和复写,方法的重载是指方法具有相

6、同的方法名,但参数的类型,顺序或个数不同,对返回值类型不做限制,方法的重载主要是解决 java 程序中命名空间的问题,方法的复写,只要发生在父类和子类之间,子方法必须和父方法形式上完全相同,但访问权限不得小于父类的访问权限。应用案例应用案例继承的案例:继承的案例:在我的几个项目中,都使用到了面向对象的基本特性。比如项目使用的 SSH 框架技术,就是面向对象的很好体现,例如 Struts,我们自己写的 Action 类都必须继承 Action 这个基类,还有那些负责数据传递的 ActioForm 也必须继承 Struts 框架中的 ActionForm 这个基类等等,这些都是继承的体现封装的案例

7、:封装的案例:我们所写的那些 POJO 类中主要是用来进行数据的封装和传递,这体现了封装;多态在struts 中也得到很好的体现,比如说我们在 Action 中进行业务处理时要调用的 execute 方法,就是对Struts 中 execute 方法的复写,多态的案例:多态的案例:另外在接受数据时,所作的 ActionForm 的转换则是进行对象的向下转型,这些体现了面向对象的多态性。2.请说一下你的抽象类的理解,包括抽象类的好处,抽象类的语法,抽象类的使用案例;抽象类的好处抽象类的好处抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念抽象概念,是对一系列看上去不同,但是本质上

8、相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念 在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。抽象类的理解抽象类的理解a)抽象类抽象类(abstract class)就是一般含有声明存在的方法,却没有实现该方法的类。它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。 b)抽象类的子类:抽象类的子类:抽象类的子类继承抽象类,如果在子类实现了

9、抽象类的全部的抽象方法,是可是直接实例化的,否则它们也是抽象类。c)抽象类的实例:抽象类的实例:不能直接通过 NewNew 关键字来创建抽象类抽象类的实例;然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。d)抽象类的使用限制:抽象类的使用限制:不能有抽象构造函数或抽象静态方法。应用案例应用案例抽象类和接口是 java 面向体系中非常重要的两个元素。但在使用时,接口使用的要多一些,因为接口可以更好地隐藏实现的细节,降低系统的耦合度,从而提高系统的可扩展性。比如,在项目中,我们使用的设计模式中,如工厂模式,DAO 模式,Spring 的核心即依赖注入模式等,都大量使用了接口

10、。而抽象类只在模板模式中有一些比较局限的应用。如 Struts2.0 中就提供了一个叫做 ActioSupport 的接口,改进了 struts1 中的面向抽象类(Action)编程为 面向接口编程。另外,面向接口编程更好地体现了 OCP 设计原则。3.请说一下你对接口的理解,包括接口的好处,接口的语法,接口的使用案例;接口的好处接口的好处a)使用接口可以更好的隐藏实现的细节,使系统的耦合降低,提高了可扩展性。b)接口可以多实现,可以弥补 Java只有单继承带来缺陷。a)接口的定义接口的定义:接口用Interface修饰,在接口中,所有方法都是抽象的。接口只可以定义static final成员

11、变量。接口是一系列方法的声明,是一些方法特征的集合,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)b)接口实现类接口实现类:当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。当部分实现为抽象类。c)c)接口的实例:接口的实例:接口不能直接实例化,可以通过实例化他的不同实现的子类,向上转型为接口的实例(面向对象提供面向接口编程面向对象提供面向接口编程),它可以在实现了该接口的类的任何对象上调用接口的方法。instanceofinstanceof 运算符可以用来决定某对象的类是否实现了接口应用案例应用案例抽象类和接口是 java 面向体系中非常重要的

12、两个元素。但在使用时,接口使用的要多一些,因为接口可以更好地隐藏实现的细节,降低系统的耦合度,从而提高系统的可扩展性。比如,在项目中,我们使用的设计模式中,如工厂模式,DAO 模式,Spring 的核心即依赖注入模式等,都大量使用了接口。而抽象类只在模板模式中有一些比较局限的应用。如 Struts2.0 中就提供了一个叫做 ActioSupport 的接口,改进了 struts1 中的面向抽象类(Action)编程为 面向接口编程。另外,面向接口编程更好地体现了 OCP 设计原则。4.抽象类和接口的区别;共同点:共同点:abstract class 和interface 是支持抽象类抽象类定义

13、的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。语法区别:语法区别:在抽象类中,可以有自己的数据成员,可以有非abstarct的成员方法,可以呦抽象方法;而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员) ,所有的成员方法都是abstract的。设设计计区区别别:abstract class在Java语言中体现了一种继承关系,要想使得 继承关系合理,父类和派生类之间必须存在“is-a“关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interfa

14、ce的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。5.String 和 StringBuffer 的区别;String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。而如果是使用 S

15、tringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的。6.Date,DateFormat, Calendar 等常见几个日期类的

16、区别;Date 类:类: Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从 GMT(格林尼治标准时间)1970 年, 1 月 1 日 00:00:00 这一刻之前或者是之后经历的毫秒数毫秒数。 Date类常用的两个构造函数:Date()无参数的构造函数创建的对象可以获取本地当前时间。Date(long time)使用一个从 GMT(格林尼治标准时间)1970 年, 1 月 1 日 00:00:00 这一刻之前或者是之后经历的毫秒数创建一个 Date 对象 DateFormat(类日期数据的定制格式类日期数据的定制格式):为了定制日期数据的输出格式,可以使用 DateFormat 的子类 SimpleDateFormat。SimpleDateFormat 有个常用构造方法:public SimpleDateFormat(String pattern) /pattern 指定输出格式 pattern 中可以有如下格式符:y,yy:用 2 位数字表示的“年“替换。yyyy:用 4 位数字表示的“年“替换。M,MM:用 2 位数字表示的“月“替换。MMM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号