1、抽象类和接口的区别
抽象类用来捕捉子类的公共特性,不能被实例化,只能用作被子类继承的超类。
接口是抽象方法的集合,若一个类实现了某接口,就必须实现接口中的所有抽象方法。
参数 | 抽象类 | 接口 |
---|---|---|
默认方法实现 | 可以有默认方法 | 无默认方法,JAVA1.8之后有默认方法 |
实现方式 | extends | implement |
继承性态 | 单继承 | 多实现 |
构造器 | 可以有构造器 | 无构造器 |
2、java的异常有哪几类?分别怎么使用?
编译时异常:
IOException
SQLException
parseException
CloneNotSupportException
运行时异常:
NullpointerException
ArrayIndexOutOfBoundsException
NoClassDefFoundException
ClassCastException
OutOfMemoryException
ArithmeticException
IllegalArgumentException: 非法参数异常
IllegalThreadStateException: 非法线程状态异常
NumberFormatException: 数据格式异常
PatternSyntaxException:
使用:
1、throws
2、try{}catch(Exception e){}
3、常用的集合类有哪些?比如List如何排序?
Collection:
List:
ArrayList
LinkedList
Set:
HashSet
LinkedHashSet
SortedSet
Map:
HashMap
LinkedHashMap
ConcourrentHashMap
List如何排序:
要排序的对象实现Comparable接口
Collections.sort()方法
4、内存溢出是怎么回事?请举一个例子?
OutOfMemroyException:PermGen space
启动程序时加载信息过大,超过Permanment Generation space空间大小
OutOfMemoryException:Java heap space
程序运行过程中,很多对象没有被垃圾回收机制回收
StackOverFlowError
栈中保存对象过多,可能出现在递归方法调用过多的情况
5、hashCode方法的作用
在不允许重复的集合中,比如set、hashTable、HashMap中,在put过程中,保证数据不重复,先通过比较hashcode,若hashcode不同,则两个对象肯定不一样,若hashcode相同,才调用equals方法,一定程度上提高put的速率。
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
先判断key是否为空
不为空的话,生成hashcode
根据hashcode找到对应桶的位置
对应位置上若有key相同的数据,则覆盖原数据
添加数据到对应的位置
6、保证hashmap的线程安全
1、使用hashTable,相应的方法都加了锁
2、java.util.Collections.synchronizedMap(Map)对map进行封装
3、使用concurrentHashMap
7、创建一个类的实例都有哪些办法?
new
反射
类实现克隆接口,克隆一个实例
实现序列化接口的类,通过IO流反序列化读取一个类,获得实例。
8、Servlet的生命周期
1、加载和实例化
2、初始化
3、调用service方法
4、销毁
9、如何用Java分配一段连续的1G的内存空间?需要注意些什么?
ByteBuffer.allocateDirect(102410241024)
10、什么是java序列化,如何实现java序列化?(写一个实例)?
序列化是java处理对象流的一种机制,可对序列化后的对象进行读写操作,也可在网路进行传输。
实现java序列化,对象要实现serializable接口,该对象的类名、签名、字段、数值都会被编码
11、java使用jdbc连接数据库的步骤
获得数据库连接驱动Driver
获得数据库连接Connection
获得statement对象
用statement对象执行数据库操作
处理执行结果
若有异常,进行异常处理
不管是否有异常都要关闭JDBC对象,以释放JDBC资源,requestSet、statement、connection
12、select count(),count(1), count(col_name) from dual 区别
1)、count(col_name),统计的col_name中不会统计null,其他两者会统计null
2)、有主键,count(主键)比较快
3)、一般情况下count(1)比count()快,但是表中只有一个列,count(*)比较快
4)、在InnoDb中执行select count(1) from table 会做行数的统计,而MyISAM中,会直接读取已存取好的总数。但是select count(1) from table where col='' ,加了筛选条件之后二者是一样的去统计行数。
网友评论