zoukankan      html  css  js  c++  java
  • java面试题复习(八)

    71、如何通过反射创建对象?
     方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()  方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器对象并调用其newInstance()方法创建对象

    72、如何通过反射获取和设置对象私有字段的值?
    可以通过类对象的getDeclaredField()方法字段(Field)对象,然后再通过字段对象的setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段的值了。

    73、简述一下面向对象的”六原则一法则”

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

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

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

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

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

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

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

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

     

    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(责任链模式)。

    75、用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;

        }

    }

    76、二分查找

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

       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;

       }

    }

     

    我这些随笔是自己复习用的,有错轻喷。
  • 相关阅读:
    js addEventListener事件多次绑定问题
    whistle手机调试工具使用简单教程
    css利用padding-top设置等比例遇到的问题
    webpack多页面配置
    js延时定时器
    webpack打包配置禁止html标签全部转为小写
    css媒体查询aspect-ratio宽高比在less中的使用
    比较好用的移动端适配的两种方案及flexible和px2rem-loader在webpack下的配置
    image-webpack-loader包安装报错解决
    js动态设置padding-top遇到的坑
  • 原文地址:https://www.cnblogs.com/zhu-zhucai/p/8449635.html
Copyright © 2011-2022 走看看