基础

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='' ,加了筛选条件之后二者是一样的去统计行数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容