面试第一弹

面试第一弹

1. 抽象类和接口的异同
  • 相同点:
    1. 两者都不能被实例化
    2. 引用都可以指向子类对象
  • 不同点:

    1. 方法实现:抽象类可以有实现的方法,而接口不存在方法的实现

    2. 构造器:抽象类可以有构造器,而接口不能有

    3. 修饰符:抽象类的普通成员变量可以被方法可以被private、public、default、protected修饰,抽象方法可以被public、default、protected修饰;而接口的变量默认被public static final 修饰,方法只能被public abstract修饰

    4. 继承:抽象类只能单继承、而接口可以多实现;抽象类通过extends继承,接口通过implements实现

    5. 添加新的方法:抽象类中可以不重写、而接口必须要重写

2.方法重写和重载
  • 重载:重载是在同一个类中有多个同名但是参数列表不同的方法
  • 重写:重写是子类定义与父类方法名相同、参数列表相同、返回值相同的方法
3.常见运行时异常(在java.lang包下)
  1. java.lang.NullPointerException

    空指针异常:调用未初始化的或不存在的对象

  2. java.lang.ClassNotFoundException

    指定类不存在

  3. java.lang.IndexOutOfBoundsException

    索引越界异常,访问某个序列的索引值大于等于序列长度

  4. java.lang.ClassCastException

    类型转换异常

4.反射
  1. 什么是反射?

    指程序可以访问、检测和修改它本身的状态和行为的一种能力

  2. 这种能力有什么用?(用来做什么事)

    • 获取类型的相关信息(Class对象的信息,成员变量、方法)

      获取Class对象的三种方式:

      1.对象.getClass()

      2.类.class

      3.Class.forName("权限类名")

      第一种方式需要创建对象、第二种方式需要导入包,一般需要第三种方式

    • 动态调用方法

      //获取方法并调用,如:
      Method append = forName.getDeclaredMethod("append", String.class);
      append.invoke(instance, " 99009");
    • 动态构造对象

      //获取构造器实例化对象,如:
      StringBuilder instance = (StringBuilder)forName.getConstructor().newInstance();
      instance.append("1232");
    • 从程序集中获取类型(?)

5.线程安全的单例模式
  1. //静态内部类的方式
    public class Singleton {
     private Singleton() {}
     public static Singleton getSingleton() {
         return lazyHolder.singleton;
     }
     private static class lazyHolder {
         private static final Singleton singleton = new Singleton();
     }
    }
  2. public class Singleton {
     private static Singleton singleton = new Singleton();
     private Singleton() {}
     public static Singleton getSingleton() {
         return singleton;
     } 
    }
  3. public class Singleton {
     private static Singleton singleton;
     private Singleton() {}
     public static synchronized Singleton getSingleton() {
            if (singleton == null) singleton = new Singleton();
         return singleton;
     } 
    }
  4. public class Singleton {
     private static Singleton singleton;
     private Singleton() {}
     public static Singleton getSingleton() {
            if (singleton == null) {
             synchronized (Singleton.class) {
                 if (singleton == null) {
                     singleton = new Singleton();
                 }
             }
    
            }
         return singleton;
     } 
    }
    6.其他问题 ---后续
    • 表连接方式
    • mvc工作流程
    • ioc容器和mvc容器的区别
    • 设计模式
    • Restful 接口

猜你喜欢

转载自www.cnblogs.com/luo-bo/p/11117404.html