您当前的位置: 首页 > 

温故知新-设计模式篇

杨林伟 发布时间:2020-01-03 10:36:26 ,浏览量:2

01 Mind Map

在这里插入图片描述

02 Question&Answer

Q1: 什么是反射、它的作用是什么? A: 运行时,动态获取这个类的信息。作用是访问对象的属性、方法、构造函数。

Q2: 反射应用场景? A: JDBC驱动加载、SpringIOC、框架等。

Q3: 反射获取类的方式以及创建对象的方式? A: 3种方式,创建对象:clazz.newInstance()。

Q4: 如何禁止反射? A: 将构造函数私有化。

Q5: 类加载机制原理,以及各个流程做的事情? A: 加载(数据结构放到方法区,生成Class对象) -> 校验(基于字节流(文件校验)、基于数据结构(方法区里的对象结构))-> 准备(分配内存、初始化变量)-> 解析 (符号引用转为直接引用)-> 初始化(new 的方式或者反射,会找到main入口开始执行)

Q6: 为什么加载MySQL驱动,必须先声Class.forName(“com.mysql.driver…”)? A: 因为驱动是没有加载进去的,需要Class.forName()去加载class对象到内存,而Driver驱动类里面有个静态代码块,直接new Driver()了,把对象加载载进去到内存。

Q7: 设计模式的六大原则? A: 「开闭原则」、「里式替换原则」(基类出现,子类一定可以出现)、「依赖倒置原则」(面向接口编程)、「接口隔离原则」、「迪米特原则」(减少实体间的交互)、「合成复用原则」(尽可能使用聚合,而不是继承)。

Q8: 单例模式的应用场景?

Q9: 单例模式的5种创建方式,以及优缺点分析? A: 「饿汉式」、「懒汉式」、「双重锁检测」、「静态内部类」、「枚举方式」。优缺点从是否需要懒加载考虑。

Q10: 单例模式如何防止反射漏洞攻击? A: 加个flag,只允许初始化一次,构造函数里判断。

Q11: 单例模式如何防止反射漏洞攻击? A: 加个flag,只允许初始化一次,构造函数里判断。

Q12: 工厂模式的3中分类,以及各自的优缺点? A: 『简单工厂模式』、(缺点高内聚、所有职责一个类处理)『工厂方法模式』(由具体的工厂子类去创建)、『抽象工厂』(工厂的工厂,再细分)。

Q13: 代理模式的概念以及3种分类? A: 静态代理、动态代理(JDK代理)、Cglib字节码操作库。

Q14: Spring中使用那种代理模式? A: 动态代理(JDK代理)、Cglib字节码操作库(自动转换,看是否有实现接口)。

Q15: 建造者模式的应用场景? A: 创建游戏人物,按顺序创建肢体。

Q16: 模板方法模式以及实际应用场景? A: 父类约定规则,子类具体实现,如银行转账案例(基类)。

Q17: 适配器模式举例? A: 110V电源与220V电源的适配、不同数据库之间的同步等。

Q18: 外观模式举例? A: 群发信息。

Q19: 原型模式举例? A: 深复制与浅复制。

Q20: 装饰模式举例? A: 房子装修、文件流。

Q21: 策略模式举例? A: 会员案例、以及AudioPlayer的实际场景。

Q22: 观察者模式举例? A: 。。。

关注
打赏
1688896170
查看更多评论

杨林伟

暂无认证

  • 2浏览

    0关注

    3279博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0476s