美文网首页
Java基础面试题

Java基础面试题

作者: yulongsun | 来源:发表于2016-09-03 12:27 被阅读50次

    01. 面向对象的四个特性;对多态的理解(多态的实现以及多态在项目中的使用);

    • 四个特性:
      • 抽象:是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象。抽象只关注对象的哪些属性和行为,并不关心细节是什么;
      • 继承:从已有类得到信息并创建新类的过程。
      • 封装:隐藏一切可隐藏的东西,只向外提供简单的结构。
      • 多态:允许不同类型的子类对象对**同一消息**做出不同的响应。
    • 对多态的理解:
      • 方法重载:在编译时的多态性;
      • 方法重写:在运行时的多态性;
        要实现多态主要要做的两件事:
        1. 方法重写
        2. Fi obj = new Zi();
    • 项目中对多态的运用:
      Android开发中,Activity有一些共同的操作,比如说initView,getLayoutResId,initData,等基本通用操作,可以抽取在BaseActivity中,子类继承它,重写相应的方法。

    02 面向对象和面向过程的区别?面向过程可以用面向对象实现吗?那是不是不能面向对象?


    03 重载和重写区别

    • 重载:发生在父类和子类之间。同名方法,参数列表不同(参数的类型不同,参数个数不同或者两者都不同),视为重载。
    • 重写:发生在同一个类中。要求:1.方法范围类型相同;2.子类重写父类方法的访问权限比父类大。

    04 面向对象开发的六个基本原则,迪米特法则,在项目中用过哪些?

    • 六个基本原则:

      1. 单一职责:一个类只做他该做的事情(高内聚);
      2. 开放封闭:软件实体应该做到:对扩展开放,对修改关闭;
        要做到开闭有两个要点:
        1. 抽象。一个系统中如果没有抽象类或者接口,那么这个系统就没有扩展性。
        2. 封装可变性。将系统中的各种可变因素封装在一个继承结构中,如果多个可变因素混在在一个在一起,系统将变得混乱;
      3. 里氏替换:任何时候都可以用子类替换父类。因为子类一定是增加父类的能力,而不是减少父类的能力。
      4. 依赖倒置:面向接口编程。其实就是 声明方法参数类型、返回值类型、引用变量类型的时候,尽量使用抽象类型而不使用具体类型,因为抽象类型可以被他的任何一个子类替代。
      5. 合成聚合复用:优先使用合成或者聚合关系复用代码。
      6. 接口隔离:接口应该小而专,不应该大而全。臃肿的接口往往是一种接口污染,接口表示一种能力,那么接口应该也是高内聚的。
    • 迪米特法则:
      也叫最少知识法则。一个对象应当对其他对象有尽可能少的了解;

    • 项目中用到的原则:
      单一原则。接口隔离。依赖倒置。


    05 static和final的区别:

    06 HashMap和HashTable的区别;HashMap中的key可以是任何数据对象或者数据类型吗?HashTable是线程安全的吗?


    07 HasMap和ConcurrentHashMap的区别,ConcurrentHashMap线程安全吗?ConcurrentHashMap如何保证线程安全?


    08 String有重写Object的hashcode和toString方法吗?如果重写equals不重写hashcode有什么问题?


    09 String、StringBuffer、StringBuilder的区别和String的不可变性。

    • String、StringBuffer、StringBuilder的区别:

      1. 都是Final类,都不允许被继承;
      2. String长度不可变,StringBuffer和StringBuilder长度是可变的;
      3. StringBuffer是线程安全的,StringBuilder是线程不安全的 。但是他们的方式都是相同的,StringBuffer 主要是在StringBuilder的方法上添加了synchronized方法,保证线程安全。
      4. StringBuilder比StringBuffer更加高效。
      5. 重点:如果一个String类型的字符串,在编译的时候就确定了是常量,那么编译完成之后,字符串会自动拼接成一个常量,此时String的效率比StringBuffer、StringBuilder都要高;
    • String的不可变性:

      1. 被final修饰,不能被继承;
      2. 用+号连接字符串的时候会创建新的 字符串;
      3. String s =new String(“Hello Word”);//可能创建一个或者连个对象。因为 如果静态区中有“Hello Word”,那么仅在 堆 中创建对象;如果静态区中没有,那么堆和静态区都将创建对象;
      4. 在java中,如果用+号来拼接字符串,那么底层将通过StringBuilder的append方法来实现。

    10.

    相关文章

      网友评论

          本文标题:Java基础面试题

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