到了大三的学期的暑假,即将面临找工作的考验。希望这份面试资料能够帮住大家学到自己的知识盲区。加油,我命由我不由天!!!
ArraryList:
Arrary(数组)是基于index(索引)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Arrary获取数据的时间复杂度是O(1),但要删除数据是要很大的开销,因为要重排所有的数据。
缺点:
数组初始化必须指定数组长度,否则报错。
例如:
int[] a=new int[4];
//或者
int c[]={1,2,3,4,5};
List:
List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,继承了Collection。
它提供好了俩个集合,ArraryList和LinkList。
ArraryList可以看作是一个可以自动增长容量的数组。
ArraryList的toArrary方法可以返回一个数组。
ArraryList的asArrary方法可以返回一个列表。
LinkList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.当然,这些对比都是指数据量很大或者操作很频繁。
1、两者父类不同
HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时
实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口
2、对外提供的接口不同
Hashtable比HashMap多提供了elments() 和contains() 两个方法。 elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。contains()方法判断该Hashtable是否包含传入的value。它的作containsValue()一致。事实上,contansValue() 就只是调用了一下contains() 方法。
3、对null的支持不同
HashTable:Key和Value都不能为null
HashMap:Key值可以为null,但只能有一个,是因为保证Key唯一性;可以有多给Key对应的value值为null。
4、安全性不同
HashMap是线程不安全的,在多线程并发的环境下,容易发生死锁等问题。
Hashtable是线程安全的,它的每个方法上都有synchronized 关键字,因此可直接用于多线程中。
5、初始容量大小和每次扩充容量大小不同
6、计算hash值的方法不同
Collection是集合的上级接口,包含:LinkList、ArraryList、Set、List、Vector、Stack。
Collections是集合类的一个帮助类, 它包含有各种有关集合操作的静态多态方法,用于实现对各种集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,务于Java的Collection框架。
**浅拷贝:**被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.
**深拷贝:**被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.
1、被final修饰的类不可以被继承
2、被final修饰的方法不可以被重写
3、被final修饰的变量不可以被改变,如果修饰引用,那表示引用不可变,引用指向的内容可变
4、被final修饰的方法,JVM会尝试内联来提高效率
5、被final修饰的常量,在编译阶段会存入常量池中。
static静态一般用于俩种,静态变量与静态方法。也就是说被static修饰的都为静态资源。
static也用于静态块,用于初始化操作:
public calss test{
static{
//执行相关操作
}
}
此外static也多用于修饰内部类,此时称之为静态内部类。
false,因为有些小数值不能完全精确的表现出来。
+= 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换.如:
byte a = 127;
byte b = 127;
b = a + b; // 报编译错误:cannot convert from int to byte
b += a;
ClassCastException(类型转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针异常)
ArraryStoreException(数据存储异常,操作数组的类型不一致)
SQLException(sql语句错误)
对于不想进行序列化的变量,使用 transient 关键字修饰。
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方法
Java 中 IO 流分为几种?
按照流的流向分,有输出流与输入流。
按照操作单元划分,有字符流和字节流。
按照流的角色划分,有处理流和节点流。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
1、定义:
反射的机制是在运行时,对于任何一个类,都能够知道这个类的属性和方法。
对于任意一个对象,都能调用任意的方法。在java中,只要给定类的名字,都能获取类的所有信息。
2、哪里会用到反射机制?
jdbc就是典型的反射
Class.forName('com.mysql.jdbc.Driver.class');//加载MySQL的驱动类
3、反射的实现方式:
第一步:获取Class对象,有4中方法:
(1)Class.forName(“类的路径”);
(2)类名.class
(3)对象名.getClass()
(4)基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象
4、反射机制的优缺点
优点:
1、能够运行时动态获取类的实例,提高灵活性。
2、与动态编译结合
缺点:
1、使用反射的性能较低,需要解析字节码,将内存中的对象进行解析。
list:对付顺序的好帮手,list接口储存一组不唯一(可以有多个元素引用相同的对象),有序的对象。
set:注重独一无二的性质,不允许重复的集合,不可以多个元素引用同一个对象。
map:用key来搜索的专家,使用键值对来存储,map会维护key对应的值。俩个不同的key可以对应相同的对象,但不能有俩个相同的key。