java面试

1、Spring Bean 的生命周期

  1. Spring 容器 从 XML 文件中读取 bean 的定义,并实例化 bean。

  2. Spring 根据 bean 的定义填充所有的属性。

  3. 如果 bean 实现了 BeanNameAware 接口, Spring 传递 bean 的 ID 到setBeanName 方法。

  4. 如果 Bean 实现了 BeanFactoryAware 接口, Spring 传递 beanfactory 给setBeanFactory 方法。

  5. 如果有任何与bean相关联的BeanPostProcessors , Spring 会 在postProcesserBeforeInitialization()方法内调用它们。

  6. 如果 bean 实现 IntializingBean 了,调用它的 afterPropertySet 方法,如果 bean

    声明了初始化方法,调用此初始化方法。

  7. 如 果 有BeanPostProcessors和bean关 联 , 这 些bean的postProcessAfterInitialization() 方法将被调用。

  8. 如果 bean 实现了 DisposableBean,它将调用 destroy()方法。

2、反射机制

Spring 是依赖反射机制的,

那到底什么是反射机制呢: 反射机制就是利用(dom4j=java 反射机制) userBean ub = Class.forName(com.bean.*)这里是 com 全路径 所以在 Spring 配置文件中 bean 的 id 属性和 class 属性中要写全路径。

3、HashSet底层实现

对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,在HashSet中,元素都存到HashMap键值对的Key上面,而Value时有一个统一的值private static final Object PRESENT = new Object();。

4、TreeSet 底层源码有看过吗?

类似于HashMap和HashSet之间的关系,HashSet底层依赖于HashMap实现,TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。但实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素

5、重载和重写区别

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实 现的是运行时的多态性。 扩展;

重载(Overloading)

重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以

不相同。无法以返回型别作为重载函数的区分标准。

重写(Overriding)

父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其 父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在 Java 中,子类可继承父类 中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法, 而是想作一定的修改,这就需要采用方法的重写。 方法重写又称方法覆盖

(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则 新方法将覆盖原有的方法。 如需父类中原有的方法,可使用 super 关键字,该关键字引用了当前类的父类。

(3)子类函数的访问修饰权限不能少于父类的;

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×