由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求助一个面试题
相关主题
MathWorks被拒问一个linkedin的面试题
2條經典 design 問題Re: leetcode的代码编辑框里怎么undo?
我发现我竟然学会了12种tree traversal的办法[合集] google 面试题
iterator 实现 如何 peek(),pop()?贴一道take home的面试题
谁有那个 nested hashmap iteration 的讨论阿?昨天的google面试题
一道面试题[合集] 昨天的google面试题
问个经典面试题再帖一遍Amazon Onsite的题
问一道C++ template的面试题贴两个比较tricky,又常被问到的面试题
相关话题的讨论汇总
话题: command话题: undo话题: memento话题: list话题: 操作
进入JobHunting版参与讨论
1 (共1页)
t******h
发帖数: 120
1
刚面的一个local 小公司
前面都是问简单的编程题 问烂的那种
最后问一个design pattern的题
怎么实现Undo
我说Command Pattern
一个Command接口 所有操作都实现这个接口
然后每个执行一个操作就放Command list里
Undo找到最后list的最后一个 然后反转操作
接着问 如果想undo 之后redo呢
弄个iterator iterate back Command list 就可以undo
然后 iterate next command in command list就可以redo
最后一问 感觉没答好
如果undo的操作是不能完美undo的呢 比如mp3 把声音转成mp3之后 undo的话就不能完
美变回原来了 咋办
我说cache原来的状态一段时间
不知道有没有更好的方法?
r***8
发帖数: 86
2
UNDO 必须要可逆操作才行
使用STACK,不但需要压命令,但还需要存放UNDO操作数据
UNDO,时,POP的出命令,数据可以压入另一个RE-DO STACK。
新命令执行时,应清掉RE-DO STACK

【在 t******h 的大作中提到】
: 刚面的一个local 小公司
: 前面都是问简单的编程题 问烂的那种
: 最后问一个design pattern的题
: 怎么实现Undo
: 我说Command Pattern
: 一个Command接口 所有操作都实现这个接口
: 然后每个执行一个操作就放Command list里
: Undo找到最后list的最后一个 然后反转操作
: 接着问 如果想undo 之后redo呢
: 弄个iterator iterate back Command list 就可以undo

K******g
发帖数: 1870
3
要用到两种设计模式:memento 和 command。设计要点:
1。定义一个orginator,也就是command里的receiver的类,操作对象
2. 定义一个memento的类,用来保存操作对象的状态。orginator是它的freind,这样
子操作对象就可以读取memento的内部保存的状态。
3. 定义一个command class,里面有个command list, 和memento list
4. 还有一个receiver, receiver的action (receiver也就是origninator)
5. 每次执行一个command的时候,放到command list,同时设个checkpoint把
originator的状态保存到一个memento的object里,放在memento list
6. undo的时候,读取memento list里前一个memento,回复orginator的状态
4. redo的时候,在memento list里往后移,恢复originator的状态

【在 t******h 的大作中提到】
: 刚面的一个local 小公司
: 前面都是问简单的编程题 问烂的那种
: 最后问一个design pattern的题
: 怎么实现Undo
: 我说Command Pattern
: 一个Command接口 所有操作都实现这个接口
: 然后每个执行一个操作就放Command list里
: Undo找到最后list的最后一个 然后反转操作
: 接着问 如果想undo 之后redo呢
: 弄个iterator iterate back Command list 就可以undo

1 (共1页)
进入JobHunting版参与讨论
相关主题
贴两个比较tricky,又常被问到的面试题谁有那个 nested hashmap iteration 的讨论阿?
一道有意思的Google面试题一道面试题
Amazon二面问个经典面试题
代发amazon面井问一道C++ template的面试题
MathWorks被拒问一个linkedin的面试题
2條經典 design 問題Re: leetcode的代码编辑框里怎么undo?
我发现我竟然学会了12种tree traversal的办法[合集] google 面试题
iterator 实现 如何 peek(),pop()?贴一道take home的面试题
相关话题的讨论汇总
话题: command话题: undo话题: memento话题: list话题: 操作