面试第一弹

面试第一弹

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 接口
posted @ 2019-07-01 23:04  愉快的白萝卜  阅读(160)  评论(0)    收藏  举报