zoukankan      html  css  js  c++  java
  • java基础知识4

    1.volatile保证有序性和可见性。这跟java内存模型有关,

    volatile保证了不同线程对共享变量操作时的可见性,也就是说当一个线程修改了volatile修饰的变量,另外一个线程会立即看到最新的值

    volatile禁止JVM和处理器对使用volatile修饰的关键字进行指令进行重排序(比如:a=1;b=2;c=a+b这三个操作,第一步(a=1)和第二步(b=2)由于不存在数据依赖关系, 所以可能会发生重排序,但是c=a+b这个操作是不会被重排序的,因为需要保证最终的结果一定是c=a+b=3。)

    2.hascode()和equals()有什么区别:(1)相等的对象必须具有相等的哈希码或者是散列码 (2)如果两个对象hashcode相同,它们并不一定相同

    3.六原则一法则:单一职责、开闭原则、依赖倒转原则、里式替换原则、接口隔离原则、合成聚合复用原则、迪米特法则

     单一原则:一个类只做他该做的事情,最终实现“高内聚,低耦合”

     开闭原则:当我们需要对一个系统增加新功能时,只需要从原来的系统派生出一些新类就行,不需要修改原来的一行代码(1)一个系统如果没有抽象类或接口系统就没有扩展点(2)封装可变性

     依赖倒转原则:声明方法的参数类型,返回类型,变量的引用类型时,尽可能使用抽象类而不用具体类型

     里式替换原则:任何时候子类型都可以替换掉父类型(子类一定增加能力而不是减少父类能力)

     接口隔离原则:接口要小而专,绝不能大而全(一个接口只描述一种能力)

     合成聚合复用原则:优先使用聚合或合成关系复用代码。

     迪米特法则:又叫最少知识原则,一个对象应对其他对象尽可能的少的了解

    4.extends和super泛型限定符

     <extend Fruit>上界 list只能get不能add,表示所有继承Fruit的子类,但不确定是哪个子类,但就是把所有的子类向上转型为Fruit。

     <super Apple>下界 list只能add不能get,表示Apple的所有父类;

     归根结底可以用一句话表示,那就是编译器可以支持向上转型,但不支持向下转型

    5.什么是泛型:是一种不确定类型的数据类型,比如ArrayList<E>,就不确定是什么类型只有在使用的时候才确定,比如说ArrayList<String>, jdk就会为你创建一个独特的类,这个类的set(),   add(),get()方法的参数类型或者返回值类型是你通过参数<String>规定好的,而如果你不加参数,这个参数就默认为<Object>。

       泛型的好处:1. 省略了强转的代码。  2. 可以把运行时的问题提前到编译时期。

    6.StringBuffer线程安全,StringBuilder线程不安全,底层实现上的话,StringBuffer其实就是比StringBuilder多了Synchronized修饰符。

    7.列举Object的方法:clone(),equals(),toString(),hashcode(),wait(),notify(),notifyAll(),getClass(),finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

    8.collection和collections的区别:collection是集合类的上级接口,继承他的接口主要有Set、List

    collections是针对集合类的一个帮助类,他提供一系列的静态方法来实现集合的搜索、排序、线程安全化等操作

    9.请说说快速失败(fail-fast)和安全失败(fail-safe)的区别?

     答:Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。

    10.请你说说Iterator和ListIterator的区别?

     答:Iterator和ListIterator的区别是:
    Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
    Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
    ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

    11.请简单说明一下什么是迭代器?

     答:Iterator提供了统一遍历操作集合元素的统一接口, Collection接口实现Iterable接口,
    每个集合都通过实现Iterable接口中iterator()方法返回Iterator接口的实例, 然后对集合的元素进行迭代操作.
    有一点需要注意的是:在迭代元素的时候不能通过集合的方法删除元素, 否则会抛出ConcurrentModificationException 异常. 但是可以通过Iterator接口中的remove()方法进行删除.

  • 相关阅读:
    【笔记】求数据前n个主成分以及对高维数据映射为低维数据
    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法
    【笔记】求数据的对应主成分PCA(第一主成分)
    【笔记】主成分分析法PCA的原理及计算
    【笔记】如何确定梯度计算的准确性以及调试梯度下降法
    【笔记】随机梯度下降法
    【笔记】线性回归中的梯度下降法(实现以及向量化并进行数据归一化)
    AttributeError: module 'numpy' has no attribute 'num'
    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
    容器云在证券行业的探索与实践
  • 原文地址:https://www.cnblogs.com/9797ch/p/11608830.html
Copyright © 2011-2022 走看看