java面试题复习(八)

7一、如何经过反射建立对象?
 方法1:经过类对象调用newInstance()方法,例如:String.class.newInstance()  方法2:经过类对象的getConstructor()或getDeclaredConstructor()方法得到构造器对象并调用其newInstance()方法建立对象编程

7二、如何经过反射获取和设置对象私有字段的值?
能够经过类对象的getDeclaredField()方法字段(Field)对象,而后再经过字段对象的setAccessible(true)将其设置为能够访问,接下来就能够经过get/set方法来获取/设置字段的值了。设计模式

7三、简述一下面向对象的”六原则一法则”ui

单一职责原则:一个类只作它该作的事情。(单一职责原则想表达的就是”高内聚”,写代码最终极的原则只有六个字”高内聚、低耦合”所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,若是只让一个类完成它该作的事,而不涉及与它无关的领域就是践行了高内聚的原则,这个类就只有单一职责。设计

开闭原则:软件实体应当对扩展开放,对修改关闭。(在理想的状态下,当咱们须要为一个软件系统增长新功能时,只须要从原来的系统派生出一些新类就能够,不须要修改原来的任何一行代码。要作到开闭有两个要点:①抽象是关键,一个系统中若是没有抽象类或接口系统就没有扩展点;②封装可变性,将系统中的各类可变因素封装到一个继承结构中,若是多个可变因素混杂在一块儿,系统将变得复杂而换乱)代理

依赖倒转原则:面向接口编程。(该原则说得直白和具体一些就是声明方法的参数类型、方法的返回类型、变量的引用类型时,尽量使用抽象类型而不用具体类型,由于抽象类型能够被它的任何一个子类型所替代,请参考下面的里氏替换原则。)server

里氏替换原则:任什么时候候均可以用子类型替换掉父类型。(简单的说就是能用父类型的地方就必定能使用子类型。里氏替换原则能够检查继承关系是否合理,若是一个继承关系违背了里氏替换原则,那么这个继承关系必定是错误的,须要对代码进行重构。须要注意的是:子类必定是增长父类的能力而不是减小父类的能力,由于子类比父类的能力更多,把能力多的对象当成能力少的对象来用固然没有任何问题。)对象

接口隔离原则:接口要小而专,毫不能大而全。继承

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

迪米特法则:迪米特法则又叫最少知识原则,一个对象应当对其余对象有尽量少的了解。(迪米特法则简单的说就是如何作到”低耦合”)接口

7四、简述一下你了解的设计模式

 

Abstract Factory(抽象工厂模式),Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式);Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式);Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibility(责任链模式)。

7五、用Java写一个单例类

//饿汉

public class Singleton {

    private Singleton(){}

    private static Singleton instance = new Singleton();

    public static Singleton getInstance(){

        return instance;

    }

//懒汉

public class Singleton {

    private static Singleton instance = null;

    private Singleton() {}

    public static synchronized Singleton getInstance(){

        if (instance == null) instance = new Singleton();

        return instance;

    }

}

7六、二分查找

// 使用递归实现的二分查找

   private static<T extends Comparable<T>> int binarySearch(T[] x, int low, int high, T key) {

      if(low <= high) {

        int mid = low + ((high -low) >> 1);

        if(key.compareTo(x[mid])== 0) {

           return mid;

        }

        else if(key.compareTo(x[mid])< 0) {

           return binarySearch(x,low, mid - 1, key);

        }

        else {

           return binarySearch(x,mid + 1, high, key);

        }

      }

      return -1;

   }

}

相关文章
相关标签/搜索