基础

作者: 大树8026 | 来源:发表于2018-12-18 23:57 被阅读0次

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

    相关文章

      网友评论

          本文标题:基础

          本文链接:https://www.haomeiwen.com/subject/wxwrkqtx.html