zoukankan      html  css  js  c++  java
  • java后台知识整理

    最近老猿进行了一场面试,面试情况目前未知,老猿根据面试问题进行了一次整理,

    java对象的引用

      强引用,弱引用,软引用,虚引用

    java获取反射的三种方法

      Student stu = new Student();

    • 通过new对象的方法    Class class1 = stu.getClass();
    • 通过路径的反射机制   Class  class2 = Class.forname("package.Student");
    • 通过类名的反射机制   Class  class3 = package.Student.class

    Conllection和Conlections的区别

      Conllection是一个接口,它提供了对集合对象操作的通用基本方法;

      Conlecttions是一个针对集合类的帮助类,提供了一些列的静态方法实现对各种集合的搜索,排序,线程安全等操作;

    LinkedHashMap的应用

      基于LinkedHashMap访问顺序的特点,可以创建一个LRU最近最少使用的简单缓存。

    Cloneable接口的实现原理

      Cloneable接口是java开发中常见的接口,它的作用是使一个类的实例,能够将自身拷贝到另一个新的实例中。

      拷贝包括深拷贝和浅拷贝,如果不重新接口中的clone()方法,那就是浅拷贝。浅拷贝只是对对对象引用的拷贝,深拷贝是将复制成一个新对象。

    hashmap,hashtable,ConcurrentHashmap

    hashmap是一个散列通,是数组,链表,红黑树的结合,存储是k,v模式的,jdk1.7采用散列链表的形式,基于一个数组多个链表来实现的,jdk1.8采用的是node数组来存储的,node可能是链表,也可能是红黑树

    增加元素使用put()方法,首先计算出k的哈希值,得出下标,如果没有发生碰撞,将value直接放入桶中,如果发生碰撞,以链表的方式链接到后面,当链表的长度超过8时,转成红黑树处理,链表长度低于6时,转回链表,如果该节点已经存在值替换旧值。

    查找元素使用get()方法,hashmap会根据k的哈希找到对应的通位置,调用keys.equals()找到正确的节点,从而找到正确的元素

    hashmap的好处?

    hashmap非线程安全的,速度比较快,并且可以接受null值和键,使用了数组,链表,红黑树的数据结构查询和修改速度都很快

    为什么不使用二叉查找树而使用红黑树呢?

    二叉查找树在特殊的情况下回变成链表,这种情况遍历就很慢,而红黑树不会,红黑树会通过左旋,右旋,变色等这些操作保持平衡,引入了红黑树就是为了提升查询效率,解决链表的查询深度的问题,但是为了保持平衡肯定会消耗一些资源,消耗的资源肯定要小于链表所消耗的,所以在链表长度大于8 的时候才会使用红黑树,如果链表长度很短的话根本就不需要使用红黑树,反而会更慢。

    hashtable

    hashtable是数组和链表方式存储,默认容量为11,是线程安全的,put的时候也是计算哈希值,如果没有值直接存入,有值则对链表进行遍历找到了进行替换旧值,没有找到继续,最终将新元素加入到链表头中

    final,finally,finalize

    final可以修饰类,方法,变量,修饰的类不能被继承,修饰的方法不能被重写,修饰的变量不能被修改

    finally 是try-catch代码块中最后执行的代码,无论是否发生异常,都会被执行,一般用来关闭也行资源代码,也有做定时任务的执行(Euraka服务端的心跳定时任务就是写在finally中提交的)

    finallize 是Object中调用System.gc()方法中确定对象是否被回收的一个方法

     

    hashmap与hashtapble的区别

    初始容量不一样hashmap为16,hashtable为11

    hashmap不是线程安全的,hashtable是线程安全的

    效率不同hashmap没有加synchronized,所以效率会比较快

    扩容不同,hashtable是当超过总元素个数加载因子数时,扩容为原来的2倍 + 1,并重新散列,hashmap超过容量加载因子数是,扩容2倍,并重新排序

    ConcurrentHashMap

    ConcurrentHashMap的最大特点是引用了CAS,CAS有3个操作数,内存值v,旧的预存值a,新值b,只有当且仅当v=a的时候,才会将v更新为b,否则什么都不做,他也是线程安全的

    可以使用ConcurrentHashmap来代替hashtable么?

    可以的,hashtable是synchronized他会锁住整个map,而concurrentHashMap的同步性更好,他仅仅是根据同步级别对一部分map进行上锁,当hashtable的大小增加到一定长度的时候性能会下降,而concurrentHashMap引入了分割,不论他变得多大都不会影响性能

    list

    list是有序的

    list中只有vector是线程安全的,ArrayList和LinkedList都不是线程安全的,通过实现线程安全工具类Collections.synchronizedList(new ArrayList())方法来完成

    ArrayList的底层是数据,LinkedList的底层是链表

    ArrayList适合使用查询情况较多的场景,LinkedList适合使用插入较多的场景

    可以使用sort()方法来给list排序,或者Collections.sort()方法也可以

    通过toArrat()这个方法转为数字,通过Array.asList(array)方法转成list这个方法是固定的,不允许增加和扩容,通过使用 new ArrayList(Array.asList(array))方法转成list是不固定的

  • 相关阅读:
    git创建版本库
    DataSet的加密解密
    在InstallShield中加密字符串,在C#中解密
    asp.net后台长时间操作时,向前台输出“请等待"信息的方法
    DataSet的加密解密(续)
    XXTEA加密算法的InstallShield 脚本实现
    c#如何监视文件或者文件夹的变化
    wpf制作毛玻璃效果按钮的代码
    WPF中用于Path的Geometry MiniLanguage
    如何在非英文环境中正确显示数字
  • 原文地址:https://www.cnblogs.com/zhuanhangdelaoyuan/p/13113665.html
Copyright © 2011-2022 走看看