最全Java备忘录模式(Memento)(1),当上项目经理才知道

最后

ActiveMQ消息中间件面试专题

  • 什么是ActiveMQ?
  • ActiveMQ服务器宕机怎么办?
  • 丢消息怎么办?
  • 持久化消息非常慢怎么办?
  • 消息的不均匀消费怎么办?
  • 死信队列怎么办?
  • ActiveMQ中的消息重发时间间隔和重发次数吗?

ActiveMQ消息中间件面试专题解析拓展:

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


redis面试专题及答案

  • 支持一致性哈希的客户端有哪些?
  • Redis与其他key-value存储有什么不同?
  • Redis的内存占用情况怎么样?
  • 都有哪些办法可以降低Redis的内存使用情况呢?
  • 查看Redis使用情况及状态信息用什么命令?
  • Redis的内存用完了会发生什么?
  • Redis是单线程的,如何提高多核CPU的利用率?

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


Spring面试专题及答案

  • 谈谈你对 Spring 的理解
  • Spring 有哪些优点?
  • Spring 中的设计模式
  • 怎样开启注解装配以及常用注解
  • 简单介绍下 Spring bean 的生命周期

Spring面试答案解析拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


高并发多线程面试专题

  • 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
  • Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
  • Java 中 wait 和 sleep 方法有什么区别?
  • 如何在 Java 中实现一个阻塞队列?
  • 如何在 Java 中编写代码解决生产者消费者问题?
  • 写一段死锁代码。你在 Java 中如何解决死锁?

高并发多线程面试解析与拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


jvm面试专题与解析

  • JVM 由哪些部分组成?
  • JVM 内存划分?
  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

*/

public class Emp {

private String ename;

private int age;

private double salary;

//进行备忘操作,并返回备忘录对象

public EmpMemento memento(){

return new EmpMemento(this);

}

//进行数据恢复,恢复成制定备忘录对象的值

public void recovery(EmpMemento mmt){

this.ename = mmt.getEname();

this.age = mmt.getAge();

this.salary = mmt.getSalary();

}

public Emp(String ename, int age, double salary) {

super();

this.ename = ename;

this.age = age;

this.salary = salary;

}

public String getEname() {

return ename;

}

public void setEname(String ename) {

this.ename = ename;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public double getSalary() {

return salary;

}

public void setSalary(double salary) {

this.salary = salary;

}

}

备忘录类

/**

  • 备忘录类

  • @author 波波烤鸭

  • @email dengpbs@163.com

*/

public class EmpMemento {

private String ename;

private int age;

private double salary;

public EmpMemento(Emp e) {

this.ename = e.getEname();

this.age = e.getAge();

this.salary = e.getSalary();

}

public String getEname() {

return ename;

}

public void setEname(String ename) {

this.ename = ename;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public double getSalary() {

return salary;

}

public void setSalary(double salary) {

this.salary = salary;

}

}

测试类


public static void main(String[] args) {

CareTaker taker = new CareTaker();

Emp emp = new Emp(“bobo烤鸭”, 18, 880);

System.out.println(“第一次打印对象:”+emp.getEname()+“—”+emp.getAge()+“—”+emp.getSalary());

taker.setMemento(emp.memento()); //备忘一次

emp.setAge(28);

emp.setEname(“dpb”);

emp.setSalary(19000);

System.out.println(“第二次打印对象:”+emp.getEname()+“—”+emp.getAge()+“—”+emp.getSalary());

emp.recovery(taker.getMemento()); //恢复到备忘录对象保存的状态

System.out.println(“第三次打印对象:”+emp.getEname()+“—”+emp.getAge()+“—”+emp.getSalary());

}

输出

第一次打印对象:bobo烤鸭—18—880.0

第二次打印对象:dpb—28—19000.0

第三次打印对象:bobo烤鸭—18—880.0

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[外链图片转存中…(img-PTkgqMGe-1715567807296)]

学习笔记以及面试真题解析

[外链图片转存中…(img-nkfdWJNc-1715567807296)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
备忘录模式是一种行为设计模式,它允许在不破坏封装性的情况下捕获和恢复对象的内部状态。下面是一个 Java 备忘录模式的例子: ```java // 备忘录类 class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } // 原始类 class Originator { private String state; public void setState(String state) { this.state = state; } public String getState() { return state; } public Memento saveStateToMemento() { return new Memento(state); } public void getStateFromMemento(Memento memento) { state = memento.getState(); } } // 管理类 class CareTaker { private List<Memento> mementoList = new ArrayList<>(); public void add(Memento state) { mementoList.add(state); } public Memento get(int index) { return mementoList.get(index); } } // 测试类 public class MementoPatternDemo { public static void main(String[] args) { Originator originator = new Originator(); CareTaker careTaker = new CareTaker(); originator.setState("State #1"); originator.setState("State #2"); careTaker.add(originator.saveStateToMemento()); originator.setState("State #3"); careTaker.add(originator.saveStateToMemento()); originator.setState("State #4"); System.out.println("Current State: " + originator.getState()); originator.getStateFromMemento(careTaker.get(0)); System.out.println("First saved State: " + originator.getState()); originator.getStateFromMemento(careTaker.get(1)); System.out.println("Second saved State: " + originator.getState()); } } ``` 这个例子中,`Originator` 类表示需要被备份的对象,`Memento` 类表示备份的状态,`CareTaker` 类表示备份管理器。在测试类中,我们可以看到如何使用备忘录模式来保存和恢复对象的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值