温故知新-设计模式篇

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: 。。。

发布了2618 篇原创文章 · 获赞 4883 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/103815409