Java面试常见知识点
2015-07-02 12:04
706 查看
注:本文是为方便自己复习所写,如有错误,请不吝赐教,谢谢。不定期更新。
1)抽象:是将一类对象的共同特征总结出来并构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:是从已有的类得到继承信息并创建新类的过程。提供继承信息的类被称为父类(超类、基类),得到继承信息的类被称为子类(派生类)。
3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
4)多态:是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
堆:堆空间保存通过new关键字创建出来的对象
静态存储区:静态存储区用来保存程序中的字面上量(literal)如直接书写的100,“Java”等,以及使用static关键字修饰的变量
重载发生在一个类中,是单个类多态性的表示,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载,重载不考虑返回类型;
重写发生在子类与父类之间,是类之间多态性的表示,重写要求子类被重写方法与父类被重写方法有相同的返回类型和参数表示。
抽象类:一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;抽象类中可以定义构造器,可以有抽象方法和具体方法;抽象类中的成员可以是private、默认、protected、public的:抽象类中可以定义成员变量;有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
接口:接口比抽象类更加抽象,接口中不能定义构造器而且其中的方法全部都是抽象方法;接口中的成员全都是public;接口中定义的成员变量实际上都是常量,需要使用static final关键字修饰并且需要初始化。
GC使用的算法简介:Java平台对堆内存回收和再利用的基本算法被称为标记和清除,但是Java对其进行了改进,采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:
1)伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。
2)幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
3)终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。
2)Exception用于用户程序可以捕获并期望被捕获的异常情况,是一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。
3)Error定义了不期望被用户程序捕获的异常,比如内存溢出,不可能指望程序能处理这样的情况
Exception 表示需要捕捉或者需要程序进行处理的异常,
2)相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
3)LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
1)“==”用于基本数据类型的时候,通过比较他们实际的值来判断是否相同;而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。
2)equal方法是java.lang.Object类的方法,也就是每个Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方法来判断两个对象是否相等,其中默认的方式与“==”相同。另外,java.lang.String类是一个特殊的类,它不可以被继承,它的equal方法用来比较字符串中的字符序列是否完全相等。
super关键字是用来访问父类的成员的,它可以用于调用被子类重写的父类成员方法,也可以用来调用父类的构造方法。使用super关键字加括号的形式来为父类的构造方法提供参数,通过参数的数目和类型来决定调用哪一个构造方法,如果调用的是父类的无参数的方法(可以是系统提供的默认方法,也可以是程序员提供的无参数的构造方法),那么可以不必显式地使用super()。super()必须放在子类构造方法的第一行。
模型
模型表示数据和业务规则,它往往代表了一个应用程序的核心业务及其数据模型,由于应用于模型的代码只需写一次就可以被多个视图重用,所以把模型独立出来减少代码的重复性。
视图
视图是用户看到并与之交互的界面,可以是各种各样的,例如JSP、HTML等,甚至文本字符也可以。
控制器
接受用户的输入并调用模型和视图去完成用户的需求,所以当点击web页面中的超链接和发送HTML请求表单时,控制器(如Servlet)本身不输出任何内容和做任何处理,它只是接受请求并决定调用哪个模型部件去处理请求,然后确定使用哪个视图来显示模型处理返回 的数据。
1. 面向对象的特征有哪些?
面向对象的特征主要有抽象、继承、封装、多态。1)抽象:是将一类对象的共同特征总结出来并构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:是从已有的类得到继承信息并创建新类的过程。提供继承信息的类被称为父类(超类、基类),得到继承信息的类被称为子类(派生类)。
3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
4)多态:是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
2. 访问控制关键字public、private、protected以及无关键字(default)的区别
区别如下(“Y”表示允许访问,仔细观察,这个表格具有“阶梯性”)作用域 | 当前类 | 同一个包中的类 | 子类 | 其他 |
---|---|---|---|---|
public | Y | Y | Y | Y |
proteccted | Y | Y | Y | N |
default | Y | Y | N | N |
private | Y | N | N | N |
3. Java的基本数据类型
Java的数据类型只有8个,基本(整数、浮点数)类型都是有符号数,这点需要与C/C++中的表示区别开来。基本类型 | byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|---|
内存字节数 | 1 | 2 | 4 | 8 | 4 | 8 | 2 | 1 |
4. 内存中的栈(stack)、堆(heap)和静态存储区的区别
栈:栈空间用来保存基本类型变量、对象的引用和函数调用现场,栈空间操作最快但一般比较小堆:堆空间保存通过new关键字创建出来的对象
静态存储区:静态存储区用来保存程序中的字面上量(literal)如直接书写的100,“Java”等,以及使用static关键字修饰的变量
5.重载(Overload)和重写(或覆盖)(Override)的区别
方法的重载和重写都是实现多态的方式。区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。重载发生在一个类中,是单个类多态性的表示,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载,重载不考虑返回类型;
重写发生在子类与父类之间,是类之间多态性的表示,重写要求子类被重写方法与父类被重写方法有相同的返回类型和参数表示。
6.构造器(constructor)不能被重写(override),但是可以被重载(overload)
7.抽象类(abstract class)和接口(interface)的区别
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。抽象类:一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;抽象类中可以定义构造器,可以有抽象方法和具体方法;抽象类中的成员可以是private、默认、protected、public的:抽象类中可以定义成员变量;有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
接口:接口比抽象类更加抽象,接口中不能定义构造器而且其中的方法全部都是抽象方法;接口中的成员全都是public;接口中定义的成员变量实际上都是常量,需要使用static final关键字修饰并且需要初始化。
8.Java的垃圾收集器(Garbage Collector)
GC的原理:Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为”不可达的”。GC将负责回收所有”不可达”对象的内存空间。GC使用的算法简介:Java平台对堆内存回收和再利用的基本算法被称为标记和清除,但是Java对其进行了改进,采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:
1)伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。
2)幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
3)终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。
9.错误(Error)和异常(Exception)的区别
1)Exception和Error都是Throwable的子类。2)Exception用于用户程序可以捕获并期望被捕获的异常情况,是一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。
3)Error定义了不期望被用户程序捕获的异常,比如内存溢出,不可能指望程序能处理这样的情况
Exception 表示需要捕捉或者需要程序进行处理的异常,
10.ArrayList和LinkedList的区别
1)ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。2)相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
3)LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
11.equal方法和“==”的区别
equal方法和“==”两者均表示“相等”之意,但是他们相等的含义却有所区别。1)“==”用于基本数据类型的时候,通过比较他们实际的值来判断是否相同;而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。
2)equal方法是java.lang.Object类的方法,也就是每个Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方法来判断两个对象是否相等,其中默认的方式与“==”相同。另外,java.lang.String类是一个特殊的类,它不可以被继承,它的equal方法用来比较字符串中的字符序列是否完全相等。
12.super关键字的理解
首先需要说明的是,所有的类在没有提供其他构造方法的时候,都会由系统提供一个默认的无参数的构造方法,一旦程序员提供构造方法,那么系统不会再提供默认构造方法,当然程序员也可以提供不带参数的构造方法。super关键字是用来访问父类的成员的,它可以用于调用被子类重写的父类成员方法,也可以用来调用父类的构造方法。使用super关键字加括号的形式来为父类的构造方法提供参数,通过参数的数目和类型来决定调用哪一个构造方法,如果调用的是父类的无参数的方法(可以是系统提供的默认方法,也可以是程序员提供的无参数的构造方法),那么可以不必显式地使用super()。super()必须放在子类构造方法的第一行。
13.Java对象的序列化和反序列化
14.MVC设计模式
MVC是一种设计模式,它要求应用程序的输入、处理和输出三者分离。使用MVC应用程序被分为三个核心部件:模型(Model)、视图(View)、控制器(Controller)。模型
模型表示数据和业务规则,它往往代表了一个应用程序的核心业务及其数据模型,由于应用于模型的代码只需写一次就可以被多个视图重用,所以把模型独立出来减少代码的重复性。
视图
视图是用户看到并与之交互的界面,可以是各种各样的,例如JSP、HTML等,甚至文本字符也可以。
控制器
接受用户的输入并调用模型和视图去完成用户的需求,所以当点击web页面中的超链接和发送HTML请求表单时,控制器(如Servlet)本身不输出任何内容和做任何处理,它只是接受请求并决定调用哪个模型部件去处理请求,然后确定使用哪个视图来显示模型处理返回 的数据。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统