学习重点随记 or 留着以后出题面试别人

1、java常见设计模式知多少?

工厂模式:不关心具体的制造/创造工艺,对外暴露公共的接口生产同一类产品,如spring BeanFactory的getBean方法;

代理模式:关心过程,增强事件的处理效果(AOP),如房产代理人,经纪人;

委派模式:关心结果,不会对事件处理过程进行增强,如上级向下级委派任务;

构建者模式:对于复杂的对象构建,统一生成其构造器来统一创建,如@Builder注解的实现;

装饰器模式:封装原有对象,从而增强其对外提供能力,如包装类、Wrapper后缀类;

模板模式: 封装流程化的步骤,原料不同,结果不同,如榨汁机、数据库连接执行sql;

单例模式:对外只提供一个实例,有懒汉,恶汉,内部类三种实现方式,如数据库连接池;

策略模式:结果固定,注重过程,如A地到B地可以有很多方式、比较器;

原型模式:以一个对象为原型复制出一个新对象,如对象属性copy;

2、spring默认对象是单例的,那么spring单例对象是如何实现的?

IOC容器是一个map结构,每当依赖注入某对象时,先到map中获取,有则取,无则创建并保存到map中;

HandlerMapping本质上是一个map结构,handlerMappings本质上是一个list(每个元素是HandlerMapping类型)

3、谈谈动态代理、java反射、cglib?

代理分静态代理与动态代理,运行时才动态生成代理对象的方式称为动态代理,JDK Proxy(java反射)与cglib(字节码操作机制)是其两种实现方式;

JDK Proxy方式:采用实现目标对象父类接口的方式(因为代理类已经继承Proxy类,而java是单继承的,所以只能再实现接口),只能代理实现了接口的对象,本质上是代理对象重新实现并增强该接口的方法;

Cglib方式:采用继承目标对象生成其子类的方式,所以不能代理final修饰的类(因为该类不能被继承),本质上是代理对象重写并增强目标对象方法;

经验分享 程序员 微信小程序 职场和发展