面试题
原型模式相关
用 UML 类图画出原型模式的核心角色
UML 图中的类图 ?
UML 图的分类 含状态图
原型模式图?
用原型设计模式的深拷贝和浅拷贝是什么?并且写出深拷贝的两种源码方式
(重写 clone 的方法实现深拷贝,第二种是用序列化的方式来实现深拷贝)
sping 框架中哪里用到了原型模式,要求你对源码进行分析
Spring 中原型 Bean 的创建就用了原型模式,下面通过代码分析以及 Debug 源代码来进行解答
maven 项目中,创建一个类 Practice1 如下:
package pattern_design.prototype;
public class Practice1 {
public void helloWorld(){
System.out.println("hello world!");
}
}
在 Bean.xml 文件中,bean 标签内设置 scope 属性为 prototype ,译为原型,即使用了原型模式:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="prac_1" class="pattern_design.prototype.Practice1" scope="prototype"></bean>
</beans>
package main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pattern_design.prototype.Practice1;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring_config.xml");
Practice1 practice1 = (Practice1) context.getBean("prac_1");
practice1.helloWorld();
}
}
控制台展示:
"C:\Program Files\Java\jdk1.8.0_192\bin\java.exe" "-javaagent:C:\Program .... beans\5.2.3.RELEASE\spring-beans-5.2.3.RELEASE.jar" main.Test
hello world!
Process finished with exit code 0
源码层面经过了以下的调用:
开闭原则
设计模式的七大原则是什么?
主要回答七大原则的核心思想
以类图来说明设计原则
在你实际的开发中,你在哪里使用到的 OCP 原则
工厂模式使用了 ocp 原则
项目里的设计模式
①金融借贷平台
金融借贷平台项目:借贷平台的订单,审核-发布-抢单等步骤。随着不同的操作,会改变订单的状态,项目中这个模块实现会用到状态模式,请你使用状态模式进行设计并完成实际的代码
问题分析: 这种问题主要考虑代码的扩展性,即代码要灵活适应需求的变化。没有学过设计模式的同学,一般都会使用 if-else 这样的分支语句。问题来了,当新增一种状态时,需要在 if else 中手动添加。而当新增功能时,则对所有状态进行判断。总而言之,if else 的编写思路让代码日渐臃肿并且低效,那么使用状态模式会有怎么样的改进呢? 首先,先画一个状态转化图,即状态图,是 UML 图的一种,
订单生成、已审核、已发布、待付款、已付款、已完结等等这样几个状态,那么在这个状态的过程中我们有很多事件,对吧?也就是说一边是事件,一边是状态,那么对应的就是我们状态的变化。
解释器设计模式
介绍解释器设计模式
画出解释器设计模式 UML 类图,并分析解释器设计模式的各个角色是什么
请说明在 spring 框架中哪里用到了解释器设计模式,并进行源码的分析
Spring 框架中 SpelExpressionParser
单例设计模式
单例设计模式一共有几种实现方式,请分别用代码实现,并说明各个实现方式的优点和缺点。 单例设计模式实际上有八种写法,哪八种呢? 1)饿汉模式 —— 两种 2)懒汉模式 —— 三种 3)双重检查 4)静态内部类 5)枚举